diff --git a/build.gradle b/build.gradle index a977832d..2fa6c90a 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,7 @@ allprojects { repositories { maven { url "https://maven.fabricmc.net/" } maven { url "https://maven.neoforged.net/releases" } + maven { url "https://maven.architectury.dev/" } mavenCentral() maven { url = 'https://maven.quiltmc.org/repository/release' } maven { diff --git a/common-1.20.1/build.gradle b/common-1.20.1/build.gradle new file mode 100644 index 00000000..1edaf3bc --- /dev/null +++ b/common-1.20.1/build.gradle @@ -0,0 +1,26 @@ +plugins { + id 'java-library' +} + +base { + archivesName = "${mod_id}-common-1.20.1" +} + +// Source-only module — each loader module compiles these sources itself. +tasks.named('compileJava').configure { + enabled = false +} + +tasks.named('jar').configure { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from sourceSets.main.allJava + from sourceSets.main.resources +} + +dependencies { + compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.2+1.20.1-fabric.jar")) + compileOnly("software.bernie.geckolib:geckolib-fabric-1.20.1:${geckolib_version}") + compileOnly("curse.maven:sizeable_foliage-${sizeable_foliage_curseforge_id_1_20_1}:${sizeable_foliage_curseforge_file_id_1_20_1_fabric}") + compileOnly("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_1_20_1_fabric}") + compileOnly("mezz.jei:jei-1.20.1-common-api:${jei_version_1_20_1}") +} 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 new file mode 100644 index 00000000..ea6644dd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/Antarchy.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy; + +import com.craisinlord.antarchy.content.util.AttributeRangeInit; +import com.craisinlord.integrated_api.events.lifecycle.ServerGoingToStartEvent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + + +public class Antarchy { + public static final String MODID = "antarchy"; + public static final Logger LOGGER = LogManager.getLogger(); + + public static void init() { + AttributeRangeInit.apply(); + ServerGoingToStartEvent.EVENT.addListener(Antarchy::serverAboutToStart); + } + private static void serverAboutToStart(final ServerGoingToStartEvent event) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/geckolib/AutoPlayingSoundKeyframeHandlerCompat.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/geckolib/AutoPlayingSoundKeyframeHandlerCompat.java new file mode 100644 index 00000000..32e1e2cb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/geckolib/AutoPlayingSoundKeyframeHandlerCompat.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.compat.geckolib; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.entity.LivingEntity; +import software.bernie.geckolib.core.animatable.GeoAnimatable; +import software.bernie.geckolib.core.animation.AnimationController; + +public final class AutoPlayingSoundKeyframeHandlerCompat { + private AutoPlayingSoundKeyframeHandlerCompat() { + } + + public static AnimationController.SoundKeyframeHandler create() { + return event -> { + String[] parts = event.getKeyframeData().getSound().split("\\|"); + SoundEvent sound = BuiltInRegistries.SOUND_EVENT.get(new ResourceLocation(parts[0])); + if (sound == null) { + return; + } + float volume = parts.length > 1 ? Float.parseFloat(parts[1]) : 1f; + float pitch = parts.length > 2 ? Float.parseFloat(parts[2]) : 1f; + A animatable = event.getAnimatable(); + animatable.level().playSound(null, animatable.getX(), animatable.getY(), animatable.getZ(), sound, animatable.getSoundSource(), volume, pitch); + }; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompat.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompat.java new file mode 100644 index 00000000..7bf2e947 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompat.java @@ -0,0 +1,16 @@ +package com.craisinlord.antarchy.compat.infinity; + +public final class InfinityCompat { + private static InfinityCompatBridge bridge = InfinityCompatBridge.NOOP; + + private InfinityCompat() { + } + + public static InfinityCompatBridge get() { + return bridge; + } + + public static void bind(InfinityCompatBridge compatBridge) { + bridge = compatBridge != null ? compatBridge : InfinityCompatBridge.NOOP; + } +} 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 new file mode 100644 index 00000000..73a35c87 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatBridge.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.compat.infinity; + +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.util.RandomSource; + +public interface InfinityCompatBridge { + InfinityCompatBridge NOOP = new InfinityCompatBridge() { + }; + + default boolean isAvailable() { + return false; + } + + default ResourceLocation getRandomDimensionId(RandomSource random) { + return null; + } + + default ResourceLocation getRandomDimensionId(RandomSource random, double easterEggChance) { + return getRandomDimensionId(random); + } + + default boolean requestWarp(ServerPlayer player, ResourceLocation dimensionId) { + return false; + } + + /** + * 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/InfinityCompatVersion.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatVersion.java new file mode 100644 index 00000000..00a52abb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatVersion.java @@ -0,0 +1,56 @@ +package com.craisinlord.antarchy.compat.infinity; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public final class InfinityCompatVersion { + private static final Pattern VERSION_PARTS = Pattern.compile("(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?"); + private static final int REQUIRED_MAJOR = 2; + private static final int REQUIRED_MINOR = 7; + private static final int REQUIRED_PATCH = 2; + + private InfinityCompatVersion() { + } + + public static boolean isSupported(String version) { + int[] parsed = parse(version); + if (parsed == null) { + return false; + } + if (parsed[0] != REQUIRED_MAJOR) { + return parsed[0] > REQUIRED_MAJOR; + } + if (parsed[1] != REQUIRED_MINOR) { + return parsed[1] > REQUIRED_MINOR; + } + return parsed[2] >= REQUIRED_PATCH; + } + + public static String requiredVersion() { + return REQUIRED_MAJOR + "." + REQUIRED_MINOR + "." + REQUIRED_PATCH; + } + + private static int[] parse(String version) { + if (version == null || version.isBlank()) { + return null; + } + + Matcher matcher = VERSION_PARTS.matcher(version); + if (!matcher.find()) { + return null; + } + + return new int[]{ + parsePart(matcher.group(1)), + parsePart(matcher.group(2)), + parsePart(matcher.group(3)) + }; + } + + private static int parsePart(String value) { + if (value == null || value.isBlank()) { + return 0; + } + return Integer.parseInt(value); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/jei/AmericanizeJeiRecipeCategory.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/jei/AmericanizeJeiRecipeCategory.java new file mode 100644 index 00000000..94efc7fc --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/jei/AmericanizeJeiRecipeCategory.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.compat.jei; + +import com.craisinlord.antarchy.Antarchy; +import java.util.List; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; + +public final class AmericanizeJeiRecipeCategory implements IRecipeCategory { + public static final RecipeType TYPE = RecipeType.create(Antarchy.MODID, "americanize", Recipe.class); + + private final IDrawable icon; + + public record Recipe(List foods, ItemStack hfcs, List results) { + } + + public AmericanizeJeiRecipeCategory(IGuiHelper guiHelper, ItemStack hfcsIcon) { + this.icon = guiHelper.createDrawableItemStack(hfcsIcon); + } + + @Override + public RecipeType getRecipeType() { + return TYPE; + } + + @Override + public Component getTitle() { + return Component.translatable("jei.antarchy.americanize"); + } + + @Override + public int getWidth() { + return 78; + } + + @Override + public int getHeight() { + return 18; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, Recipe recipe, IFocusGroup focuses) { + builder.addSlot(RecipeIngredientRole.RENDER_ONLY, 1, 1) + .setStandardSlotBackground() + .addItemStacks(recipe.foods()); + builder.addSlot(RecipeIngredientRole.INPUT, 30, 1) + .setStandardSlotBackground() + .addItemStack(recipe.hfcs()); + builder.addSlot(RecipeIngredientRole.RENDER_ONLY, 59, 1) + .setStandardSlotBackground() + .addItemStacks(recipe.results()); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/jei/AntarchyJeiPlugin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/jei/AntarchyJeiPlugin.java new file mode 100644 index 00000000..4e89788d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/jei/AntarchyJeiPlugin.java @@ -0,0 +1,98 @@ +package com.craisinlord.antarchy.compat.jei; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.recipe.AmericanizeRecipe; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.recipe.CustomBrewingRecipes; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; +import com.craisinlord.antarchy.content.item.GlimmerBottleItem; +import java.util.ArrayList; +import java.util.List; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.constants.RecipeTypes; +import mezz.jei.api.recipe.vanilla.IJeiBrewingRecipe; +import mezz.jei.api.recipe.vanilla.IVanillaRecipeFactory; +import mezz.jei.api.registration.IRecipeCategoryRegistration; +import mezz.jei.api.registration.IRecipeRegistration; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.util.Unit; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; + +@JeiPlugin +public class AntarchyJeiPlugin implements IModPlugin { + private static final ResourceLocation UID = new ResourceLocation(Antarchy.MODID, "jei_plugin"); + + @Override + public ResourceLocation getPluginUid() { + return UID; + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registration) { + ItemStack hfcs = new ItemStack(CustomBrewingRecipes.highFructoseCornSyrupItem()); + registration.addRecipeCategories(new AmericanizeJeiRecipeCategory(registration.getJeiHelpers().getGuiHelper(), hfcs)); + } + + @Override + public void registerRecipes(IRecipeRegistration registration) { + IVanillaRecipeFactory factory = registration.getVanillaRecipeFactory(); + List recipes = new ArrayList<>(); + + recipes.add(factory.createBrewingRecipe( + List.of(new ItemStack(CustomBrewingRecipes.cornItem())), + CustomBrewingRecipes.waterBottleStack(), + new ItemStack(CustomBrewingRecipes.highFructoseCornSyrupItem()))); + + recipes.add(factory.createBrewingRecipe( + tagItems(CustomBrewingRecipes.rootsTag()), + new ItemStack(CustomBrewingRecipes.highFructoseCornSyrupItem()), + new ItemStack(CustomBrewingRecipes.rootBeerItem()))); + + ItemStack glimmerBottleInput = GlimmerBottleItem.create(GlimmerVariant.APPLE_COW); + recipes.add(factory.createBrewingRecipe(tagItems(AntarchyTags.Items.GLIMMER_AUGMENT_OURANWOOD_DEER), + glimmerBottleInput, GlimmerBottleItem.create(GlimmerVariant.OURANWOOD_DEER))); + recipes.add(factory.createBrewingRecipe(tagItems(AntarchyTags.Items.GLIMMER_AUGMENT_FROG), + glimmerBottleInput, GlimmerBottleItem.create(GlimmerVariant.FROG))); + recipes.add(factory.createBrewingRecipe(tagItems(AntarchyTags.Items.GLIMMER_AUGMENT_ANT), + glimmerBottleInput, GlimmerBottleItem.create(GlimmerVariant.ANT))); + recipes.add(factory.createBrewingRecipe(tagItems(AntarchyTags.Items.GLIMMER_AUGMENT_ELKA), + glimmerBottleInput, GlimmerBottleItem.create(GlimmerVariant.ELKA))); + + ItemStack glimmerBottleDeer = GlimmerBottleItem.create(GlimmerVariant.OURANWOOD_DEER); + recipes.add(factory.createBrewingRecipe(tagItems(AntarchyTags.Items.GLIMMER_AUGMENT_APPLE_COW), + glimmerBottleDeer, GlimmerBottleItem.create(GlimmerVariant.APPLE_COW))); + + registration.addRecipes(RecipeTypes.BREWING, recipes); + if (AntarchySettings.americanizingEnabled()) { + registration.addRecipes(AmericanizeJeiRecipeCategory.TYPE, List.of(americanizeDisplay())); + } + } + + private static AmericanizeJeiRecipeCategory.Recipe americanizeDisplay() { + List foods = new ArrayList<>(); + List results = new ArrayList<>(); + for (Item item : BuiltInRegistries.ITEM) { + ItemStack stack = new ItemStack(item); + if (AmericanizeRecipe.isEligibleFood(stack)) { + foods.add(stack); + ItemStack result = stack.copyWithCount(1); + AntarchyObjects.AMERICAN_COMPONENT.set(result, Unit.INSTANCE); + results.add(result); + } + } + + ItemStack hfcs = new ItemStack(CustomBrewingRecipes.highFructoseCornSyrupItem()); + return new AmericanizeJeiRecipeCategory.Recipe(foods, hfcs, results); + } + + private static List tagItems(TagKey tag) { + return List.of(Ingredient.of(tag).getItems()); + } +} 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 new file mode 100644 index 00000000..9a914c8b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/ByteBufCodecs.java @@ -0,0 +1,93 @@ +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 new file mode 100644 index 00000000..ebd93786 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/CustomPacketPayload.java @@ -0,0 +1,10 @@ +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 new file mode 100644 index 00000000..724069cd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/network/StreamCodec.java @@ -0,0 +1,204 @@ +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/AntarchySettings.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java new file mode 100644 index 00000000..ef912199 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -0,0 +1,2430 @@ +package com.craisinlord.antarchy.config; + +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; + +public final class AntarchySettings { + private static boolean disableInfinityBookPortalCreation = true; + private static boolean easterBunnyEnabled = true; + private static int easterBunnyNaturalSpawnChancePercent = 1; + private static boolean rainbowAntsLeadToInfinityDimensions = true; + private static double rainbowAntInfinityEasterEggChance = 0.01D; + private static boolean brownAntRequiresReagent = false; + private static boolean brownAntRightClickDimension = true; + private static boolean redAntRequiresReagent = false; + private static boolean redAntRightClickDimension = true; + private static boolean rainbowAntRequiresReagent = true; + private static boolean rainbowAntRightClickDimension = true; + private static boolean termiteRequiresReagent = false; + private static boolean termiteRightClickDimension = true; + private static boolean antsStealFromChests = true; + private static boolean duplicatorTreeEnabled = true; + private static boolean glowVinesUnderLeaves = true; + private static boolean swingThroughGrassEnabled = true; + private static boolean fabricKeybindingConflictFixEnabled = true; + private static boolean experimentalSettingsPopupDisabled = 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 shrinkingPotionDelta = 0.3D; + private static double growthPotionDelta = 0.5D; + private static double antDanceRadius = 5.0D; + private static double brownAntHealth = 5.0D; + private static double redAntHealth = 5.0D; + private static double rainbowAntHealth = 5.0D; + private static double termiteHealth = 5.0D; + private static double waspHealth = 16.0D; + private static double waspAttackDamage = 4.0D; + private static double waspMovementSpeed = 0.39D; + private static double bomberHealth = 15.0D; + private static double bomberAttackDamage = 4.0D; + private static double bomberExplosionDamage = 8.0D; + private static double bomberExplosionRadius = 4.0D; + private static double redAntAttackDamage = 3.0D; + private static double ultimateSwordAttackDamage = 30.0D; + private static double ultimatePickaxeAttackDamage = 22.0D; + private static double ultimateAxeAttackDamage = 38.0D; + private static double ultimateShovelAttackDamage = 24.0D; + private static double ultimateHoeAttackDamage = 8.0D; + private static double ultimateBowAttackDamage = 18.0D; + private static double ultimateBowPlayerHeal = 8.0D; + private static double ultimateBowDrawSpeedMultiplier = 2.5D; + private static boolean ultimateBowComesEnchantedWithFlame = true; + private static double ultimateCrossbowAttackDamage = 8.0D; + private static double ultimateCrossbowChargeSpeedMultiplier = 0.25D; + private static double ultimateMaceDamageMultiplier = 1.5D; + private static double battleAxeAttackDamage = 46.0D; + private static double bigBerthaAttackDamage = 55.0D; + private static double bigBerthaReachBonus = 3.0D; + private static double bigBerthaAttackSpeed = -3.0D; + private static double attitudeAdjusterBaseDamage = 47.0D; + private static boolean attitudeAdjusterBreaksBlocks = true; + private static double krakensGraspAttackDamage = 16.0D; + private static double krakensGraspAttackSpeed = -2.9D; + private static double krakensGraspThrownDamage = 32.0D; + private static double krakensGraspLightningDamage = 6.0D; + private static boolean krakensGraspInnateLoyalty = true; + private static int krakensGraspInnateLoyaltyLevel = 3; + private static int krakensGraspTentacleDurationTicks = 100; + private static double krakensGraspTentacleRadius = 3.0D; + private static int krakensGraspTentacleSlownessAmplifier = 8; + private static int krakensGraspTentacleSlownessRefreshTicks = 5; + private static double scorpionWhipBaseDamage = 10.0D; + private static int scorpionWhipPoisonDurationTicks = 100; + private static double scorpionWhipTetherMaxRange = 10.0D; + private static double scorpionWhipSnapBonusDamage = 6.0D; + private static double scorpionWhipPullStrength = 0.75D; + private static double scorpionWhipHeavyPullMultiplier = 0.25D; + private static double scorpionWhipSelfPullMultiplier = 0.45D; + private static int bloodCrystalKatanaAttackDamage = 7; + private static double bloodCrystalKatanaLaunchStrength = 1.1D; + private static int bloodCrystalKatanaTrailDurationTicks = 12; + private static double bigBerthaBasiliskCooldownSeconds = 7.0D; + private static double bigBerthaLucidInvertedDurationSeconds = 3.0D; + private static double bigBerthaLucidInvertedDamageBonusPercent = 25.0D; + private static double bigBerthaNoneModeDamageBonusPercent = 15.0D; + private static double bigBerthaNightmareDamageBonusPercent = 30.0D; + private static double potentNyxiteInvertedDurationSeconds = 60.0D; + private static int dimensionalTearLifetimeTicks = 24000; + private static int dimensionalTearInvertedDurationTicks = 2400; + private static int dimensionalTearEmergenceMinIntervalTicks = 2400; + private static int dimensionalTearEmergenceMaxIntervalTicks = 7200; + private static float dimensionalTearLucidEventChance = 0.65F; + private static int ultimateToolEnchantability = 25; + private static int ultimateArmorEnchantability = 10; + private static int ultimateBowEnchantability = 20; + private static int ultimateCrossbowEnchantability = 20; + private static int ultimateMaceEnchantability = 20; + private static boolean ultimateToolsThreeByThreeEnabled = true; + private static boolean ultimateArmorComesEnchanted = true; + private static int ultimateHelmetArmorValue = 4; + private static int ultimateChestplateArmorValue = 9; + private static int ultimateLeggingsArmorValue = 7; + private static int ultimateBootsArmorValue = 4; + private static double ultimateHelmetArmorToughness = 3.0D; + private static double ultimateChestplateArmorToughness = 3.0D; + private static double ultimateLeggingsArmorToughness = 3.0D; + private static double ultimateBootsArmorToughness = 3.0D; + private static ResourceKey brownAntDestinationDimension = dimensionKey("antarchy:elythia"); + private static ResourceKey redAntDestinationDimension = dimensionKey("antarchy:thoraxis"); + private static ResourceKey termiteDestinationDimension = dimensionKey("antarchy:cavaryn"); + private static ResourceKey rainbowAntNonInfinityFallbackDimension = dimensionKey("antarchy:elythia"); + private static double krakenHealth = 1500.0D; + private static double krakenAttackDamage = 45.0D; + private static double octopusBombHealth = 100.0D; + private static double octopusBombAttackDamage = 16.0D; + private static double brutalflyHealth = 400.0D; + private static double brutalflySwipeDamage = 15.0D; + private static double brutalflySpitDamage = 5.0D; + private static double mantisHealth = 50.0D; + private static double mantisAttackDamage = 9.0D; + private static double mantisMovementSpeed = 0.42D; + private static double mantisFlyingSpeed = 0.77D; + private static boolean mantisIgnoreLightLevel = false; + private static double alphaMantisHealth = 250.0D; + private static double alphaMantisAttackDamage = 18.0D; + private static double alphaMantisMovementSpeed = 0.546D; + private static double alphaMantisFlyingSpeed = 0.77D; + private static int alphaMantisSummonIntervalTicks = 300; + private static int alphaMantisMaxMinions = 4; + private static double rollyPollyHealth = 25.0D; + private static double rollyPollyMovementSpeed = 0.3D; + private static double rollyPollyRollSpeedMultiplier = 2.2D; + private static int rollyPollyTameChance = 3; + private static double rollyPollyBowlingDamage = 3.0D; + private static double rollyPollyBowlingKnockback = 0.8D; + private static double rollyPollyArmor = 2.0D; + private static double rollyPollyRolledArmorBonus = 16.0D; + private static boolean krakenSquidSpawnEnabled = true; + private static boolean krakenMassSpawnEnabled = true; + private static boolean krakenRequireBadOmenToSummon = true; + private static double squidzookaCooldownSeconds = 1.0D; + private static double squidzookaLaunchVelocity = 2.1D; + private static double rpoLauncherCooldownSeconds = 1.0D; + private static double rpoLauncherLaunchVelocity = 1.8D; + private static double rpoLauncherExplosionDamage = 30.0D; + private static double rpoLauncherExplosionRadius = 13.5D; + 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; + private static double gravityGunRange = 16.0D; + private static double gravityGunThrowStrength = 1.8D; + private static double gravityGunBlastStrength = 1.4D; + private static double gravityGunCooldownSeconds = 0.35D; + private static double gravityGunMaxHoldDistance = 10.0D; + private static double critterCageMaxCapturableWidth = 1.65D; + private static double critterCageMaxCapturableHeight = 1.65D; + private static boolean minersDreamEnabled = true; + private static int minersDreamMinimumRange = 48; + private static int minersDreamMaximumRange = 96; + private static int minersDreamTorchSpacing = 10; + private static int minersDreamBlocksPerTick = 150; + private static double lucidAttackRange = 9.0D; + private static double lucidPearlInvertedDurationSeconds = 6.0D; + private static int corneaEarNightVisionSeconds = 15; + private static boolean americanizingEnabled = true; + private static int americanBonusNutrition = 2; + 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 = 3; + private static int nightmareChestplateArmorValue = 8; + private static int nightmareLeggingsArmorValue = 6; + private static int nightmareBootsArmorValue = 3; + private static double nightmareHelmetArmorToughness = 3.0D; + private static double nightmareChestplateArmorToughness = 3.0D; + private static double nightmareLeggingsArmorToughness = 3.0D; + private static double nightmareBootsArmorToughness = 3.0D; + + private static double nightmareHelmetDoubleDamageChance = 0.04D; + private static double nightmareChestplateDoubleDamageChance = 0.06D; + private static double nightmareLeggingsDoubleDamageChance = 0.05D; + private static double nightmareBootsDoubleDamageChance = 0.03D; + + private static double nightmareSwordBaseDamage = 15.0D; + + private static double nightmareSwordScalingFactor = 1.5D; + private static boolean basiliskPetrifyingGazeEnabled = true; + private static int basiliskSpawnMaxLightLevel = 5; + private static double basiliskHealth = 150.0D; + private static double basiliskAttackDamage = 36.0D; + private static double basiliskMovementSpeed = 0.18D; + private static double basiliskArmor = 6.0D; + private static double basiliskKnockbackResistance = 0.5D; + private static double basiliskFollowRange = 28.0D; + private static int basiliskXpReward = 50; + private static int basiliskAttackAnimTicks = 18; + private static int basiliskAttackDamageTick = 9; + private static int basiliskHissCooldownTicks = 600; + private static double basiliskAttackReach = 3.0D; + private static double basiliskGazeRange = 12.0D; + private static double basiliskGazeDotThreshold = 0.64D; + private static double basiliskGazeFacingThreshold = 0.45D; + private static int basiliskHissChargeTicks = 30; + private static int basiliskPlayerParalyzeTicks = 50; + private static int basiliskPreyPetrifyCooldownTicks = 500; + private static double basiliskPreyPetrifyRange = 8.0D; + private static int basiliskPreyPetrifyTicks = 200; + private static boolean diamondMinecartEnabled = true; + private static boolean diamondMinecartPlacesRails = true; + private static double diamondMinecartCruiseSpeed = 0.6D; + private static double diamondMinecartMaxSpeed = 1.0D; + private static double diamondMinecartAcceleration = 0.03D; + private static double diamondMinecartDeceleration = 0.04D; + private static double diamondMinecartCoastDeceleration = 0.01D; + private static boolean diamondMinecartMobDamageEnabled = true; + private static double diamondMinecartMaxMobDamage = 8.0D; + private static boolean dreadHallucinationSoundsEnabled = true; + private static double dreadHallucinationSoundMinInterval = 3.0D; + private static double dreadHallucinationSoundMaxInterval = 10.0D; + private static boolean dreadHallucinationMobsEnabled = true; + private static double dreadHallucinationMobMinInterval = 6.0D; + private static double dreadHallucinationMobMaxInterval = 16.0D; + private static double brownAntMovementSpeed = 0.28D; + private static double redAntMovementSpeed = 0.30D; + private static double rainbowAntMovementSpeed = 0.28D; + private static double termiteMovementSpeed = 0.28D; + private static double brownAntAttackDamage = 1.0D; + private static double rainbowAntAttackDamage = 1.0D; + private static double termiteAttackDamage = 1.0D; + private static double flyingSquirrelHealth = 10.0D; + private static double flyingSquirrelMovementSpeed = 0.35D; + private static double caterpillarHealth = 6.0D; + private static double caterpillarMovementSpeed = 0.24D; + private static double caterpillarPupationTimeSeconds = 600.0D; + private static double butterflyHealth = 6.0D; + private static double butterflyMovementSpeed = 0.3D; + private static double butterflyFlyingSpeed = 0.55D; + private static double reverieHealth = 20.0D; + private static double reverieInterestRadius = 16.0D; + private static double reverieAbandonPlayerDistance = 24.0D; + private static int reverieNoticeDurationTicks = 20; + private static int reverieInterestDurationTicks = 360; + private static int reverieRebindCooldownTicks = 100; + private static int reverieDamageReactionDurationTicks = 60; + private static double reverieDangerousFallDistance = 4.0D; + private static double reverieDangerousFallSpeed = 0.18D; + private static double reverieWarningThreatRadius = 10.0D; + private static double reverieWarningThreatVerticalRange = 5.0D; + private static int reverieDuplicationCooldownTicks = 6000; + private static final double reveriePreferredFollowMinDistance = 2.5D; + private static final double reveriePreferredFollowMaxDistance = 2.5D; + private static final double reverieCatchUpDistance = 12.0D; + private static final int reverieWarningApproachTicks = 8; + private static final int reverieWarningHoverTicks = 6; + private static final int reverieWarningReturnTicks = 8; + private static final int reverieWarningPlayerHoverTicks = 10; + private static final double reverieAmbientTargetMinRadius = 1.2D; + private static final double reverieAmbientTargetMaxRadius = 4.4D; + private static final double reverieAmbientTargetVerticalRange = 1.8D; + private static final int reverieAmbientTargetMaxAgeTicks = 40; + private static final int reverieAmbientPulseIntervalMinTicks = 12; + private static final int reverieAmbientPulseIntervalMaxTicks = 19; + private static double emperorScorpionHealth = 300.0D; + private static double emperorScorpionAttackDamage = 28.0D; + private static double emperorScorpionMovementSpeed = 0.384D; + private static double emperorScorpionArmor = 22.0D; + private static double emperorScorpionKnockbackResistance = 0.8D; + private static double emperorScorpionFollowRange = 80.0D; + private static int emperorScorpionXpReward = 25; + private static int emperorScorpionClawAnimTicks = 23; + private static int emperorScorpionClawHitTick = 12; + private static int emperorScorpionClawCooldownTicks = 28; + private static int emperorScorpionStingAnimTicks = 25; + private static int emperorScorpionStingHitTick = 13; + private static int emperorScorpionStingCooldownTicks = 60; + private static int emperorScorpionPoisonTicks = 300; + private static int emperorScorpionWeaknessTicks = 120; + private static int emperorScorpionSummonIntervalTicks = 140; + private static int emperorScorpionMaxSummonedScorpions = 4; + private static int emperorScorpionMaxNearbyScorpions = 3; + private static int emperorScorpionHardenCooldownTicks = 2400; + private static double emperorScorpionDamageRange = 80.0D; + private static int emperorScorpionMinDespawnTicks = 6000; + private static double scorpionHealth = 30.0D; + private static double scorpionAttackDamage = 5.0D; + private static double scorpionMovementSpeed = 0.29D; + private static double scorpionArmor = 2.0D; + private static double scorpionKnockbackResistance = 0.2D; + private static double bedBugHealth = 18.0D; + 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 jumpyBugLatchDamage = 12.0D; + private static double jumpyBugCamouflageAlpha = 0.18D; + private static double brutalflyArmor = 10.0D; + private static double brutalflyArmorToughness = 4.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 krakenMovementSpeed = 0.24D; + private static double krakenFlyingSpeed = 0.24D; + private static double krakenKnockbackResistance = 0.8D; + private static double krakenArmor = 8.0D; + private static double krakenBossBarRange = 40.0D; + private static double krakenFollowRange = 96.0D; + private static double krakenDamageRange = 96.0D; + private static double herculesBeetleDamageRange = 48.0D; + private static double toreterrorDamageRange = 48.0D; + private static double brutalflyDamageRange = 48.0D; + private static double alphaMantisDamageRange = 48.0D; + private static float krakenLightningDamagePhaseOne = 6.0F; + private static double lucidHealth = 30.0D; + private static double lucidAttackDamage = 4.0D; + private static double lucidMovementSpeed = 0.22D; + private static double lucidFlyingSpeed = 0.35D; + private static double lucidKnockbackResistance = 0.5D; + private static double missileSquidHealth = 50.0D; + private static double missileSquidAttackDamage = 6.0D; + private static double missileSquidMovementSpeed = 0.84D; + private static double missileSquidFlyingSpeed = 0.84D; + private static double missileSquidKnockbackResistance = 0.15D; + private static double molewormHealth = 8.0D; + private static double molewormAttackDamage = 1.0D; + private static double molewormMovementSpeed = 0.25D; + private static double triffidHealth = 80.0D; + private static double triffidAttackDamage = 10.0D; + private static double triffidGrabDamage = 15.0D; + private static double molevoreHealth = 60.0D; + private static double molevoreAttackDamage = 10.0D; + private static double molevoreMovementSpeed = 0.27D; + private static double molevoreArmor = 6.0D; + private static double molevoreKnockbackResistance = 0.65D; + private static double molevoreFollowRange = 28.0D; + private static int molevoreXpReward = 20; + private static int molevoreSpinTicks = 12; + private static int molevoreCooldownTicks = 60; + private static double molevoreChargeSpeed = 1.15D; + private static double molevoreBreakRange = 1.8D; + private static double molevoreBreakVerticalRange = 2.2D; + private static double molevoreBreakHalfWidth = 1.1D; + private static double nightmareHealth = 180.0D; + private static double nightmareAttackDamage = 16.0D; + private static double nightmareMovementSpeed = 0.28D; + private static double nightmareFlyingSpeed = 0.3D; + private static double nightmareFollowRange = 48.0D; + private static double nightmareKnockbackResistance = 0.75D; + private static double nightmareArmor = 8.0D; + private static int nightmareXpReward = 25; + private static int nightmareAttackTotalTicks = 18; + private static int nightmareAttackDamageTick = 9; + private static int nightmareIntroRoarTicks = 32; + private static int nightmareCombatRoarTicks = 24; + private static int nightmareDeathTicks = 36; + private static int nightmareTargetResetTicks = 60; + private static int nightmareBedBugEggSearchInterval = 30; + private static int nightmareDreadTicks = 160; + private static int nightmareWeaknessTicks = 100; + private static double battleAxeAttackSpeed = -3.1D; + private static double basiliskDaggerAttackDamage = 6.0D; + private static double basiliskDaggerAttackSpeed = -1.8D; + private static int basiliskDaggerPoisonDurationTicks = 200; + private static int basiliskDaggerPoisonAmplifier = 2; + private static double ultimateSwordAttackSpeed = -2.4D; + private static double ultimatePickaxeAttackSpeed = -2.8D; + private static double ultimateAxeAttackSpeed = -3.0D; + private static double ultimateShovelAttackSpeed = -3.0D; + private static double ultimateHoeAttackSpeed = 0.0D; + private static double ultimateMaceAttackSpeed = -3.4D; + private static double nightmareSwordAttackSpeed = -2.4D; + private static int bigBerthaBasiliskParalyzeDurationTicks = 80; + private static int bigBerthaKrakenSlowTicks = 80; + private static double ductTapeRepairPercentPerUse = 0.25D; + private static double ultimateArmorKnockbackResistance = 0.1D; + private static double nightmareArmorKnockbackResistance = 0.1D; + private static double primordialArmorKnockbackPerPiece = 0.5D; + private static double mogglesVisionRadius = 20.0D; + private static int fallenKingCrownArmorValue = 2; + private static double fallenKingCrownArmorToughness = 0.0D; + private static boolean permanentPortalsEnabled = true; + private static boolean permanentPortalsFlintAndSteelEnabled = false; + private static boolean elythiaPortalEnabled = true; + private static boolean thoraxisPortalEnabled = true; + private static boolean cavarynPortalEnabled = true; + 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 = 8; + // Armor stats (iron defense, gold durability, 0 toughness by default) + private static int bloodCrystalHelmetDefense = 2; + private static int bloodCrystalChestplateDefense = 6; + private static int bloodCrystalLeggingsDefense = 5; + private static int bloodCrystalBootsDefense = 2; + private static double bloodCrystalArmorToughness = 0.0; + private static int bloodCrystalHelmetDurability = 77; + private static int bloodCrystalChestplateDurability = 112; + private static int bloodCrystalLeggingsDurability = 105; + private static int bloodCrystalBootsDurability = 91; + private static double toreterrorHealth = 300.0D; + private static double toreterrorJumpAttackDamage = 14.0D; + private static double toreterrorJumpAttackKnockback = 2.5D; + private static double toreterrorSpinDamage = 6.0D; + private static double toreterrorSpinKnockback = 0.9D; + private static double toreterrorRangedWaterBombChance = 0.35D; + private static double toreterrorProjectileDamageMultiplier = 0.5D; + private static double waterBombDamage = 6.0D; + private static int waterBombLifetimeTicks = 120; + private static double waterBombGravity = 0.12D; + private static double waterBombKnockback = 1.2D; + private static double waterCannonCooldownSeconds = 1.5D; + 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 jerryInfantHealth = 20.0D; + private static double jerryInfantAttackDamage = 2.0D; + private static double jerryMatureHealth = 40.0D; + private static double jerryMatureAttackDamage = 3.5D; + private static double jerryAlphaHealth = 60.0D; + private static double jerryAlphaAttackDamage = 6.0D; + private static double jerryGammaHealth = 60.0D; + private static double jerryGammaAttackDamage = 7.0D; + private static double cheepHealth = 8.0D; + private static double cheepAttackDamage = 3.0D; + private static double dorrieHealth = 60.0D; + private static double herculesBeetleHealth = 500.0D; + private static double herculesBeetleAttackDamage = 30.0D; + private static double herculesBeetleChargeDamage = 40.0D; + private static double ouranwoodDeerHealth = 20.0D; + private static double glimmerHealth = 20.0D; + + private AntarchySettings() { + } + + private static ResourceKey dimensionKey(String id) { + return ResourceKey.create(net.minecraft.core.registries.Registries.DIMENSION, new ResourceLocation(id)); + } + + public static boolean disableInfinityBookPortalCreation() { + return disableInfinityBookPortalCreation; + } + + public static boolean easterBunnyEnabled() { + return easterBunnyEnabled; + } + + public static int easterBunnyNaturalSpawnChancePercent() { + return easterBunnyNaturalSpawnChancePercent; + } + + public static boolean rainbowAntsLeadToInfinityDimensions() { + return rainbowAntsLeadToInfinityDimensions; + } + + public static double rainbowAntInfinityEasterEggChance() { + return rainbowAntInfinityEasterEggChance; + } + + public static boolean brownAntRightClickDimension() { + return brownAntRightClickDimension; + } + + public static boolean redAntRightClickDimension() { + return redAntRightClickDimension; + } + + public static boolean rainbowAntRightClickDimension() { + return rainbowAntRightClickDimension; + } + + public static boolean termiteRightClickDimension() { + return termiteRightClickDimension; + } + + public static boolean brownAntRequiresReagent() { + return brownAntRequiresReagent; + } + + public static boolean redAntRequiresReagent() { + return redAntRequiresReagent; + } + + public static boolean rainbowAntRequiresReagent() { + return rainbowAntRequiresReagent; + } + + public static boolean termiteRequiresReagent() { + return termiteRequiresReagent; + } + + public static boolean antsStealFromChests() { + return antsStealFromChests; + } + + public static boolean duplicatorTreeEnabled() { + return duplicatorTreeEnabled; + } + + public static boolean glowVinesUnderLeaves() { + return glowVinesUnderLeaves; + } + + public static boolean swingThroughGrassEnabled() { + return swingThroughGrassEnabled; + } + + public static boolean fabricKeybindingConflictFixEnabled() { + return fabricKeybindingConflictFixEnabled; + } + + public static boolean experimentalSettingsPopupDisabled() { + return experimentalSettingsPopupDisabled; + } + + public static boolean sizeChangingRaysEnabled() { + return sizeChangingRaysEnabled; + } + + public static double sizeRayMinScale() { + return sizeRayMinScale; + } + + public static double sizeRayMaxScale() { + return sizeRayMaxScale; + } + + public static double sizeRayDeltaPerHit() { + return sizeRayDeltaPerHit; + } + + public static double shrinkingPotionDelta() { + return shrinkingPotionDelta; + } + + public static double growthPotionDelta() { + return growthPotionDelta; + } + + public static double antDanceRadius() { + return antDanceRadius; + } + + public static double brownAntHealth() { + return brownAntHealth; + } + + public static double redAntHealth() { + return redAntHealth; + } + + public static double rainbowAntHealth() { + return rainbowAntHealth; + } + + public static double termiteHealth() { + return termiteHealth; + } + + public static double redAntAttackDamage() { + return redAntAttackDamage; + } + + public static double ultimateSwordAttackDamage() { + return ultimateSwordAttackDamage; + } + + public static double ultimatePickaxeAttackDamage() { + return ultimatePickaxeAttackDamage; + } + + public static double ultimateAxeAttackDamage() { + return ultimateAxeAttackDamage; + } + + public static double ultimateShovelAttackDamage() { + return ultimateShovelAttackDamage; + } + + public static double ultimateHoeAttackDamage() { + return ultimateHoeAttackDamage; + } + + public static double ultimateBowAttackDamage() { + return ultimateBowAttackDamage; + } + + public static double ultimateBowPlayerHeal() { + return ultimateBowPlayerHeal; + } + + public static double ultimateBowDrawSpeedMultiplier() { + return ultimateBowDrawSpeedMultiplier; + } + + public static boolean ultimateBowComesEnchantedWithFlame() { + return ultimateBowComesEnchantedWithFlame; + } + + public static double ultimateCrossbowAttackDamage() { + return ultimateCrossbowAttackDamage; + } + + public static double ultimateCrossbowChargeSpeedMultiplier() { + return ultimateCrossbowChargeSpeedMultiplier; + } + + public static double ultimateMaceDamageMultiplier() { + return ultimateMaceDamageMultiplier; + } + + public static double battleAxeAttackDamage() { + return battleAxeAttackDamage; + } + + public static double bigBerthaAttackDamage() { + return bigBerthaAttackDamage; + } + + public static double bigBerthaReachBonus() { + return bigBerthaReachBonus; + } + + public static double bigBerthaAttackSpeed() { + return bigBerthaAttackSpeed; + } + + public static double attitudeAdjusterBaseDamage() { + return attitudeAdjusterBaseDamage; + } + + public static boolean attitudeAdjusterBreaksBlocks() { + return attitudeAdjusterBreaksBlocks; + } + + public static double bigBerthaBasiliskCooldownSeconds() { + return bigBerthaBasiliskCooldownSeconds; + } + + public static double bigBerthaLucidInvertedDurationSeconds() { + return bigBerthaLucidInvertedDurationSeconds; + } + + public static double bigBerthaLucidInvertedDamageBonusPercent() { + return bigBerthaLucidInvertedDamageBonusPercent; + } + + public static double bigBerthaNoneModeDamageBonusPercent() { + return bigBerthaNoneModeDamageBonusPercent; + } + + public static double bigBerthaNightmareDamageBonusPercent() { + return bigBerthaNightmareDamageBonusPercent; + } + + public static double potentNyxiteInvertedDurationSeconds() { + return potentNyxiteInvertedDurationSeconds; + } + + public static int dimensionalTearLifetimeTicks() { + return dimensionalTearLifetimeTicks; + } + + public static int dimensionalTearInvertedDurationTicks() { + return dimensionalTearInvertedDurationTicks; + } + + public static int dimensionalTearEmergenceMinIntervalTicks() { + return dimensionalTearEmergenceMinIntervalTicks; + } + + public static int dimensionalTearEmergenceMaxIntervalTicks() { + return dimensionalTearEmergenceMaxIntervalTicks; + } + + public static float dimensionalTearLucidEventChance() { + return dimensionalTearLucidEventChance; + } + + public static int ultimateToolEnchantability() { + return ultimateToolEnchantability; + } + + public static int ultimateArmorEnchantability() { + return ultimateArmorEnchantability; + } + + public static int ultimateBowEnchantability() { + return ultimateBowEnchantability; + } + + public static int ultimateCrossbowEnchantability() { + return ultimateCrossbowEnchantability; + } + + public static int ultimateMaceEnchantability() { + return ultimateMaceEnchantability; + } + + public static boolean ultimateToolsThreeByThreeEnabled() { + return ultimateToolsThreeByThreeEnabled; + } + + public static boolean ultimateArmorComesEnchanted() { + return ultimateArmorComesEnchanted; + } + + public static int ultimateHelmetArmorValue() { + return ultimateHelmetArmorValue; + } + + public static int ultimateChestplateArmorValue() { + return ultimateChestplateArmorValue; + } + + public static int ultimateLeggingsArmorValue() { + return ultimateLeggingsArmorValue; + } + + public static int ultimateBootsArmorValue() { + return ultimateBootsArmorValue; + } + + public static double ultimateHelmetArmorToughness() { + return ultimateHelmetArmorToughness; + } + + public static double ultimateChestplateArmorToughness() { + return ultimateChestplateArmorToughness; + } + + public static double ultimateLeggingsArmorToughness() { + return ultimateLeggingsArmorToughness; + } + + public static double ultimateBootsArmorToughness() { + return ultimateBootsArmorToughness; + } + + public static ResourceKey brownAntDestinationDimension() { + return brownAntDestinationDimension; + } + + public static ResourceKey redAntDestinationDimension() { + return redAntDestinationDimension; + } + + public static ResourceKey termiteDestinationDimension() { + return termiteDestinationDimension; + } + + public static ResourceKey rainbowAntNonInfinityFallbackDimension() { + return rainbowAntNonInfinityFallbackDimension; + } + + public static double krakenHealth() { + return krakenHealth; + } + + public static double krakenAttackDamage() { + return krakenAttackDamage; + } + + public static double krakensGraspAttackDamage() { return krakensGraspAttackDamage; } + public static double krakensGraspAttackSpeed() { return krakensGraspAttackSpeed; } + public static double krakensGraspThrownDamage() { return krakensGraspThrownDamage; } + public static boolean krakensGraspInnateLoyalty() { return krakensGraspInnateLoyalty; } + public static int krakensGraspInnateLoyaltyLevel() { return krakensGraspInnateLoyaltyLevel; } + public static int krakensGraspTentacleDurationTicks() { return krakensGraspTentacleDurationTicks; } + public static double krakensGraspTentacleRadius() { return krakensGraspTentacleRadius; } + public static int krakensGraspTentacleSlownessAmplifier() { return krakensGraspTentacleSlownessAmplifier; } + public static int krakensGraspTentacleSlownessRefreshTicks() { return krakensGraspTentacleSlownessRefreshTicks; } + + public static double octopusBombHealth() { + return octopusBombHealth; + } + + public static void setOctopusBombHealth(double value) { octopusBombHealth = value; } + + public static double octopusBombAttackDamage() { + return octopusBombAttackDamage; + } + + public static void setOctopusBombAttackDamage(double value) { octopusBombAttackDamage = value; } + + public static double brutalflyHealth() { + return brutalflyHealth; + } + + public static double brutalflySwipeDamage() { + return brutalflySwipeDamage; + } + + public static double brutalflySpitDamage() { + return brutalflySpitDamage; + } + + public static double mantisHealth() { + return mantisHealth; + } + + public static double mantisAttackDamage() { + return mantisAttackDamage; + } + + public static double mantisMovementSpeed() { + return mantisMovementSpeed; + } + + public static double mantisFlyingSpeed() { + return mantisFlyingSpeed; + } + + public static boolean mantisIgnoreLightLevel() { + return mantisIgnoreLightLevel; + } + + public static void setMantisIgnoreLightLevel(boolean value) { + mantisIgnoreLightLevel = value; + } + + public static double alphaMantisHealth() { + return alphaMantisHealth; + } + + public static double alphaMantisAttackDamage() { + return alphaMantisAttackDamage; + } + + public static double alphaMantisMovementSpeed() { + return alphaMantisMovementSpeed; + } + + public static double alphaMantisFlyingSpeed() { + return alphaMantisFlyingSpeed; + } + + public static int alphaMantisSummonIntervalTicks() { + return alphaMantisSummonIntervalTicks; + } + + public static int alphaMantisMaxMinions() { + return alphaMantisMaxMinions; + } + + public static double rollyPollyHealth() { + return rollyPollyHealth; + } + + public static double rollyPollyMovementSpeed() { + return rollyPollyMovementSpeed; + } + + public static double rollyPollyRollSpeedMultiplier() { + return rollyPollyRollSpeedMultiplier; + } + + public static int rollyPollyTameChance() { + return rollyPollyTameChance; + } + + public static double rollyPollyBowlingDamage() { + return rollyPollyBowlingDamage; + } + + public static double rollyPollyBowlingKnockback() { + return rollyPollyBowlingKnockback; + } + + public static double rollyPollyArmor() { + return rollyPollyArmor; + } + + public static double rollyPollyRolledArmorBonus() { + return rollyPollyRolledArmorBonus; + } + + public static double waspHealth() { + return waspHealth; + } + + public static double waspAttackDamage() { + return waspAttackDamage; + } + + public static double waspMovementSpeed() { + return waspMovementSpeed; + } + + public static void setWaspMovementSpeed(double value) { + waspMovementSpeed = value; + } + + public static double bomberHealth() { + return bomberHealth; + } + + public static double bomberAttackDamage() { + return bomberAttackDamage; + } + + public static double bomberExplosionDamage() { + return bomberExplosionDamage; + } + + public static double bomberExplosionRadius() { + return bomberExplosionRadius; + } + + public static boolean krakenSquidSpawnEnabled() { + return krakenSquidSpawnEnabled; + } + + public static boolean krakenMassSpawnEnabled() { + return krakenMassSpawnEnabled; + } + + public static boolean krakenRequireBadOmenToSummon() { + return krakenRequireBadOmenToSummon; + } + + public static double squidzookaCooldownSeconds() { + return squidzookaCooldownSeconds; + } + + public static double squidzookaLaunchVelocity() { + return squidzookaLaunchVelocity; + } + + public static double rpoLauncherCooldownSeconds() { return rpoLauncherCooldownSeconds; } + public static double rpoLauncherLaunchVelocity() { return rpoLauncherLaunchVelocity; } + public static double rpoLauncherExplosionDamage() { return rpoLauncherExplosionDamage; } + public static double rpoLauncherExplosionRadius() { return rpoLauncherExplosionRadius; } + + public static double sizeRayCooldownSeconds() { + return sizeRayCooldownSeconds; + } + + public static boolean invertProjectilesFromInvertedPlayers() { + return invertProjectilesFromInvertedPlayers; + } + + public static boolean gravityGunEnabled() { + return gravityGunEnabled; + } + + public static boolean gravityGunBlocksEnabled() { + return gravityGunBlocksEnabled; + } + + public static boolean gravityGunEntitiesEnabled() { + return gravityGunEntitiesEnabled; + } + + public static double gravityGunRange() { + return gravityGunRange; + } + + public static double gravityGunThrowStrength() { + return gravityGunThrowStrength; + } + + public static double gravityGunBlastStrength() { + return gravityGunBlastStrength; + } + + public static double gravityGunCooldownSeconds() { + return gravityGunCooldownSeconds; + } + + public static double gravityGunMaxHoldDistance() { + return gravityGunMaxHoldDistance; + } + + public static double critterCageMaxCapturableWidth() { + return critterCageMaxCapturableWidth; + } + + public static double critterCageMaxCapturableHeight() { + return critterCageMaxCapturableHeight; + } + + public static boolean minersDreamEnabled() { + return minersDreamEnabled; + } + + public static int minersDreamMinimumRange() { + return minersDreamMinimumRange; + } + + public static int minersDreamMaximumRange() { + return minersDreamMaximumRange; + } + + public static int minersDreamTorchSpacing() { + return minersDreamTorchSpacing; + } + + public static int minersDreamBlocksPerTick() { + return minersDreamBlocksPerTick; + } + + public static void setDisableInfinityBookPortalCreation(boolean value) { + disableInfinityBookPortalCreation = value; + } + + public static void setEasterBunnyEnabled(boolean value) { + easterBunnyEnabled = value; + } + + public static void setEasterBunnyNaturalSpawnChancePercent(int value) { + easterBunnyNaturalSpawnChancePercent = value; + } + + public static void setRainbowAntsLeadToInfinityDimensions(boolean value) { + rainbowAntsLeadToInfinityDimensions = value; + } + + public static void setRainbowAntInfinityEasterEggChance(double value) { + rainbowAntInfinityEasterEggChance = value; + } + + public static void setBrownAntRightClickDimension(boolean value) { + brownAntRightClickDimension = value; + } + + public static void setRedAntRightClickDimension(boolean value) { + redAntRightClickDimension = value; + } + + public static void setRainbowAntRightClickDimension(boolean value) { + rainbowAntRightClickDimension = value; + } + + public static void setTermiteRightClickDimension(boolean value) { + termiteRightClickDimension = value; + } + + public static void setPermanentPortalsEnabled(boolean value) { + permanentPortalsEnabled = value; + } + + public static void setPermanentPortalsFlintAndSteelEnabled(boolean value) { + permanentPortalsFlintAndSteelEnabled = value; + } + + public static void setElythiaPortalEnabled(boolean value) { + elythiaPortalEnabled = value; + } + + public static void setThoraxisPortalEnabled(boolean value) { + thoraxisPortalEnabled = value; + } + + public static void setCavarynPortalEnabled(boolean value) { + cavarynPortalEnabled = 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 void setBrownAntRequiresReagent(boolean value) { + brownAntRequiresReagent = value; + } + + public static void setRedAntRequiresReagent(boolean value) { + redAntRequiresReagent = value; + } + + public static void setRainbowAntRequiresReagent(boolean value) { + rainbowAntRequiresReagent = value; + } + + public static void setTermiteRequiresReagent(boolean value) { + termiteRequiresReagent = value; + } + + public static void setAntsStealFromChests(boolean value) { + antsStealFromChests = value; + } + + public static void setDuplicatorTreeEnabled(boolean value) { + duplicatorTreeEnabled = value; + } + + public static void setGlowVinesUnderLeaves(boolean value) { + glowVinesUnderLeaves = value; + } + + public static void setSwingThroughGrassEnabled(boolean value) { + swingThroughGrassEnabled = value; + } + + public static void setFabricKeybindingConflictFixEnabled(boolean value) { + fabricKeybindingConflictFixEnabled = value; + } + + public static void setExperimentalSettingsPopupDisabled(boolean value) { + experimentalSettingsPopupDisabled = value; + } + + public static void setSizeChangingRaysEnabled(boolean value) { + sizeChangingRaysEnabled = value; + } + + public static void setSizeRayMinScale(double value) { + sizeRayMinScale = value; + } + + public static void setSizeRayMaxScale(double value) { + sizeRayMaxScale = value; + } + + public static void setSizeRayDeltaPerHit(double value) { + sizeRayDeltaPerHit = value; + } + + public static void setShrinkingPotionDelta(double value) { + shrinkingPotionDelta = value; + } + + public static void setGrowthPotionDelta(double value) { + growthPotionDelta = value; + } + + public static void setAntDanceRadius(double value) { + antDanceRadius = value; + } + + public static void setBrownAntHealth(double value) { + brownAntHealth = value; + } + + public static void setRedAntHealth(double value) { + redAntHealth = value; + } + + public static void setRainbowAntHealth(double value) { + rainbowAntHealth = value; + } + + public static void setTermiteHealth(double value) { + termiteHealth = value; + } + + public static void setWaspHealth(double value) { + waspHealth = value; + } + + public static void setWaspAttackDamage(double value) { + waspAttackDamage = value; + } + + public static void setBomberHealth(double value) { + bomberHealth = value; + } + + public static void setBomberAttackDamage(double value) { + bomberAttackDamage = value; + } + + public static void setBomberExplosionDamage(double value) { + bomberExplosionDamage = value; + } + + public static void setBomberExplosionRadius(double value) { + bomberExplosionRadius = value; + } + + public static void setRedAntAttackDamage(double value) { + redAntAttackDamage = value; + } + + public static void setUltimateSwordAttackDamage(double value) { + ultimateSwordAttackDamage = value; + } + + public static void setUltimatePickaxeAttackDamage(double value) { + ultimatePickaxeAttackDamage = value; + } + + public static void setUltimateAxeAttackDamage(double value) { + ultimateAxeAttackDamage = value; + } + + public static void setUltimateShovelAttackDamage(double value) { + ultimateShovelAttackDamage = value; + } + + public static void setUltimateHoeAttackDamage(double value) { + ultimateHoeAttackDamage = value; + } + + public static void setUltimateBowAttackDamage(double value) { + ultimateBowAttackDamage = value; + } + + public static void setUltimateBowPlayerHeal(double value) { + ultimateBowPlayerHeal = value; + } + + public static void setUltimateBowDrawSpeedMultiplier(double value) { + ultimateBowDrawSpeedMultiplier = value; + } + + public static void setUltimateBowComesEnchantedWithFlame(boolean value) { + ultimateBowComesEnchantedWithFlame = value; + } + + public static void setUltimateCrossbowAttackDamage(double value) { + ultimateCrossbowAttackDamage = value; + } + + public static void setUltimateCrossbowChargeSpeedMultiplier(double value) { + ultimateCrossbowChargeSpeedMultiplier = value; + } + + public static void setBattleAxeAttackDamage(double value) { + battleAxeAttackDamage = value; + } + + public static void setBigBerthaAttackDamage(double value) { + bigBerthaAttackDamage = value; + } + + public static void setBigBerthaReachBonus(double value) { + bigBerthaReachBonus = value; + } + + public static void setBigBerthaAttackSpeed(double value) { + bigBerthaAttackSpeed = value; + } + + public static void setAttitudeAdjusterBaseDamage(double value) { + attitudeAdjusterBaseDamage = value; + } + + public static void setAttitudeAdjusterBreaksBlocks(boolean value) { + attitudeAdjusterBreaksBlocks = value; + } + + public static void setBigBerthaBasiliskCooldownSeconds(double value) { + bigBerthaBasiliskCooldownSeconds = value; + } + + public static void setBigBerthaLucidInvertedDurationSeconds(double value) { + bigBerthaLucidInvertedDurationSeconds = value; + } + + public static void setBigBerthaLucidInvertedDamageBonusPercent(double value) { + bigBerthaLucidInvertedDamageBonusPercent = value; + } + + public static void setBigBerthaNoneModeDamageBonusPercent(double value) { + bigBerthaNoneModeDamageBonusPercent = value; + } + + public static void setBigBerthaNightmareDamageBonusPercent(double value) { + bigBerthaNightmareDamageBonusPercent = value; + } + + public static void setPotentNyxiteInvertedDurationSeconds(double value) { + potentNyxiteInvertedDurationSeconds = value; + } + + public static void setUltimateToolEnchantability(int value) { + ultimateToolEnchantability = value; + } + + public static void setUltimateArmorEnchantability(int value) { + ultimateArmorEnchantability = value; + } + + public static void setUltimateBowEnchantability(int value) { + ultimateBowEnchantability = value; + } + + public static void setUltimateCrossbowEnchantability(int value) { + ultimateCrossbowEnchantability = value; + } + + public static void setUltimateToolsThreeByThreeEnabled(boolean value) { + ultimateToolsThreeByThreeEnabled = value; + } + + public static void setUltimateArmorComesEnchanted(boolean value) { + ultimateArmorComesEnchanted = value; + } + + public static void setUltimateHelmetArmorValue(int value) { + ultimateHelmetArmorValue = value; + } + + public static void setUltimateChestplateArmorValue(int value) { + ultimateChestplateArmorValue = value; + } + + public static void setUltimateLeggingsArmorValue(int value) { + ultimateLeggingsArmorValue = value; + } + + public static void setUltimateBootsArmorValue(int value) { + ultimateBootsArmorValue = value; + } + + public static void setUltimateHelmetArmorToughness(double value) { + ultimateHelmetArmorToughness = value; + } + + public static void setUltimateChestplateArmorToughness(double value) { + ultimateChestplateArmorToughness = value; + } + + public static void setUltimateLeggingsArmorToughness(double value) { + ultimateLeggingsArmorToughness = value; + } + + public static void setUltimateBootsArmorToughness(double value) { + ultimateBootsArmorToughness = value; + } + + public static void setBrownAntDestinationDimension(String value) { + brownAntDestinationDimension = dimensionKey(value); + } + + public static void setRedAntDestinationDimension(String value) { + redAntDestinationDimension = dimensionKey(value); + } + + public static void setTermiteDestinationDimension(String value) { + termiteDestinationDimension = dimensionKey(value); + } + + public static void setRainbowAntNonInfinityFallbackDimension(String value) { + rainbowAntNonInfinityFallbackDimension = dimensionKey(value); + } + + public static void setKrakenHealth(double value) { + krakenHealth = value; + } + + public static void setKrakenAttackDamage(double value) { + krakenAttackDamage = value; + } + + public static void setKrakensGraspAttackDamage(double value) { krakensGraspAttackDamage = value; } + public static void setKrakensGraspAttackSpeed(double value) { krakensGraspAttackSpeed = value; } + public static void setKrakensGraspThrownDamage(double value) { krakensGraspThrownDamage = value; } + public static void setKrakensGraspLightningDamage(double value) { krakensGraspLightningDamage = value; } + public static void setKrakensGraspInnateLoyalty(boolean value) { krakensGraspInnateLoyalty = value; } + public static void setKrakensGraspInnateLoyaltyLevel(int value) { krakensGraspInnateLoyaltyLevel = value; } + public static void setKrakensGraspTentacleDurationTicks(int value) { krakensGraspTentacleDurationTicks = value; } + public static void setKrakensGraspTentacleRadius(double value) { krakensGraspTentacleRadius = value; } + public static void setKrakensGraspTentacleSlownessAmplifier(int value) { krakensGraspTentacleSlownessAmplifier = value; } + public static void setKrakensGraspTentacleSlownessRefreshTicks(int value) { krakensGraspTentacleSlownessRefreshTicks = value; } + + public static void setBrutalflyHealth(double value) { + brutalflyHealth = value; + } + + public static void setBrutalflySwipeDamage(double value) { + brutalflySwipeDamage = value; + } + + public static void setBrutalflySpitDamage(double value) { + brutalflySpitDamage = value; + } + + public static void setMantisHealth(double value) { + mantisHealth = value; + } + + public static void setMantisAttackDamage(double value) { + mantisAttackDamage = value; + } + + public static void setMantisMovementSpeed(double value) { + mantisMovementSpeed = value; + } + + public static void setMantisFlyingSpeed(double value) { + mantisFlyingSpeed = value; + } + + public static void setAlphaMantisHealth(double value) { + alphaMantisHealth = value; + } + + public static void setAlphaMantisAttackDamage(double value) { + alphaMantisAttackDamage = value; + } + + public static void setAlphaMantisMovementSpeed(double value) { + alphaMantisMovementSpeed = value; + } + + public static void setAlphaMantisFlyingSpeed(double value) { + alphaMantisFlyingSpeed = value; + } + + public static void setAlphaMantisSummonIntervalTicks(int value) { + alphaMantisSummonIntervalTicks = value; + } + + public static void setAlphaMantisMaxMinions(int value) { + alphaMantisMaxMinions = value; + } + + public static void setRollyPollyHealth(double value) { + rollyPollyHealth = value; + } + + public static void setRollyPollyMovementSpeed(double value) { + rollyPollyMovementSpeed = value; + } + + public static void setRollyPollyRollSpeedMultiplier(double value) { + rollyPollyRollSpeedMultiplier = value; + } + + public static void setRollyPollyTameChance(int value) { + rollyPollyTameChance = value; + } + + public static void setRollyPollyBowlingDamage(double value) { + rollyPollyBowlingDamage = value; + } + + public static void setRollyPollyBowlingKnockback(double value) { + rollyPollyBowlingKnockback = value; + } + + public static void setRollyPollyArmor(double value) { + rollyPollyArmor = value; + } + + public static void setRollyPollyRolledArmorBonus(double value) { + rollyPollyRolledArmorBonus = value; + } + + public static void setKrakenSquidSpawnEnabled(boolean value) { + krakenSquidSpawnEnabled = value; + } + + public static void setKrakenMassSpawnEnabled(boolean value) { + krakenMassSpawnEnabled = value; + } + + public static void setKrakenRequireBadOmenToSummon(boolean value) { + krakenRequireBadOmenToSummon = value; + } + + public static void setSquidzookaCooldownSeconds(double value) { + squidzookaCooldownSeconds = value; + } + + public static void setSquidzookaLaunchVelocity(double value) { + squidzookaLaunchVelocity = value; + } + + public static void setRpoLauncherCooldownSeconds(double value) { rpoLauncherCooldownSeconds = value; } + public static void setRpoLauncherLaunchVelocity(double value) { rpoLauncherLaunchVelocity = value; } + public static void setRpoLauncherExplosionDamage(double value) { rpoLauncherExplosionDamage = value; } + public static void setRpoLauncherExplosionRadius(double value) { rpoLauncherExplosionRadius = value; } + + public static void setSizeRayCooldownSeconds(double value) { + sizeRayCooldownSeconds = value; + } + + public static void setInvertProjectilesFromInvertedPlayers(boolean value) { + invertProjectilesFromInvertedPlayers = value; + } + + public static void setGravityGunEnabled(boolean value) { + gravityGunEnabled = value; + } + + public static void setGravityGunBlocksEnabled(boolean value) { + gravityGunBlocksEnabled = value; + } + + public static void setGravityGunEntitiesEnabled(boolean value) { + gravityGunEntitiesEnabled = value; + } + + public static void setGravityGunRange(double value) { + gravityGunRange = value; + } + + public static void setGravityGunThrowStrength(double value) { + gravityGunThrowStrength = value; + } + + public static void setGravityGunBlastStrength(double value) { + gravityGunBlastStrength = value; + } + + public static void setGravityGunCooldownSeconds(double value) { + gravityGunCooldownSeconds = value; + } + + public static void setGravityGunMaxHoldDistance(double value) { + gravityGunMaxHoldDistance = value; + } + + public static void setCritterCageMaxCapturableWidth(double value) { + critterCageMaxCapturableWidth = value; + } + + public static void setCritterCageMaxCapturableHeight(double value) { + critterCageMaxCapturableHeight = value; + } + + public static void setMinersDreamEnabled(boolean value) { + minersDreamEnabled = value; + } + + public static void setMinersDreamMinimumRange(int value) { + minersDreamMinimumRange = value; + } + + public static void setMinersDreamMaximumRange(int value) { + minersDreamMaximumRange = value; + } + + public static void setMinersDreamTorchSpacing(int value) { + minersDreamTorchSpacing = value; + } + + public static void setMinersDreamBlocksPerTick(int value) { + minersDreamBlocksPerTick = value; + } + + public static double lucidAttackRange() { + return lucidAttackRange; + } + + public static void setLucidAttackRange(double value) { + lucidAttackRange = value; + } + + public static double lucidPearlInvertedDurationSeconds() { + return lucidPearlInvertedDurationSeconds; + } + + public static void setLucidPearlInvertedDurationSeconds(double value) { + lucidPearlInvertedDurationSeconds = value; + } + + public static int corneaEarNightVisionSeconds() { + return corneaEarNightVisionSeconds; + } + + public static void setCorneaEarNightVisionSeconds(int value) { + corneaEarNightVisionSeconds = value; + } + + public static boolean americanizingEnabled() { + return americanizingEnabled; + } + + public static void setAmericanizingEnabled(boolean value) { + americanizingEnabled = value; + } + + public static int americanBonusNutrition() { + return americanBonusNutrition; + } + + public static void setAmericanBonusNutrition(int value) { + americanBonusNutrition = value; + } + + public static double americanBonusSaturation() { + return americanBonusSaturation; + } + + public static void setAmericanBonusSaturation(double value) { + americanBonusSaturation = value; + } + + public static int americanRegenerationDurationTicks() { + return americanRegenerationDurationTicks; + } + + public static void setAmericanRegenerationDurationTicks(int value) { + americanRegenerationDurationTicks = value; + } + + public static int americanRegenerationAmplifier() { + return americanRegenerationAmplifier; + } + + public static void setAmericanRegenerationAmplifier(int value) { + 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; + } + + public static void setDreamSandFallingBlockGravityMultiplier(double value) { + dreamSandFallingBlockGravityMultiplier = value; + } + + public static boolean ichorWitherEnabled() { + return ichorWitherEnabled; + } + + public static void setIchorWitherEnabled(boolean value) { + ichorWitherEnabled = value; + } + + public static int nightmareHelmetArmorValue() { return nightmareHelmetArmorValue; } + public static void setNightmareHelmetArmorValue(int v) { nightmareHelmetArmorValue = v; } + + public static int nightmareChestplateArmorValue() { return nightmareChestplateArmorValue; } + public static void setNightmareChestplateArmorValue(int v) { nightmareChestplateArmorValue = v; } + + public static int nightmareLeggingsArmorValue() { return nightmareLeggingsArmorValue; } + public static void setNightmareLeggingsArmorValue(int v) { nightmareLeggingsArmorValue = v; } + + public static int nightmareBootsArmorValue() { return nightmareBootsArmorValue; } + public static void setNightmareBootsArmorValue(int v) { nightmareBootsArmorValue = v; } + + public static double nightmareHelmetArmorToughness() { return nightmareHelmetArmorToughness; } + public static void setNightmareHelmetArmorToughness(double v) { nightmareHelmetArmorToughness = v; } + + public static double nightmareChestplateArmorToughness() { return nightmareChestplateArmorToughness; } + public static void setNightmareChestplateArmorToughness(double v) { nightmareChestplateArmorToughness = v; } + + public static double nightmareLeggingsArmorToughness() { return nightmareLeggingsArmorToughness; } + public static void setNightmareLeggingsArmorToughness(double v) { nightmareLeggingsArmorToughness = v; } + + public static double nightmareBootsArmorToughness() { return nightmareBootsArmorToughness; } + public static void setNightmareBootsArmorToughness(double v) { nightmareBootsArmorToughness = v; } + + public static void setMogglesVisionRadius(double v) { mogglesVisionRadius = v; } + public static double mogglesVisionRadius() { return mogglesVisionRadius; } + + public static double nightmareHelmetDoubleDamageChance() { return nightmareHelmetDoubleDamageChance; } + public static void setNightmareHelmetDoubleDamageChance(double v) { nightmareHelmetDoubleDamageChance = v; } + + public static double nightmareChestplateDoubleDamageChance() { return nightmareChestplateDoubleDamageChance; } + public static void setNightmareChestplateDoubleDamageChance(double v) { nightmareChestplateDoubleDamageChance = v; } + + public static double nightmareLeggingsDoubleDamageChance() { return nightmareLeggingsDoubleDamageChance; } + public static void setNightmareLeggingsDoubleDamageChance(double v) { nightmareLeggingsDoubleDamageChance = v; } + + public static double nightmareBootsDoubleDamageChance() { return nightmareBootsDoubleDamageChance; } + public static void setNightmareBootsDoubleDamageChance(double v) { nightmareBootsDoubleDamageChance = v; } + + public static double nightmareSwordBaseDamage() { return nightmareSwordBaseDamage; } + public static void setNightmareSwordBaseDamage(double v) { nightmareSwordBaseDamage = v; } + + public static double nightmareSwordScalingFactor() { return nightmareSwordScalingFactor; } + public static void setNightmareSwordScalingFactor(double v) { nightmareSwordScalingFactor = v; } + + public static boolean basiliskPetrifyingGazeEnabled() { + return basiliskPetrifyingGazeEnabled; + } + + public static void setBasiliskPetrifyingGazeEnabled(boolean value) { + basiliskPetrifyingGazeEnabled = value; + } + + public static int basiliskSpawnMaxLightLevel() { + return basiliskSpawnMaxLightLevel; + } + + public static void setBasiliskSpawnMaxLightLevel(int value) { + basiliskSpawnMaxLightLevel = value; + } + + public static double basiliskHealth() { return basiliskHealth; } + public static void setBasiliskHealth(double value) { basiliskHealth = value; } + + public static double basiliskAttackDamage() { return basiliskAttackDamage; } + public static void setBasiliskAttackDamage(double value) { basiliskAttackDamage = value; } + + public static double basiliskMovementSpeed() { return basiliskMovementSpeed; } + public static void setBasiliskMovementSpeed(double value) { basiliskMovementSpeed = value; } + + public static double basiliskArmor() { return basiliskArmor; } + public static void setBasiliskArmor(double value) { basiliskArmor = value; } + + public static double basiliskKnockbackResistance() { return basiliskKnockbackResistance; } + public static void setBasiliskKnockbackResistance(double value) { basiliskKnockbackResistance = value; } + + public static double basiliskFollowRange() { return basiliskFollowRange; } + public static void setBasiliskFollowRange(double value) { basiliskFollowRange = value; } + + public static int basiliskXpReward() { return basiliskXpReward; } + public static void setBasiliskXpReward(int value) { basiliskXpReward = value; } + + public static int basiliskAttackAnimTicks() { return basiliskAttackAnimTicks; } + public static void setBasiliskAttackAnimTicks(int value) { basiliskAttackAnimTicks = value; } + + public static int basiliskAttackDamageTick() { return basiliskAttackDamageTick; } + public static void setBasiliskAttackDamageTick(int value) { basiliskAttackDamageTick = value; } + + public static int basiliskHissCooldownTicks() { return basiliskHissCooldownTicks; } + public static void setBasiliskHissCooldownTicks(int value) { basiliskHissCooldownTicks = value; } + + public static double basiliskAttackReach() { return basiliskAttackReach; } + public static void setBasiliskAttackReach(double value) { basiliskAttackReach = value; } + + public static double basiliskGazeRange() { return basiliskGazeRange; } + public static void setBasiliskGazeRange(double value) { basiliskGazeRange = value; } + + public static double basiliskGazeDotThreshold() { return basiliskGazeDotThreshold; } + public static void setBasiliskGazeDotThreshold(double value) { basiliskGazeDotThreshold = value; } + + public static double basiliskGazeFacingThreshold() { return basiliskGazeFacingThreshold; } + public static void setBasiliskGazeFacingThreshold(double value) { basiliskGazeFacingThreshold = value; } + + public static int basiliskHissChargeTicks() { return basiliskHissChargeTicks; } + public static void setBasiliskHissChargeTicks(int value) { basiliskHissChargeTicks = value; } + + public static int basiliskPlayerParalyzeTicks() { return basiliskPlayerParalyzeTicks; } + public static void setBasiliskPlayerParalyzeTicks(int value) { basiliskPlayerParalyzeTicks = value; } + + public static int basiliskPreyPetrifyCooldownTicks() { return basiliskPreyPetrifyCooldownTicks; } + public static void setBasiliskPreyPetrifyCooldownTicks(int value) { basiliskPreyPetrifyCooldownTicks = value; } + + public static double basiliskPreyPetrifyRange() { return basiliskPreyPetrifyRange; } + public static void setBasiliskPreyPetrifyRange(double value) { basiliskPreyPetrifyRange = value; } + + public static int basiliskPreyPetrifyTicks() { return basiliskPreyPetrifyTicks; } + public static void setBasiliskPreyPetrifyTicks(int value) { basiliskPreyPetrifyTicks = value; } + + public static boolean diamondMinecartEnabled() { return diamondMinecartEnabled; } + public static void setDiamondMinecartEnabled(boolean v) { diamondMinecartEnabled = v; } + + public static boolean diamondMinecartPlacesRails() { return diamondMinecartPlacesRails; } + public static void setDiamondMinecartPlacesRails(boolean v) { diamondMinecartPlacesRails = v; } + + public static double diamondMinecartCruiseSpeed() { return diamondMinecartCruiseSpeed; } + public static void setDiamondMinecartCruiseSpeed(double v) { diamondMinecartCruiseSpeed = v; } + + public static double diamondMinecartMaxSpeed() { return diamondMinecartMaxSpeed; } + public static void setDiamondMinecartMaxSpeed(double v) { diamondMinecartMaxSpeed = v; } + + public static double diamondMinecartAcceleration() { return diamondMinecartAcceleration; } + public static void setDiamondMinecartAcceleration(double v) { diamondMinecartAcceleration = v; } + + public static double diamondMinecartDeceleration() { return diamondMinecartDeceleration; } + public static void setDiamondMinecartDeceleration(double v) { diamondMinecartDeceleration = v; } + + public static double diamondMinecartCoastDeceleration() { return diamondMinecartCoastDeceleration; } + public static void setDiamondMinecartCoastDeceleration(double v) { diamondMinecartCoastDeceleration = v; } + + public static boolean diamondMinecartMobDamageEnabled() { return diamondMinecartMobDamageEnabled; } + public static void setDiamondMinecartMobDamageEnabled(boolean v) { diamondMinecartMobDamageEnabled = v; } + + public static double diamondMinecartMaxMobDamage() { return diamondMinecartMaxMobDamage; } + public static void setDiamondMinecartMaxMobDamage(double v) { diamondMinecartMaxMobDamage = v; } + + public static boolean dreadHallucinationSoundsEnabled() { + return dreadHallucinationSoundsEnabled; + } + + public static void setDreadHallucinationSoundsEnabled(boolean value) { + dreadHallucinationSoundsEnabled = value; + } + + public static double dreadHallucinationSoundMinInterval() { + return dreadHallucinationSoundMinInterval; + } + + public static void setDreadHallucinationSoundMinInterval(double value) { + dreadHallucinationSoundMinInterval = value; + } + + public static double dreadHallucinationSoundMaxInterval() { + return dreadHallucinationSoundMaxInterval; + } + + public static void setDreadHallucinationSoundMaxInterval(double value) { + dreadHallucinationSoundMaxInterval = value; + } + + public static boolean dreadHallucinationMobsEnabled() { + return dreadHallucinationMobsEnabled; + } + + public static void setDreadHallucinationMobsEnabled(boolean value) { + dreadHallucinationMobsEnabled = value; + } + + public static double dreadHallucinationMobMinInterval() { + return dreadHallucinationMobMinInterval; + } + + public static void setDreadHallucinationMobMinInterval(double value) { + dreadHallucinationMobMinInterval = value; + } + + public static double dreadHallucinationMobMaxInterval() { + return dreadHallucinationMobMaxInterval; + } + + public static void setDreadHallucinationMobMaxInterval(double value) { + dreadHallucinationMobMaxInterval = value; + } + + public static double brownAntMovementSpeed() { return brownAntMovementSpeed; } + public static void setBrownAntMovementSpeed(double value) { brownAntMovementSpeed = value; } + + public static double redAntMovementSpeed() { return redAntMovementSpeed; } + public static void setRedAntMovementSpeed(double value) { redAntMovementSpeed = value; } + + public static double rainbowAntMovementSpeed() { return rainbowAntMovementSpeed; } + public static void setRainbowAntMovementSpeed(double value) { rainbowAntMovementSpeed = value; } + + public static double termiteMovementSpeed() { return termiteMovementSpeed; } + public static void setTermiteMovementSpeed(double value) { termiteMovementSpeed = value; } + + public static double brownAntAttackDamage() { return brownAntAttackDamage; } + public static void setBrownAntAttackDamage(double value) { brownAntAttackDamage = value; } + + public static double rainbowAntAttackDamage() { return rainbowAntAttackDamage; } + public static void setRainbowAntAttackDamage(double value) { rainbowAntAttackDamage = value; } + + public static double termiteAttackDamage() { return termiteAttackDamage; } + public static void setTermiteAttackDamage(double value) { termiteAttackDamage = value; } + + public static double flyingSquirrelHealth() { return flyingSquirrelHealth; } + public static void setFlyingSquirrelHealth(double value) { flyingSquirrelHealth = value; } + + public static double flyingSquirrelMovementSpeed() { return flyingSquirrelMovementSpeed; } + public static void setFlyingSquirrelMovementSpeed(double value) { flyingSquirrelMovementSpeed = value; } + + public static double caterpillarHealth() { return caterpillarHealth; } + public static void setCaterpillarHealth(double value) { caterpillarHealth = value; } + + public static double caterpillarMovementSpeed() { return caterpillarMovementSpeed; } + public static void setCaterpillarMovementSpeed(double value) { caterpillarMovementSpeed = value; } + + public static double caterpillarPupationTimeSeconds() { return caterpillarPupationTimeSeconds; } + public static void setCaterpillarPupationTimeSeconds(double value) { caterpillarPupationTimeSeconds = value; } + public static int caterpillarPupationTimeTicks() { return Math.max(1, (int)Math.round(caterpillarPupationTimeSeconds * 20.0D)); } + + private static double hushweedSporeLifetimeSeconds = 5.0D; + public static double hushweedSporeLifetimeSeconds() { return hushweedSporeLifetimeSeconds; } + public static void setHushweedSporeLifetimeSeconds(double value) { hushweedSporeLifetimeSeconds = value; } + public static int hushweedSporeLifetimeTicks() { return Math.max(1, (int)Math.round(hushweedSporeLifetimeSeconds * 20.0D)); } + + public static double butterflyHealth() { return butterflyHealth; } + public static void setButterflyHealth(double value) { butterflyHealth = value; } + + public static double butterflyMovementSpeed() { return butterflyMovementSpeed; } + public static void setButterflyMovementSpeed(double value) { butterflyMovementSpeed = value; } + + public static double butterflyFlyingSpeed() { return butterflyFlyingSpeed; } + public static void setButterflyFlyingSpeed(double value) { butterflyFlyingSpeed = value; } + + public static double reverieHealth() { return reverieHealth; } + public static void setReverieHealth(double value) { reverieHealth = value; } + + public static double reverieInterestRadius() { return reverieInterestRadius; } + public static void setReverieInterestRadius(double v) { reverieInterestRadius = v; } + + public static double reverieAbandonPlayerDistance() { return reverieAbandonPlayerDistance; } + public static void setReverieAbandonPlayerDistance(double v){ reverieAbandonPlayerDistance = v; } + + public static int reverieNoticeDurationTicks() { return reverieNoticeDurationTicks; } + public static void setReverieNoticeDurationTicks(int v) { reverieNoticeDurationTicks = v; } + + public static int reverieInterestDurationTicks() { return reverieInterestDurationTicks; } + public static void setReverieInterestDurationTicks(int v) { reverieInterestDurationTicks = v; } + + public static int reverieRebindCooldownTicks() { return reverieRebindCooldownTicks; } + public static void setReverieRebindCooldownTicks(int v) { reverieRebindCooldownTicks = v; } + public static int reverieDamageReactionDurationTicks() { return reverieDamageReactionDurationTicks; } + public static void setReverieDamageReactionDurationTicks(int v) { reverieDamageReactionDurationTicks = v; } + + public static double reverieDangerousFallDistance() { return reverieDangerousFallDistance; } + public static void setReverieDangerousFallDistance(double v){ reverieDangerousFallDistance = v; } + + public static double reverieDangerousFallSpeed() { return reverieDangerousFallSpeed; } + public static void setReverieDangerousFallSpeed(double v) { reverieDangerousFallSpeed = v; } + + public static double reverieWarningThreatRadius() { return reverieWarningThreatRadius; } + public static void setReverieWarningThreatRadius(double v) { reverieWarningThreatRadius = v; } + + public static double reverieWarningThreatVerticalRange() { return reverieWarningThreatVerticalRange; } + public static void setReverieWarningThreatVerticalRange(double v){ reverieWarningThreatVerticalRange = v; } + + 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; } + public static int reverieWarningApproachTicks() { return reverieWarningApproachTicks; } + public static int reverieWarningHoverTicks() { return reverieWarningHoverTicks; } + public static int reverieWarningReturnTicks() { return reverieWarningReturnTicks; } + public static int reverieWarningPlayerHoverTicks() { return reverieWarningPlayerHoverTicks; } + public static double reverieAmbientTargetMinRadius() { return reverieAmbientTargetMinRadius; } + public static double reverieAmbientTargetMaxRadius() { return reverieAmbientTargetMaxRadius; } + public static double reverieAmbientTargetVerticalRange() { return reverieAmbientTargetVerticalRange; } + public static int reverieAmbientTargetMaxAgeTicks() { return reverieAmbientTargetMaxAgeTicks; } + public static int reverieAmbientPulseIntervalMinTicks() { return reverieAmbientPulseIntervalMinTicks; } + public static int reverieAmbientPulseIntervalMaxTicks() { return reverieAmbientPulseIntervalMaxTicks; } + + public static double emperorScorpionHealth() { return emperorScorpionHealth; } + public static void setEmperorScorpionHealth(double value) { emperorScorpionHealth = value; } + + public static double scorpionWhipBaseDamage() { return scorpionWhipBaseDamage; } + public static void setScorpionWhipBaseDamage(double value) { scorpionWhipBaseDamage = value; } + + public static int scorpionWhipPoisonDurationTicks() { return scorpionWhipPoisonDurationTicks; } + public static void setScorpionWhipPoisonDurationTicks(int value) { scorpionWhipPoisonDurationTicks = value; } + + public static double scorpionWhipTetherMaxRange() { return scorpionWhipTetherMaxRange; } + public static void setScorpionWhipTetherMaxRange(double value) { scorpionWhipTetherMaxRange = value; } + + public static double scorpionWhipSnapBonusDamage() { return scorpionWhipSnapBonusDamage; } + public static void setScorpionWhipSnapBonusDamage(double value) { scorpionWhipSnapBonusDamage = value; } + + public static double scorpionWhipPullStrength() { return scorpionWhipPullStrength; } + public static void setScorpionWhipPullStrength(double value) { scorpionWhipPullStrength = value; } + + public static double scorpionWhipHeavyPullMultiplier() { return scorpionWhipHeavyPullMultiplier; } + public static void setScorpionWhipHeavyPullMultiplier(double value) { scorpionWhipHeavyPullMultiplier = value; } + + public static double scorpionWhipSelfPullMultiplier() { return scorpionWhipSelfPullMultiplier; } + public static void setScorpionWhipSelfPullMultiplier(double value) { scorpionWhipSelfPullMultiplier = value; } + + public static int bloodCrystalKatanaAttackDamage() { return bloodCrystalKatanaAttackDamage; } + public static void setBloodCrystalKatanaAttackDamage(int value) { bloodCrystalKatanaAttackDamage = value; } + + public static double bloodCrystalKatanaLaunchStrength() { return bloodCrystalKatanaLaunchStrength; } + public static void setBloodCrystalKatanaLaunchStrength(double value) { bloodCrystalKatanaLaunchStrength = value; } + + public static int bloodCrystalKatanaTrailDurationTicks() { return bloodCrystalKatanaTrailDurationTicks; } + public static void setBloodCrystalKatanaTrailDurationTicks(int value) { bloodCrystalKatanaTrailDurationTicks = value; } + + public static double emperorScorpionAttackDamage() { return emperorScorpionAttackDamage; } + public static void setEmperorScorpionAttackDamage(double value) { emperorScorpionAttackDamage = value; } + + public static double emperorScorpionMovementSpeed() { return emperorScorpionMovementSpeed; } + public static void setEmperorScorpionMovementSpeed(double value) { emperorScorpionMovementSpeed = value; } + + public static double emperorScorpionArmor() { return emperorScorpionArmor; } + public static void setEmperorScorpionArmor(double value) { emperorScorpionArmor = value; } + + public static double emperorScorpionKnockbackResistance() { return emperorScorpionKnockbackResistance; } + public static void setEmperorScorpionKnockbackResistance(double value) { emperorScorpionKnockbackResistance = value; } + + public static double emperorScorpionFollowRange() { return emperorScorpionFollowRange; } + public static void setEmperorScorpionFollowRange(double value) { emperorScorpionFollowRange = value; } + + public static int emperorScorpionXpReward() { return emperorScorpionXpReward; } + public static void setEmperorScorpionXpReward(int value) { emperorScorpionXpReward = value; } + + public static int emperorScorpionClawAnimTicks() { return emperorScorpionClawAnimTicks; } + public static void setEmperorScorpionClawAnimTicks(int value) { emperorScorpionClawAnimTicks = value; } + + public static int emperorScorpionClawHitTick() { return emperorScorpionClawHitTick; } + public static void setEmperorScorpionClawHitTick(int value) { emperorScorpionClawHitTick = value; } + + public static int emperorScorpionClawCooldownTicks() { return emperorScorpionClawCooldownTicks; } + public static void setEmperorScorpionClawCooldownTicks(int value) { emperorScorpionClawCooldownTicks = value; } + + public static int emperorScorpionStingAnimTicks() { return emperorScorpionStingAnimTicks; } + public static void setEmperorScorpionStingAnimTicks(int value) { emperorScorpionStingAnimTicks = value; } + + public static int emperorScorpionStingHitTick() { return emperorScorpionStingHitTick; } + public static void setEmperorScorpionStingHitTick(int value) { emperorScorpionStingHitTick = value; } + + public static int emperorScorpionStingCooldownTicks() { return emperorScorpionStingCooldownTicks; } + public static void setEmperorScorpionStingCooldownTicks(int value) { emperorScorpionStingCooldownTicks = value; } + + public static int emperorScorpionPoisonTicks() { return emperorScorpionPoisonTicks; } + public static void setEmperorScorpionPoisonTicks(int value) { emperorScorpionPoisonTicks = value; } + + public static int emperorScorpionWeaknessTicks() { return emperorScorpionWeaknessTicks; } + public static void setEmperorScorpionWeaknessTicks(int value) { emperorScorpionWeaknessTicks = value; } + + public static int emperorScorpionSummonIntervalTicks() { return emperorScorpionSummonIntervalTicks; } + public static void setEmperorScorpionSummonIntervalTicks(int value) { emperorScorpionSummonIntervalTicks = value; } + + public static int emperorScorpionMaxSummonedScorpions() { return emperorScorpionMaxSummonedScorpions; } + public static void setEmperorScorpionMaxSummonedScorpions(int value) { emperorScorpionMaxSummonedScorpions = value; } + + public static int emperorScorpionMaxNearbyScorpions() { return emperorScorpionMaxNearbyScorpions; } + public static void setEmperorScorpionMaxNearbyScorpions(int value) { emperorScorpionMaxNearbyScorpions = value; } + + public static int emperorScorpionHardenCooldownTicks() { return emperorScorpionHardenCooldownTicks; } + public static void setEmperorScorpionHardenCooldownTicks(int value) { emperorScorpionHardenCooldownTicks = value; } + + public static double emperorScorpionDamageRange() { return emperorScorpionDamageRange; } + public static void setEmperorScorpionDamageRange(double value) { emperorScorpionDamageRange = value; } + + public static int emperorScorpionMinDespawnTicks() { return emperorScorpionMinDespawnTicks; } + public static void setEmperorScorpionMinDespawnTicks(int value) { emperorScorpionMinDespawnTicks = value; } + + public static double scorpionHealth() { return scorpionHealth; } + public static void setScorpionHealth(double value) { scorpionHealth = value; } + + public static double scorpionAttackDamage() { return scorpionAttackDamage; } + public static void setScorpionAttackDamage(double value) { scorpionAttackDamage = value; } + + public static double scorpionMovementSpeed() { return scorpionMovementSpeed; } + public static void setScorpionMovementSpeed(double value) { scorpionMovementSpeed = value; } + + public static double scorpionArmor() { return scorpionArmor; } + public static void setScorpionArmor(double value) { scorpionArmor = value; } + + public static double scorpionKnockbackResistance() { return scorpionKnockbackResistance; } + public static void setScorpionKnockbackResistance(double value) { scorpionKnockbackResistance = value; } + + public static double bedBugHealth() { return bedBugHealth; } + public static void setBedBugHealth(double value) { bedBugHealth = value; } + + public static double bedBugAttackDamage() { return bedBugAttackDamage; } + public static void setBedBugAttackDamage(double value) { bedBugAttackDamage = value; } + + public static double bedBugMovementSpeed() { return bedBugMovementSpeed; } + public static void setBedBugMovementSpeed(double value) { bedBugMovementSpeed = value; } + + 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 jumpyBugPounceDamage() { return jumpyBugPounceDamage; } + public static void setJumpyBugPounceDamage(double value) { jumpyBugPounceDamage = value; } + public static double jumpyBugLatchDamage() { return jumpyBugLatchDamage; } + public static void setJumpyBugLatchDamage(double value) { jumpyBugLatchDamage = value; } + + public static double jumpyBugCamouflageAlpha() { return jumpyBugCamouflageAlpha; } + public static void setJumpyBugCamouflageAlpha(double value) { jumpyBugCamouflageAlpha = value; } + + public static double brutalflyArmor() { return brutalflyArmor; } + public static void setBrutalflyArmor(double value) { brutalflyArmor = value; } + + public static double brutalflyArmorToughness() { return brutalflyArmorToughness; } + public static void setBrutalflyArmorToughness(double value) { brutalflyArmorToughness = value; } + + public static double brutalflyKnockbackResistance() { return brutalflyKnockbackResistance; } + public static void setBrutalflyKnockbackResistance(double value) { brutalflyKnockbackResistance = value; } + + public static double brutalflyMovementSpeed() { return brutalflyMovementSpeed; } + public static void setBrutalflyMovementSpeed(double value) { brutalflyMovementSpeed = value; } + + 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 cloudSharkAttackDamage() { return cloudSharkAttackDamage; } + public static void setCloudSharkAttackDamage(double value) { cloudSharkAttackDamage = value; } + + public static double cloudSharkMovementSpeed() { return cloudSharkMovementSpeed; } + public static void setCloudSharkMovementSpeed(double value) { cloudSharkMovementSpeed = value; } + + public static double cloudSharkFlyingSpeed() { return cloudSharkFlyingSpeed; } + public static void setCloudSharkFlyingSpeed(double value) { cloudSharkFlyingSpeed = value; } + + public static double cloudSharkKnockbackResistance() { return cloudSharkKnockbackResistance; } + public static void setCloudSharkKnockbackResistance(double value) { cloudSharkKnockbackResistance = value; } + + public static double krakenMovementSpeed() { return krakenMovementSpeed; } + public static void setKrakenMovementSpeed(double value) { krakenMovementSpeed = value; } + + public static double krakenFlyingSpeed() { return krakenFlyingSpeed; } + public static void setKrakenFlyingSpeed(double value) { krakenFlyingSpeed = value; } + + public static double krakenKnockbackResistance() { return krakenKnockbackResistance; } + public static void setKrakenKnockbackResistance(double value) { krakenKnockbackResistance = value; } + + public static double krakenArmor() { return krakenArmor; } + public static void setKrakenArmor(double value) { krakenArmor = value; } + + public static double krakenBossBarRange() { return krakenBossBarRange; } + public static void setKrakenBossBarRange(double value) { krakenBossBarRange = value; } + + public static double krakenFollowRange() { return krakenFollowRange; } + public static void setKrakenFollowRange(double value) { krakenFollowRange = value; } + + public static double krakenDamageRange() { return krakenDamageRange; } + public static void setKrakenDamageRange(double value) { krakenDamageRange = value; } + + public static double herculesBeetleDamageRange() { return herculesBeetleDamageRange; } + public static void setHerculesBeetleDamageRange(double value) { herculesBeetleDamageRange = value; } + + public static double toreterrorDamageRange() { return toreterrorDamageRange; } + public static void setToreterrorDamageRange(double value) { toreterrorDamageRange = value; } + + public static double brutalflyDamageRange() { return brutalflyDamageRange; } + public static void setBrutalflyDamageRange(double value) { brutalflyDamageRange = value; } + + public static double alphaMantisDamageRange() { return alphaMantisDamageRange; } + public static void setAlphaMantisDamageRange(double value) { alphaMantisDamageRange = value; } + + public static float krakenLightningDamagePhaseOne() { return krakenLightningDamagePhaseOne; } + public static void setKrakenLightningDamagePhaseOne(float value) { krakenLightningDamagePhaseOne = value; } + + public static double lucidHealth() { return lucidHealth; } + public static void setLucidHealth(double value) { lucidHealth = value; } + + public static double lucidAttackDamage() { return lucidAttackDamage; } + public static void setLucidAttackDamage(double value) { lucidAttackDamage = value; } + + public static double lucidMovementSpeed() { return lucidMovementSpeed; } + public static void setLucidMovementSpeed(double value) { lucidMovementSpeed = value; } + + public static double lucidFlyingSpeed() { return lucidFlyingSpeed; } + public static void setLucidFlyingSpeed(double value) { lucidFlyingSpeed = value; } + + public static double lucidKnockbackResistance() { return lucidKnockbackResistance; } + public static void setLucidKnockbackResistance(double value) { lucidKnockbackResistance = value; } + + public static double missileSquidHealth() { return missileSquidHealth; } + public static void setMissileSquidHealth(double value) { missileSquidHealth = value; } + + public static double missileSquidAttackDamage() { return missileSquidAttackDamage; } + public static void setMissileSquidAttackDamage(double value) { missileSquidAttackDamage = value; } + + public static double missileSquidMovementSpeed() { return missileSquidMovementSpeed; } + public static void setMissileSquidMovementSpeed(double value) { missileSquidMovementSpeed = value; } + + public static double missileSquidFlyingSpeed() { return missileSquidFlyingSpeed; } + public static void setMissileSquidFlyingSpeed(double value) { missileSquidFlyingSpeed = value; } + + public static double missileSquidKnockbackResistance() { return missileSquidKnockbackResistance; } + public static void setMissileSquidKnockbackResistance(double value) { missileSquidKnockbackResistance = value; } + + public static double molewormHealth() { return molewormHealth; } + public static void setMolewormHealth(double value) { molewormHealth = value; } + + public static double molewormAttackDamage() { return molewormAttackDamage; } + public static void setMolewormAttackDamage(double value) { molewormAttackDamage = value; } + + 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 triffidAttackDamage() { return triffidAttackDamage; } + public static void setTriffidAttackDamage(double value) { triffidAttackDamage = value; } + + public static double triffidGrabDamage() { return triffidGrabDamage; } + public static void setTriffidGrabDamage(double value) { triffidGrabDamage = value; } + + public static double molevoreHealth() { return molevoreHealth; } + public static void setMolevoreHealth(double value) { molevoreHealth = value; } + + 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; } + + public static int molevoreCooldownTicks() { return molevoreCooldownTicks; } + public static void setMolevoreCooldownTicks(int value) { molevoreCooldownTicks = value; } + + public static double molevoreChargeSpeed() { return molevoreChargeSpeed; } + public static void setMolevoreChargeSpeed(double value) { molevoreChargeSpeed = value; } + + public static double molevoreBreakRange() { return molevoreBreakRange; } + public static void setMolevoreBreakRange(double value) { molevoreBreakRange = value; } + + public static double molevoreBreakVerticalRange() { return molevoreBreakVerticalRange; } + public static void setMolevoreBreakVerticalRange(double value) { molevoreBreakVerticalRange = value; } + + public static double molevoreBreakHalfWidth() { return molevoreBreakHalfWidth; } + public static void setMolevoreBreakHalfWidth(double value) { molevoreBreakHalfWidth = value; } + + public static double nightmareHealth() { return nightmareHealth; } + public static void setNightmareHealth(double value) { nightmareHealth = value; } + + public static double nightmareAttackDamage() { return nightmareAttackDamage; } + public static void setNightmareAttackDamage(double value) { nightmareAttackDamage = value; } + + public static double nightmareMovementSpeed() { return nightmareMovementSpeed; } + public static void setNightmareMovementSpeed(double value) { nightmareMovementSpeed = value; } + + public static int nightmareDreadTicks() { return nightmareDreadTicks; } + public static void setNightmareDreadTicks(int value) { nightmareDreadTicks = value; } + + public static int nightmareWeaknessTicks() { return nightmareWeaknessTicks; } + public static void setNightmareWeaknessTicks(int value) { nightmareWeaknessTicks = value; } + + public static double battleAxeAttackSpeed() { return battleAxeAttackSpeed; } + public static void setBattleAxeAttackSpeed(double value) { battleAxeAttackSpeed = value; } + + public static double basiliskDaggerAttackDamage() { return basiliskDaggerAttackDamage; } + public static void setBasiliskDaggerAttackDamage(double value) { basiliskDaggerAttackDamage = value; } + + public static double basiliskDaggerAttackSpeed() { return basiliskDaggerAttackSpeed; } + public static void setBasiliskDaggerAttackSpeed(double value) { basiliskDaggerAttackSpeed = value; } + + public static int basiliskDaggerPoisonDurationTicks() { return basiliskDaggerPoisonDurationTicks; } + public static void setBasiliskDaggerPoisonDurationTicks(int value) { basiliskDaggerPoisonDurationTicks = value; } + + public static int basiliskDaggerPoisonAmplifier() { return basiliskDaggerPoisonAmplifier; } + public static void setBasiliskDaggerPoisonAmplifier(int value) { basiliskDaggerPoisonAmplifier = value; } + + public static double ultimateSwordAttackSpeed() { return ultimateSwordAttackSpeed; } + public static void setUltimateSwordAttackSpeed(double value) { ultimateSwordAttackSpeed = value; } + + public static double ultimatePickaxeAttackSpeed() { return ultimatePickaxeAttackSpeed; } + public static void setUltimatePickaxeAttackSpeed(double value) { ultimatePickaxeAttackSpeed = value; } + + public static double ultimateAxeAttackSpeed() { return ultimateAxeAttackSpeed; } + public static void setUltimateAxeAttackSpeed(double value) { ultimateAxeAttackSpeed = value; } + + public static double ultimateShovelAttackSpeed() { return ultimateShovelAttackSpeed; } + public static void setUltimateShovelAttackSpeed(double value) { ultimateShovelAttackSpeed = value; } + + public static double ultimateHoeAttackSpeed() { return ultimateHoeAttackSpeed; } + public static void setUltimateHoeAttackSpeed(double value) { ultimateHoeAttackSpeed = value; } + + public static double ultimateMaceAttackSpeed() { return ultimateMaceAttackSpeed; } + public static void setUltimateMaceAttackSpeed(double value) { ultimateMaceAttackSpeed = value; } + + public static double nightmareSwordAttackSpeed() { return nightmareSwordAttackSpeed; } + public static void setNightmareSwordAttackSpeed(double value) { nightmareSwordAttackSpeed = value; } + + public static int bigBerthaBasiliskParalyzeDurationTicks() { return bigBerthaBasiliskParalyzeDurationTicks; } + public static void setBigBerthaBasiliskParalyzeDurationTicks(int value) { bigBerthaBasiliskParalyzeDurationTicks = value; } + + public static int bigBerthaKrakenSlowTicks() { return bigBerthaKrakenSlowTicks; } + public static void setBigBerthaKrakenSlowTicks(int value) { bigBerthaKrakenSlowTicks = value; } + + public static double ductTapeRepairPercentPerUse() { return ductTapeRepairPercentPerUse; } + public static void setDuctTapeRepairPercentPerUse(double value) { ductTapeRepairPercentPerUse = value; } + + public static double ultimateArmorKnockbackResistance() { return ultimateArmorKnockbackResistance; } + public static void setUltimateArmorKnockbackResistance(double value) { ultimateArmorKnockbackResistance = value; } + + public static double nightmareArmorKnockbackResistance() { return nightmareArmorKnockbackResistance; } + public static void setNightmareArmorKnockbackResistance(double value) { nightmareArmorKnockbackResistance = value; } + + public static double primordialArmorKnockbackPerPiece() { return primordialArmorKnockbackPerPiece; } + public static void setPrimordialArmorKnockbackPerPiece(double value) { primordialArmorKnockbackPerPiece = value; } + + public static int fallenKingCrownArmorValue() { return fallenKingCrownArmorValue; } + public static void setFallenKingCrownArmorValue(int value) { fallenKingCrownArmorValue = value; } + + public static double fallenKingCrownArmorToughness() { return fallenKingCrownArmorToughness; } + public static void setFallenKingCrownArmorToughness(double value) { fallenKingCrownArmorToughness = value; } + + public static boolean elythiaFireflyParticlesEnabled() { return elythiaFireflyParticlesEnabled; } + public static void setElythiaFireflyParticlesEnabled(boolean value) { elythiaFireflyParticlesEnabled = value; } + + public static int bloodCrystalArmorShieldRechargeTicks() { return bloodCrystalArmorShieldRechargeTicks; } + public static void setBloodCrystalArmorShieldRechargeTicks(int v) { bloodCrystalArmorShieldRechargeTicks = v; } + + public static int bloodCrystalAppleShieldCount() { return bloodCrystalAppleShieldCount; } + public static void setBloodCrystalAppleShieldCount(int v) { bloodCrystalAppleShieldCount = v; } + + public static int bloodCrystalHelmetDefense() { return bloodCrystalHelmetDefense; } + public static void setBloodCrystalHelmetDefense(int v) { bloodCrystalHelmetDefense = v; } + public static int bloodCrystalChestplateDefense() { return bloodCrystalChestplateDefense; } + public static void setBloodCrystalChestplateDefense(int v) { bloodCrystalChestplateDefense = v; } + public static int bloodCrystalLeggingsDefense() { return bloodCrystalLeggingsDefense; } + public static void setBloodCrystalLeggingsDefense(int v) { bloodCrystalLeggingsDefense = v; } + public static int bloodCrystalBootsDefense() { return bloodCrystalBootsDefense; } + public static void setBloodCrystalBootsDefense(int v) { bloodCrystalBootsDefense = v; } + public static double bloodCrystalArmorToughness() { return bloodCrystalArmorToughness; } + public static void setBloodCrystalArmorToughness(double v) { bloodCrystalArmorToughness = v; } + public static int bloodCrystalHelmetDurability() { return bloodCrystalHelmetDurability; } + public static void setBloodCrystalHelmetDurability(int v) { bloodCrystalHelmetDurability = v; } + public static int bloodCrystalChestplateDurability() { return bloodCrystalChestplateDurability; } + public static void setBloodCrystalChestplateDurability(int v) { bloodCrystalChestplateDurability = v; } + public static int bloodCrystalLeggingsDurability() { return bloodCrystalLeggingsDurability; } + public static void setBloodCrystalLeggingsDurability(int v) { bloodCrystalLeggingsDurability = v; } + public static int bloodCrystalBootsDurability() { return bloodCrystalBootsDurability; } + public static void setBloodCrystalBootsDurability(int v) { bloodCrystalBootsDurability = v; } + + public static int bloodCrystalAppleDurationTicks() { return bloodCrystalAppleDurationTicks; } + public static void setBloodCrystalAppleDurationTicks(int v) { bloodCrystalAppleDurationTicks = v; } + + public static int bloodCrystalAppleShieldRechargeTicks() { return bloodCrystalAppleShieldRechargeTicks; } + public static void setBloodCrystalAppleShieldRechargeTicks(int v) { bloodCrystalAppleShieldRechargeTicks = v; } + + public static int bloodCrystalHardMaxShields() { return bloodCrystalHardMaxShields; } + public static void setBloodCrystalHardMaxShields(int v) { bloodCrystalHardMaxShields = v; } + + public static double toreterrorHealth() { return toreterrorHealth; } + public static void setToreterrorHealth(double v) { toreterrorHealth = v; } + public static double toreterrorJumpAttackDamage() { return toreterrorJumpAttackDamage; } + public static void setToreterrorJumpAttackDamage(double v) { toreterrorJumpAttackDamage = v; } + public static double toreterrorJumpAttackKnockback() { return toreterrorJumpAttackKnockback; } + public static void setToreterrorJumpAttackKnockback(double v) { toreterrorJumpAttackKnockback = v; } + public static double toreterrorSpinDamage() { return toreterrorSpinDamage; } + public static void setToreterrorSpinDamage(double v) { toreterrorSpinDamage = v; } + public static double toreterrorSpinKnockback() { return toreterrorSpinKnockback; } + public static void setToreterrorSpinKnockback(double v) { toreterrorSpinKnockback = v; } + public static void setToreterrorRangedWaterBombChance(double v) { toreterrorRangedWaterBombChance = v; } + public static double toreterrorRangedWaterBombChance() { return toreterrorRangedWaterBombChance; } + public static double toreterrorProjectileDamageMultiplier() { return toreterrorProjectileDamageMultiplier; } + public static void setToreterrorProjectileDamageMultiplier(double v) { toreterrorProjectileDamageMultiplier = v; } + public static double waterBombDamage() { return waterBombDamage; } + public static void setWaterBombDamage(double v) { waterBombDamage = v; } + public static int waterBombLifetimeTicks() { return waterBombLifetimeTicks; } + public static void setWaterBombLifetimeTicks(int v) { waterBombLifetimeTicks = v; } + public static double waterBombGravity() { return waterBombGravity; } + public static void setWaterBombGravity(double v) { waterBombGravity = v; } + public static double waterBombKnockback() { return waterBombKnockback; } + public static void setWaterBombKnockback(double v) { waterBombKnockback = v; } + public static void setWaterCannonCooldownSeconds(double v) { waterCannonCooldownSeconds = v; } + public static double waterCannonCooldownSeconds() { return waterCannonCooldownSeconds; } + + 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 jerryInfantHealth() { return jerryInfantHealth; } + public static void setJerryInfantHealth(double v) { jerryInfantHealth = v; } + public static double jerryInfantAttackDamage() { return jerryInfantAttackDamage; } + public static void setJerryInfantAttackDamage(double v) { jerryInfantAttackDamage = v; } + public static double jerryMatureHealth() { return jerryMatureHealth; } + public static void setJerryMatureHealth(double v) { jerryMatureHealth = v; } + public static double jerryMatureAttackDamage() { return jerryMatureAttackDamage; } + public static void setJerryMatureAttackDamage(double v) { jerryMatureAttackDamage = v; } + public static double jerryAlphaHealth() { return jerryAlphaHealth; } + public static void setJerryAlphaHealth(double v) { jerryAlphaHealth = v; } + public static double jerryAlphaAttackDamage() { return jerryAlphaAttackDamage; } + public static void setJerryAlphaAttackDamage(double v) { jerryAlphaAttackDamage = v; } + public static double jerryGammaHealth() { return jerryGammaHealth; } + public static void setJerryGammaHealth(double v) { jerryGammaHealth = v; } + public static double jerryGammaAttackDamage() { return jerryGammaAttackDamage; } + public static void setJerryGammaAttackDamage(double v) { jerryGammaAttackDamage = v; } + public static double cheepHealth() { return cheepHealth; } + public static void setCheepHealth(double v) { cheepHealth = v; } + public static double cheepAttackDamage() { return cheepAttackDamage; } + public static void setCheepAttackDamage(double v) { cheepAttackDamage = v; } + public static double dorrieHealth() { return dorrieHealth; } + public static double herculesBeetleHealth() { return herculesBeetleHealth; } + public static void setHerculesBeetleHealth(double v) { herculesBeetleHealth = v; } + public static double herculesBeetleAttackDamage() { return herculesBeetleAttackDamage; } + public static void setHerculesBeetleAttackDamage(double v) { herculesBeetleAttackDamage = v; } + public static double herculesBeetleChargeDamage() { return herculesBeetleChargeDamage; } + public static void setHerculesBeetleChargeDamage(double v) { herculesBeetleChargeDamage = v; } + public static void setDorrieHealth(double v) { dorrieHealth = v; } + public static double ouranwoodDeerHealth() { return ouranwoodDeerHealth; } + public static void setOuranwoodDeerHealth(double v) { ouranwoodDeerHealth = v; } + public static double glimmerHealth() { return glimmerHealth; } + public static void setGlimmerHealth(double v) { glimmerHealth = v; } +} 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 new file mode 100644 index 00000000..c81fd12d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java @@ -0,0 +1,54 @@ +package com.craisinlord.antarchy.config; + +import com.craisinlord.antarchy.Antarchy; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public final class ConfigResetGuard { + public static final int RESET_GENERATION = 6; + private static final String MARKER_FILE_NAME = ".config_generation"; + + private ConfigResetGuard() { + } + + public static void wipeIfNeeded(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); + } + } + + writeGeneration(markerPath); + } + + private static int readGeneration(Path markerPath) { + if (!Files.exists(markerPath)) { + return 0; + } + + try { + return Integer.parseInt(Files.readString(markerPath).trim()); + } catch (IOException | NumberFormatException e) { + return 0; + } + } + + private static void writeGeneration(Path markerPath) { + try { + Files.createDirectories(markerPath.getParent()); + Files.writeString(markerPath, Integer.toString(RESET_GENERATION)); + } catch (IOException e) { + Antarchy.LOGGER.warn("Failed to write config generation marker at {}", markerPath, e); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyGameRules.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyGameRules.java new file mode 100644 index 00000000..3be17a3b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyGameRules.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content; + +import net.minecraft.world.level.GameRules; + +public final class AntarchyGameRules { + public static GameRules.Key RULE_DO_ANT_GREIFING; + public static GameRules.Key RULE_DO_HERCULES_BEETLE_GREIFING; + public static GameRules.Key RULE_DO_TERMITE_GREIFING; + public static GameRules.Key RULE_DO_CAVARYN_HORDES; + + private AntarchyGameRules() { + } + + public static void bootstrap(BooleanRuleRegistrar registrar) { + if (RULE_DO_ANT_GREIFING != null) { + return; + } + RULE_DO_ANT_GREIFING = registrar.register("doAntGreifing", GameRules.Category.MOBS, true); + RULE_DO_HERCULES_BEETLE_GREIFING = registrar.register("doHerculesBeetleGreifing", GameRules.Category.MOBS, true); + RULE_DO_TERMITE_GREIFING = registrar.register("doTermiteGreifing", GameRules.Category.MOBS, true); + RULE_DO_CAVARYN_HORDES = registrar.register("doCavarynHordes", GameRules.Category.MOBS, true); + } + + @FunctionalInterface + public interface BooleanRuleRegistrar { + GameRules.Key register(String name, GameRules.Category category, boolean defaultValue); + } +} 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 new file mode 100644 index 00000000..e64ff91e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -0,0 +1,759 @@ +package com.craisinlord.antarchy.content; + +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +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.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.kraken.KrakensGraspThrownTrident; +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import java.util.function.Supplier; +import net.minecraft.core.Holder; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluid; + +public final class AntarchyObjects { + private static final Supplier UNBOUND = () -> { + throw new IllegalStateException("Antarchy object supplier was accessed before registration finished"); + }; + + @SuppressWarnings("unchecked") + public static Supplier> EASTER_BUNNY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> FLYING_SQUIRREL = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> KRAKEN = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> MISSILE_SQUID = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> TENTACLE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> KRAKENS_GRASP_TRIDENT = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> OCTOPUS_BOMB = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> NIGHTMARE_PORTAL = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> DIMENSIONAL_TEAR = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> NIGHTMARE_BITE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> MOLEWORM = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> MANTIS = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> BED_BUG = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> WASP = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> BOMBER = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> SCORPION = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> CATERPILLAR = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> BUTTERFLY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> REVERIE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> TRIFFID = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> BRUTALFLY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> BRUTALFLY_ORB = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> HUSH_PROJECTILE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> TORETERROR = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> WATER_BOMB = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> CREEPING_HORROR = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> LURKING_TERROR = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> STINK_BUG = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> ROLLY_POLLY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> CHEEP = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> DORRIE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> HERCULES_BEETLE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> OURANWOOD_DEER = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> GLIMMER = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SPIRIT_APPLE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier GLIMMERING_EFFECT = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> ELKA = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier PEACH = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CORN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CORN_SEEDS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier WILD_CORN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STAR_CORAL_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STAR_CORAL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STAR_CORAL_FAN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier RAW_VENISON = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier COOKED_VENISON = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier COOKED_CORNDOG = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier GLIMMER_BOTTLE = (Supplier) UNBOUND; + public static final com.craisinlord.antarchy.content.component.AntarchyItemComponent GLIMMER_VARIANT_COMPONENT = + com.craisinlord.antarchy.content.component.AntarchyItemComponent.of( + "antarchy_glimmer_variant", + variant -> net.minecraft.nbt.StringTag.valueOf(variant.name()), + tag -> com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.byName(tag.getAsString())); + @SuppressWarnings("unchecked") + public static Supplier> DORRIE_INVENTORY_MENU = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CHEEP_ITEM = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier DUPLICATOR_LOG = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier DUPLICATOR_SAPLING = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier DUCT_TAPE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier INFESTED_ROOTED_DIRT = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier INFESTED_COARSE_DIRT = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier NYXITE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SHELLSTONE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier POLISHED_SHELLSTONE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SHELLSTONE_BRICKS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CHISELED_SHELLSTONE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MOSSY_SHELLSTONE_BRICKS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CRACKED_SHELLSTONE_BRICKS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MOSSY_SHELLSTONE_BRICK_STAIRS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MOSSY_SHELLSTONE_BRICK_SLAB = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MOSSY_SHELLSTONE_BRICK_WALL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SHELLSTONE_STAIRS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SHELLSTONE_SLAB = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SHELLSTONE_WALL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier POLISHED_SHELLSTONE_STAIRS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier POLISHED_SHELLSTONE_SLAB = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier POLISHED_SHELLSTONE_WALL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SHELLSTONE_BRICK_STAIRS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SHELLSTONE_BRICK_SLAB = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SHELLSTONE_BRICK_WALL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CLOUD_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier TRIFFID_GOO_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier PALE_NYXITE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier NYXITE_SPIKE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CHITIN_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CHITIN_SPIKE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier POTENT_NYXITE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier ANTIMETAL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier POLISHED_ANTIMETAL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier BUDDING_BLOOD_CRYSTAL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SMALL_BLOOD_CRYSTAL_BUD = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MEDIUM_BLOOD_CRYSTAL_BUD = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LARGE_BLOOD_CRYSTAL_BUD = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier BLOOD_CRYSTAL_CRYSTAL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier OURANWOOD_ACORN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier KRAKEN_TOOTH = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier KRAKEN_TENTACLE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier KRAKENS_GRASP = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MOGGLES = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier REVERIE_BOTTLE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CRITTER_CAGE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STINK_BUG_ITEM = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier DREAD = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> SCALE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> DOUBLE_DAMAGE_CHANCE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> BLOODGLASS_MAX_HEARTS = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier BLOODGLASS_WARD = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier PARALYZED_EFFECT = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier INVERTED_EFFECT = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STINKY_EFFECT = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LUMEN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier FLOWING_LUMEN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LUMEN_BUCKET = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LUMEN_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LUMEN_FROGLIGHT = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier OURANWOOD_ACORN_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MOSSY_OURANWOOD_LOG = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MOSSY_OURANWOOD_WOOD = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier ORANGE_MILKWEED = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier PINK_MILKWEED = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier BED_BUG_EGG = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CREEPING_HORROR_EGGS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LURKING_TERROR_EGGS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier WASP_NEST = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier UMBRAL_MOSS_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier UMBRAL_MOSS_CARPET = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier BLUSH_MOSS_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier BLUSH_MOSS_CARPET = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier HUSHWEED = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SQUIRREL_NEST_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier BRUTALFLY_COCOON_SPAWNER = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier GIANT_LILY_PAD = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LOTUS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SEASHELL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CRITTER_CAGE_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LUCID_ANCHOR = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> LUCID_ANCHOR_BLOCK_ENTITY = + (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> ANT_NEST_BLOCK_ENTITY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> DREAM_CAMPFIRE_BLOCK_ENTITY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> WASP_NEST_BLOCK_ENTITY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> HUSHWEED_BLOCK_ENTITY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> SEASHELL_BLOCK_ENTITY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> CRITTER_CAGE_BLOCK_ENTITY = + (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STINKY_GAS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier NIGHTMARE_FIRE_FLAME = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STINKY_FLY = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier PEACH_LEAVES_PARTICLE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LOTUS_POLLEN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LUCID_BOLT_IMPACT_SMALL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LUCID_BOLT_IMPACT_LARGE = (Supplier) UNBOUND; + public static final com.craisinlord.antarchy.content.component.AntarchyItemComponent AMERICAN_COMPONENT = + com.craisinlord.antarchy.content.component.AntarchyItemComponent.ofMarker("antarchy_american"); + @SuppressWarnings("unchecked") + public static Supplier> CRITTER_CAGE_PROJECTILE = + (Supplier>) UNBOUND; + public static final com.craisinlord.antarchy.content.component.AntarchyItemComponent CRITTER_CAGE_ENTITY_TYPE_COMPONENT = + com.craisinlord.antarchy.content.component.AntarchyItemComponent.of( + "antarchy_critter_cage_entity_type", + rl -> net.minecraft.nbt.StringTag.valueOf(rl.toString()), + tag -> new net.minecraft.resources.ResourceLocation(tag.getAsString())); + public static final com.craisinlord.antarchy.content.component.AntarchyItemComponent CRITTER_CAGE_PRIMARY_COLOR_COMPONENT = + com.craisinlord.antarchy.content.component.AntarchyItemComponent.ofInt("antarchy_critter_cage_primary_color"); + public static final com.craisinlord.antarchy.content.component.AntarchyItemComponent CRITTER_CAGE_SECONDARY_COLOR_COMPONENT = + com.craisinlord.antarchy.content.component.AntarchyItemComponent.ofInt("antarchy_critter_cage_secondary_color"); + + private AntarchyObjects() { + } + + public static void bind( + Supplier> easterBunny, + Supplier> flyingSquirrel, + Supplier> kraken, + Supplier> missileSquid, + Supplier> moleworm, + Supplier> mantis, + Supplier> bedBug, + Supplier> wasp, + Supplier> bomber, + Supplier> scorpion, + Supplier> caterpillar, + Supplier> butterfly, + Supplier> reverie, + Supplier> triffid, + Supplier> brutalfly, + Supplier> brutalflyOrb, + Supplier> hushProjectile, + Supplier> toreterror, + Supplier> waterBomb, + Supplier> creepingHorror, + Supplier> lurkingTerror, + Supplier> stinkBug, + Supplier> cheep, + Supplier> dorrie, + Supplier duplicatorLog, + Supplier duplicatorSapling, + Supplier ductTape, + Supplier infestedRootedDirt, + Supplier infestedCoarseDirt, + Supplier nyxite, + Supplier shellstone, + Supplier polishedShellstone, + Supplier shellstoneBricks, + Supplier chiseledShellstone, + Supplier mossyShellstoneBricks, + Supplier crackedShellstoneBricks, + Supplier mossyShellstoneBrickStairs, + Supplier mossyShellstoneBrickSlab, + Supplier mossyShellstoneBrickWall, + Supplier shellstoneStairs, + Supplier shellstoneSlab, + Supplier shellstoneWall, + Supplier polishedShellstoneStairs, + Supplier polishedShellstoneSlab, + Supplier polishedShellstoneWall, + Supplier shellstoneBrickStairs, + Supplier shellstoneBrickSlab, + Supplier shellstoneBrickWall, + Supplier cloudBlock, + Supplier triffidGooBlock, + Supplier paleNyxite, + Supplier nyxiteSpike, + Supplier chitinBlock, + Supplier chitinSpike, + Supplier potentNyxite, + Supplier antimetal, + Supplier polishedAntimetal, + Supplier buddingBloodCrystal, + Supplier smallBloodCrystalBud, + Supplier mediumBloodCrystalBud, + Supplier largeBloodCrystalBud, + Supplier bloodCrystalCrystal, + Supplier ouranwoodAcorn, + Supplier krakenTooth, + Supplier moggles, + Supplier reverieBottle, + Supplier stinkBugItem, + Supplier dread, + Supplier paralyzedEffect, + Supplier invertedEffect, + Supplier stinkyEffect, + Supplier ouranwoodAcornBlock, + Supplier mossyOuranwoodLog, + Supplier mossyOuranwoodWood, + Supplier umbralMossBlock, + Supplier umbralMossCarpet, + Supplier blushMossBlock, + Supplier blushMossCarpet, + Supplier orangeMilkweed, + Supplier pinkMilkweed, + Supplier bedBugEggs, + Supplier creepingHorrorEggs, + Supplier lurkingTerrorEggs, + Supplier waspNest, + Supplier hushweed, + Supplier squirrelNestBlock, + Supplier brutalflyCocoonSpawner, + Supplier giantLilyPad, + Supplier seashell, + Supplier> antNestBlockEntity, + Supplier> dreamCampfireBlockEntity, + Supplier> waspNestBlockEntity, + Supplier> hushweedBlockEntity, + Supplier> seashellBlockEntity, + Supplier stinkyGas, + Supplier stinkyFly, + Supplier peachLeaves, + Supplier> scale, + Supplier> doubleDamageChance, + Supplier> bloodglassMaxHearts, + Supplier bloodglassWard + ) { + EASTER_BUNNY = easterBunny; + FLYING_SQUIRREL = flyingSquirrel; + KRAKEN = kraken; + MISSILE_SQUID = missileSquid; + MOLEWORM = moleworm; + MANTIS = mantis; + BED_BUG = bedBug; + WASP = wasp; + BOMBER = bomber; + SCORPION = scorpion; + CATERPILLAR = caterpillar; + BUTTERFLY = butterfly; + REVERIE = reverie; + TRIFFID = triffid; + BRUTALFLY = brutalfly; + BRUTALFLY_ORB = brutalflyOrb; + HUSH_PROJECTILE = hushProjectile; + TORETERROR = toreterror; + WATER_BOMB = waterBomb; + CREEPING_HORROR = creepingHorror; + LURKING_TERROR = lurkingTerror; + STINK_BUG = stinkBug; + CHEEP = cheep; + DORRIE = dorrie; + DUPLICATOR_LOG = duplicatorLog; + DUPLICATOR_SAPLING = duplicatorSapling; + DUCT_TAPE = ductTape; + INFESTED_ROOTED_DIRT = infestedRootedDirt; + INFESTED_COARSE_DIRT = infestedCoarseDirt; + NYXITE = nyxite; + SHELLSTONE = shellstone; + POLISHED_SHELLSTONE = polishedShellstone; + SHELLSTONE_BRICKS = shellstoneBricks; + CHISELED_SHELLSTONE = chiseledShellstone; + MOSSY_SHELLSTONE_BRICKS = mossyShellstoneBricks; + CRACKED_SHELLSTONE_BRICKS = crackedShellstoneBricks; + MOSSY_SHELLSTONE_BRICK_STAIRS = mossyShellstoneBrickStairs; + MOSSY_SHELLSTONE_BRICK_SLAB = mossyShellstoneBrickSlab; + MOSSY_SHELLSTONE_BRICK_WALL = mossyShellstoneBrickWall; + SHELLSTONE_STAIRS = shellstoneStairs; + SHELLSTONE_SLAB = shellstoneSlab; + SHELLSTONE_WALL = shellstoneWall; + POLISHED_SHELLSTONE_STAIRS = polishedShellstoneStairs; + POLISHED_SHELLSTONE_SLAB = polishedShellstoneSlab; + POLISHED_SHELLSTONE_WALL = polishedShellstoneWall; + SHELLSTONE_BRICK_STAIRS = shellstoneBrickStairs; + SHELLSTONE_BRICK_SLAB = shellstoneBrickSlab; + SHELLSTONE_BRICK_WALL = shellstoneBrickWall; + CLOUD_BLOCK = cloudBlock; + TRIFFID_GOO_BLOCK = triffidGooBlock; + PALE_NYXITE = paleNyxite; + NYXITE_SPIKE = nyxiteSpike; + CHITIN_BLOCK = chitinBlock; + CHITIN_SPIKE = chitinSpike; + POTENT_NYXITE = potentNyxite; + ANTIMETAL = antimetal; + POLISHED_ANTIMETAL = polishedAntimetal; + BUDDING_BLOOD_CRYSTAL = buddingBloodCrystal; + SMALL_BLOOD_CRYSTAL_BUD = smallBloodCrystalBud; + MEDIUM_BLOOD_CRYSTAL_BUD = mediumBloodCrystalBud; + LARGE_BLOOD_CRYSTAL_BUD = largeBloodCrystalBud; + BLOOD_CRYSTAL_CRYSTAL = bloodCrystalCrystal; + OURANWOOD_ACORN = ouranwoodAcorn; + KRAKEN_TOOTH = krakenTooth; + MOGGLES = moggles; + REVERIE_BOTTLE = reverieBottle; + STINK_BUG_ITEM = stinkBugItem; + DREAD = dread; + PARALYZED_EFFECT = paralyzedEffect; + INVERTED_EFFECT = invertedEffect; + STINKY_EFFECT = stinkyEffect; + OURANWOOD_ACORN_BLOCK = ouranwoodAcornBlock; + MOSSY_OURANWOOD_LOG = mossyOuranwoodLog; + MOSSY_OURANWOOD_WOOD = mossyOuranwoodWood; + UMBRAL_MOSS_BLOCK = umbralMossBlock; + UMBRAL_MOSS_CARPET = umbralMossCarpet; + BLUSH_MOSS_BLOCK = blushMossBlock; + BLUSH_MOSS_CARPET = blushMossCarpet; + ORANGE_MILKWEED = orangeMilkweed; + PINK_MILKWEED = pinkMilkweed; + BED_BUG_EGG = bedBugEggs; + CREEPING_HORROR_EGGS = creepingHorrorEggs; + LURKING_TERROR_EGGS = lurkingTerrorEggs; + WASP_NEST = waspNest; + HUSHWEED = hushweed; + SQUIRREL_NEST_BLOCK = squirrelNestBlock; + BRUTALFLY_COCOON_SPAWNER = brutalflyCocoonSpawner; + GIANT_LILY_PAD = giantLilyPad; + SEASHELL = seashell; + ANT_NEST_BLOCK_ENTITY = antNestBlockEntity; + DREAM_CAMPFIRE_BLOCK_ENTITY = dreamCampfireBlockEntity; + WASP_NEST_BLOCK_ENTITY = waspNestBlockEntity; + HUSHWEED_BLOCK_ENTITY = hushweedBlockEntity; + SEASHELL_BLOCK_ENTITY = seashellBlockEntity; + STINKY_GAS = stinkyGas; + STINKY_FLY = stinkyFly; + PEACH_LEAVES_PARTICLE = peachLeaves; + SCALE = scale; + DOUBLE_DAMAGE_CHANCE = doubleDamageChance; + BLOODGLASS_MAX_HEARTS = bloodglassMaxHearts; + BLOODGLASS_WARD = bloodglassWard; + } + + public static boolean isDuplicatorTreeBlock(BlockState state) { + return state.is(DUPLICATOR_LOG.get()) || state.is(DUPLICATOR_SAPLING.get()); + } + + public static void setOctopusBomb(Supplier> supplier) { + OCTOPUS_BOMB = supplier; + } + + public static void setTentacle(Supplier> supplier) { + TENTACLE = supplier; + } + + public static void setNightmarePortal(Supplier> supplier) { + NIGHTMARE_PORTAL = supplier; + } + + public static void setDimensionalTear(Supplier> supplier) { + DIMENSIONAL_TEAR = supplier; + } + + public static void setNightmareBite(Supplier> supplier) { + NIGHTMARE_BITE = supplier; + } + + public static void setLotus(Supplier supplier) { + LOTUS = supplier; + } + + public static void setKrakensGraspTrident(Supplier> supplier) { + KRAKENS_GRASP_TRIDENT = supplier; + } + + public static void setKrakenTentacle(Supplier supplier) { + KRAKEN_TENTACLE = supplier; + } + + public static void setKrakensGrasp(Supplier supplier) { + KRAKENS_GRASP = supplier; + } + + public static void setHerculesBeetle(Supplier> supplier) { + HERCULES_BEETLE = supplier; + } + + public static void setOuranwoodDeer(Supplier> supplier) { + OURANWOOD_DEER = supplier; + } + + public static void setGlimmer(Supplier> supplier) { + GLIMMER = supplier; + } + + public static void setRollyPolly(Supplier> supplier) { + ROLLY_POLLY = supplier; + } + + public static void setLumen(Supplier supplier) { + LUMEN = supplier; + } + + public static void setFlowingLumen(Supplier supplier) { + FLOWING_LUMEN = supplier; + } + + public static void setLumenBucket(Supplier supplier) { + LUMEN_BUCKET = supplier; + } + + public static void setLumenBlock(Supplier supplier) { + LUMEN_BLOCK = supplier; + } + + public static void setLumenFroglight(Supplier supplier) { + LUMEN_FROGLIGHT = supplier; + } + + public static void setSpiritApple(Supplier supplier) { + SPIRIT_APPLE = supplier; + } + + public static void setGlimmeringEffect(Supplier supplier) { + GLIMMERING_EFFECT = supplier; + } + + public static void setElka(Supplier> supplier) { + ELKA = supplier; + } + + public static void setPeach(Supplier supplier) { + PEACH = supplier; + } + + public static void setCorn(Supplier supplier) { + CORN = supplier; + } + + public static void setCornSeeds(Supplier supplier) { + CORN_SEEDS = supplier; + } + + public static void setWildCorn(Supplier supplier) { + WILD_CORN = supplier; + } + + public static void setCritterCageBlock(Supplier supplier) { + CRITTER_CAGE_BLOCK = supplier; + } + + public static void setLucidAnchor(Supplier supplier) { + LUCID_ANCHOR = supplier; + } + + public static void setLucidAnchorBlockEntity(Supplier> supplier) { + LUCID_ANCHOR_BLOCK_ENTITY = supplier; + } + + public static void setStarCoralBlock(Supplier supplier) { + STAR_CORAL_BLOCK = supplier; + } + + public static void setStarCoral(Supplier supplier) { + STAR_CORAL = supplier; + } + + public static void setStarCoralFan(Supplier supplier) { + STAR_CORAL_FAN = supplier; + } + + public static void setRawVenison(Supplier supplier) { + RAW_VENISON = supplier; + } + + public static void setCookedVenison(Supplier supplier) { + COOKED_VENISON = supplier; + } + + public static void setCookedCorndog(Supplier supplier) { + COOKED_CORNDOG = supplier; + } + + public static void setGlimmerBottle(Supplier supplier) { + GLIMMER_BOTTLE = supplier; + } + + public static void setCritterCage(Supplier supplier) { + CRITTER_CAGE = supplier; + } + + public static void setLotusPollen(Supplier supplier) { + LOTUS_POLLEN = supplier; + } + + public static void setNightmareFireFlame(Supplier supplier) { + NIGHTMARE_FIRE_FLAME = supplier; + } + + public static void setLucidBoltImpactSmall(Supplier supplier) { + LUCID_BOLT_IMPACT_SMALL = supplier; + } + + public static void setLucidBoltImpactLarge(Supplier supplier) { + LUCID_BOLT_IMPACT_LARGE = supplier; + } + + public static void setPeachLeavesParticle(Supplier supplier) { + PEACH_LEAVES_PARTICLE = supplier; + } + + public static void setDorrieInventoryMenu(Supplier> supplier) { + DORRIE_INVENTORY_MENU = supplier; + } + + public static void setCritterCageBlockEntity(Supplier> supplier) { + CRITTER_CAGE_BLOCK_ENTITY = supplier; + } + + public static void setCritterCageProjectile(Supplier> supplier) { + CRITTER_CAGE_PROJECTILE = supplier; + } + + public static BlockBehaviour.Properties shellstoneProperties() { + return BlockBehaviour.Properties.copy(Blocks.STONE).requiresCorrectToolForDrops(); + } +} 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 new file mode 100644 index 00000000..bd197f36 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java @@ -0,0 +1,496 @@ +package com.craisinlord.antarchy.content; + +import java.util.function.Supplier; +import net.minecraft.sounds.SoundEvent; + +@SuppressWarnings("unchecked") +public final class AntarchySoundEvents { + private static final Supplier UNBOUND = () -> { + throw new IllegalStateException("Antarchy sound event supplier was accessed before registration finished"); + }; + + public static Supplier SQUIDZOOKA_FIRE = (Supplier) UNBOUND; + public static Supplier SHRINK_RAY_SOUND = (Supplier) UNBOUND; + public static Supplier GROWTH_RAY_SOUND = (Supplier) UNBOUND; + public static Supplier SIZE_RAY_CHARGE = (Supplier) UNBOUND; + public static Supplier ANT_AMBIENT = (Supplier) UNBOUND; + public static Supplier ANT_IDLE = (Supplier) UNBOUND; + public static Supplier ANT_HURT = (Supplier) UNBOUND; + 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 CATERPILLAR_IDLE = (Supplier) UNBOUND; + public static Supplier CATERPILLAR_HURT = (Supplier) UNBOUND; + public static Supplier CATERPILLAR_CRAWL = (Supplier) UNBOUND; + public static Supplier BUTTERFLY_HURT = (Supplier) UNBOUND; + public static Supplier BRUTALFLY_IDLE = (Supplier) UNBOUND; + public static Supplier BRUTALFLY_DEATH = (Supplier) UNBOUND; + public static Supplier ELYTHIA_FIREFLY_AMBIENT = (Supplier) UNBOUND; + public static Supplier MISSILE_SQUID_AMBIENT = (Supplier) UNBOUND; + public static Supplier MISSILE_SQUID_HURT = (Supplier) UNBOUND; + public static Supplier MISSILE_SQUID_DEATH = (Supplier) UNBOUND; + public static Supplier MISSILE_SQUID_ATTACK = (Supplier) UNBOUND; + public static Supplier KRAKEN_FLYING_LOOP = (Supplier) UNBOUND; + public static Supplier KRAKEN_FLYING_SIDEWAYS_LOOP = (Supplier) UNBOUND; + public static Supplier KRAKEN_ATTACK = (Supplier) UNBOUND; + public static Supplier KRAKEN_SPIN = (Supplier) UNBOUND; + public static Supplier KRAKEN_ROAR = (Supplier) UNBOUND; + public static Supplier KRAKEN_SUMMON = (Supplier) UNBOUND; + public static Supplier KRAKEN_HURT = (Supplier) UNBOUND; + public static Supplier KRAKEN_DEATH = (Supplier) UNBOUND; + public static Supplier BASILISK_IDLE_LOOP = (Supplier) UNBOUND; + public static Supplier BASILISK_SLITHER_LOOP = (Supplier) UNBOUND; + public static Supplier BASILISK_BITE = (Supplier) UNBOUND; + public static Supplier BASILISK_HISS = (Supplier) UNBOUND; + public static Supplier BASILISK_HURT = (Supplier) UNBOUND; + public static Supplier BASILISK_DEATH = (Supplier) UNBOUND; + public static Supplier THORAXIS_NIGHTMARE_WASTES_AMBIENT = (Supplier) UNBOUND; + public static Supplier THORAXIS_NIGHTMARE_WASTES_ADDITIONS = (Supplier) UNBOUND; + public static Supplier THORAXIS_NIGHTMARE_WASTES_MOOD = (Supplier) UNBOUND; + public static Supplier THORAXIS_DREAM_DUNES_AMBIENT = (Supplier) UNBOUND; + public static Supplier THORAXIS_DREAM_DUNES_ADDITIONS = (Supplier) UNBOUND; + public static Supplier THORAXIS_DREAM_DUNES_MOOD = (Supplier) UNBOUND; + public static Supplier THORAXIS_LUCID_POOLS_AMBIENT = (Supplier) UNBOUND; + public static Supplier THORAXIS_LUCID_POOLS_ADDITIONS = (Supplier) UNBOUND; + public static Supplier THORAXIS_LUCID_POOLS_MOOD = (Supplier) UNBOUND; + public static Supplier LUCID_AMBIENT = (Supplier) UNBOUND; + public static Supplier LUCID_FLYING = (Supplier) UNBOUND; + public static Supplier LUCID_ATTACK = (Supplier) UNBOUND; + public static Supplier LUCID_BOLT_SOUND = (Supplier) UNBOUND; + public static Supplier LUCID_HURT = (Supplier) UNBOUND; + public static Supplier LUCID_DEATH = (Supplier) UNBOUND; + public static Supplier REVERIE_IDLE = (Supplier) UNBOUND; + public static Supplier REVERIE_HURT = (Supplier) UNBOUND; + public static Supplier REVERIE_WORRY = (Supplier) UNBOUND; + public static Supplier REVERIE_SAVE = (Supplier) UNBOUND; + public static Supplier REVERIE_JOIN_PLAYER = (Supplier) UNBOUND; + public static Supplier REVERIE_ALERT = (Supplier) UNBOUND; + public static Supplier FLYING_SQUIRREL_IDLE = (Supplier) UNBOUND; + public static Supplier FLYING_SQUIRREL_BEG = (Supplier) UNBOUND; + public static Supplier FLYING_SQUIRREL_NUT = (Supplier) UNBOUND; + public static Supplier FLYING_SQUIRREL_GLIDE_LOOP = (Supplier) UNBOUND; + public static Supplier FLYING_SQUIRREL_HURT = (Supplier) UNBOUND; + public static Supplier FLYING_SQUIRREL_DEATH = (Supplier) UNBOUND; + public static Supplier NIGHTMARE_IDLE = (Supplier) UNBOUND; + public static Supplier NIGHTMARE_HURT = (Supplier) UNBOUND; + public static Supplier NIGHTMARE_ROAR = (Supplier) UNBOUND; + 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 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 GRAVITY_GUN_PICKUP = (Supplier) UNBOUND; + public static Supplier GRAVITY_GUN_DROP = (Supplier) UNBOUND; + public static Supplier GRAVITY_GUN_HOLD_LOOP = (Supplier) UNBOUND; + public static Supplier GRAVITY_GUN_LAUNCH = (Supplier) UNBOUND; + public static Supplier GRAVITY_GUN_DRYFIRE = (Supplier) UNBOUND; + public static Supplier BED_BUG_AMBIENT = (Supplier) UNBOUND; + public static Supplier BED_BUG_HURT = (Supplier) UNBOUND; + public static Supplier BED_BUG_ATTACK = (Supplier) UNBOUND; + public static Supplier WASP_IDLE = (Supplier) UNBOUND; + public static Supplier WASP_HURT = (Supplier) UNBOUND; + public static Supplier WASP_ATTACK = (Supplier) UNBOUND; + public static Supplier WASP_DEATH = (Supplier) UNBOUND; + public static Supplier SCORPION_AMBIENT = (Supplier) UNBOUND; + public static Supplier SCORPION_HURT = (Supplier) UNBOUND; + public static Supplier SCORPION_ATTACK = (Supplier) UNBOUND; + public static Supplier EMPEROR_SCORPION_AMBIENT = (Supplier) UNBOUND; + public static Supplier EMPEROR_SCORPION_HURT = (Supplier) UNBOUND; + public static Supplier EMPEROR_SCORPION_ATTACK = (Supplier) UNBOUND; + public static Supplier EMPEROR_SCORPION_ROAR = (Supplier) UNBOUND; + public static Supplier MOLEWORM_AMBIENT = (Supplier) UNBOUND; + public static Supplier MOLEWORM_HURT = (Supplier) UNBOUND; + public static Supplier MOLEWORM_ATTACK = (Supplier) UNBOUND; + public static Supplier MOLEWORM_DIG = (Supplier) UNBOUND; + public static Supplier MOLEVORE_AMBIENT = (Supplier) UNBOUND; + public static Supplier MOLEVORE_HURT = (Supplier) UNBOUND; + public static Supplier MOLEVORE_ATTACK = (Supplier) UNBOUND; + public static Supplier MOLEVORE_DIG = (Supplier) UNBOUND; + public static Supplier BOMBER_WALK = (Supplier) UNBOUND; + public static Supplier BOMBER_KNOCK = (Supplier) UNBOUND; + public static Supplier BOMBER_EXPLODE = (Supplier) UNBOUND; + public static Supplier TORETERROR_IDLE = (Supplier) UNBOUND; + public static Supplier TORETERROR_HURT = (Supplier) UNBOUND; + public static Supplier TORETERROR_DEATH = (Supplier) UNBOUND; + public static Supplier TORETERROR_BOMBER_FIRE = (Supplier) UNBOUND; + public static Supplier TORETERROR_SPIN = (Supplier) UNBOUND; + public static Supplier TORETERROR_RICOCHET = (Supplier) UNBOUND; + public static Supplier WATER_CANNON_FIRE = (Supplier) UNBOUND; + public static Supplier TORETERROR_JUMP_UP = (Supplier) UNBOUND; + public static Supplier TORETERROR_JUMP_LAND = (Supplier) UNBOUND; + public static Supplier STINKY_FLY = (Supplier) UNBOUND; + public static Supplier STINK_BUG_FART = (Supplier) UNBOUND; + 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 DUCT_TAPE_USE = (Supplier) UNBOUND; + public static Supplier HERCULES_BEETLE_IDLE = (Supplier) UNBOUND; + public static Supplier HERCULES_BEETLE_HURT = (Supplier) UNBOUND; + public static Supplier HERCULES_BEETLE_ATTACK = (Supplier) UNBOUND; + 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 SPIT_BUG_IDLE = (Supplier) UNBOUND; + public static Supplier JUMPY_BUG_HURT = (Supplier) UNBOUND; + public static Supplier JUMPY_BUG_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; + public static Supplier ROLLY_POLLY_WHEEL_MODE = (Supplier) UNBOUND; + public static Supplier ROLLY_POLLY_NORMAL_MODE = (Supplier) UNBOUND; + public static Supplier ROLLY_POLLY_ROLL = (Supplier) UNBOUND; + public static Supplier JERRY_YOUNG_IDLE = (Supplier) UNBOUND; + public static Supplier JERRY_YOUNG_HURT = (Supplier) UNBOUND; + public static Supplier JERRY_YOUNG_DEATH = (Supplier) UNBOUND; + public static Supplier JERRY_YOUNG_ATTACK = (Supplier) UNBOUND; + public static Supplier JERRY_ADULT_IDLE = (Supplier) UNBOUND; + public static Supplier JERRY_ADULT_HURT = (Supplier) UNBOUND; + public static Supplier JERRY_ADULT_DEATH = (Supplier) UNBOUND; + public static Supplier JERRY_ADULT_ATTACK = (Supplier) UNBOUND; + + private AntarchySoundEvents() { + } + + public static void bind( + Supplier squidzookaFire, + Supplier shrinkRaySound, + Supplier growthRaySound, + Supplier sizeRayCharge, + Supplier antAmbient, + Supplier antIdle, + Supplier antHurt, + Supplier antBite, + Supplier antGather, + Supplier antNest, + Supplier cloudSharkBite, + Supplier cloudSharkIdle, + Supplier cloudSharkHurt, + Supplier cloudSharkDeath, + Supplier cloudSharkFly, + Supplier caterpillarIdle, + Supplier caterpillarHurt, + Supplier caterpillarCrawl, + Supplier butterflyHurt, + Supplier brutalflyIdle, + Supplier brutalflyDeath, + Supplier elythiaFireflyAmbient, + Supplier missileSquidAmbient, + Supplier missileSquidHurt, + Supplier missileSquidDeath, + Supplier missileSquidAttack, + Supplier krakenFlyingLoop, + Supplier krakenFlyingSidewaysLoop, + Supplier krakenAttack, + Supplier krakenSpin, + Supplier krakenRoar, + Supplier krakenSummon, + Supplier krakenHurt, + Supplier krakenDeath, + Supplier basiliskIdleLoop, + Supplier basiliskSlitherLoop, + Supplier basiliskBite, + Supplier basiliskHiss, + Supplier basiliskHurt, + Supplier basiliskDeath, + Supplier thoraxisNightmareWastesAmbient, + Supplier thoraxisNightmareWastesAdditions, + Supplier thoraxisNightmareWastesMood, + Supplier thoraxisDreamDunesAmbient, + Supplier thoraxisDreamDunesAdditions, + Supplier thoraxisDreamDunesMood, + Supplier thoraxisLucidPoolsAmbient, + Supplier thoraxisLucidPoolsAdditions, + Supplier thoraxisLucidPoolsMood, + Supplier lucidAmbient, + Supplier lucidFlying, + Supplier lucidAttack, + Supplier lucidBoltSound, + Supplier lucidHurt, + Supplier lucidDeath, + Supplier reverieIdle, + Supplier reverieHurt, + Supplier reverieWorry, + Supplier reverieSave, + Supplier reverieJoinPlayer, + Supplier reverieAlert, + Supplier flyingSquirrelIdle, + Supplier flyingSquirrelBeg, + Supplier flyingSquirrelNut, + Supplier flyingSquirrelGlideLoop, + Supplier flyingSquirrelHurt, + Supplier flyingSquirrelDeath, + Supplier nightmareIdle, + Supplier nightmareHurt, + Supplier nightmareRoar, + Supplier nightmareDeath, + Supplier nightmareBite, + Supplier nightmareFlap, + Supplier triffidAttack, + Supplier triffidGrab, + Supplier triffidHurt, + Supplier triffidDeath, + Supplier triffidHiss, + Supplier triffidGrowl, + Supplier mantisAmbient, + Supplier mantisHurt, + Supplier mantisAttack, + Supplier mantisFlyLoop, + Supplier gravityGunPickup, + Supplier gravityGunDrop, + Supplier gravityGunHoldLoop, + Supplier gravityGunLaunch, + Supplier gravityGunDryfire, + Supplier bedBugAmbient, + Supplier bedBugHurt, + Supplier bedBugAttack, + Supplier waspIdle, + Supplier waspHurt, + Supplier waspAttack, + Supplier waspDeath, + Supplier scorpionAmbient, + Supplier scorpionHurt, + Supplier scorpionAttack, + Supplier emperorScorpionAmbient, + Supplier emperorScorpionHurt, + Supplier emperorScorpionAttack, + Supplier emperorScorpionRoar, + Supplier molewormAmbient, + Supplier molewormHurt, + Supplier molewormAttack, + Supplier molewormDig, + Supplier molevoreAmbient, + Supplier molevoreHurt, + Supplier molevoreAttack, + Supplier molevoreDig, + Supplier bomberWalk, + Supplier bomberKnock, + Supplier bomberExplode, + Supplier toreterrorIdle, + Supplier toreterrorHurt, + Supplier toreterrorDeath, + Supplier toreterrorBomberFire, + Supplier toreterrorSpin, + Supplier toreterrorRicochet, + Supplier waterCannonFire, + Supplier toreterrorJumpUp, + Supplier toreterrorJumpLand, + Supplier stinkyFly, + Supplier stinkBugFart, + Supplier stinkBugIdle, + Supplier cavarynHeartbeat, + Supplier rollyPollyIdle, + Supplier creepingHorrorGrowl, + Supplier creepingHorrorHurt, + Supplier creepingHorrorBite, + Supplier lurkingTerrorSnarl, + Supplier lurkingTerrorHurt, + Supplier lurkingTerrorBite, + Supplier lurkingTerrorFlyLoop, + Supplier ductTapeUse, + Supplier herculesBeetleIdle, + Supplier herculesBeetleHurt, + Supplier herculesBeetleAttack, + Supplier herculesBeetleCry, + Supplier herculesBeetleChargeStart, + Supplier herculesBeetleKnockedDown, + Supplier jumpyBugIdle, + Supplier spitBugIdle, + Supplier jumpyBugHurt, + Supplier jumpyBugJump, + Supplier spitBugHurt, + Supplier spitBugSpit, + Supplier brutalflySpit, + Supplier rollyPollyWheelMode, + Supplier rollyPollyNormalMode, + Supplier rollyPollyRoll, + Supplier jerryYoungIdle, + Supplier jerryYoungHurt, + Supplier jerryYoungDeath, + Supplier jerryYoungAttack, + Supplier jerryAdultIdle, + Supplier jerryAdultHurt, + Supplier jerryAdultDeath, + Supplier jerryAdultAttack + ) { + SQUIDZOOKA_FIRE = squidzookaFire; + SHRINK_RAY_SOUND = shrinkRaySound; + GROWTH_RAY_SOUND = growthRaySound; + SIZE_RAY_CHARGE = sizeRayCharge; + ANT_AMBIENT = antAmbient; + ANT_IDLE = antIdle; + ANT_HURT = antHurt; + 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; + CATERPILLAR_IDLE = caterpillarIdle; + CATERPILLAR_HURT = caterpillarHurt; + CATERPILLAR_CRAWL = caterpillarCrawl; + BUTTERFLY_HURT = butterflyHurt; + BRUTALFLY_IDLE = brutalflyIdle; + BRUTALFLY_DEATH = brutalflyDeath; + ELYTHIA_FIREFLY_AMBIENT = elythiaFireflyAmbient; + MISSILE_SQUID_AMBIENT = missileSquidAmbient; + MISSILE_SQUID_HURT = missileSquidHurt; + MISSILE_SQUID_DEATH = missileSquidDeath; + MISSILE_SQUID_ATTACK = missileSquidAttack; + KRAKEN_FLYING_LOOP = krakenFlyingLoop; + KRAKEN_FLYING_SIDEWAYS_LOOP = krakenFlyingSidewaysLoop; + KRAKEN_ATTACK = krakenAttack; + KRAKEN_SPIN = krakenSpin; + KRAKEN_ROAR = krakenRoar; + KRAKEN_SUMMON = krakenSummon; + KRAKEN_HURT = krakenHurt; + KRAKEN_DEATH = krakenDeath; + BASILISK_IDLE_LOOP = basiliskIdleLoop; + BASILISK_SLITHER_LOOP = basiliskSlitherLoop; + BASILISK_BITE = basiliskBite; + BASILISK_HISS = basiliskHiss; + BASILISK_HURT = basiliskHurt; + BASILISK_DEATH = basiliskDeath; + THORAXIS_NIGHTMARE_WASTES_AMBIENT = thoraxisNightmareWastesAmbient; + THORAXIS_NIGHTMARE_WASTES_ADDITIONS = thoraxisNightmareWastesAdditions; + THORAXIS_NIGHTMARE_WASTES_MOOD = thoraxisNightmareWastesMood; + THORAXIS_DREAM_DUNES_AMBIENT = thoraxisDreamDunesAmbient; + THORAXIS_DREAM_DUNES_ADDITIONS = thoraxisDreamDunesAdditions; + THORAXIS_DREAM_DUNES_MOOD = thoraxisDreamDunesMood; + THORAXIS_LUCID_POOLS_AMBIENT = thoraxisLucidPoolsAmbient; + THORAXIS_LUCID_POOLS_ADDITIONS = thoraxisLucidPoolsAdditions; + THORAXIS_LUCID_POOLS_MOOD = thoraxisLucidPoolsMood; + LUCID_AMBIENT = lucidAmbient; + LUCID_FLYING = lucidFlying; + LUCID_ATTACK = lucidAttack; + LUCID_BOLT_SOUND = lucidBoltSound; + LUCID_HURT = lucidHurt; + LUCID_DEATH = lucidDeath; + REVERIE_IDLE = reverieIdle; + REVERIE_HURT = reverieHurt; + REVERIE_WORRY = reverieWorry; + REVERIE_SAVE = reverieSave; + REVERIE_JOIN_PLAYER = reverieJoinPlayer; + REVERIE_ALERT = reverieAlert; + FLYING_SQUIRREL_IDLE = flyingSquirrelIdle; + FLYING_SQUIRREL_BEG = flyingSquirrelBeg; + FLYING_SQUIRREL_NUT = flyingSquirrelNut; + FLYING_SQUIRREL_GLIDE_LOOP = flyingSquirrelGlideLoop; + FLYING_SQUIRREL_HURT = flyingSquirrelHurt; + FLYING_SQUIRREL_DEATH = flyingSquirrelDeath; + NIGHTMARE_IDLE = nightmareIdle; + NIGHTMARE_HURT = nightmareHurt; + NIGHTMARE_ROAR = nightmareRoar; + 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; + MANTIS_AMBIENT = mantisAmbient; + MANTIS_HURT = mantisHurt; + MANTIS_ATTACK = mantisAttack; + MANTIS_FLY_LOOP = mantisFlyLoop; + GRAVITY_GUN_PICKUP = gravityGunPickup; + GRAVITY_GUN_DROP = gravityGunDrop; + GRAVITY_GUN_HOLD_LOOP = gravityGunHoldLoop; + GRAVITY_GUN_LAUNCH = gravityGunLaunch; + GRAVITY_GUN_DRYFIRE = gravityGunDryfire; + BED_BUG_AMBIENT = bedBugAmbient; + BED_BUG_HURT = bedBugHurt; + BED_BUG_ATTACK = bedBugAttack; + WASP_IDLE = waspIdle; + WASP_HURT = waspHurt; + WASP_ATTACK = waspAttack; + WASP_DEATH = waspDeath; + SCORPION_AMBIENT = scorpionAmbient; + SCORPION_HURT = scorpionHurt; + SCORPION_ATTACK = scorpionAttack; + EMPEROR_SCORPION_AMBIENT = emperorScorpionAmbient; + EMPEROR_SCORPION_HURT = emperorScorpionHurt; + EMPEROR_SCORPION_ATTACK = emperorScorpionAttack; + EMPEROR_SCORPION_ROAR = emperorScorpionRoar; + MOLEWORM_AMBIENT = molewormAmbient; + MOLEWORM_HURT = molewormHurt; + MOLEWORM_ATTACK = molewormAttack; + MOLEWORM_DIG = molewormDig; + MOLEVORE_AMBIENT = molevoreAmbient; + MOLEVORE_HURT = molevoreHurt; + MOLEVORE_ATTACK = molevoreAttack; + MOLEVORE_DIG = molevoreDig; + BOMBER_WALK = bomberWalk; + BOMBER_KNOCK = bomberKnock; + BOMBER_EXPLODE = bomberExplode; + TORETERROR_IDLE = toreterrorIdle; + TORETERROR_HURT = toreterrorHurt; + TORETERROR_DEATH = toreterrorDeath; + TORETERROR_BOMBER_FIRE = toreterrorBomberFire; + TORETERROR_SPIN = toreterrorSpin; + TORETERROR_RICOCHET = toreterrorRicochet; + WATER_CANNON_FIRE = waterCannonFire; + TORETERROR_JUMP_UP = toreterrorJumpUp; + TORETERROR_JUMP_LAND = toreterrorJumpLand; + STINKY_FLY = stinkyFly; + STINK_BUG_FART = stinkBugFart; + 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; + DUCT_TAPE_USE = ductTapeUse; + HERCULES_BEETLE_IDLE = herculesBeetleIdle; + HERCULES_BEETLE_HURT = herculesBeetleHurt; + HERCULES_BEETLE_ATTACK = herculesBeetleAttack; + HERCULES_BEETLE_CRY = herculesBeetleCry; + HERCULES_BEETLE_CHARGE_START = herculesBeetleChargeStart; + HERCULES_BEETLE_KNOCKED_DOWN = herculesBeetleKnockedDown; + JUMPY_BUG_IDLE = jumpyBugIdle; + SPIT_BUG_IDLE = spitBugIdle; + JUMPY_BUG_HURT = jumpyBugHurt; + JUMPY_BUG_JUMP = jumpyBugJump; + SPIT_BUG_HURT = spitBugHurt; + SPIT_BUG_SPIT = spitBugSpit; + BRUTALFLY_SPIT = brutalflySpit; + ROLLY_POLLY_WHEEL_MODE = rollyPollyWheelMode; + ROLLY_POLLY_NORMAL_MODE = rollyPollyNormalMode; + ROLLY_POLLY_ROLL = rollyPollyRoll; + JERRY_YOUNG_IDLE = jerryYoungIdle; + JERRY_YOUNG_HURT = jerryYoungHurt; + JERRY_YOUNG_DEATH = jerryYoungDeath; + JERRY_YOUNG_ATTACK = jerryYoungAttack; + JERRY_ADULT_IDLE = jerryAdultIdle; + JERRY_ADULT_HURT = jerryAdultHurt; + JERRY_ADULT_DEATH = jerryAdultDeath; + JERRY_ADULT_ATTACK = jerryAdultAttack; + } +} 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 new file mode 100644 index 00000000..d6cef575 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -0,0 +1,146 @@ +package com.craisinlord.antarchy.content; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.material.Fluid; + +public final class AntarchyTags { + private AntarchyTags() { + } + + private static ResourceLocation id(String path) { + return new ResourceLocation(Antarchy.MODID, path); + } + + 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 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")); + public static final TagKey MOLEVORE_BREAKABLE_BLOCKS = TagKey.create(Registries.BLOCK, id("molevore_breakable_blocks")); + public static final TagKey NIGHTMARE_BREAKABLE = TagKey.create(Registries.BLOCK, id("nightmare_breakable")); + public static final TagKey MOLEVORE_SEE_THROUGH_BLOCKS = TagKey.create(Registries.BLOCK, id("molevore_see_through_blocks")); + public static final TagKey TERMITE_FOODS = TagKey.create(Registries.BLOCK, id("termite_foods")); + public static final TagKey UMBRAL_MOSS_REPLACEABLE = TagKey.create(Registries.BLOCK, id("umbral_moss_replaceable")); + public static final TagKey BLUSH_MOSS_REPLACEABLE = TagKey.create(Registries.BLOCK, id("blush_moss_replaceable")); + public static final TagKey BIOWART_REPLACEABLE = TagKey.create(Registries.BLOCK, id("biowart_replaceable")); + public static final TagKey BIOWART_TENDRILS_PLANTABLE = TagKey.create(Registries.BLOCK, id("biowart_tendrils_plantable")); + public static final TagKey HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS = TagKey.create(Registries.BLOCK, id("hercules_beetle_charge_immune_blocks")); + public static final TagKey ELYTHIA_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("elythia_portal_frames")); + public static final TagKey THORAXIS_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("thoraxis_portal_frames")); + public static final TagKey CAVARYN_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("cavaryn_portal_frames")); + public static final TagKey RAINBOW_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("rainbow_portal_frames")); + public static final TagKey ROLLY_CAVERN_CARVEABLE = TagKey.create(Registries.BLOCK, id("rolly_cavern_carveable")); + public static final TagKey MINERS_DREAM_CARVABLE = TagKey.create(Registries.BLOCK, id("miners_dream_carvable")); + 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")); + + private Blocks() { + } + } + + 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")); + + private DamageType() { + } + } + + public static final class Entities { + public static final TagKey> BASILISK_PREY = TagKey.create(Registries.ENTITY_TYPE, id("basilisk_prey")); + 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> 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> 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> 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> 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")); + + private Entities() { + } + } + + public static final class SoundEvents { + + public static final TagKey DREAD_HALLUCINATION_SOUNDS = TagKey.create(Registries.SOUND_EVENT, id("dread_hallucination_sounds")); + + private SoundEvents() { + } + } + + public static final class Items { + public static final TagKey EASTER_BUNNY_SPAWN_EGG_BLACKLIST = TagKey.create(Registries.ITEM, id("easter_bunny_spawn_egg_blacklist")); + public static final TagKey DUCT_TAPE_BLACKLIST = TagKey.create(Registries.ITEM, id("duct_tape_blacklist")); + public static final TagKey BROWN_ANT_ACTIVATION_ITEMS = TagKey.create(Registries.ITEM, id("brown_ant_activation_items")); + public static final TagKey BROWN_ANT_BREEDING_FOODS = TagKey.create(Registries.ITEM, id("brown_ant_breeding_foods")); + public static final TagKey MULTISHOT_ENCHANTABLE = TagKey.create(Registries.ITEM, id("multishot_enchantable")); + public static final TagKey RED_ANT_ACTIVATION_ITEMS = TagKey.create(Registries.ITEM, id("red_ant_activation_items")); + public static final TagKey RED_ANT_BREEDING_FOODS = TagKey.create(Registries.ITEM, id("red_ant_breeding_foods")); + public static final TagKey RAINBOW_ANT_ACTIVATION_ITEMS = TagKey.create(Registries.ITEM, id("rainbow_ant_activation_items")); + public static final TagKey RAINBOW_ANT_BREEDING_FOODS = TagKey.create(Registries.ITEM, id("rainbow_ant_breeding_foods")); + public static final TagKey TERMITE_ACTIVATION_ITEMS = TagKey.create(Registries.ITEM, id("termite_activation_items")); + public static final TagKey TERMITE_FOODS = TagKey.create(Registries.ITEM, id("termite_foods")); + public static final TagKey TERMITE_BREEDING_FOODS = TagKey.create(Registries.ITEM, id("termite_breeding_foods")); + public static final TagKey FLYING_SQUIRREL_NUTS = TagKey.create(Registries.ITEM, id("flying_squirrel_nuts")); + public static final TagKey CATERPILLAR_FOODS = TagKey.create(Registries.ITEM, id("caterpillar_foods")); + public static final TagKey BUTTERFLY_BREEDING_FOODS = TagKey.create(Registries.ITEM, id("butterfly_breeding_foods")); + public static final TagKey REVERIE_DUPLICATION_ITEMS = TagKey.create(Registries.ITEM, id("reverie_duplication_items")); + public static final TagKey HERCULES_BEETLE_FOOD = TagKey.create(Registries.ITEM, id("hercules_beetle_food")); + public static final TagKey ROLLY_POLLY_FOOD = TagKey.create(Registries.ITEM, id("rolly_polly_food")); + public static final TagKey OURANWOOD_DEER_FOOD = TagKey.create(Registries.ITEM, id("ouranwood_deer_food")); + public static final TagKey GLIMMER_AUGMENT_APPLE_COW = TagKey.create(Registries.ITEM, id("glimmer_augment_apple_cow")); + public static final TagKey GLIMMER_AUGMENT_OURANWOOD_DEER = TagKey.create(Registries.ITEM, id("glimmer_augment_ouranwood_deer")); + public static final TagKey GLIMMER_AUGMENT_FROG = TagKey.create(Registries.ITEM, id("glimmer_augment_frog")); + public static final TagKey GLIMMER_AUGMENT_ANT = TagKey.create(Registries.ITEM, id("glimmer_augment_ant")); + 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")); + + private Items() { + } + } + + public static final class Fluids { + public static final TagKey LUMEN = TagKey.create(Registries.FLUID, id("lumen")); + public static final TagKey GIANT_LILY_PAD_SUPPORTING_FLUIDS = TagKey.create(Registries.FLUID, id("giant_lily_pad_supporting_fluids")); + public static final TagKey ANTIWATER = TagKey.create(Registries.FLUID, id("antiwater")); + + private Fluids() { + } + } + + public static final class Biomes { + public static final TagKey MANTIS_SPAWN_BIOMES = TagKey.create(Registries.BIOME, id("mantis_spawn_biomes")); + public static final TagKey MANTIS_OVERWORLD_SPAWN_BIOMES = TagKey.create(Registries.BIOME, id("mantis_overworld_spawn_biomes")); + public static final TagKey ELYTHIA_FIREFLY_PARTICLE_BIOMES = TagKey.create(Registries.BIOME, id("elythia_firefly_particle_biomes")); + public static final TagKey WILD_CORN_SPAWN_BIOMES = TagKey.create(Registries.BIOME, id("wild_corn_spawn_biomes")); + public static final TagKey USES_HORDE_SYSTEM = TagKey.create(Registries.BIOME, id("uses_horde_system")); + + private Biomes() { + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/advancement/AntarchyAdvancements.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/advancement/AntarchyAdvancements.java new file mode 100644 index 00000000..893d4fb3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/advancement/AntarchyAdvancements.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.advancement; + +import net.minecraft.advancements.Advancement; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import org.jetbrains.annotations.Nullable; + +public final class AntarchyAdvancements { + private AntarchyAdvancements() { + } + + public static boolean award(ServerPlayer player, ResourceLocation advancementId) { + MinecraftServer server = player.serverLevel().getServer(); + if (server == null) { + return false; + } + + Advancement advancement = server.getAdvancements().getAdvancement(advancementId); + if (advancement == null) { + return false; + } + + return player.getAdvancements().award(advancement, "impossible"); + } + + @Nullable + public static Advancement get(MinecraftServer server, ResourceLocation advancementId) { + return server.getAdvancements().getAdvancement(advancementId); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AbstractAntimetalRailBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AbstractAntimetalRailBlock.java new file mode 100644 index 00000000..40f20da7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AbstractAntimetalRailBlock.java @@ -0,0 +1,87 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.minecart.AntimetalRailHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.BaseRailBlock; +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.level.block.state.properties.RailShape; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public abstract class AbstractAntimetalRailBlock extends BaseRailBlock { + protected static final VoxelShape CEILING_FLAT_SHAPE = Block.box(0.0D, 14.0D, 0.0D, 16.0D, 16.0D, 16.0D); + protected static final VoxelShape CEILING_SLOPE_SHAPE = Block.box(0.0D, 6.0D, 0.0D, 16.0D, 16.0D, 16.0D); + + protected AbstractAntimetalRailBlock(boolean isStraight, BlockBehaviour.Properties properties) { + super(isStraight, properties); + } + + public static boolean isAntimetalRail(BlockState state) { + return state.getBlock() instanceof AbstractAntimetalRailBlock; + } + + public static boolean hasCeilingSupport(LevelReader level, BlockPos pos) { + return Block.canSupportCenter(level, pos.above(), Direction.DOWN); + } + + @Override + public VoxelShape getShape(BlockState state, net.minecraft.world.level.BlockGetter level, BlockPos pos, CollisionContext context) { + RailShape shape = state.getValue(getShapeProperty()); + return shape.isAscending() ? CEILING_SLOPE_SHAPE : CEILING_FLAT_SHAPE; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return hasCeilingSupport(level, pos); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + if (context.getClickedFace() != Direction.DOWN && context.getClickedFace() != Direction.UP && !context.replacingClickedOnBlock()) { + return null; + } + if (!hasCeilingSupport(context.getLevel(), context.getClickedPos())) { + return null; + } + return AntimetalRailHelper.getStateForPlacement(this, context); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } + if (direction != Direction.DOWN && direction != Direction.UP) { + AntimetalRailHelper.updateConnections(this, state, level, pos); + } + return state; + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + if (!oldState.is(state.getBlock())) { + AntimetalRailHelper.updateConnections(this, state, level, pos); + } + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + if (level.isClientSide()) { + return; + } + if (!state.canSurvive(level, pos)) { + dropResources(state, level, pos); + level.removeBlock(pos, movedByPiston); + return; + } + AntimetalRailHelper.updateConnections(this, state, level, pos); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AbstractCeilingBluestoneBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AbstractCeilingBluestoneBlock.java new file mode 100644 index 00000000..1e1003eb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AbstractCeilingBluestoneBlock.java @@ -0,0 +1,34 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public abstract class AbstractCeilingBluestoneBlock extends Block { + protected AbstractCeilingBluestoneBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return BluestonePlacementHelper.hasCeilingSupport(level, pos); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return BluestonePlacementHelper.canPlaceOnCeiling(context) ? this.defaultBlockState() : null; + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (direction == Direction.UP && !state.canSurvive(level, pos)) { + return net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AbstractCeilingDiodeBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AbstractCeilingDiodeBlock.java new file mode 100644 index 00000000..98c40edb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AbstractCeilingDiodeBlock.java @@ -0,0 +1,34 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.DiodeBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public abstract class AbstractCeilingDiodeBlock extends DiodeBlock { + protected AbstractCeilingDiodeBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return BluestonePlacementHelper.hasCeilingSupport(level, pos); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return BluestonePlacementHelper.canPlaceOnCeiling(context) ? super.getStateForPlacement(context) : null; + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (direction == Direction.UP && !state.canSurvive(level, pos)) { + return net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AmberLichenBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AmberLichenBlock.java new file mode 100644 index 00000000..b5f85ef2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AmberLichenBlock.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; + +public class AmberLichenBlock extends GlowLichenBlock { + + public AmberLichenBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public boolean canPlaceLiquid(BlockGetter level, BlockPos pos, BlockState state, Fluid fluid) { + return fluid == Fluids.WATER || AntarchyFluidChecks.isBile(fluid.defaultFluidState()); + } + + @Override + public boolean placeLiquid(LevelAccessor level, BlockPos pos, BlockState state, FluidState fluidState) { + if (AntarchyFluidChecks.isBile(fluidState)) { + level.setBlock(pos, fluidState.createLegacyBlock(), 3); + return true; + } + return super.placeLiquid(level, pos, state, fluidState); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java new file mode 100644 index 00000000..81117729 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java @@ -0,0 +1,47 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.MapCodec; +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.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public class AmberMossBlock extends Block implements BonemealableBlock { + private static final ResourceKey> AMBER_MOSS_PATCH_BONEMEAL = ResourceKey.create( + Registries.CONFIGURED_FEATURE, + new ResourceLocation(Antarchy.MODID, "amber_moss_patch_bonemeal") + ); + + public AmberMossBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return level.getBlockState(pos.above()).isAir(); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(AMBER_MOSS_PATCH_BONEMEAL); + feature.value().place(level, level.getChunkSource().getGenerator(), random, pos); + } +} 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 new file mode 100644 index 00000000..68836ac1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntDimensionPortalBlock.java @@ -0,0 +1,164 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.portal.PermanentPortalManager; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import com.craisinlord.antarchy.content.portal.PermanentPortalTeleporter; +import com.mojang.serialization.MapCodec; +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.ParticleOptions; +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.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +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.EnumProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public final class AntDimensionPortalBlock extends Block { + public static final EnumProperty AXIS = BlockStateProperties.HORIZONTAL_AXIS; + private static final VoxelShape X_SHAPE = Block.box(0.0D, 0.0D, 6.0D, 16.0D, 16.0D, 10.0D); + private static final VoxelShape Z_SHAPE = Block.box(6.0D, 0.0D, 0.0D, 10.0D, 16.0D, 16.0D); + private static final int PORTAL_TRANSITION_TICKS = 20; + private static final Map PORTAL_ENTRY_TICKS = new HashMap<>(); + + private final PermanentPortalType type; + + public AntDimensionPortalBlock(PermanentPortalType type, BlockBehaviour.Properties properties) { + super(properties); + this.type = type; + this.registerDefaultState(this.stateDefinition.any().setValue(AXIS, Direction.Axis.X)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(AXIS); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(AXIS) == Direction.Axis.X ? X_SHAPE : Z_SHAPE; + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.empty(); + } + + @Override + public VoxelShape getVisualShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.empty(); + } + + @Override + public VoxelShape getBlockSupportShape(BlockState state, BlockGetter level, BlockPos pos) { + return Shapes.empty(); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public boolean skipRendering(BlockState state, BlockState adjacentBlockState, Direction side) { + return adjacentBlockState.is(this) || super.skipRendering(state, adjacentBlockState, side); + } + + @Override + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + if (level.isClientSide() || !entity.isAlive() || !entity.canChangeDimensions() || entity.isOnPortalCooldown()) { + return; + } + if (!(level instanceof ServerLevel serverLevel)) { + return; + } + + int ticks = PORTAL_ENTRY_TICKS.merge(entity.getUUID(), 1, Integer::sum); + if (ticks < PORTAL_TRANSITION_TICKS) { + return; + } + + PORTAL_ENTRY_TICKS.remove(entity.getUUID()); + PermanentPortalTeleporter.teleport(entity, this.type); + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + if (!level.isClientSide() && !state.is(oldState.getBlock())) { + level.scheduleTick(pos, this, 1); + } + } + + @Override + public BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + if (level instanceof ServerLevel serverLevel) { + serverLevel.scheduleTick(pos, this, 1); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!PermanentPortalManager.isPortalStillValid(level, pos, this.type, state.getValue(AXIS))) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), Block.UPDATE_ALL); + } + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + if (random.nextInt(100) == 0) { + level.playLocalSound(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, SoundEvents.PORTAL_AMBIENT, SoundSource.BLOCKS, 0.35F, 0.9F + random.nextFloat() * 0.2F, false); + } + + ParticleOptions particle = switch (this.type) { + case ELYTHIA -> ParticleTypes.SPORE_BLOSSOM_AIR; + case THORAXIS -> ParticleTypes.PORTAL; + case CAVARYN -> ParticleTypes.MYCELIUM; + }; + + for (int i = 0; i < 4; i++) { + double x = pos.getX() + random.nextDouble(); + double y = pos.getY() + random.nextDouble(); + double z = pos.getZ() + random.nextDouble(); + if (state.getValue(AXIS) == Direction.Axis.X) { + z = pos.getZ() + 0.5D + (random.nextDouble() - 0.5D) * 0.25D; + } else { + x = pos.getX() + 0.5D + (random.nextDouble() - 0.5D) * 0.25D; + } + level.addParticle( + particle, + x, + y, + z, + (random.nextDouble() - 0.5D) * 0.2D, + (random.nextDouble() - 0.5D) * 0.2D, + (random.nextDouble() - 0.5D) * 0.2D + ); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntNestBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntNestBlock.java new file mode 100644 index 00000000..040caf3f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntNestBlock.java @@ -0,0 +1,183 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.mojang.serialization.MapCodec; +import java.util.List; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.Registries; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +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.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +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.DirectionProperty; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.item.context.BlockPlaceContext; + +public class AntNestBlock extends BaseEntityBlock { + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + private final Supplier>> antTypesSupplier; + private final Supplier> blockEntityTypeSupplier; + private final int maxOccupants; + private final boolean populateInitialAnts; + private final boolean damageSteppers; + + public AntNestBlock( + Supplier> antTypeSupplier, + Supplier> blockEntityTypeSupplier, + BlockBehaviour.Properties properties + ) { + this(() -> List.of(antTypeSupplier.get()), blockEntityTypeSupplier, 7, true, false, properties); + } + + public AntNestBlock( + Supplier> antTypeSupplier, + Supplier> blockEntityTypeSupplier, + boolean damageSteppers, + BlockBehaviour.Properties properties + ) { + this(() -> List.of(antTypeSupplier.get()), blockEntityTypeSupplier, 7, true, damageSteppers, properties); + } + + public AntNestBlock( + Supplier>> antTypesSupplier, + Supplier> blockEntityTypeSupplier, + int maxOccupants, + boolean populateInitialAnts, + boolean damageSteppers, + BlockBehaviour.Properties properties + ) { + super(properties); + this.antTypesSupplier = antTypesSupplier; + this.blockEntityTypeSupplier = blockEntityTypeSupplier; + this.maxOccupants = maxOccupants; + this.populateInitialAnts = populateInitialAnts; + this.damageSteppers = damageSteppers; + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new AntNestBlockEntity(pos, state); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return level.isClientSide + ? null + : createTickerHelper(blockEntityType, this.blockEntityTypeSupplier.get(), + (tickLevel, tickPos, tickState, nest) -> { + if (tickLevel instanceof ServerLevel serverLevel) { + AntNestBlockEntity.serverTick(serverLevel, tickPos, tickState, nest); + } + }); + } + + @Override + public void setPlacedBy(Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.LivingEntity placer, ItemStack stack) { + super.setPlacedBy(level, pos, state, placer, stack); + if (!level.isClientSide && this.populateInitialAnts && level.getBlockEntity(pos) instanceof AntNestBlockEntity nestBlockEntity) { + nestBlockEntity.populateInitialAnts((ServerLevel) level); + } + } + + @Override + public ItemStack getCloneItemStack(net.minecraft.world.level.BlockGetter level, BlockPos pos, BlockState state) { + ItemStack stack = super.getCloneItemStack(level, pos, state); + if (level instanceof Level actualLevel && actualLevel.getBlockEntity(pos) instanceof AntNestBlockEntity nestBlockEntity) { + BlockItem.setBlockEntityData(stack, AntarchyObjects.ANT_NEST_BLOCK_ENTITY.get(), nestBlockEntity.saveWithoutMetadata()); + } + return stack; + } + + @Override + public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, ItemStack stack) { + boolean hasSilkTouch = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; + ItemStack droppedNest = hasSilkTouch ? this.getCloneItemStack(level, pos, state) : ItemStack.EMPTY; + + super.playerDestroy(level, player, pos, state, blockEntity, stack); + + if (hasSilkTouch) { + if (!droppedNest.isEmpty() && level instanceof ServerLevel serverLevel) { + Block.popResource(serverLevel, pos, droppedNest); + } + return; + } + + if (blockEntity instanceof AntNestBlockEntity nestBlockEntity && level instanceof ServerLevel serverLevel) { + nestBlockEntity.releaseAll(serverLevel); + } + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + if (this.damageSteppers && entity instanceof LivingEntity && !entity.isSteppingCarefully()) { + entity.hurt(level.damageSources().hotFloor(), 1.0F); + } + + super.stepOn(level, pos, state, entity); + } + + public boolean canAccept(EntityType antType) { + for (EntityType supportedType : this.antTypes()) { + if (supportedType == antType) { + return true; + } + } + return false; + } + + public int maxOccupants() { + return this.maxOccupants; + } + + public boolean shouldPopulateInitialAnts() { + return this.populateInitialAnts; + } + + public EntityType initialAntType(RandomSource random) { + List> antTypes = this.antTypes(); + if (antTypes.isEmpty()) { + throw new IllegalStateException("Ant nest block must declare at least one supported ant type"); + } + return antTypes.get(random.nextInt(antTypes.size())); + } + + private List> antTypes() { + return this.antTypesSupplier.get(); + } +} 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 new file mode 100644 index 00000000..62e20079 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java @@ -0,0 +1,47 @@ +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.level.LevelAccessor; +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; + +public class AntigravelBlock extends Block { + public AntigravelBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + 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); + } + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (direction == Direction.UP) { + level.scheduleTick(pos, this, 2); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @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); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalActivatorRailBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalActivatorRailBlock.java new file mode 100644 index 00000000..0ce5725e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalActivatorRailBlock.java @@ -0,0 +1,59 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +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.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.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.block.state.properties.RailShape; + +public class AntimetalActivatorRailBlock extends AbstractAntimetalRailBlock { + public static final EnumProperty SHAPE = BlockStateProperties.RAIL_SHAPE_STRAIGHT; + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + + public AntimetalActivatorRailBlock(BlockBehaviour.Properties properties) { + super(true, properties); + this.registerDefaultState(this.stateDefinition.any().setValue(SHAPE, RailShape.NORTH_SOUTH).setValue(POWERED, false).setValue(WATERLOGGED, false)); + } + + @Override + public Property getShapeProperty() { + return SHAPE; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(SHAPE, POWERED, WATERLOGGED); + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + super.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston); + updatePoweredState(level, pos, level.getBlockState(pos)); + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + if (!oldState.is(state.getBlock())) { + updatePoweredState(level, pos, level.getBlockState(pos)); + } + } + + private void updatePoweredState(Level level, BlockPos pos, BlockState state) { + if (level.isClientSide() || !(state.getBlock() instanceof AntimetalActivatorRailBlock)) { + return; + } + boolean powered = AntimetalPowerHelper.isPoweredWithChain(level, pos, state, SHAPE, AntimetalActivatorRailBlock.class); + if (state.getValue(POWERED) != powered) { + level.setBlock(pos, state.setValue(POWERED, powered), 3); + AntimetalPowerHelper.notifyAllSignalNeighbors(level, pos); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalDetectorRailBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalDetectorRailBlock.java new file mode 100644 index 00000000..9cfb4a40 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalDetectorRailBlock.java @@ -0,0 +1,104 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.minecart.AntimetalMinecartAccess; +import com.mojang.serialization.MapCodec; +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.Container; +import net.minecraft.world.entity.vehicle.AbstractMinecart; +import net.minecraft.world.inventory.AbstractContainerMenu; +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.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.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.block.state.properties.RailShape; +import net.minecraft.world.phys.AABB; + +import java.util.List; + +public class AntimetalDetectorRailBlock extends AbstractAntimetalRailBlock { + public static final EnumProperty SHAPE = BlockStateProperties.RAIL_SHAPE_STRAIGHT; + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + private static final int CHECK_PERIOD = 20; + + public AntimetalDetectorRailBlock(BlockBehaviour.Properties properties) { + super(true, properties); + this.registerDefaultState(this.stateDefinition.any().setValue(SHAPE, RailShape.NORTH_SOUTH).setValue(POWERED, false).setValue(WATERLOGGED, false)); + } + + @Override + public Property getShapeProperty() { + return SHAPE; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(SHAPE, POWERED, WATERLOGGED); + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + if (!oldState.is(state.getBlock()) && !level.isClientSide()) { + level.scheduleTick(pos, this, CHECK_PERIOD); + } + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + boolean detected = !getDetectedCarts(level, pos).isEmpty(); + if (detected != state.getValue(POWERED)) { + level.setBlock(pos, state.setValue(POWERED, detected), 3); + AntimetalPowerHelper.notifyAllSignalNeighbors(level, pos); + } + level.scheduleTick(pos, this, CHECK_PERIOD); + } + + private static List getDetectedCarts(Level level, BlockPos pos) { + AABB box = new AABB(pos.getX(), pos.getY() - 2.0D, pos.getZ(), pos.getX() + 1.0D, pos.getY() + 1.0D, pos.getZ() + 1.0D); + return level.getEntitiesOfClass(AbstractMinecart.class, box, cart -> + cart instanceof AntimetalMinecartAccess access && pos.equals(access.antarchy$getAntimetalRailPos())); + } + + @Override + public boolean isSignalSource(BlockState state) { + return true; + } + + @Override + public int getSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { + return state.getValue(POWERED) ? 15 : 0; + } + + @Override + public int getDirectSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { + return state.getValue(POWERED) ? 15 : 0; + } + + @Override + public boolean hasAnalogOutputSignal(BlockState state) { + return true; + } + + @Override + public int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { + if (!state.getValue(POWERED)) { + return 0; + } + int best = 0; + for (AbstractMinecart cart : getDetectedCarts(level, pos)) { + if (cart instanceof Container container) { + best = Math.max(best, AbstractContainerMenu.getRedstoneSignalFromContainer(container)); + } + } + return best; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalPowerHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalPowerHelper.java new file mode 100644 index 00000000..bf32e62f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalPowerHelper.java @@ -0,0 +1,80 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.RailShape; + +public final class AntimetalPowerHelper { + private static final int MAX_POWER_PROPAGATION = 8; + + private AntimetalPowerHelper() { + } + + public static boolean hasAnySignal(LevelReader level, BlockPos pos) { + if (level instanceof Level realLevel && realLevel.hasNeighborSignal(pos)) { + return true; + } + return BluestoneSignalHelper.getBestNeighborSignal(level, pos) > 0; + } + + public static int getBestAnySignal(LevelReader level, BlockPos pos) { + int vanillaSignal = level instanceof Level realLevel ? realLevel.getBestNeighborSignal(pos) : 0; + int bluestoneSignal = BluestoneSignalHelper.getBestNeighborSignal(level, pos); + return Math.max(vanillaSignal, bluestoneSignal); + } + + public static void notifyAllSignalNeighbors(Level level, BlockPos pos) { + level.updateNeighborsAt(pos, level.getBlockState(pos).getBlock()); + BluestoneSignalHelper.updateBluestoneNeighbors(level, pos); + } + + public static boolean isPoweredWithChain(Level level, BlockPos pos, BlockState state, EnumProperty shapeProperty, Class railClass) { + if (!railClass.isInstance(state.getBlock())) { + return false; + } + if (hasAnySignal(level, pos)) { + return true; + } + RailShape shape = state.getValue(shapeProperty); + for (Direction direction : exitDirections(shape)) { + if (chain(level, pos, direction, shapeProperty, railClass, 1)) { + return true; + } + } + return false; + } + + private static boolean chain(Level level, BlockPos pos, Direction direction, EnumProperty shapeProperty, Class railClass, int distance) { + if (distance > MAX_POWER_PROPAGATION) { + return false; + } + BlockPos[] candidates = {pos.relative(direction), pos.relative(direction).above(), pos.relative(direction).below()}; + for (BlockPos candidate : candidates) { + BlockState candidateState = level.getBlockState(candidate); + if (railClass.isInstance(candidateState.getBlock()) && sameAxis(candidateState.getValue(shapeProperty), direction)) { + if (hasAnySignal(level, candidate)) { + return true; + } + if (chain(level, candidate, direction, shapeProperty, railClass, distance + 1)) { + return true; + } + } + } + return false; + } + + private static boolean sameAxis(RailShape shape, Direction direction) { + boolean zAxis = shape == RailShape.NORTH_SOUTH || shape == RailShape.ASCENDING_NORTH || shape == RailShape.ASCENDING_SOUTH; + return direction.getAxis() == (zAxis ? Direction.Axis.Z : Direction.Axis.X); + } + + private static Direction[] exitDirections(RailShape shape) { + boolean zAxis = shape == RailShape.NORTH_SOUTH || shape == RailShape.ASCENDING_NORTH || shape == RailShape.ASCENDING_SOUTH; + return zAxis ? new Direction[]{Direction.NORTH, Direction.SOUTH} : new Direction[]{Direction.EAST, Direction.WEST}; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalPoweredRailBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalPoweredRailBlock.java new file mode 100644 index 00000000..39fa6377 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalPoweredRailBlock.java @@ -0,0 +1,112 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +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.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.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.block.state.properties.RailShape; + +public class AntimetalPoweredRailBlock extends AbstractAntimetalRailBlock { + public static final EnumProperty SHAPE = BlockStateProperties.RAIL_SHAPE_STRAIGHT; + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + + public AntimetalPoweredRailBlock(BlockBehaviour.Properties properties) { + super(true, properties); + this.registerDefaultState(this.stateDefinition.any().setValue(SHAPE, RailShape.NORTH_SOUTH).setValue(POWERED, false).setValue(WATERLOGGED, false)); + } + + @Override + public Property getShapeProperty() { + return SHAPE; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(SHAPE, POWERED, WATERLOGGED); + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + super.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston); + updatePoweredState(level, pos, level.getBlockState(pos)); + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + if (!oldState.is(state.getBlock())) { + updatePoweredState(level, pos, level.getBlockState(pos)); + } + } + + private void updatePoweredState(Level level, BlockPos pos, BlockState state) { + if (level.isClientSide() || !(state.getBlock() instanceof AntimetalPoweredRailBlock)) { + return; + } + boolean powered = AntimetalPowerHelper.isPoweredWithChain(level, pos, state, SHAPE, AntimetalPoweredRailBlock.class); + if (state.getValue(POWERED) != powered) { + level.setBlock(pos, state.setValue(POWERED, powered), 3); + AntimetalPowerHelper.notifyAllSignalNeighbors(level, pos.below()); + AntimetalPowerHelper.notifyAllSignalNeighbors(level, pos.above()); + } + } + + @Override + public BlockState rotate(BlockState state, net.minecraft.world.level.block.Rotation rotation) { + return switch (rotation) { + case CLOCKWISE_180 -> switch (state.getValue(SHAPE)) { + case NORTH_SOUTH -> state.setValue(SHAPE, RailShape.NORTH_SOUTH); + case EAST_WEST -> state.setValue(SHAPE, RailShape.EAST_WEST); + case ASCENDING_EAST -> state.setValue(SHAPE, RailShape.ASCENDING_WEST); + case ASCENDING_WEST -> state.setValue(SHAPE, RailShape.ASCENDING_EAST); + case ASCENDING_NORTH -> state.setValue(SHAPE, RailShape.ASCENDING_SOUTH); + case ASCENDING_SOUTH -> state.setValue(SHAPE, RailShape.ASCENDING_NORTH); + default -> state; + }; + case CLOCKWISE_90 -> switch (state.getValue(SHAPE)) { + case NORTH_SOUTH -> state.setValue(SHAPE, RailShape.EAST_WEST); + case EAST_WEST -> state.setValue(SHAPE, RailShape.NORTH_SOUTH); + case ASCENDING_EAST -> state.setValue(SHAPE, RailShape.ASCENDING_NORTH); + case ASCENDING_WEST -> state.setValue(SHAPE, RailShape.ASCENDING_SOUTH); + case ASCENDING_NORTH -> state.setValue(SHAPE, RailShape.ASCENDING_WEST); + case ASCENDING_SOUTH -> state.setValue(SHAPE, RailShape.ASCENDING_EAST); + default -> state; + }; + case COUNTERCLOCKWISE_90 -> switch (state.getValue(SHAPE)) { + case NORTH_SOUTH -> state.setValue(SHAPE, RailShape.EAST_WEST); + case EAST_WEST -> state.setValue(SHAPE, RailShape.NORTH_SOUTH); + case ASCENDING_EAST -> state.setValue(SHAPE, RailShape.ASCENDING_SOUTH); + case ASCENDING_WEST -> state.setValue(SHAPE, RailShape.ASCENDING_NORTH); + case ASCENDING_NORTH -> state.setValue(SHAPE, RailShape.ASCENDING_EAST); + case ASCENDING_SOUTH -> state.setValue(SHAPE, RailShape.ASCENDING_WEST); + default -> state; + }; + default -> state; + }; + } + + @Override + public BlockState mirror(BlockState state, net.minecraft.world.level.block.Mirror mirror) { + RailShape shape = state.getValue(SHAPE); + return switch (mirror) { + case LEFT_RIGHT -> switch (shape) { + case ASCENDING_NORTH -> state.setValue(SHAPE, RailShape.ASCENDING_SOUTH); + case ASCENDING_SOUTH -> state.setValue(SHAPE, RailShape.ASCENDING_NORTH); + default -> state; + }; + case FRONT_BACK -> switch (shape) { + case ASCENDING_EAST -> state.setValue(SHAPE, RailShape.ASCENDING_WEST); + case ASCENDING_WEST -> state.setValue(SHAPE, RailShape.ASCENDING_EAST); + default -> state; + }; + default -> state; + }; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalRailBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalRailBlock.java new file mode 100644 index 00000000..fc2028e5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalRailBlock.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.world.level.block.state.BlockBehaviour; +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.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.block.state.properties.RailShape; + +public class AntimetalRailBlock extends AbstractAntimetalRailBlock { + public static final EnumProperty SHAPE = BlockStateProperties.RAIL_SHAPE; + + public AntimetalRailBlock(BlockBehaviour.Properties properties) { + super(false, properties); + this.registerDefaultState(this.stateDefinition.any().setValue(SHAPE, RailShape.NORTH_SOUTH).setValue(WATERLOGGED, false)); + } + + @Override + public Property getShapeProperty() { + return SHAPE; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(SHAPE, WATERLOGGED); + } +} 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 new file mode 100644 index 00000000..e191f167 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalScaffoldingBlock.java @@ -0,0 +1,161 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity; +import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.mojang.serialization.MapCodec; +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.item.FallingBlockEntity; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.ScaffoldingBlock; +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.material.Fluids; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class AntimetalScaffoldingBlock extends ScaffoldingBlock { + + public static final BooleanProperty INVERTED = BooleanProperty.create("inverted"); + + private static final VoxelShape MIRRORED_STABLE_SHAPE; + private static final VoxelShape MIRRORED_UNSTABLE_SHAPE; + + static { + VoxelShape frame = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 2.0D, 16.0D); + VoxelShape post1 = Block.box(0.0D, 0.0D, 0.0D, 2.0D, 16.0D, 2.0D); + VoxelShape post2 = Block.box(14.0D, 0.0D, 0.0D, 16.0D, 16.0D, 2.0D); + VoxelShape post3 = Block.box(0.0D, 0.0D, 14.0D, 2.0D, 16.0D, 16.0D); + VoxelShape post4 = Block.box(14.0D, 0.0D, 14.0D, 16.0D, 16.0D, 16.0D); + MIRRORED_STABLE_SHAPE = Shapes.or(frame, post1, post2, post3, post4); + + VoxelShape topSlab = Block.box(0.0D, 14.0D, 0.0D, 16.0D, 16.0D, 16.0D); + VoxelShape edge1 = Block.box(0.0D, 14.0D, 0.0D, 2.0D, 16.0D, 16.0D); + VoxelShape edge2 = Block.box(14.0D, 14.0D, 0.0D, 16.0D, 16.0D, 16.0D); + VoxelShape edge3 = Block.box(0.0D, 14.0D, 0.0D, 16.0D, 16.0D, 2.0D); + VoxelShape edge4 = Block.box(0.0D, 14.0D, 14.0D, 16.0D, 16.0D, 16.0D); + MIRRORED_UNSTABLE_SHAPE = Shapes.or(topSlab, MIRRORED_STABLE_SHAPE, edge1, edge2, edge3, edge4); + } + + public AntimetalScaffoldingBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(DISTANCE, 7) + .setValue(WATERLOGGED, false) + .setValue(BOTTOM, false) + .setValue(INVERTED, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(INVERTED); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + BlockPos pos = context.getClickedPos(); + Level level = context.getLevel(); + boolean inverted = context.getPlayer() != null && AntarchyGravityApi.isGravityInverted(context.getPlayer()); + int distance = getDistance(level, pos, inverted); + if (inverted && distance >= 7) { + return null; + } + return this.defaultBlockState() + .setValue(WATERLOGGED, level.getFluidState(pos).getType() == Fluids.WATER) + .setValue(DISTANCE, distance) + .setValue(BOTTOM, antarchy$isBottom(level, pos, distance, inverted)) + .setValue(INVERTED, inverted); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return getDistance(level, pos, state.getValue(INVERTED)) < 7; + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + boolean inverted = state.getValue(INVERTED); + int distance = getDistance(level, pos, inverted); + BlockState updated = state.setValue(DISTANCE, distance).setValue(BOTTOM, antarchy$isBottom(level, pos, distance, inverted)); + if (updated.getValue(DISTANCE) == 7) { + if (state.getValue(DISTANCE) == 7) { + if (inverted) { + UpwardFallingBlockEntity.fallUp(level, pos, updated); + } else { + FallingBlockEntity.fall(level, pos, updated); + } + } else { + level.destroyBlock(pos, true); + } + } else if (state != updated) { + level.setBlock(pos, updated, 3); + } + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + if (!state.getValue(INVERTED)) { + return super.getShape(state, level, pos, context); + } + if (context.isHoldingItem(state.getBlock().asItem())) { + return Shapes.block(); + } + return state.getValue(BOTTOM) ? MIRRORED_UNSTABLE_SHAPE : MIRRORED_STABLE_SHAPE; + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + if (!state.getValue(INVERTED)) { + return super.getCollisionShape(state, level, pos, context); + } + return this.getShape(state, level, pos, context); + } + + private static boolean antarchy$isMatchingScaffold(BlockState state, boolean inverted) { + return state.getBlock() instanceof AntimetalScaffoldingBlock && state.getValue(INVERTED) == inverted; + } + + public static int getDistance(LevelReader level, BlockPos pos, boolean inverted) { + Direction supportDirection = inverted ? Direction.UP : Direction.DOWN; + BlockPos.MutableBlockPos cursor = pos.mutable().move(supportDirection); + BlockState supportNeighbor = level.getBlockState(cursor); + int distance = 7; + if (antarchy$isMatchingScaffold(supportNeighbor, inverted)) { + distance = supportNeighbor.getValue(DISTANCE); + } else if (supportNeighbor.isFaceSturdy(level, cursor, supportDirection.getOpposite())) { + return 0; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos.MutableBlockPos neighborPos = pos.mutable().move(direction); + BlockState neighbor = level.getBlockState(neighborPos); + if (!antarchy$isMatchingScaffold(neighbor, inverted)) { + continue; + } + distance = Math.min(distance, neighbor.getValue(DISTANCE) + 1); + if (distance == 1) { + break; + } + } + + return distance; + } + + private static boolean antarchy$isBottom(LevelReader level, BlockPos pos, int distance, boolean inverted) { + if (distance <= 0) { + return false; + } + Direction supportDirection = inverted ? Direction.UP : Direction.DOWN; + return !antarchy$isMatchingScaffold(level.getBlockState(pos.relative(supportDirection)), inverted); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BedBugEggBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BedBugEggBlock.java new file mode 100644 index 00000000..859f3c52 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BedBugEggBlock.java @@ -0,0 +1,206 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.entity.ambient.Bat; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.monster.Zombie; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.GameRules; +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.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.level.block.entity.BlockEntity; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class BedBugEggBlock extends Block { + public static final IntegerProperty HATCH = BlockStateProperties.HATCH; + public static final IntegerProperty EGGS = BlockStateProperties.EGGS; + 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 BedBugEggBlock(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)) { + 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); + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + if (!entity.isSteppingCarefully()) { + this.destroyEgg(level, state, pos, entity, 100); + } + super.stepOn(level, pos, state, entity); + } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + if (!(entity instanceof Zombie)) { + 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); + } + + @Override + protected 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 void destroyEgg(Level level, BlockState state, BlockPos pos, Entity entity, int chance) { + if (level.isClientSide || !this.canDestroyEgg(level, entity) || level.random.nextInt(chance) != 0) { + return; + } + + level.playSound(null, pos, SoundEvents.TURTLE_EGG_BREAK, SoundSource.BLOCKS, 0.7F, 0.9F + level.random.nextFloat() * 0.2F); + this.decreaseEggs(level, pos, state); + } + + private void hatchEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + level.removeBlock(pos, false); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + random.nextFloat() * 0.1F); + + for (int i = 0; i < state.getValue(EGGS); i++) { + BedBugEntity bedBug = AntarchyObjects.BED_BUG.get().create(level); + if (bedBug == null) { + continue; + } + + bedBug.setAge(-24000); + bedBug.setHomeEggPos(pos); + double spawnX = pos.getX() + 0.25D + random.nextDouble() * 0.5D; + double spawnZ = pos.getZ() + 0.25D + random.nextDouble() * 0.5D; + bedBug.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, random.nextFloat() * 360.0F, 0.0F); + level.addFreshEntity(bedBug); + } + } + + public void hatchWithNucleus(ServerLevel level, BlockPos pos, BlockState state) { + this.hatchEggs(level, pos, state, level.random); + } + + 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) { + return level.random.nextInt(500) == 0; + } + + private boolean canDestroyEgg(Level level, Entity entity) { + if (entity instanceof BedBugEntity || 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/BiowartBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BiowartBlock.java new file mode 100644 index 00000000..fd5c12b8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BiowartBlock.java @@ -0,0 +1,77 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.function.Supplier; + +public class BiowartBlock extends Block implements BonemealableBlock { + private static Supplier biowartTendrils; + + public BiowartBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + public static void bindTendrils(Supplier tendrilsSupplier) { + biowartTendrils = tendrilsSupplier; + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return level.getBlockState(pos.above()).isAir() || hasSpreadTarget(level, pos); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + placeTendrils(level, pos); + + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + for (int i = 0; i < 28; i++) { + cursor.setWithOffset(pos, random.nextInt(9) - 4, random.nextInt(3) - 1, random.nextInt(9) - 4); + BlockState target = level.getBlockState(cursor); + if (isBiomite(target)) { + level.setBlock(cursor, this.defaultBlockState(), 3); + placeTendrils(level, cursor); + } + } + } + + private static boolean hasSpreadTarget(LevelReader level, BlockPos pos) { + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + for (int x = -3; x <= 3; x++) { + for (int y = -1; y <= 1; y++) { + for (int z = -3; z <= 3; z++) { + cursor.setWithOffset(pos, x, y, z); + if (isBiomite(level.getBlockState(cursor))) { + return true; + } + } + } + } + return false; + } + + private static boolean isBiomite(BlockState state) { + return state.is(AntarchyTags.Blocks.BIOWART_REPLACEABLE); + } + + private static void placeTendrils(ServerLevel level, BlockPos pos) { + if (biowartTendrils != null && level.isEmptyBlock(pos.above())) { + level.setBlock(pos.above(), biowartTendrils.get().defaultBlockState(), 3); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BiowartTendrilsBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BiowartTendrilsBlock.java new file mode 100644 index 00000000..f6b88413 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BiowartTendrilsBlock.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +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.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class BiowartTendrilsBlock extends BushBlock { + private static final VoxelShape SHAPE = Block.box(2.0D, 0.0D, 2.0D, 14.0D, 10.0D, 14.0D); + + public BiowartTendrilsBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(AntarchyTags.Blocks.BIOWART_TENDRILS_PLANTABLE) || super.mayPlaceOn(state, level, pos); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return this.mayPlaceOn(level.getBlockState(pos.below()), level, pos.below()); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BloodCrystalGrowthBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BloodCrystalGrowthBlock.java new file mode 100644 index 00000000..70a150f1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BloodCrystalGrowthBlock.java @@ -0,0 +1,84 @@ +package com.craisinlord.antarchy.content.block; + +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.level.block.AmethystClusterBlock; +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.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; + +import java.util.function.Supplier; + +public class BloodCrystalGrowthBlock extends Block { + private static final Direction[] DIRECTIONS = Direction.values(); + + private final Supplier smallBud; + private final Supplier mediumBud; + private final Supplier largeBud; + private final Supplier cluster; + + public BloodCrystalGrowthBlock( + Properties properties, + Supplier smallBud, + Supplier mediumBud, + Supplier largeBud, + Supplier cluster + ) { + super(properties); + this.smallBud = smallBud; + this.mediumBud = mediumBud; + this.largeBud = largeBud; + this.cluster = cluster; + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return !state.is(this.cluster.get()); + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (random.nextInt(5) != 0) { + return; + } + + Direction direction = DIRECTIONS[random.nextInt(DIRECTIONS.length)]; + BlockPos targetPos = pos.relative(direction); + BlockState targetState = level.getBlockState(targetPos); + Block nextBlock = null; + + if (canGrowInto(targetState)) { + nextBlock = this.smallBud.get(); + } else if (isStage(targetState, this.smallBud.get(), direction)) { + nextBlock = this.mediumBud.get(); + } else if (isStage(targetState, this.mediumBud.get(), direction)) { + nextBlock = this.largeBud.get(); + } else if (isStage(targetState, this.largeBud.get(), direction)) { + nextBlock = this.cluster.get(); + } + + if (nextBlock == null) { + return; + } + + FluidState fluidState = targetState.getFluidState(); + BlockState nextState = nextBlock.defaultBlockState() + .setValue(AmethystClusterBlock.FACING, direction) + .setValue(BlockStateProperties.WATERLOGGED, fluidState.getType() == Fluids.WATER && fluidState.getAmount() == 8); + level.setBlockAndUpdate(targetPos, nextState); + } + + private static boolean canGrowInto(BlockState state) { + return state.isAir() || state.is(Blocks.WATER) && state.getFluidState().getAmount() == 8; + } + + private static boolean isStage(BlockState state, Block block, Direction direction) { + return state.is(block) && state.hasProperty(AmethystClusterBlock.FACING) && state.getValue(AmethystClusterBlock.FACING) == direction; + } +} + diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneBlock.java new file mode 100644 index 00000000..1253c5a6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneBlock.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public class BluestoneBlock extends Block implements BluestoneSignalSource { + public BluestoneBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public boolean isSignalSource(BlockState state) { + return true; + } + + @Override + public int getSignal(BlockState state, net.minecraft.world.level.BlockGetter level, BlockPos pos, Direction direction) { + return 15; + } + + @Override + public int getDirectSignal(BlockState state, net.minecraft.world.level.BlockGetter level, BlockPos pos, Direction direction) { + return 15; + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean moving) { + super.onPlace(state, level, pos, oldState, moving); + BluestoneSignalHelper.updateBluestoneNeighbors(level, pos); + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + super.onRemove(state, level, pos, newState, movedByPiston); + if (!state.is(newState.getBlock())) { + BluestoneSignalHelper.updateBluestoneNeighbors(level, pos); + } + } + + @Override + public int getBluestoneSignal(net.minecraft.world.level.LevelReader level, BlockPos pos, BlockState state, Direction direction) { + return 15; + } +} 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 new file mode 100644 index 00000000..30c44356 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneComparatorBlock.java @@ -0,0 +1,203 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.block.entity.BluestoneComparatorBlockEntity; +import com.mojang.serialization.MapCodec; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionResult; +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.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.SignalGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.ComparatorBlock; +import net.minecraft.world.level.block.DiodeBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.ComparatorMode; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.util.RandomSource; +import net.minecraft.world.ticks.TickPriority; +import org.joml.Vector3f; + +public class BluestoneComparatorBlock extends ComparatorBlock { + 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; + + public BluestoneComparatorBlock(BlockBehaviour.Properties properties) { + this(properties, null); + } + + public BluestoneComparatorBlock(BlockBehaviour.Properties properties, Supplier> blockEntityTypeSupplier) { + super(properties); + this.blockEntityTypeSupplier = blockEntityTypeSupplier; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return BluestonePlacementHelper.hasCeilingSupport(level, pos); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return BluestonePlacementHelper.canPlaceOnCeiling(context) ? super.getStateForPlacement(context) : null; + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (direction == Direction.UP && !state.canSurvive(level, pos)) { + return net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new BluestoneComparatorBlockEntity(pos, state, this.blockEntityTypeSupplier); + } + + @Override + protected int getOutputSignal(BlockGetter level, BlockPos pos, BlockState state) { + BlockEntity blockEntity = level.getBlockEntity(pos); + return blockEntity instanceof BluestoneComparatorBlockEntity comparator ? comparator.getOutputSignal() : 0; + } + + @Override + protected int getInputSignal(Level level, BlockPos pos, BlockState state) { + Direction facing = state.getValue(FACING); + BlockPos inputPos = pos.relative(facing); + BlockState inputState = level.getBlockState(inputPos); + int signal = BluestoneSignalHelper.getSignalExcludingRedstoneWire(level, inputPos, facing); + signal = Math.max(signal, this.getDirectBluestoneRearSignal(level, inputPos, inputState, facing)); + + if (signal < 15 && inputState.isRedstoneConductor(level, inputPos)) { + BlockPos fartherInputPos = inputPos.relative(facing); + BlockState fartherInputState = level.getBlockState(fartherInputPos); + signal = Math.max(signal, BluestoneSignalHelper.getSignalExcludingRedstoneWire(level, fartherInputPos, facing)); + signal = Math.max(signal, this.getDirectBluestoneRearSignal(level, fartherInputPos, fartherInputState, facing)); + } + + return signal; + } + + @Override + protected int getAlternateSignal(SignalGetter level, BlockPos pos, BlockState state) { + Direction facing = state.getValue(FACING); + Direction clockwise = facing.getClockWise(); + Direction counterClockwise = facing.getCounterClockWise(); + int signal = this.getBluestoneSideSignal(level, pos.relative(clockwise), clockwise.getOpposite()); + signal = Math.max(signal, this.getBluestoneSideSignal(level, pos.relative(counterClockwise), counterClockwise.getOpposite())); + return signal; + } + + private int getBluestoneSideSignal(SignalGetter level, BlockPos pos, Direction direction) { + BlockState neighborState = level.getBlockState(pos); + if (neighborState.getBlock() instanceof BluestoneSignalSource source) { + return source.getBluestoneSignal(level instanceof LevelReader levelReader ? levelReader : null, pos, neighborState, direction); + } + return 0; + } + + private int getDirectBluestoneRearSignal(LevelReader level, BlockPos pos, BlockState state, Direction direction) { + if (state.getBlock() instanceof BluestoneSignalSource source) { + return source.getBluestoneSignal(level, pos, state, direction); + } + return BluestoneSignalHelper.getDirectBluestoneSignal(level, pos, direction); + } + + @Override + public boolean isSignalSource(BlockState state) { + return true; + } + + @Override + protected void checkTickOnNeighbor(Level level, BlockPos pos, BlockState state) { + if (level.getBlockTicks().willTickThisTick(pos, this)) { + return; + } + int outputSignal = this.calculateBluestoneOutputSignal(level, pos, state); + int storedOutputSignal = this.getOutputSignal(level, pos, state); + if (outputSignal != storedOutputSignal || state.getValue(POWERED) != this.shouldTurnOn(level, pos, state)) { + TickPriority tickPriority = this.shouldPrioritize(level, pos, state) ? TickPriority.HIGH : TickPriority.NORMAL; + level.scheduleTick(pos, this, 2, tickPriority); + } + } + + @Override + public void tick(BlockState state, net.minecraft.server.level.ServerLevel level, BlockPos pos, RandomSource random) { + this.refreshBluestoneOutputState(level, pos, state); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, net.minecraft.world.InteractionHand hand, BlockHitResult hitResult) { + if (!player.getAbilities().mayBuild) { + return InteractionResult.PASS; + } + BlockState updated = state.cycle(MODE); + float pitch = updated.getValue(MODE) == ComparatorMode.SUBTRACT ? 0.55F : 0.5F; + level.playSound(player, pos, SoundEvents.COMPARATOR_CLICK, SoundSource.BLOCKS, 0.3F, pitch); + level.setBlock(pos, updated, 2); + this.refreshBluestoneOutputState(level, pos, updated); + return InteractionResult.sidedSuccess(level.isClientSide); + } + + private int calculateBluestoneOutputSignal(Level level, BlockPos pos, BlockState state) { + int inputSignal = this.getInputSignal(level, pos, state); + if (inputSignal == 0) { + return 0; + } + int alternateSignal = this.getAlternateSignal(level, pos, state); + if (alternateSignal > inputSignal) { + return 0; + } + return state.getValue(MODE) == ComparatorMode.SUBTRACT ? inputSignal - alternateSignal : inputSignal; + } + + private void refreshBluestoneOutputState(Level level, BlockPos pos, BlockState state) { + int outputSignal = this.calculateBluestoneOutputSignal(level, pos, state); + BlockEntity blockEntity = level.getBlockEntity(pos); + int storedOutputSignal = 0; + if (blockEntity instanceof BluestoneComparatorBlockEntity comparator) { + storedOutputSignal = comparator.getOutputSignal(); + comparator.setOutputSignal(outputSignal); + } + boolean shouldTurnOn = this.shouldTurnOn(level, pos, state); + boolean powered = state.getValue(DiodeBlock.POWERED); + if (powered != shouldTurnOn) { + state = state.setValue(DiodeBlock.POWERED, shouldTurnOn); + level.setBlock(pos, state, 2); + } + if (storedOutputSignal != outputSignal || powered != shouldTurnOn) { + this.updateNeighborsInFront(level, pos, state); + } + } + + @Override + public void animateTick(BlockState state, net.minecraft.world.level.Level level, BlockPos pos, RandomSource random) { + if (!state.getValue(POWERED)) { + return; + } + double x = pos.getX() + 0.5D + (random.nextDouble() - 0.5D) * 0.2D; + double y = pos.getY() + 0.8D; + double z = pos.getZ() + 0.5D + (random.nextDouble() - 0.5D) * 0.2D; + level.addParticle(BLUESTONE_PARTICLE, x, y, z, 0.0D, 0.0D, 0.0D); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneLampBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneLampBlock.java new file mode 100644 index 00000000..2745fc17 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneLampBlock.java @@ -0,0 +1,57 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +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.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; + +public class BluestoneLampBlock extends Block { + public static final BooleanProperty LIT = BlockStateProperties.LIT; + + public BluestoneLampBlock(BlockBehaviour.Properties properties) { + super(properties); + registerDefaultState(this.stateDefinition.any().setValue(LIT, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(LIT); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(LIT, shouldLight(context.getLevel(), context.getClickedPos())); + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + if (level.isClientSide) { + return; + } + boolean lit = state.getValue(LIT); + boolean powered = shouldLight(level, pos); + if (lit && !powered) { + level.scheduleTick(pos, this, 4); + } else if (!lit && powered) { + level.setBlock(pos, state.setValue(LIT, true), 2); + } + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (state.getValue(LIT) && !shouldLight(level, pos)) { + level.setBlock(pos, state.setValue(LIT, false), 2); + } + } + + private static boolean shouldLight(Level level, BlockPos pos) { + return level.hasNeighborSignal(pos) || BluestoneSignalHelper.getBestNeighborSignal(level, pos) > 0; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneOreBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneOreBlock.java new file mode 100644 index 00000000..9e337eb9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneOreBlock.java @@ -0,0 +1,70 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.RedStoneOreBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.phys.BlockHitResult; +import org.joml.Vector3f; + +public class BluestoneOreBlock extends RedStoneOreBlock { + private static final DustParticleOptions BLUESTONE_PARTICLE = new DustParticleOptions(new Vector3f(0.18F, 0.54F, 1.0F), 1.0F); + + public BluestoneOreBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public void attack(BlockState state, Level level, BlockPos pos, Player player) { + activate(state, level, pos); + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + activate(state, level, pos); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + activate(state, level, pos); + return InteractionResult.sidedSuccess(level.isClientSide); + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + if (state.getValue(BlockStateProperties.LIT)) { + spawnBluestoneParticles(level, pos); + } + } + + private static void activate(BlockState state, Level level, BlockPos pos) { + spawnBluestoneParticles(level, pos); + if (!state.getValue(BlockStateProperties.LIT)) { + level.setBlock(pos, state.setValue(BlockStateProperties.LIT, true), 3); + } + } + + private static void spawnBluestoneParticles(Level level, BlockPos pos) { + RandomSource random = level.random; + for (Direction direction : Direction.values()) { + BlockPos neighborPos = pos.relative(direction); + if (level.getBlockState(neighborPos).isSolidRender(level, neighborPos)) { + continue; + } + Direction.Axis axis = direction.getAxis(); + double x = axis == Direction.Axis.X ? 0.5D + 0.5625D * direction.getStepX() : random.nextFloat(); + double y = axis == Direction.Axis.Y ? 0.5D + 0.5625D * direction.getStepY() : random.nextFloat(); + double z = axis == Direction.Axis.Z ? 0.5D + 0.5625D * direction.getStepZ() : random.nextFloat(); + level.addParticle(BLUESTONE_PARTICLE, pos.getX() + x, pos.getY() + y, pos.getZ() + z, 0.0D, 0.0D, 0.0D); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestonePlacementHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestonePlacementHelper.java new file mode 100644 index 00000000..bdc18e16 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestonePlacementHelper.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; + +public final class BluestonePlacementHelper { + private BluestonePlacementHelper() { + } + + public static boolean hasCeilingSupport(LevelReader level, BlockPos pos) { + BlockPos supportPos = pos.above(); + return Block.canSupportCenter(level, supportPos, Direction.DOWN); + } + + public static boolean canPlaceOnCeiling(BlockPlaceContext context) { + return context.getClickedFace() == Direction.DOWN && hasCeilingSupport(context.getLevel(), context.getClickedPos()); + } +} 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 new file mode 100644 index 00000000..7f1242c7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneRepeaterBlock.java @@ -0,0 +1,109 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.DustParticleOptions; +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.SignalGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RepeaterBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.util.RandomSource; +import org.joml.Vector3f; + +public class BluestoneRepeaterBlock extends RepeaterBlock { + 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); + + public BluestoneRepeaterBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return BluestonePlacementHelper.hasCeilingSupport(level, pos); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return BluestonePlacementHelper.canPlaceOnCeiling(context) ? super.getStateForPlacement(context) : null; + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!state.canSurvive(level, pos)) { + return net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + protected int getAlternateSignal(SignalGetter level, BlockPos pos, BlockState state) { + Direction facing = state.getValue(FACING); + Direction clockwise = facing.getClockWise(); + Direction counterClockwise = facing.getCounterClockWise(); + int signal = this.getBluestoneSideSignal(level, pos.relative(clockwise), clockwise.getOpposite()); + signal = Math.max(signal, this.getBluestoneSideSignal(level, pos.relative(counterClockwise), counterClockwise.getOpposite())); + return signal; + } + + @Override + protected int getInputSignal(Level level, BlockPos pos, BlockState state) { + Direction facing = state.getValue(FACING); + BlockPos inputPos = pos.relative(facing); + BlockState inputState = level.getBlockState(inputPos); + int signal = BluestoneSignalHelper.getSignalExcludingRedstoneWire(level, inputPos, facing); + if (signal >= 15) { + return signal; + } + if (inputState.getBlock() instanceof BluestoneSignalSource source) { + return Math.max(signal, source.getBluestoneSignal(level, inputPos, inputState, facing)); + } + return signal; + } + + @Override + public boolean isLocked(LevelReader level, BlockPos pos, BlockState state) { + return this.getAlternateSignal(level, pos, state) > 0; + } + + private int getBluestoneSideSignal(SignalGetter level, BlockPos pos, Direction towardThisRepeater) { + BlockState neighborState = level.getBlockState(pos); + if (neighborState.getBlock() instanceof BluestoneRepeaterBlock + && neighborState.getValue(POWERED) + && neighborState.getValue(FACING) == towardThisRepeater) { + return 15; + } + return 0; + } + + @Override + public boolean isSignalSource(BlockState state) { + return true; + } + + @Override + public void animateTick(BlockState state, net.minecraft.world.level.Level level, BlockPos pos, RandomSource random) { + if (!state.getValue(POWERED)) { + return; + } + double x = pos.getX() + 0.5D + (random.nextDouble() - 0.5D) * 0.2D; + double y = pos.getY() + 0.8D; + double z = pos.getZ() + 0.5D + (random.nextDouble() - 0.5D) * 0.2D; + level.addParticle(BLUESTONE_PARTICLE, x, y, z, 0.0D, 0.0D, 0.0D); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneSide.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneSide.java new file mode 100644 index 00000000..c39b5c41 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneSide.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.util.StringRepresentable; + +public enum BluestoneSide implements StringRepresentable { + NONE("none"), + SIDE("side"), + DOWN("down"); + + private final String name; + + BluestoneSide(String name) { + this.name = name; + } + + @Override + public String getSerializedName() { + return this.name; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneSignalHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneSignalHelper.java new file mode 100644 index 00000000..db94bdb4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneSignalHelper.java @@ -0,0 +1,93 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; + +public final class BluestoneSignalHelper { + private BluestoneSignalHelper() { + } + + public static int getBestNeighborSignal(LevelReader level, BlockPos pos) { + int signal = 0; + for (Direction direction : Direction.values()) { + signal = Math.max(signal, getDirectBluestoneSignal(level, pos.relative(direction), direction)); + if (signal >= 15) { + return 15; + } + } + return signal; + } + + public static int getDirectBluestoneSignal(LevelReader level, BlockPos pos, Direction direction) { + BlockState state = level.getBlockState(pos); + if (state.getBlock() instanceof BluestoneSignalSource source) { + return source.getBluestoneSignal(level, pos, state, direction); + } + return 0; + } + + public static int getWireSignal(LevelReader level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + if (state.getBlock() instanceof BluestoneSignalSource source) { + return source.getBluestoneSignal(level, pos, state, Direction.DOWN); + } + return 0; + } + + public static int getSignalExcludingRedstoneWire(LevelReader level, BlockPos pos, Direction direction) { + BlockState state = level.getBlockState(pos); + if (isVanillaRedstoneComponent(state)) { + return 0; + } + int signal = state.getSignal(level, pos, direction); + if (state.isRedstoneConductor(level, pos)) { + signal = Math.max(signal, getDirectSignalToExcludingRedstoneWire(level, pos)); + } + return signal; + } + + private static int getDirectSignalToExcludingRedstoneWire(BlockGetter level, BlockPos pos) { + int signal = 0; + for (Direction direction : Direction.values()) { + BlockPos neighborPos = pos.relative(direction); + BlockState neighborState = level.getBlockState(neighborPos); + if (isVanillaRedstoneComponent(neighborState)) { + continue; + } + signal = Math.max(signal, neighborState.getDirectSignal(level, neighborPos, direction)); + if (signal >= 15) { + return 15; + } + } + return signal; + } + + public static boolean canBluestoneConnectTo(BlockState state) { + return state.is(AntarchyTags.Blocks.BLUESTONE_CONNECTABLE); + } + + public static boolean isBluestoneComponent(BlockState state) { + return state.is(AntarchyTags.Blocks.BLUESTONE_COMPONENTS); + } + + public static void updateBluestoneNeighbors(Level level, BlockPos pos) { + level.updateNeighborsAt(pos, level.getBlockState(pos).getBlock()); + for (Direction direction : Direction.values()) { + level.updateNeighborsAt(pos.relative(direction), level.getBlockState(pos).getBlock()); + } + } + + public static boolean isVanillaRedstoneComponent(BlockState state) { + return state.is(Blocks.REDSTONE_WIRE) + || state.is(Blocks.REDSTONE_TORCH) + || state.is(Blocks.REDSTONE_WALL_TORCH) + || state.is(Blocks.REPEATER) + || state.is(Blocks.COMPARATOR); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneSignalSource.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneSignalSource.java new file mode 100644 index 00000000..f2b5d4b9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneSignalSource.java @@ -0,0 +1,10 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.state.BlockState; + +public interface BluestoneSignalSource { + int getBluestoneSignal(LevelReader level, BlockPos pos, BlockState state, Direction direction); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneTorchBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneTorchBlock.java new file mode 100644 index 00000000..74d91754 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneTorchBlock.java @@ -0,0 +1,253 @@ +package com.craisinlord.antarchy.content.block; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.WeakHashMap; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.util.RandomSource; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +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.Rotation; +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.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.AttachFace; +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.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.joml.Vector3f; + +public class BluestoneTorchBlock extends Block implements BluestoneSignalSource { + public static final BooleanProperty LIT = BlockStateProperties.LIT; + public static final EnumProperty FACE = BlockStateProperties.ATTACH_FACE; + public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + private static final VoxelShape CEILING_SHAPE = Block.box(6.0D, 6.0D, 6.0D, 10.0D, 16.0D, 10.0D); + private static final Map WALL_SHAPES = Map.of( + Direction.NORTH, Block.box(5.5D, 3.0D, 11.0D, 10.5D, 13.0D, 16.0D), + Direction.SOUTH, Block.box(5.5D, 3.0D, 0.0D, 10.5D, 13.0D, 5.0D), + Direction.WEST, Block.box(11.0D, 3.0D, 5.5D, 16.0D, 13.0D, 10.5D), + Direction.EAST, Block.box(0.0D, 3.0D, 5.5D, 5.0D, 13.0D, 10.5D) + ); + private static final DustParticleOptions BLUESTONE_PARTICLE = new DustParticleOptions(new Vector3f(0.18F, 0.54F, 1.0F), 1.0F); + private static final Map> RECENT_TOGGLES = new WeakHashMap<>(); + + public BluestoneTorchBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.defaultBlockState() + .setValue(LIT, true) + .setValue(FACE, AttachFace.CEILING) + .setValue(FACING, Direction.NORTH)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(FACE) == AttachFace.WALL ? WALL_SHAPES.get(state.getValue(FACING)) : CEILING_SHAPE; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return switch (state.getValue(FACE)) { + case CEILING -> BluestonePlacementHelper.hasCeilingSupport(level, pos); + case WALL -> this.hasWallSupport(level, pos, state.getValue(FACING)); + default -> false; + }; + } + + @Override + public BlockState getStateForPlacement(net.minecraft.world.item.context.BlockPlaceContext context) { + LevelReader level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + for (Direction direction : context.getNearestLookingDirections()) { + if (direction == Direction.DOWN && BluestonePlacementHelper.hasCeilingSupport(level, pos)) { + return this.defaultBlockState().setValue(FACE, AttachFace.CEILING); + } + if (direction.getAxis().isHorizontal()) { + Direction facing = direction.getOpposite(); + BlockState state = this.defaultBlockState().setValue(FACE, AttachFace.WALL).setValue(FACING, facing); + if (state.canSurvive(level, pos)) { + return state; + } + } + } + return null; + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, net.minecraft.world.level.LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!state.canSurvive(level, pos)) { + return net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + public boolean isSignalSource(BlockState state) { + return true; + } + + @Override + public int getSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { + if (this.isDirectlyPoweringRedstoneWire(level, pos, direction)) { + return 0; + } + if (this.isBlockedOutputDirection(state, direction)) { + return 0; + } + return state.getValue(LIT) ? 15 : 0; + } + + @Override + public int getDirectSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { + if (!state.getValue(LIT)) { + return 0; + } + if (this.isDirectlyPoweringRedstoneWire(level, pos, direction)) { + return 0; + } + if (state.getValue(FACE) == AttachFace.WALL) { + return direction == Direction.UP ? 15 : 0; + } + return this.isBlockedOutputDirection(state, direction) ? 0 : 15; + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean moving) { + super.onPlace(state, level, pos, oldState, moving); + BluestoneSignalHelper.updateBluestoneNeighbors(level, pos); + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + super.onRemove(state, level, pos, newState, movedByPiston); + if (!state.is(newState.getBlock())) { + BluestoneSignalHelper.updateBluestoneNeighbors(level, pos); + } + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean moving) { + if (!level.isClientSide) { + boolean powered = this.hasInputSignal(level, pos, state); + if (state.getValue(LIT) == powered) { + level.scheduleTick(pos, this, 2); + } + } + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + boolean powered = this.hasInputSignal(level, pos, state); + boolean lit = state.getValue(LIT); + + if (lit) { + if (powered) { + level.setBlock(pos, state.setValue(LIT, false), 3); + if (this.isToggledTooFrequently(level, pos, true)) { + level.levelEvent(1502, pos, 0); + level.playSound(null, pos, SoundEvents.REDSTONE_TORCH_BURNOUT, SoundSource.BLOCKS, 0.5F, 2.6F + (level.random.nextFloat() - level.random.nextFloat()) * 0.8F); + level.scheduleTick(pos, this, 160); + } + } + } else if (!powered && !this.isToggledTooFrequently(level, pos, false)) { + level.setBlock(pos, state.setValue(LIT, true), 3); + } + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + if (!state.getValue(LIT)) { + return; + } + double x = pos.getX() + 0.5D; + double y = pos.getY() + (state.getValue(FACE) == AttachFace.CEILING ? 0.3D : 0.35D); + double z = pos.getZ() + 0.5D; + if (state.getValue(FACE) == AttachFace.WALL) { + Direction facing = state.getValue(FACING).getOpposite(); + x += 0.27D * facing.getStepX(); + z += 0.27D * facing.getStepZ(); + } + level.addParticle(ParticleTypes.SMOKE, x, y, z, 0.0D, 0.0D, 0.0D); + level.addParticle(BLUESTONE_PARTICLE, x, y, z, 0.0D, 0.0D, 0.0D); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(LIT, FACE, FACING); + } + + @Override + public int getBluestoneSignal(LevelReader level, BlockPos pos, BlockState state, Direction direction) { + return this.isBlockedOutputDirection(state, direction) ? 0 : state.getValue(LIT) ? 15 : 0; + } + + @Override + public BlockState rotate(BlockState state, Rotation rotation) { + return state.getValue(FACE) == AttachFace.WALL ? state.setValue(FACING, rotation.rotate(state.getValue(FACING))) : state; + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return state.getValue(FACE) == AttachFace.WALL ? state.rotate(mirror.getRotation(state.getValue(FACING))) : state; + } + + private boolean hasInputSignal(Level level, BlockPos pos, BlockState state) { + Direction supportDirection = state.getValue(FACE) == AttachFace.CEILING ? Direction.UP : state.getValue(FACING).getOpposite(); + return level.hasSignal(pos.relative(supportDirection), supportDirection); + } + + private boolean hasWallSupport(LevelReader level, BlockPos pos, Direction facing) { + BlockPos supportPos = pos.relative(facing.getOpposite()); + return level.getBlockState(supportPos).isFaceSturdy(level, supportPos, facing); + } + + private boolean isBlockedOutputDirection(BlockState state, Direction direction) { + return this.getBlockedOutputDirection(state) == direction; + } + + private boolean isDirectlyPoweringRedstoneWire(BlockGetter level, BlockPos pos, Direction direction) { + return level.getBlockState(pos.relative(direction.getOpposite())).is(Blocks.REDSTONE_WIRE); + } + + private Direction getBlockedOutputDirection(BlockState state) { + return state.getValue(FACE) == AttachFace.WALL ? state.getValue(FACING) : Direction.DOWN; + } + + private boolean isToggledTooFrequently(Level level, BlockPos pos, boolean addNew) { + List toggles = RECENT_TOGGLES.computeIfAbsent(level, ignored -> new ArrayList<>()); + if (addNew) { + toggles.add(new Toggle(pos.immutable(), level.getGameTime())); + } + + long cutoff = level.getGameTime() - 60L; + toggles.removeIf(toggle -> toggle.gameTime < cutoff); + + int count = 0; + for (Toggle toggle : toggles) { + if (toggle.pos.equals(pos)) { + count++; + if (count >= 8) { + return true; + } + } + } + return false; + } + + private record Toggle(BlockPos pos, long gameTime) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneWireBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneWireBlock.java new file mode 100644 index 00000000..3ee56dc7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneWireBlock.java @@ -0,0 +1,434 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.google.common.collect.ImmutableMap; +import com.mojang.serialization.MapCodec; +import java.util.Map; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.ItemStack; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +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.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RedStoneWireBlock; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.TrapDoorBlock; +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.EnumProperty; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class BluestoneWireBlock extends Block implements BluestoneSignalSource { + public static final EnumProperty NORTH = EnumProperty.create("north", BluestoneSide.class); + public static final EnumProperty EAST = EnumProperty.create("east", BluestoneSide.class); + public static final EnumProperty SOUTH = EnumProperty.create("south", BluestoneSide.class); + public static final EnumProperty WEST = EnumProperty.create("west", BluestoneSide.class); + public static final IntegerProperty POWER = IntegerProperty.create("power", 0, 15); + public static final Map> PROPERTY_BY_DIRECTION = ImmutableMap.>builder() + .put(Direction.NORTH, NORTH) + .put(Direction.EAST, EAST) + .put(Direction.SOUTH, SOUTH) + .put(Direction.WEST, WEST) + .build(); + private static final VoxelShape DOT_SHAPE = Block.box(3.0D, 14.0D, 3.0D, 13.0D, 16.0D, 13.0D); + private static final VoxelShape NORTH_SHAPE = Block.box(3.0D, 14.0D, 0.0D, 13.0D, 16.0D, 13.0D); + private static final VoxelShape SOUTH_SHAPE = Block.box(3.0D, 14.0D, 3.0D, 13.0D, 16.0D, 16.0D); + private static final VoxelShape WEST_SHAPE = Block.box(0.0D, 14.0D, 3.0D, 13.0D, 16.0D, 13.0D); + private static final VoxelShape EAST_SHAPE = Block.box(3.0D, 14.0D, 3.0D, 16.0D, 16.0D, 13.0D); + private static boolean shouldSignal = true; + private final BlockState crossState; + + public BluestoneWireBlock() { + this(BlockBehaviour.Properties.of().noCollission().instabreak().sound(SoundType.WOOL)); + } + + public BluestoneWireBlock(BlockBehaviour.Properties properties) { + super(properties); + BlockState defaultState = this.defaultBlockState() + .setValue(NORTH, BluestoneSide.NONE) + .setValue(EAST, BluestoneSide.NONE) + .setValue(SOUTH, BluestoneSide.NONE) + .setValue(WEST, BluestoneSide.NONE) + .setValue(POWER, 0); + this.registerDefaultState(defaultState); + this.crossState = defaultState + .setValue(NORTH, BluestoneSide.SIDE) + .setValue(EAST, BluestoneSide.SIDE) + .setValue(SOUTH, BluestoneSide.SIDE) + .setValue(WEST, BluestoneSide.SIDE); + } + + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return BluestonePlacementHelper.hasCeilingSupport(level, pos); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + if (!BluestonePlacementHelper.canPlaceOnCeiling(context)) { + return null; + } + return this.updatePowerFromNeighbors(context.getLevel(), context.getClickedPos(), this.calculateShape(context.getLevel(), context.getClickedPos(), this.defaultBlockState())); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + VoxelShape shape = DOT_SHAPE; + if (state.getValue(NORTH) != BluestoneSide.NONE) { + shape = Shapes.or(shape, NORTH_SHAPE); + } + if (state.getValue(EAST) != BluestoneSide.NONE) { + shape = Shapes.or(shape, EAST_SHAPE); + } + if (state.getValue(SOUTH) != BluestoneSide.NONE) { + shape = Shapes.or(shape, SOUTH_SHAPE); + } + if (state.getValue(WEST) != BluestoneSide.NONE) { + shape = Shapes.or(shape, WEST_SHAPE); + } + return shape; + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.empty(); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!state.canSurvive(level, pos)) { + return net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + if (direction.getAxis().isHorizontal() || direction == Direction.UP || direction == Direction.DOWN) { + BlockState shaped = this.calculateShape(level, pos, state); + return level instanceof Level actualLevel ? this.updatePowerFromNeighbors(actualLevel, pos, shaped) : shaped; + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean moving) { + if (!oldState.is(state.getBlock())) { + this.notifyNeighborShapes(level, pos); + this.updateNeighbors(level, pos, state); + } + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock())) { + this.notifyNeighborShapes(level, pos); + for (Direction direction : Direction.Plane.HORIZONTAL) { + this.updateNeighborWire(level, pos.relative(direction)); + this.updateNeighborWire(level, pos.relative(direction).above()); + this.updateNeighborWire(level, pos.relative(direction).below()); + } + } + super.onRemove(state, level, pos, newState, movedByPiston); + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean moving) { + if (!level.isClientSide) { + this.updateNeighbors(level, pos, state); + } + } + + @Override + public boolean isSignalSource(BlockState state) { + return shouldSignal; + } + + @Override + public int getSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { + if (!shouldSignal || direction == Direction.UP) { + return 0; + } + if (direction.getAxis().isHorizontal()) { + EnumProperty property = PROPERTY_BY_DIRECTION.get(direction); + if (property != null && state.getValue(property) == BluestoneSide.NONE) { + return 0; + } + } + return state.getValue(POWER); + } + + @Override + public int getDirectSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { + return this.getSignal(state, level, pos, direction); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, net.minecraft.world.InteractionHand hand, BlockHitResult hitResult) { + if (!player.getAbilities().mayBuild) { + return InteractionResult.PASS; + } + if (!isCross(state) && !isDot(state)) { + return InteractionResult.PASS; + } + BlockState toggled = isCross(state) ? this.defaultBlockState() : this.crossState; + BlockState updated = toggled.setValue(POWER, state.getValue(POWER)); + if (!hasAnyAutomaticConnections(level, pos)) { + if (!updated.equals(state)) { + level.setBlock(pos, updated, 3); + } + return InteractionResult.SUCCESS; + } + updated = this.calculateShape(level, pos, updated); + if (!updated.equals(state)) { + level.setBlock(pos, updated, 3); + this.updateNeighbors(level, pos, updated); + return InteractionResult.SUCCESS; + } + return InteractionResult.PASS; + } + + @Override + public ItemStack getCloneItemStack(BlockGetter level, BlockPos pos, BlockState state) { + return new ItemStack(BuiltInRegistries.ITEM.get(new ResourceLocation("antarchy", "bluestone"))); + } + + @Override + public BlockState rotate(BlockState state, Rotation rotation) { + return switch (rotation) { + case CLOCKWISE_180 -> state.setValue(NORTH, state.getValue(SOUTH)) + .setValue(EAST, state.getValue(WEST)) + .setValue(SOUTH, state.getValue(NORTH)) + .setValue(WEST, state.getValue(EAST)); + case COUNTERCLOCKWISE_90 -> state.setValue(NORTH, state.getValue(EAST)) + .setValue(EAST, state.getValue(SOUTH)) + .setValue(SOUTH, state.getValue(WEST)) + .setValue(WEST, state.getValue(NORTH)); + case CLOCKWISE_90 -> state.setValue(NORTH, state.getValue(WEST)) + .setValue(EAST, state.getValue(NORTH)) + .setValue(SOUTH, state.getValue(EAST)) + .setValue(WEST, state.getValue(SOUTH)); + default -> state; + }; + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return switch (mirror) { + case LEFT_RIGHT -> state.setValue(NORTH, state.getValue(SOUTH)).setValue(SOUTH, state.getValue(NORTH)); + case FRONT_BACK -> state.setValue(EAST, state.getValue(WEST)).setValue(WEST, state.getValue(EAST)); + default -> super.mirror(state, mirror); + }; + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(NORTH, EAST, SOUTH, WEST, POWER); + } + + @Override + public int getBluestoneSignal(LevelReader level, BlockPos pos, BlockState state, Direction direction) { + return direction == Direction.UP ? 0 : state.getValue(POWER); + } + + private void updateNeighbors(Level level, BlockPos pos, BlockState state) { + if (!state.is(this)) { + return; + } + BlockState shaped = this.calculateShape(level, pos, state); + BlockState powered = this.updatePowerFromNeighbors(level, pos, shaped); + if (powered.equals(state)) { + return; + } + level.setBlock(pos, powered, 2); + this.notifyNeighborShapes(level, pos); + for (Direction direction : Direction.Plane.HORIZONTAL) { + this.updateNeighborWire(level, pos.relative(direction)); + this.updateNeighborWire(level, pos.relative(direction).above()); + this.updateNeighborWire(level, pos.relative(direction).below()); + } + } + + private void updateNeighborWire(Level level, BlockPos pos) { + BlockState neighborState = level.getBlockState(pos); + if (!neighborState.is(this)) { + return; + } + BlockState shaped = this.calculateShape(level, pos, neighborState); + BlockState powered = this.updatePowerFromNeighbors(level, pos, shaped); + if (powered.equals(neighborState)) { + return; + } + level.setBlock(pos, powered, 2); + this.notifyNeighborShapes(level, pos); + } + + private void notifyNeighborShapes(Level level, BlockPos pos) { + level.updateNeighborsAt(pos, this); + for (Direction direction : Direction.values()) { + level.updateNeighborsAt(pos.relative(direction), this); + } + } + + private BlockState updatePowerFromNeighbors(Level level, BlockPos pos, BlockState state) { + int newPower = this.calculateTargetStrength(level, pos); + return state.getValue(POWER) == newPower ? state : state.setValue(POWER, newPower); + } + + private int calculateTargetStrength(Level level, BlockPos pos) { + shouldSignal = false; + int external = this.getExternalSignal(level, pos); + shouldSignal = true; + int neighborWirePower = 0; + boolean openBelowCurrent = !level.getBlockState(pos.below()).isRedstoneConductor(level, pos.below()); + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos sidePos = pos.relative(direction); + BlockState sideState = level.getBlockState(sidePos); + neighborWirePower = Math.max(neighborWirePower, BluestoneSignalHelper.getWireSignal(level, sidePos)); + if (sideState.isRedstoneConductor(level, sidePos)) { + neighborWirePower = Math.max(neighborWirePower, BluestoneSignalHelper.getWireSignal(level, sidePos.below())); + } else if (openBelowCurrent) { + neighborWirePower = Math.max(neighborWirePower, BluestoneSignalHelper.getWireSignal(level, sidePos.above())); + } + } + + return Math.max(external, Math.max(0, neighborWirePower - 1)); + } + + private int getExternalSignal(Level level, BlockPos pos) { + int signal = 0; + for (Direction direction : Direction.values()) { + BlockPos neighborPos = pos.relative(direction); + BlockState neighborState = level.getBlockState(neighborPos); + if (BluestoneSignalHelper.isVanillaRedstoneComponent(neighborState)) { + continue; + } + if (neighborState.getBlock() instanceof BluestoneWireBlock) { + continue; + } + if (neighborState.getBlock() instanceof BluestoneSignalSource source) { + signal = Math.max(signal, source.getBluestoneSignal(level, neighborPos, neighborState, direction)); + if (signal >= 15) { + return 15; + } + continue; + } + signal = Math.max(signal, BluestoneSignalHelper.getSignalExcludingRedstoneWire(level, neighborPos, direction)); + if (signal >= 15) { + return 15; + } + } + return signal; + } + + private static boolean isCross(BlockState state) { + return state.getValue(NORTH) != BluestoneSide.NONE + && state.getValue(EAST) != BluestoneSide.NONE + && state.getValue(SOUTH) != BluestoneSide.NONE + && state.getValue(WEST) != BluestoneSide.NONE; + } + + private static boolean isDot(BlockState state) { + return state.getValue(NORTH) == BluestoneSide.NONE + && state.getValue(EAST) == BluestoneSide.NONE + && state.getValue(SOUTH) == BluestoneSide.NONE + && state.getValue(WEST) == BluestoneSide.NONE; + } + + private boolean hasAnyAutomaticConnections(LevelReader level, BlockPos pos) { + return this.getConnectingSide(level, pos, Direction.NORTH) != BluestoneSide.NONE + || this.getConnectingSide(level, pos, Direction.EAST) != BluestoneSide.NONE + || this.getConnectingSide(level, pos, Direction.SOUTH) != BluestoneSide.NONE + || this.getConnectingSide(level, pos, Direction.WEST) != BluestoneSide.NONE; + } + + private BlockState calculateShape(LevelReader level, BlockPos pos, BlockState state) { + boolean wasDot = isDot(state); + BlockState result = state.setValue(NORTH, this.getConnectingSide(level, pos, Direction.NORTH)) + .setValue(EAST, this.getConnectingSide(level, pos, Direction.EAST)) + .setValue(SOUTH, this.getConnectingSide(level, pos, Direction.SOUTH)) + .setValue(WEST, this.getConnectingSide(level, pos, Direction.WEST)); + if (wasDot && isDot(result)) { + return result; + } + + boolean north = result.getValue(NORTH) != BluestoneSide.NONE; + boolean south = result.getValue(SOUTH) != BluestoneSide.NONE; + boolean east = result.getValue(EAST) != BluestoneSide.NONE; + boolean west = result.getValue(WEST) != BluestoneSide.NONE; + boolean northSouthEmpty = !north && !south; + boolean eastWestEmpty = !east && !west; + if (!west && northSouthEmpty) { + result = result.setValue(WEST, BluestoneSide.SIDE); + } + if (!east && northSouthEmpty) { + result = result.setValue(EAST, BluestoneSide.SIDE); + } + if (!north && eastWestEmpty) { + result = result.setValue(NORTH, BluestoneSide.SIDE); + } + if (!south && eastWestEmpty) { + result = result.setValue(SOUTH, BluestoneSide.SIDE); + } + return result; + } + + private BluestoneSide getConnectingSide(LevelReader level, BlockPos pos, Direction direction) { + boolean openBelowCurrent = !level.getBlockState(pos.below()).isRedstoneConductor(level, pos.below()); + return this.getConnectingSide(level, pos, direction, openBelowCurrent); + } + + private BluestoneSide getConnectingSide(LevelReader level, BlockPos pos, Direction direction, boolean openBelowCurrent) { + BlockPos sidePos = pos.relative(direction); + BlockState sideState = level.getBlockState(sidePos); + if (openBelowCurrent) { + boolean canSupportBelow = sideState.getBlock() instanceof TrapDoorBlock + || Block.canSupportCenter(level, sidePos, Direction.DOWN); + if (canSupportBelow && this.canConnectTo(level.getBlockState(sidePos.below()), direction)) { + return sideState.isFaceSturdy(level, sidePos, direction.getOpposite()) ? BluestoneSide.DOWN : BluestoneSide.SIDE; + } + } + + if (this.canConnectTo(sideState, direction)) { + return BluestoneSide.SIDE; + } + + if (sideState.isRedstoneConductor(level, sidePos)) { + return BluestoneSide.NONE; + } + + BlockPos sidePosAbove = sidePos.above(); + return this.canConnectTo(level.getBlockState(sidePosAbove), direction) ? BluestoneSide.SIDE : BluestoneSide.NONE; + } + + private boolean canConnectTo(BlockState state, Direction direction) { + if (BluestoneSignalHelper.isVanillaRedstoneComponent(state)) { + return false; + } + if (state.getBlock() instanceof BluestoneWireBlock || state.getBlock() instanceof BluestoneTorchBlock || state.getBlock() instanceof BluestoneBlock) { + return true; + } + if (state.getBlock() instanceof BluestoneRepeaterBlock || state.getBlock() instanceof BluestoneComparatorBlock) { + Direction facing = state.getValue(HorizontalDirectionalBlock.FACING); + return facing == direction || facing == direction.getOpposite(); + } + return state.is(AntarchyTags.Blocks.BLUESTONE_CONNECTABLE); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BlushMossBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BlushMossBlock.java new file mode 100644 index 00000000..2fd81e18 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BlushMossBlock.java @@ -0,0 +1,47 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.MapCodec; +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.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public class BlushMossBlock extends Block implements BonemealableBlock { + private static final ResourceKey> BLUSH_MOSS_PATCH_BONEMEAL = ResourceKey.create( + Registries.CONFIGURED_FEATURE, + new ResourceLocation(Antarchy.MODID, "blush_moss_patch_bonemeal") + ); + + public BlushMossBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return level.getBlockState(pos.above()).isAir(); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(BLUSH_MOSS_PATCH_BONEMEAL); + feature.value().place(level, level.getChunkSource().getGenerator(), random, pos); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BlushMossCarpetBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BlushMossCarpetBlock.java new file mode 100644 index 00000000..14f0de09 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BlushMossCarpetBlock.java @@ -0,0 +1,130 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockGetter; +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.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.WallSide; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class BlushMossCarpetBlock extends Block { + public static final BooleanProperty BOTTOM = BlockStateProperties.BOTTOM; + public static final net.minecraft.world.level.block.state.properties.EnumProperty NORTH_WALL = BlockStateProperties.NORTH_WALL; + public static final net.minecraft.world.level.block.state.properties.EnumProperty EAST_WALL = BlockStateProperties.EAST_WALL; + public static final net.minecraft.world.level.block.state.properties.EnumProperty SOUTH_WALL = BlockStateProperties.SOUTH_WALL; + public static final net.minecraft.world.level.block.state.properties.EnumProperty WEST_WALL = BlockStateProperties.WEST_WALL; + + private static final VoxelShape FLOOR_SHAPE = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D); + private static final VoxelShape NORTH_LOW = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 6.0D, 1.0D); + private static final VoxelShape NORTH_TALL = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 1.0D); + private static final VoxelShape EAST_LOW = Block.box(15.0D, 0.0D, 0.0D, 16.0D, 6.0D, 16.0D); + private static final VoxelShape EAST_TALL = Block.box(15.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D); + private static final VoxelShape SOUTH_LOW = Block.box(0.0D, 0.0D, 15.0D, 16.0D, 6.0D, 16.0D); + private static final VoxelShape SOUTH_TALL = Block.box(0.0D, 0.0D, 15.0D, 16.0D, 16.0D, 16.0D); + private static final VoxelShape WEST_LOW = Block.box(0.0D, 0.0D, 0.0D, 1.0D, 6.0D, 16.0D); + private static final VoxelShape WEST_TALL = Block.box(0.0D, 0.0D, 0.0D, 1.0D, 16.0D, 16.0D); + + public BlushMossCarpetBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(BOTTOM, true) + .setValue(NORTH_WALL, WallSide.NONE) + .setValue(EAST_WALL, WallSide.NONE) + .setValue(SOUTH_WALL, WallSide.NONE) + .setValue(WEST_WALL, WallSide.NONE)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(BOTTOM, NORTH_WALL, EAST_WALL, SOUTH_WALL, WEST_WALL); + } + + @Override + public BlockState getStateForPlacement(net.minecraft.world.item.context.BlockPlaceContext context) { + BlockPos pos = context.getClickedPos(); + Direction face = context.getClickedFace(); + BlockState state = this.defaultBlockState() + .setValue(BOTTOM, face == Direction.UP) + .setValue(NORTH_WALL, WallSide.NONE) + .setValue(EAST_WALL, WallSide.NONE) + .setValue(SOUTH_WALL, WallSide.NONE) + .setValue(WEST_WALL, WallSide.NONE); + if (!state.getValue(BOTTOM)) { + state = switch (face) { + case NORTH -> state.setValue(NORTH_WALL, WallSide.TALL); + case EAST -> state.setValue(EAST_WALL, WallSide.TALL); + case SOUTH -> state.setValue(SOUTH_WALL, WallSide.TALL); + case WEST -> state.setValue(WEST_WALL, WallSide.TALL); + default -> state; + }; + } + return state; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + if (state.getValue(BOTTOM)) { + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + if (supportsWall(level, pos, Direction.NORTH, state.getValue(NORTH_WALL))) { + return true; + } + if (supportsWall(level, pos, Direction.EAST, state.getValue(EAST_WALL))) { + return true; + } + if (supportsWall(level, pos, Direction.SOUTH, state.getValue(SOUTH_WALL))) { + return true; + } + if (supportsWall(level, pos, Direction.WEST, state.getValue(WEST_WALL))) { + return true; + } + + return level.getBlockState(pos.above()).isFaceSturdy(level, pos.above(), Direction.DOWN); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + return state.canSurvive(level, pos) ? state : net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + if (state.getValue(BOTTOM)) { + return FLOOR_SHAPE; + } + + VoxelShape shape = Shapes.empty(); + shape = combine(shape, state.getValue(NORTH_WALL), NORTH_LOW, NORTH_TALL); + shape = combine(shape, state.getValue(EAST_WALL), EAST_LOW, EAST_TALL); + shape = combine(shape, state.getValue(SOUTH_WALL), SOUTH_LOW, SOUTH_TALL); + shape = combine(shape, state.getValue(WEST_WALL), WEST_LOW, WEST_TALL); + return shape.isEmpty() ? FLOOR_SHAPE : shape; + } + + private static boolean supportsWall(LevelReader level, BlockPos pos, Direction direction, WallSide side) { + if (side == WallSide.NONE) { + return false; + } + BlockPos supportPos = pos.relative(direction); + return level.getBlockState(supportPos).isFaceSturdy(level, supportPos, direction.getOpposite()); + } + + private static VoxelShape combine(VoxelShape current, WallSide side, VoxelShape lowShape, VoxelShape tallShape) { + if (side == WallSide.NONE) { + return current; + } + return Shapes.or(current, side == WallSide.TALL ? tallShape : lowShape); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BrutalflyCocoonSpawnerBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BrutalflyCocoonSpawnerBlock.java new file mode 100644 index 00000000..5de67bcc --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BrutalflyCocoonSpawnerBlock.java @@ -0,0 +1,46 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public class BrutalflyCocoonSpawnerBlock extends Block { + + public BrutalflyCocoonSpawnerBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.INVISIBLE; + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), Block.UPDATE_ALL); + + BrutalflyEntity brutalfly = AntarchyObjects.BRUTALFLY.get().create(level); + if (brutalfly == null) { + return; + } + + BlockPos anchor = pos.above(); + brutalfly.moveTo( + anchor.getX() + 0.5D, + anchor.getY() - 1.5D, + anchor.getZ() + 0.5D, + random.nextFloat() * 360.0F, + 0.0F + ); + brutalfly.setCocooned(true, anchor); + brutalfly.setHealth(brutalfly.getMaxHealth()); + level.addFreshEntity(brutalfly); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BuddingBloodCrystalBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BuddingBloodCrystalBlock.java new file mode 100644 index 00000000..2ef4a7eb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/BuddingBloodCrystalBlock.java @@ -0,0 +1,84 @@ +package com.craisinlord.antarchy.content.block; + +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.level.block.AmethystClusterBlock; +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.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; + +import java.util.function.Supplier; + +public class BuddingBloodCrystalBlock extends Block { + private static final Direction[] DIRECTIONS = Direction.values(); + + private final Supplier smallBud; + private final Supplier mediumBud; + private final Supplier largeBud; + private final Supplier crystal; + + public BuddingBloodCrystalBlock( + Properties properties, + Supplier smallBud, + Supplier mediumBud, + Supplier largeBud, + Supplier crystal + ) { + super(properties); + this.smallBud = smallBud; + this.mediumBud = mediumBud; + this.largeBud = largeBud; + this.crystal = crystal; + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return true; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (random.nextInt(5) != 0) { + return; + } + + Direction direction = DIRECTIONS[random.nextInt(DIRECTIONS.length)]; + BlockPos targetPos = pos.relative(direction); + BlockState targetState = level.getBlockState(targetPos); + Block nextBlock = null; + + if (canGrowInto(targetState)) { + nextBlock = this.smallBud.get(); + } else if (isStage(targetState, this.smallBud.get(), direction)) { + nextBlock = this.mediumBud.get(); + } else if (isStage(targetState, this.mediumBud.get(), direction)) { + nextBlock = this.largeBud.get(); + } else if (isStage(targetState, this.largeBud.get(), direction)) { + nextBlock = this.crystal.get(); + } + + if (nextBlock == null) { + return; + } + + FluidState fluidState = targetState.getFluidState(); + BlockState nextState = nextBlock.defaultBlockState() + .setValue(AmethystClusterBlock.FACING, direction) + .setValue(BlockStateProperties.WATERLOGGED, fluidState.getType() == Fluids.WATER && fluidState.getAmount() == 8); + level.setBlockAndUpdate(targetPos, nextState); + } + + private static boolean canGrowInto(BlockState state) { + return state.isAir() || state.is(Blocks.WATER) && state.getFluidState().getAmount() == 8; + } + + private static boolean isStage(BlockState state, Block block, Direction direction) { + return state.is(block) && state.hasProperty(AmethystClusterBlock.FACING) && state.getValue(AmethystClusterBlock.FACING) == direction; + } +} + diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CamelliaBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CamelliaBlock.java new file mode 100644 index 00000000..5ba3ed23 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CamelliaBlock.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; + +public class CamelliaBlock extends MilkweedBlock { + public CamelliaBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + BlockPos dropPos = state.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.UPPER ? pos.below() : pos; + popResource(level, dropPos, new ItemStack(this.asItem())); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/ChitinSpikeBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/ChitinSpikeBlock.java new file mode 100644 index 00000000..10833b79 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/ChitinSpikeBlock.java @@ -0,0 +1,160 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.MapCodec; +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.item.context.BlockPlaceContext; +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.PointedDripstoneBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DripstoneThickness; +import net.minecraft.world.level.material.Fluids; + +public class ChitinSpikeBlock extends PointedDripstoneBlock { + @SuppressWarnings("rawtypes") + + public ChitinSpikeBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + LevelAccessor level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + Direction direction = calculateTipDirection(level, pos, context.getNearestLookingVerticalDirection().getOpposite()); + if (direction == null) { + return null; + } + + boolean mergeTips = !context.isSecondaryUseActive(); + DripstoneThickness thickness = calculateDripstoneThickness(level, pos, direction, mergeTips); + if (thickness == null) { + return null; + } + + return this.defaultBlockState() + .setValue(TIP_DIRECTION, direction) + .setValue(THICKNESS, thickness) + .setValue(WATERLOGGED, level.getFluidState(pos).getType() == Fluids.WATER); + } + + @Override + public BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + if (direction != Direction.UP && direction != Direction.DOWN) { + return state; + } + + Direction tipDirection = state.getValue(TIP_DIRECTION); + if (tipDirection == Direction.DOWN && level.getBlockTicks().hasScheduledTick(pos, this)) { + return state; + } + + if (direction == tipDirection.getOpposite() && !this.canSurvive(state, level, pos)) { + if (tipDirection == Direction.DOWN) { + level.scheduleTick(pos, this, 2); + } else { + level.scheduleTick(pos, this, 1); + } + + return state; + } + + boolean mergeTips = state.getValue(THICKNESS) == DripstoneThickness.TIP_MERGE; + return state.setValue(THICKNESS, calculateDripstoneThickness(level, pos, tipDirection, mergeTips)); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return isValidPointedDripstonePlacement(level, pos, state.getValue(TIP_DIRECTION)); + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (this.canSurvive(state, level, pos)) { + return; + } + + if (state.getValue(TIP_DIRECTION) == Direction.DOWN) { + BlockPos.MutableBlockPos root = pos.mutable(); + while (isChitinSpikeWithDirection(level.getBlockState(root.above()), Direction.DOWN)) { + root.move(Direction.UP); + } + + BlockPos.MutableBlockPos cursor = root.mutable(); + while (isChitinSpikeWithDirection(level.getBlockState(cursor), Direction.DOWN)) { + BlockState fallingState = level.getBlockState(cursor); + if (isChitinSpikeWithDirection(fallingState, Direction.DOWN)) { + net.minecraft.world.entity.item.FallingBlockEntity.fall(level, cursor, fallingState); + } + cursor.move(Direction.DOWN); + } + return; + } + + BlockPos.MutableBlockPos cursor = pos.mutable(); + while (isChitinSpikeWithDirection(level.getBlockState(cursor), Direction.UP)) { + BlockState spikeState = level.getBlockState(cursor); + dropResources(spikeState, level, cursor); + level.removeBlock(cursor, false); + cursor.move(Direction.UP); + } + } + + private static Direction calculateTipDirection(LevelReader level, BlockPos pos, Direction preferredDirection) { + if (isValidPointedDripstonePlacement(level, pos, preferredDirection)) { + return preferredDirection; + } + + Direction opposite = preferredDirection.getOpposite(); + return isValidPointedDripstonePlacement(level, pos, opposite) ? opposite : null; + } + + private static DripstoneThickness calculateDripstoneThickness(LevelReader level, BlockPos pos, Direction direction, boolean mergeTips) { + Direction opposite = direction.getOpposite(); + BlockState forwardState = level.getBlockState(pos.relative(direction)); + if (isChitinSpikeWithDirection(forwardState, opposite)) { + return !mergeTips && forwardState.getValue(THICKNESS) != DripstoneThickness.TIP_MERGE + ? DripstoneThickness.TIP + : DripstoneThickness.TIP_MERGE; + } + + if (!isChitinSpikeWithDirection(forwardState, direction)) { + return DripstoneThickness.TIP; + } + + DripstoneThickness forwardThickness = forwardState.getValue(THICKNESS); + if (forwardThickness != DripstoneThickness.TIP && forwardThickness != DripstoneThickness.TIP_MERGE) { + BlockState backState = level.getBlockState(pos.relative(opposite)); + return !isChitinSpikeWithDirection(backState, direction) ? DripstoneThickness.BASE : DripstoneThickness.MIDDLE; + } + + return DripstoneThickness.FRUSTUM; + } + + private static boolean isValidPointedDripstonePlacement(LevelReader level, BlockPos pos, Direction direction) { + BlockPos supportPos = pos.relative(direction.getOpposite()); + BlockState supportState = level.getBlockState(supportPos); + return supportState.isFaceSturdy(level, supportPos, direction) || isChitinSpikeWithDirection(supportState, direction); + } + + private static boolean isChitinSpikeWithDirection(BlockState state, Direction direction) { + return state.is(AntarchyObjects.CHITIN_SPIKE.get()) && state.getValue(TIP_DIRECTION) == direction; + } +} 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 new file mode 100644 index 00000000..bf7b49b0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CloudBlock.java @@ -0,0 +1,97 @@ +package com.craisinlord.antarchy.content.block; + +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; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BucketPickup; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +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; +import org.jetbrains.annotations.Nullable; + +public final class CloudBlock extends Block implements BucketPickup { + private static final VoxelShape EMPTY = Shapes.empty(); + + private final Supplier bucketItem; + + public CloudBlock(Supplier bucketItem, BlockBehaviour.Properties properties) { + super(properties); + this.bucketItem = bucketItem; + } + + @Override + 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()) { + return EMPTY; + } + } + return Shapes.block(); + } + + @Override + public VoxelShape getVisualShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return EMPTY; + } + + @Override + public boolean skipRendering(BlockState state, BlockState adjacentBlockState, Direction side) { + return adjacentBlockState.is(this) || super.skipRendering(state, adjacentBlockState, side); + } + + @Override + public boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) { + return true; + } + + @Override + public int getLightBlock(BlockState state, BlockGetter level, BlockPos pos) { + return 0; + } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + entity.causeFallDamage(fallDistance, 0.0F, level.damageSources().fall()); + } + + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + 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); + entity.fallDistance = 0.0F; + } + + @Override + public ItemStack pickupBlock(LevelAccessor level, BlockPos pos, BlockState state) { + level.setBlock(pos, net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(), 11); + return new ItemStack(bucketItem.get()); + } + + @Override + public ItemStack getCloneItemStack(BlockGetter level, BlockPos pos, BlockState state) { + return new ItemStack(bucketItem.get()); + } + + @Override + public Optional getPickupSound() { + return Optional.of(SoundEvents.BUCKET_FILL); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CornCropBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CornCropBlock.java new file mode 100644 index 00000000..4cc2c296 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CornCropBlock.java @@ -0,0 +1,173 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +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.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +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.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.level.block.state.properties.EnumProperty; +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 CornCropBlock extends BushBlock implements BonemealableBlock { + public static final IntegerProperty AGE = BlockStateProperties.AGE_3; + public static final EnumProperty HALF = BlockStateProperties.DOUBLE_BLOCK_HALF; + private static final int MAX_AGE = 3; + private static final int TALL_AGE = 2; + private static final VoxelShape[] LOWER_SHAPES = new VoxelShape[] { + Block.box(4.0D, 0.0D, 4.0D, 12.0D, 6.0D, 12.0D), + Block.box(3.0D, 0.0D, 3.0D, 13.0D, 11.0D, 13.0D), + Block.box(2.0D, 0.0D, 2.0D, 14.0D, 14.0D, 14.0D), + Block.box(1.0D, 0.0D, 1.0D, 15.0D, 16.0D, 15.0D) + }; + private static final VoxelShape[] UPPER_SHAPES = new VoxelShape[] { + Block.box(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D), + Block.box(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D), + Block.box(2.0D, 0.0D, 2.0D, 14.0D, 16.0D, 14.0D), + Block.box(1.0D, 0.0D, 1.0D, 15.0D, 16.0D, 15.0D) + }; + private static final ResourceLocation CORN_SEEDS_ID = new ResourceLocation("antarchy", "corn_seeds"); + + public CornCropBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(AGE, 0).setValue(HALF, DoubleBlockHalf.LOWER)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + int age = state.getValue(AGE); + return state.getValue(HALF) == DoubleBlockHalf.UPPER ? UPPER_SHAPES[age] : LOWER_SHAPES[age]; + } + + @Override + public boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(Blocks.FARMLAND); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + DoubleBlockHalf half = state.getValue(HALF); + int age = state.getValue(AGE); + if (half == DoubleBlockHalf.UPPER) { + BlockState below = level.getBlockState(pos.below()); + return below.is(this) && below.getValue(HALF) == DoubleBlockHalf.LOWER && below.getValue(AGE) >= TALL_AGE; + } + + if (!super.canSurvive(state, level, pos)) { + return false; + } + + return age < TALL_AGE || level.getBlockState(pos.above()).is(this) + && level.getBlockState(pos.above()).getValue(HALF) == DoubleBlockHalf.UPPER + && level.getBlockState(pos.above()).getValue(AGE) == age; + } + + @Override + public BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + if (!state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return state.getValue(HALF) == DoubleBlockHalf.LOWER && state.getValue(AGE) < MAX_AGE; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (level.getRawBrightness(pos, 0) < 9 || random.nextInt(5) != 0) { + return; + } + + this.grow(level, pos, state); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + BlockPos lowerPos = state.getValue(HALF) == DoubleBlockHalf.UPPER ? pos.below() : pos; + BlockState lowerState = level.getBlockState(lowerPos); + if (!lowerState.is(this) || lowerState.getValue(HALF) != DoubleBlockHalf.LOWER) { + return false; + } + + int age = lowerState.getValue(AGE); + return age < MAX_AGE && (age >= TALL_AGE || level.getBlockState(lowerPos.above()).canBeReplaced()); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + BlockPos lowerPos = state.getValue(HALF) == DoubleBlockHalf.UPPER ? pos.below() : pos; + BlockState lowerState = level.getBlockState(lowerPos); + if (lowerState.is(this)) { + this.grow(level, lowerPos, lowerState); + } + } + + private void grow(ServerLevel level, BlockPos lowerPos, BlockState lowerState) { + int age = lowerState.getValue(AGE); + if (age >= MAX_AGE) { + return; + } + + if (age + 1 >= TALL_AGE) { + BlockPos upperPos = lowerPos.above(); + if (!level.getBlockState(upperPos).canBeReplaced() && !level.getBlockState(upperPos).is(this)) { + return; + } + } + + int newAge = age + 1; + level.setBlock(lowerPos, lowerState.setValue(AGE, newAge), Block.UPDATE_ALL); + if (newAge >= TALL_AGE) { + level.setBlock(lowerPos.above(), this.defaultBlockState().setValue(HALF, DoubleBlockHalf.UPPER).setValue(AGE, newAge), Block.UPDATE_ALL); + } + } + + @Override + public ItemStack getCloneItemStack(BlockGetter level, BlockPos pos, BlockState state) { + return new ItemStack(this.getBaseSeedId()); + } + + protected ItemLike getBaseSeedId() { + Optional item = BuiltInRegistries.ITEM.getOptional(CORN_SEEDS_ID); + return item.orElse(Blocks.AIR.asItem()); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(AGE, HALF); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CorneaStalkBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CorneaStalkBlock.java new file mode 100644 index 00000000..d5f5012c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CorneaStalkBlock.java @@ -0,0 +1,178 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import com.mojang.serialization.MapCodec; +import java.util.Optional; +import com.craisinlord.antarchy.content.AntarchyTags; +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.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.ItemStack; +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.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.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; +import net.minecraft.world.item.Item; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; + +public class CorneaStalkBlock extends BushBlock implements BonemealableBlock { + public static final IntegerProperty AGE = BlockStateProperties.AGE_3; + public static final BooleanProperty HANGING = BlockStateProperties.HANGING; + private static final int MAX_AGE = 3; + private static final int RIPE_AGE = 2; + private static final VoxelShape[] FLOOR_SHAPES = new VoxelShape[] { + Block.box(5.0D, 0.0D, 5.0D, 11.0D, 7.0D, 11.0D), + Block.box(4.0D, 0.0D, 4.0D, 12.0D, 10.0D, 12.0D), + Block.box(3.0D, 0.0D, 3.0D, 13.0D, 13.0D, 13.0D), + Block.box(2.5D, 0.0D, 2.5D, 13.5D, 14.5D, 13.5D) + }; + private static final VoxelShape[] HANGING_SHAPES = new VoxelShape[] { + Block.box(5.0D, 9.0D, 5.0D, 11.0D, 16.0D, 11.0D), + Block.box(4.0D, 6.0D, 4.0D, 12.0D, 16.0D, 12.0D), + Block.box(3.0D, 3.0D, 3.0D, 13.0D, 16.0D, 13.0D), + Block.box(2.5D, 1.5D, 2.5D, 13.5D, 16.0D, 13.5D) + }; + private static final ResourceLocation CORNEA_EAR_ID = new ResourceLocation("antarchy", "cornea_ear"); + + public CorneaStalkBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(AGE, 0).setValue(HANGING, false)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(HANGING) ? HANGING_SHAPES[state.getValue(AGE)] : FLOOR_SHAPES[state.getValue(AGE)]; + } + + @Override + public boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(AntarchyTags.Blocks.CORNEA_STALK_PLANTABLE); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + BlockPos supportPos = state.getValue(HANGING) ? pos.above() : pos.below(); + return this.mayPlaceOn(level.getBlockState(supportPos), level, supportPos); + } + + @Override + public BlockState updateShape(BlockState state, net.minecraft.core.Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return state.getValue(AGE) < MAX_AGE; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + int age = state.getValue(AGE); + if (age >= MAX_AGE) { + return; + } + + BlockPos growthEndPos = state.getValue(HANGING) ? pos.below() : pos.above(); + if (level.getMaxLocalRawBrightness(growthEndPos) >= 9 && random.nextInt(5) == 0) { + level.setBlock(pos, state.setValue(AGE, age + 1), Block.UPDATE_ALL); + } + } + + @Override + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + if (!level.isClientSide && state.getValue(AGE) > 0 && entity instanceof LivingEntity livingEntity && !livingEntity.isSteppingCarefully()) { + livingEntity.hurt(AntarchyDamageSources.corneaStalkPrick(level), 1.0F); + } + super.entityInside(state, level, pos, entity); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return state.getValue(AGE) < MAX_AGE; + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + int age = state.getValue(AGE); + if (age < MAX_AGE) { + level.setBlock(pos, state.setValue(AGE, age + 1), Block.UPDATE_ALL); + } + } + + @Override + public InteractionResult use( + BlockState state, + Level level, + BlockPos pos, + Player player, + net.minecraft.world.InteractionHand hand, + net.minecraft.world.phys.BlockHitResult hitResult + ) { + if (!state.is(this) || state.getValue(AGE) < RIPE_AGE) { + return super.use(state, level, pos, player, hand, hitResult); + } + + if (!level.isClientSide) { + this.dropCorneaFruit(level, pos, level.random); + level.setBlock(pos, state.setValue(AGE, 1), Block.UPDATE_ALL); + level.playSound(null, pos, SoundEvents.CAVE_VINES_PICK_BERRIES, SoundSource.BLOCKS, 1.0F, 0.9F + level.random.nextFloat() * 0.2F); + } + + return InteractionResult.sidedSuccess(level.isClientSide); + } + + @Override + public ItemStack getCloneItemStack(BlockGetter level, BlockPos pos, BlockState state) { + return BuiltInRegistries.ITEM.getOptional(CORNEA_EAR_ID) + .map(ItemStack::new) + .orElseGet(() -> super.getCloneItemStack(level, pos, state)); + } + + @Override + public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, net.minecraft.world.level.block.entity.BlockEntity blockEntity, ItemStack stack) { + super.playerDestroy(level, player, pos, state, blockEntity, stack); + if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0) { + return; + } + + if (state.getValue(AGE) >= RIPE_AGE && level instanceof ServerLevel serverLevel) { + this.dropCorneaFruit(serverLevel, pos, serverLevel.random); + } + } + + private void dropCorneaFruit(Level level, BlockPos pos, RandomSource random) { + Optional item = BuiltInRegistries.ITEM.getOptional(CORNEA_EAR_ID); + item.ifPresent(value -> Block.popResource(level, pos, new ItemStack(value, 1 + random.nextInt(2)))); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(AGE, HANGING); + } +} 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 new file mode 100644 index 00000000..900060b9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java @@ -0,0 +1,245 @@ +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 com.mojang.serialization.MapCodec; +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 + protected 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/CreepvineBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CreepvineBlock.java new file mode 100644 index 00000000..89f39092 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CreepvineBlock.java @@ -0,0 +1,67 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +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.util.RandomSource; +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.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.VineBlock; +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.phys.BlockHitResult; + +public class CreepvineBlock extends VineBlock { + public static final BooleanProperty STUNTED = BooleanProperty.create("stunted"); + + public CreepvineBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.defaultBlockState() + .setValue(NORTH, false) + .setValue(EAST, false) + .setValue(SOUTH, false) + .setValue(WEST, false) + .setValue(UP, false) + .setValue(STUNTED, false)); + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (state.getValue(STUNTED)) { + return; + } + super.randomTick(state, level, pos, random); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + ItemStack stack = player.getItemInHand(hand); + if (!stack.is(Items.SHEARS) || state.getValue(STUNTED)) { + return super.use(state, level, pos, player, hand, hitResult); + } + + if (!level.isClientSide) { + level.setBlock(pos, state.setValue(STUNTED, true), Block.UPDATE_ALL); + stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(hand)); + level.playSound(null, pos, SoundEvents.SHEEP_SHEAR, SoundSource.BLOCKS, 1.0F, 1.0F); + } + + return InteractionResult.sidedSuccess(level.isClientSide); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(STUNTED); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CritterCageBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CritterCageBlock.java new file mode 100644 index 00000000..e6d0b289 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/CritterCageBlock.java @@ -0,0 +1,84 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.entity.CritterCageBlockEntity; +import com.craisinlord.antarchy.content.entity.ant.AntTeleportHelper; +import com.mojang.serialization.MapCodec; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.entity.player.Player; +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.RenderShape; +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.BlockGetter; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class CritterCageBlock extends BaseEntityBlock { + private static final VoxelShape SHAPE = Block.box(1.0D, 1.0D, 1.0D, 15.0D, 14.0D, 15.0D); + + + public CritterCageBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new CritterCageBlockEntity(pos, state); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + } + + @Override + public ItemStack getCloneItemStack(net.minecraft.world.level.BlockGetter level, BlockPos pos, BlockState state) { + if (level instanceof Level actualLevel && actualLevel.getBlockEntity(pos) instanceof CritterCageBlockEntity blockEntity) { + return blockEntity.toItemStack(); + } + return super.getCloneItemStack(level, pos, state); + } + + @Override + public List getDrops(BlockState state, LootParams.Builder params) { + BlockEntity blockEntity = params.getOptionalParameter(LootContextParams.BLOCK_ENTITY); + if (blockEntity instanceof CritterCageBlockEntity critterCageBlockEntity) { + return List.of(critterCageBlockEntity.toItemStack()); + } + + return super.getDrops(state, params); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, net.minecraft.world.InteractionHand hand, BlockHitResult hitResult) { + if (!(player instanceof ServerPlayer serverPlayer)) { + return InteractionResult.SUCCESS; + } + if (!(level.getBlockEntity(pos) instanceof CritterCageBlockEntity blockEntity)) { + return InteractionResult.PASS; + } + + return AntTeleportHelper.handleCagedAntTeleport(serverPlayer, blockEntity.entityTypeId(), blockEntity.entityData()); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamCampfireBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamCampfireBlock.java new file mode 100644 index 00000000..93ce5f25 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamCampfireBlock.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.CampfireBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.entity.CampfireBlockEntity; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public class DreamCampfireBlock extends CampfireBlock { + @SuppressWarnings("rawtypes") + + public DreamCampfireBlock(BlockBehaviour.Properties properties) { + super(false, 2, properties); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + DreamCampfireBlockEntity.beginConstruction(); + try { + return new DreamCampfireBlockEntity(pos, state); + } finally { + DreamCampfireBlockEntity.endConstruction(); + } + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + BlockEntityType dreamCampfireType = AntarchyObjects.DREAM_CAMPFIRE_BLOCK_ENTITY.get(); + if (level.isClientSide) { + return state.getValue(LIT) + ? createTickerHelper(blockEntityType, dreamCampfireType, CampfireBlockEntity::particleTick) + : null; + } + return state.getValue(LIT) + ? createTickerHelper(blockEntityType, dreamCampfireType, CampfireBlockEntity::cookTick) + : createTickerHelper(blockEntityType, dreamCampfireType, CampfireBlockEntity::cooldownTick); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamCeilingFireBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamCeilingFireBlock.java new file mode 100644 index 00000000..ea364f8a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamCeilingFireBlock.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoulFireBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class DreamCeilingFireBlock extends SoulFireBlock { + private static final VoxelShape SHAPE = Block.box(2.0D, 12.0D, 2.0D, 14.0D, 16.0D, 14.0D); + + @SuppressWarnings("rawtypes") + + public DreamCeilingFireBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return level.getBlockState(pos.above()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS); + } + + @Override + public VoxelShape getShape(BlockState state, net.minecraft.world.level.BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamCeilingTorchBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamCeilingTorchBlock.java new file mode 100644 index 00000000..c1d80cb0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamCeilingTorchBlock.java @@ -0,0 +1,53 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +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.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.TorchBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class DreamCeilingTorchBlock extends TorchBlock { + private static final ResourceLocation DREAM_FIRE_FLAME_ID = new ResourceLocation(Antarchy.MODID, "dream_fire_flame"); + private static final VoxelShape SHAPE = Block.box(6.0D, 6.0D, 6.0D, 10.0D, 16.0D, 10.0D); + + public DreamCeilingTorchBlock(BlockBehaviour.Properties properties) { + super(properties, ParticleTypes.SOUL_FIRE_FLAME); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return Block.canSupportCenter(level, pos.above(), Direction.DOWN); + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + double x = pos.getX() + 0.5D; + double y = pos.getY() + 0.3D; + double z = pos.getZ() + 0.5D; + level.addParticle(ParticleTypes.SMOKE, x, y, z, 0.0D, 0.0D, 0.0D); + level.addParticle(getDreamFlameParticle(), x, y, z, 0.0D, 0.0D, 0.0D); + } + + private static ParticleOptions getDreamFlameParticle() { + return BuiltInRegistries.PARTICLE_TYPE.get(DREAM_FIRE_FLAME_ID) instanceof ParticleOptions particleOptions + ? particleOptions + : ParticleTypes.SOUL_FIRE_FLAME; + } +} 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 new file mode 100644 index 00000000..4677bc7e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.block; + +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.world.level.block.Blocks; +import net.minecraft.world.level.block.FireBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.LevelReader; + +public class DreamFireBlock extends FireBlock { + + public DreamFireBlock(BlockBehaviour.Properties properties) { + super(properties); + this.copyVanillaFlammability(); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return level.getBlockState(pos.below()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS) + || super.canSurvive(state, level, pos); + } + + private void copyVanillaFlammability() { + AccessorFireBlock vanillaFire = (AccessorFireBlock) Blocks.FIRE; + Object2IntMap vanillaIgniteOdds = vanillaFire.antarchy$getIgniteOdds(); + Object2IntMap vanillaBurnOdds = vanillaFire.antarchy$getBurnOdds(); + AccessorFireBlock self = (AccessorFireBlock) this; + Object2IntMap igniteOdds = self.antarchy$getIgniteOdds(); + Object2IntMap burnOdds = self.antarchy$getBurnOdds(); + for (Object2IntMap.Entry entry : vanillaIgniteOdds.object2IntEntrySet()) { + igniteOdds.put(entry.getKey(), entry.getIntValue()); + burnOdds.put(entry.getKey(), vanillaBurnOdds.getInt(entry.getKey())); + } + } +} 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 new file mode 100644 index 00000000..ddaf4c5f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamSandBlock.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +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); + } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + entity.causeFallDamage(fallDistance, 0.0F, level.damageSources().fall()); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamTorchBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamTorchBlock.java new file mode 100644 index 00000000..facb4599 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamTorchBlock.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.content.block; + +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.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.TorchBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public class DreamTorchBlock extends TorchBlock { + private static final ResourceLocation DREAM_FIRE_FLAME_ID = new ResourceLocation(Antarchy.MODID, "dream_fire_flame"); + + public DreamTorchBlock(BlockBehaviour.Properties properties) { + super(properties, ParticleTypes.SOUL_FIRE_FLAME); + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + double x = pos.getX() + 0.5D; + double y = pos.getY() + 0.7D; + double z = pos.getZ() + 0.5D; + level.addParticle(ParticleTypes.SMOKE, x, y, z, 0.0D, 0.0D, 0.0D); + level.addParticle(getDreamFlameParticle(), x, y, z, 0.0D, 0.0D, 0.0D); + } + + private static ParticleOptions getDreamFlameParticle() { + return BuiltInRegistries.PARTICLE_TYPE.get(DREAM_FIRE_FLAME_ID) instanceof ParticleOptions particleOptions + ? particleOptions + : ParticleTypes.SOUL_FIRE_FLAME; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamWallTorchBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamWallTorchBlock.java new file mode 100644 index 00000000..35659747 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DreamWallTorchBlock.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +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.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.WallTorchBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public class DreamWallTorchBlock extends WallTorchBlock { + private static final ResourceLocation DREAM_FIRE_FLAME_ID = new ResourceLocation(Antarchy.MODID, "dream_fire_flame"); + + public DreamWallTorchBlock(BlockBehaviour.Properties properties) { + super(properties, ParticleTypes.SOUL_FIRE_FLAME); + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + Direction direction = state.getValue(FACING).getOpposite(); + double x = pos.getX() + 0.5D + 0.27D * direction.getStepX(); + double y = pos.getY() + 0.92D; + double z = pos.getZ() + 0.5D + 0.27D * direction.getStepZ(); + level.addParticle(ParticleTypes.SMOKE, x, y, z, 0.0D, 0.0D, 0.0D); + level.addParticle(getDreamFlameParticle(), x, y, z, 0.0D, 0.0D, 0.0D); + } + + private static ParticleOptions getDreamFlameParticle() { + return BuiltInRegistries.PARTICLE_TYPE.get(DREAM_FIRE_FLAME_ID) instanceof ParticleOptions particleOptions + ? particleOptions + : ParticleTypes.SOUL_FIRE_FLAME; + } +} 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 new file mode 100644 index 00000000..2a291b79 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuctTapeBlock.java @@ -0,0 +1,572 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.config.AntarchySettings; +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 com.mojang.serialization.MapCodec; +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; +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.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.AttachFace; +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; + +public class DuctTapeBlock extends Block { + public static final int MAX_USES = 4; + private static final ResourceLocation DUCT_TAPE_ADVANCEMENT_ID = new ResourceLocation("antarchy", "duct_tape"); + public static final IntegerProperty USES = IntegerProperty.create("uses", 1, MAX_USES); + public static final EnumProperty FACE = BlockStateProperties.ATTACH_FACE; + 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); + this.registerDefaultState(this.stateDefinition.any() + .setValue(USES, MAX_USES) + .setValue(FACE, AttachFace.FLOOR) + .setValue(FACING, Direction.NORTH)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return getShapeFor(state); + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.empty(); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return switch (state.getValue(FACE)) { + case FLOOR -> level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + case WALL -> { + BlockPos supportPos = pos.relative(state.getValue(FACING).getOpposite()); + yield level.getBlockState(supportPos).isFaceSturdy(level, supportPos, state.getValue(FACING)); + } + default -> false; + }; + } + + @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 false; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Direction clickedFace = context.getClickedFace(); + BlockState state = this.defaultBlockState(); + if (clickedFace.getAxis().isHorizontal()) { + state = state.setValue(FACE, AttachFace.WALL).setValue(FACING, clickedFace); + } else { + state = state.setValue(FACE, AttachFace.FLOOR).setValue(FACING, context.getHorizontalDirection()); + } + + 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, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + ItemStack stack = player.getItemInHand(hand); + if (stack.is(AntarchyObjects.DUCT_TAPE.get().asItem())) { + 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; + } + + int repairPerUse = Math.max(1, (int) Math.ceil(stack.getMaxDamage() * AntarchySettings.ductTapeRepairPercentPerUse())); + int currentDamage = stack.getDamageValue(); + int repairedDamage = Math.min(currentDamage, repairPerUse); + + if (repairedDamage <= 0) { + return InteractionResult.PASS; + } + + if (!level.isClientSide) { + stack.setDamageValue(currentDamage - repairedDamage); + if (!player.getAbilities().instabuild) { + consumeTapeUse(level, pos, state); + } + if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { + AntarchyAdvancements.award(serverPlayer, DUCT_TAPE_ADVANCEMENT_ID); + } + level.playSound(null, pos, AntarchySoundEvents.DUCT_TAPE_USE.get(), SoundSource.BLOCKS, 0.9F, 0.95F + level.random.nextFloat() * 0.1F); + } + + 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 + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(USES, FACE, FACING); + } + + private static VoxelShape getShapeFor(BlockState state) { + int depth = switch (state.getValue(USES)) { + case 1 -> 4; + case 2 -> 8; + case 3 -> 12; + default -> 16; + }; + + return switch (state.getValue(FACE)) { + case FLOOR -> switch (state.getValue(FACING)) { + case NORTH -> Block.box(0.0D, 0.0D, 16.0D - depth, 16.0D, TAPE_HEIGHT, 16.0D); + case SOUTH -> Block.box(0.0D, 0.0D, 0.0D, 16.0D, TAPE_HEIGHT, depth); + case EAST -> Block.box(0.0D, 0.0D, 0.0D, depth, TAPE_HEIGHT, 16.0D); + case WEST -> Block.box(16.0D - depth, 0.0D, 0.0D, 16.0D, TAPE_HEIGHT, 16.0D); + default -> Block.box(0.0D, 0.0D, 0.0D, 16.0D, TAPE_HEIGHT, 16.0D); + }; + case WALL -> switch (state.getValue(FACING)) { + case NORTH -> Block.box(0.0D, 16.0D - depth, 16.0D - TAPE_HEIGHT, 16.0D, 16.0D, 16.0D); + case SOUTH -> Block.box(0.0D, 16.0D - depth, 0.0D, 16.0D, 16.0D, TAPE_HEIGHT); + case EAST -> Block.box(0.0D, 16.0D - depth, 0.0D, TAPE_HEIGHT, 16.0D, 16.0D); + case WEST -> Block.box(16.0D - TAPE_HEIGHT, 16.0D - depth, 0.0D, 16.0D, 16.0D, 16.0D); + default -> Block.box(0.0D, 16.0D - depth, 0.0D, TAPE_HEIGHT, 16.0D, 16.0D); + }; + default -> Block.box(0.0D, 0.0D, 0.0D, 16.0D, TAPE_HEIGHT, 16.0D); + }; + } + + 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) { + level.setBlock(pos, state.setValue(USES, remainingUses), Block.UPDATE_ALL); + 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/DuplicatorLogBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuplicatorLogBlock.java new file mode 100644 index 00000000..418f71cd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuplicatorLogBlock.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public class DuplicatorLogBlock extends RotatedPillarBlock { + + public DuplicatorLogBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + DuplicatorTreeLogic.tryDuplicate(level, pos, random); + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (level instanceof ServerLevel serverLevel && !state.is(newState.getBlock())) { + DuplicatorTreeLogic.invalidateCacheNear(serverLevel, pos); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuplicatorSaplingBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuplicatorSaplingBlock.java new file mode 100644 index 00000000..c8ebf9eb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuplicatorSaplingBlock.java @@ -0,0 +1,170 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.BlockTags; +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.LeavesBlock; +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 DuplicatorSaplingBlock extends BushBlock implements BonemealableBlock { + public static final IntegerProperty STAGE = BlockStateProperties.STAGE; + private static final VoxelShape SHAPE = Block.box(2.0D, 0.0D, 2.0D, 14.0D, 14.0D, 14.0D); + + public DuplicatorSaplingBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(STAGE, 0)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(BlockTags.DIRT) || state.is(Blocks.FARMLAND); + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!AntarchySettings.duplicatorTreeEnabled()) { + return; + } + + if (level.getMaxLocalRawBrightness(pos.above()) >= 9 && random.nextInt(7) == 0) { + this.advanceTree(level, pos, state, random); + } + } + + @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.75F; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + if (!AntarchySettings.duplicatorTreeEnabled()) { + return; + } + + this.advanceTree(level, pos, state, random); + } + + private void advanceTree(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + if (state.getValue(STAGE) == 0) { + level.setBlock(pos, state.setValue(STAGE, 1), Block.UPDATE_ALL); + return; + } + + this.growTree(level, pos); + } + + private void growTree(ServerLevel level, BlockPos pos) { + if (!this.canGenerate(level, pos)) { + return; + } + + BlockState logState = AntarchyObjects.DUPLICATOR_LOG.get().defaultBlockState(); + BlockState leafState = Blocks.OAK_LEAVES.defaultBlockState() + .setValue(LeavesBlock.PERSISTENT, true) + .setValue(LeavesBlock.DISTANCE, 1); + + level.setBlock(pos, Blocks.AIR.defaultBlockState(), Block.UPDATE_ALL); + + for (int y = 0; y < 4; y++) { + level.setBlock(pos.above(y), logState, Block.UPDATE_ALL); + } + + BlockPos canopyBase = pos.above(3); + for (int x = -2; x <= 2; x++) { + for (int z = -2; z <= 2; z++) { + if (Math.abs(x) == 2 && Math.abs(z) == 2) { + continue; + } + + this.placeLeaves(level, canopyBase.offset(x, 0, z), leafState); + this.placeLeaves(level, canopyBase.offset(x, 1, z), leafState); + } + } + + this.placeLeaves(level, canopyBase.above(2), leafState); + this.placeLeaves(level, canopyBase.above(1).north(), leafState); + this.placeLeaves(level, canopyBase.above(1).south(), leafState); + this.placeLeaves(level, canopyBase.above(1).east(), leafState); + this.placeLeaves(level, canopyBase.above(1).west(), leafState); + } + + private void placeLeaves(ServerLevel level, BlockPos pos, BlockState leafState) { + BlockState existingState = level.getBlockState(pos); + if (existingState.isAir() || existingState.canBeReplaced()) { + level.setBlock(pos, leafState, Block.UPDATE_ALL); + } + } + + private boolean canGenerate(ServerLevel level, BlockPos pos) { + for (int y = 0; y <= 6; y++) { + int radius = y >= 3 ? 2 : 1; + + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + BlockPos checkPos = pos.offset(x, y, z); + BlockState checkState = level.getBlockState(checkPos); + if (!this.canReplaceForTree(pos, checkPos, checkState)) { + return false; + } + } + } + } + + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + private boolean canReplaceForTree(BlockPos saplingPos, BlockPos checkPos, BlockState checkState) { + if (checkPos.equals(saplingPos) && checkState.is(this)) { + return true; + } + + return checkState.isAir() || checkState.canBeReplaced(); + } + + @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 + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(STAGE); + } +} 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 new file mode 100644 index 00000000..49cced4e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/DuplicatorTreeLogic.java @@ -0,0 +1,233 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.WeakHashMap; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.state.BlockState; + +public final class DuplicatorTreeLogic { + private static final int SOURCE_RADIUS = 1; + private static final int LOG_SEARCH_RADIUS = 2; + 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() { + } + + public static void invalidateCacheNear(ServerLevel level, BlockPos pos) { + HashMap map = CENTER_LOG_CACHE.get(level); + if (map != null) { + map.remove(ChunkPos.asLong(pos)); + } + } + + public static void tryDuplicate(ServerLevel level, BlockPos origin, RandomSource random) { + if (!AntarchySettings.duplicatorTreeEnabled()) { + return; + } + + if (random.nextInt(10) != 0) { + return; + } + + BlockPos centerLogPos = findCenterLog(level, origin); + if (centerLogPos == null) { + return; + } + + List sourceCandidates = collectSourceCandidates(level, centerLogPos); + if (sourceCandidates.isEmpty()) { + return; + } + + List targetCandidates = collectTargetCandidates(level, centerLogPos); + if (targetCandidates.isEmpty()) { + return; + } + + BlockPos sourcePos = sourceCandidates.get(random.nextInt(sourceCandidates.size())); + BlockState sourceState = level.getBlockState(sourcePos); + BlockPos targetPos = targetCandidates.get(random.nextInt(targetCandidates.size())); + + BlockState placedState = Block.updateFromNeighbourShapes(sourceState, level, targetPos); + if (!placedState.canSurvive(level, targetPos)) { + return; + } + + level.setBlock(targetPos, placedState, Block.UPDATE_ALL); + level.levelEvent(2001, targetPos, Block.getId(sourceState)); + playDuplicateEffects(level, centerLogPos, sourcePos, targetPos); + } + + private static boolean isValidSource(ServerLevel level, BlockPos pos, BlockState state) { + if (state.isAir() || state.is(AntarchyTags.Blocks.DUPLICATOR_TREE_BLACKLIST) || AntarchyObjects.isDuplicatorTreeBlock(state)) { + return false; + } + + if (state.getBlock() instanceof EntityBlock || !state.getFluidState().isEmpty()) { + return false; + } + + if (state.is(AntarchyObjects.DUCT_TAPE.get())) { + return true; + } + + return state.isCollisionShapeFullBlock(level, pos); + } + + private static boolean isValidTarget(ServerLevel level, BlockPos pos) { + BlockState targetState = level.getBlockState(pos); + if (!targetState.isAir() && !targetState.canBeReplaced()) { + return false; + } + + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + private static List collectSourceCandidates(ServerLevel level, BlockPos centerLogPos) { + List positions = new ArrayList<>(); + + for (int x = -SOURCE_RADIUS; x <= SOURCE_RADIUS; x++) { + for (int z = -SOURCE_RADIUS; z <= SOURCE_RADIUS; z++) { + if (x == 0 && z == 0) { + continue; + } + + BlockPos checkPos = centerLogPos.offset(x, 0, z); + BlockState checkState = level.getBlockState(checkPos); + if (isValidSource(level, checkPos, checkState)) { + positions.add(checkPos); + } + } + } + + return positions; + } + + private static List collectTargetCandidates(ServerLevel level, BlockPos centerLogPos) { + List positions = new ArrayList<>(); + + for (int x = -SOURCE_RADIUS; x <= SOURCE_RADIUS; x++) { + for (int z = -SOURCE_RADIUS; z <= SOURCE_RADIUS; z++) { + if (x == 0 && z == 0) { + continue; + } + + BlockPos checkPos = centerLogPos.offset(x, 0, z); + if (isValidTarget(level, checkPos)) { + positions.add(checkPos); + } + } + } + + return positions; + } + + private static BlockPos findCenterLog(ServerLevel level, BlockPos origin) { + if (level.getBlockState(origin).is(AntarchyObjects.DUPLICATOR_LOG.get())) { + return descendToBaseLog(level, origin); + } + + long chunkKey = ChunkPos.asLong(origin); + HashMap cache = CENTER_LOG_CACHE.computeIfAbsent(level, k -> new HashMap<>()); + BlockPos cached = cache.get(chunkKey); + if (cached != null) { + if (level.getBlockState(cached).is(AntarchyObjects.DUPLICATOR_LOG.get())) { + return cached; + } + cache.remove(chunkKey); + } + + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + BlockPos bestPos = null; + int bestDistance = Integer.MAX_VALUE; + + for (int y = -LOG_SEARCH_BELOW; y <= LOG_SEARCH_ABOVE; y++) { + for (int x = -LOG_SEARCH_RADIUS; x <= LOG_SEARCH_RADIUS; x++) { + for (int z = -LOG_SEARCH_RADIUS; z <= LOG_SEARCH_RADIUS; z++) { + cursor.setWithOffset(origin, x, y, z); + if (!level.getBlockState(cursor).is(AntarchyObjects.DUPLICATOR_LOG.get())) { + continue; + } + + int distance = Math.abs(x) + Math.abs(y) + Math.abs(z); + if (distance < bestDistance) { + bestDistance = distance; + bestPos = cursor.immutable(); + } + } + } + } + + BlockPos result = bestPos == null ? null : descendToBaseLog(level, bestPos); + if (result != null) { + cache.put(chunkKey, result); + } + return result; + } + + private static BlockPos descendToBaseLog(ServerLevel level, BlockPos pos) { + BlockPos.MutableBlockPos cursor = pos.mutable(); + while (level.getBlockState(cursor.below()).is(AntarchyObjects.DUPLICATOR_LOG.get())) { + cursor.move(Direction.DOWN); + } + + return cursor.immutable(); + } + + private static void playDuplicateEffects(ServerLevel level, BlockPos centerLogPos, BlockPos sourcePos, BlockPos targetPos) { + level.sendParticles( + ParticleTypes.HAPPY_VILLAGER, + centerLogPos.getX() + 0.5D, + centerLogPos.getY() + 0.9D, + centerLogPos.getZ() + 0.5D, + 4, + 0.35D, + 0.35D, + 0.35D, + 0.02D + ); + level.sendParticles( + ParticleTypes.ENCHANT, + sourcePos.getX() + 0.5D, + sourcePos.getY() + 0.5D, + sourcePos.getZ() + 0.5D, + 5, + 0.15D, + 0.15D, + 0.15D, + 0.04D + ); + level.sendParticles( + ParticleTypes.WAX_ON, + targetPos.getX() + 0.5D, + targetPos.getY() + 0.5D, + targetPos.getZ() + 0.5D, + 6, + 0.25D, + 0.25D, + 0.25D, + 0.01D + ); + + level.playSound(null, centerLogPos, SoundEvents.AMETHYST_BLOCK_CHIME, SoundSource.BLOCKS, 0.7F, 1.25F); + level.playSound(null, targetPos, SoundEvents.ALLAY_ITEM_TAKEN, SoundSource.BLOCKS, 0.55F, 0.9F + level.random.nextFloat() * 0.2F); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java new file mode 100644 index 00000000..465ee5c3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java @@ -0,0 +1,322 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.mojang.serialization.MapCodec; +import java.util.EnumMap; +import java.util.Map; +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.RandomSource; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +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.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.BonemealableBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +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 net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +public final class GiantLilyPadBlock extends Block implements BonemealableBlock { + public static final EnumProperty TILE_POSITION = EnumProperty.create("tile_position", TilePosition.class); + public static final EnumProperty ROTATION = EnumProperty.create("rotation", PadRotation.class); + public static final BooleanProperty HAS_LOTUS = BooleanProperty.create("has_lotus"); + + private static final VoxelShape SHAPE = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 0.5D, 16.0D); + private static final ThreadLocal REMOVING_STRUCTURE = ThreadLocal.withInitial(() -> false); + private static final Map OFFSETS = createOffsets(); + private static final double BOUNCE_FACTOR = 0.35D; + private static final double FORWARD_BOOST_MULTIPLIER = 1.05D; + private static final double MAX_BOOSTED_HORIZONTAL_SPEED = 0.6D; + + public GiantLilyPadBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(TILE_POSITION, TilePosition.CENTER) + .setValue(ROTATION, PadRotation.DEG_0) + .setValue(HAS_LOTUS, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(TILE_POSITION, ROTATION, HAS_LOTUS); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return isSupported(level, pos); + } + + @Override + public @Nullable BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState() + .setValue(TILE_POSITION, TilePosition.CENTER) + .setValue(ROTATION, rotationForPlacement(context.getClickedPos())); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return !structureHasLotus(level, centerFrom(pos, state)); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + BlockPos center = centerFrom(pos, state); + if (structureHasLotus(level, center)) { + return; + } + + level.setBlock(pos, state.setValue(HAS_LOTUS, true), Block.UPDATE_CLIENTS); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } + + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock()) && !REMOVING_STRUCTURE.get()) { + removeStructure(level, pos, state); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } + + @Override + public InteractionResult use( + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + ItemStack stack = player.getItemInHand(hand); + if (!stack.is(AntarchyObjects.LOTUS.get().asItem()) || structureHasLotus(level, centerFrom(pos, state))) { + return InteractionResult.PASS; + } + + if (level.isClientSide) { + return InteractionResult.SUCCESS; + } + + level.setBlock(pos, state.setValue(HAS_LOTUS, true), Block.UPDATE_CLIENTS); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + level.playSound(null, pos, net.minecraft.sounds.SoundEvents.LILY_PAD_PLACE, SoundSource.BLOCKS, 1.0F, 1.0F); + return InteractionResult.CONSUME; + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + super.stepOn(level, pos, state, entity); + if (!level.isClientSide) { + Vec3 movement = entity.getDeltaMovement(); + double horizontalSpeed = movement.horizontalDistance(); + if (horizontalSpeed > 0.02D && horizontalSpeed < MAX_BOOSTED_HORIZONTAL_SPEED) { + double boosted = Math.min(horizontalSpeed * FORWARD_BOOST_MULTIPLIER, MAX_BOOSTED_HORIZONTAL_SPEED); + double scale = boosted / horizontalSpeed; + entity.setDeltaMovement(movement.x * scale, movement.y, movement.z * scale); + } + } + } + + @Override + public void updateEntityAfterFallOn(BlockGetter level, Entity entity) { + if (entity.isSuppressingBounce()) { + super.updateEntityAfterFallOn(level, entity); + return; + } + + Vec3 movement = entity.getDeltaMovement(); + if (movement.y < 0.0D) { + double bounce = entity instanceof LivingEntity ? BOUNCE_FACTOR : BOUNCE_FACTOR * 0.7D; + entity.setDeltaMovement(movement.x, -movement.y * bounce, movement.z); + } + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + if (!state.getValue(HAS_LOTUS) || random.nextInt(10) != 0) { + return; + } + + double x = pos.getX() + 0.5D + (random.nextDouble() - 0.5D) * 0.6D; + double z = pos.getZ() + 0.5D + (random.nextDouble() - 0.5D) * 0.6D; + double y = pos.getY() + 0.55D; + level.addParticle(AntarchyObjects.LOTUS_POLLEN.get(), x, y, z, 0.0D, 0.015D, 0.0D); + } + + public static boolean canPlaceStructure(LevelAccessor level, BlockPos centerPos) { + for (TilePosition tilePosition : TilePosition.values()) { + BlockPos partPos = positionFor(centerPos, tilePosition); + if (!level.isEmptyBlock(partPos) || !isSupported(level, partPos)) { + return false; + } + } + return true; + } + + public static void placeStructure(LevelAccessor level, BlockPos centerPos, PadRotation rotation) { + for (TilePosition tilePosition : TilePosition.values()) { + BlockPos partPos = positionFor(centerPos, tilePosition); + BlockState partState = AntarchyObjects.GIANT_LILY_PAD.get().defaultBlockState() + .setValue(TILE_POSITION, tilePosition) + .setValue(ROTATION, rotation) + .setValue(HAS_LOTUS, false); + level.setBlock(partPos, partState, Block.UPDATE_CLIENTS); + } + } + + public static PadRotation rotationForPlacement(BlockPos pos) { + long seed = pos.asLong() ^ Long.rotateLeft(pos.asLong(), 17); + RandomSource random = RandomSource.create(seed); + return PadRotation.values()[random.nextInt(4)]; + } + + private static boolean isSupported(LevelReader level, BlockPos pos) { + return level.getFluidState(pos.below()).is(AntarchyTags.Fluids.GIANT_LILY_PAD_SUPPORTING_FLUIDS) + && level.getFluidState(pos).isEmpty(); + } + + private static void removeStructure(Level level, BlockPos pos, BlockState state) { + BlockPos center = centerFrom(pos, state); + boolean shouldDropLotus = structureHasLotus(level, center) && !state.getValue(HAS_LOTUS); + + REMOVING_STRUCTURE.set(true); + try { + for (TilePosition tilePosition : TilePosition.values()) { + BlockPos partPos = positionFor(center, tilePosition); + if (partPos.equals(pos)) { + continue; + } + BlockState partState = level.getBlockState(partPos); + if (partState.is(AntarchyObjects.GIANT_LILY_PAD.get())) { + level.removeBlock(partPos, false); + } + } + } finally { + REMOVING_STRUCTURE.set(false); + } + + if (shouldDropLotus && !level.isClientSide) { + popResource(level, pos, new ItemStack(AntarchyObjects.LOTUS.get())); + } + } + + private static boolean structureHasLotus(LevelReader level, BlockPos center) { + for (TilePosition tilePosition : TilePosition.values()) { + BlockState state = level.getBlockState(positionFor(center, tilePosition)); + if (state.is(AntarchyObjects.GIANT_LILY_PAD.get()) && state.getValue(HAS_LOTUS)) { + return true; + } + } + return false; + } + + private static BlockPos centerFrom(BlockPos pos, BlockState state) { + Vec2 offset = OFFSETS.get(state.getValue(TILE_POSITION)); + return pos.offset((int) -offset.x, 0, (int) -offset.y); + } + + private static BlockPos positionFor(BlockPos center, TilePosition tilePosition) { + Vec2 offset = OFFSETS.get(tilePosition); + return center.offset((int) offset.x, 0, (int) offset.y); + } + + private static Map createOffsets() { + Map offsets = new EnumMap<>(TilePosition.class); + offsets.put(TilePosition.TOP_LEFT, new Vec2(-1, -1)); + offsets.put(TilePosition.TOP_MIDDLE, new Vec2(0, -1)); + offsets.put(TilePosition.TOP_RIGHT, new Vec2(1, -1)); + offsets.put(TilePosition.MIDDLE_LEFT, new Vec2(-1, 0)); + offsets.put(TilePosition.CENTER, new Vec2(0, 0)); + offsets.put(TilePosition.MIDDLE_RIGHT, new Vec2(1, 0)); + offsets.put(TilePosition.BOTTOM_LEFT, new Vec2(-1, 1)); + offsets.put(TilePosition.BOTTOM_MIDDLE, new Vec2(0, 1)); + offsets.put(TilePosition.BOTTOM_RIGHT, new Vec2(1, 1)); + return offsets; + } + + public enum TilePosition implements StringRepresentable { + TOP_LEFT("top_left"), + TOP_MIDDLE("top_middle"), + TOP_RIGHT("top_right"), + MIDDLE_LEFT("middle_left"), + CENTER("center"), + MIDDLE_RIGHT("middle_right"), + BOTTOM_LEFT("bottom_left"), + BOTTOM_MIDDLE("bottom_middle"), + BOTTOM_RIGHT("bottom_right"); + + private final String name; + + TilePosition(String name) { + this.name = name; + } + + @Override + public String getSerializedName() { + return this.name; + } + } + + public enum PadRotation implements StringRepresentable { + DEG_0("0"), + DEG_90("90"), + DEG_180("180"), + DEG_270("270"); + + private final String name; + + PadRotation(String name) { + this.name = name; + } + + @Override + public String getSerializedName() { + return this.name; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/GlowcapMushroomBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/GlowcapMushroomBlock.java new file mode 100644 index 00000000..efb8f08d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/GlowcapMushroomBlock.java @@ -0,0 +1,109 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.util.RandomSource; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +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 GlowcapMushroomBlock extends BushBlock implements BonemealableBlock { + private static final VoxelShape SHAPE = Block.box(3.9D, 0.0D, 3.9D, 12.1D, 12.0D, 12.1D); + private static final ResourceKey> HUGE_GLOWCAP_MUSHROOM = ResourceKey.create( + Registries.CONFIGURED_FEATURE, + new ResourceLocation(Antarchy.MODID, "huge_glowcap_mushroom") + ); + private static final int SPREAD_ATTEMPTS = 4; + private static final int MAX_LIGHT_LEVEL = 13; + + public GlowcapMushroomBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public VoxelShape getShape(BlockState state, net.minecraft.world.level.BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public boolean mayPlaceOn(BlockState state, net.minecraft.world.level.BlockGetter level, BlockPos pos) { + return state.is(BlockTags.MUSHROOM_GROW_BLOCK) || state.isFaceSturdy(level, pos, Direction.UP); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + BlockPos belowPos = pos.below(); + BlockState below = level.getBlockState(belowPos); + return this.mayPlaceOn(below, level, belowPos) && (below.is(BlockTags.MUSHROOM_GROW_BLOCK) || level.getRawBrightness(pos, 0) < MAX_LIGHT_LEVEL); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return true; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (random.nextInt(25) != 0) { + return; + } + + int spreadRange = 4; + BlockPos targetPos = pos; + for (int i = 0; i < SPREAD_ATTEMPTS; i++) { + targetPos = pos.offset( + random.nextInt(spreadRange * 2 + 1) - spreadRange, + random.nextInt(3) - 1, + random.nextInt(spreadRange * 2 + 1) - spreadRange + ); + if (level.isEmptyBlock(targetPos) && canSpreadTo(level, targetPos)) { + level.setBlock(targetPos, this.defaultBlockState(), 2); + break; + } + } + } + + private boolean canSpreadTo(ServerLevel level, BlockPos pos) { + if (level.getRawBrightness(pos, 0) > MAX_LIGHT_LEVEL) { + return false; + } + BlockState below = level.getBlockState(pos.below()); + return this.mayPlaceOn(below, level, pos.below()); + } + + @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.4F; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(HUGE_GLOWCAP_MUSHROOM); + level.removeBlock(pos, false); + if (!feature.value().place(level, level.getChunkSource().getGenerator(), random, pos)) { + level.setBlock(pos, state, 3); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/HangingCreeprootsBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/HangingCreeprootsBlock.java new file mode 100644 index 00000000..41396a64 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/HangingCreeprootsBlock.java @@ -0,0 +1,113 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +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.Items; +import net.minecraft.world.level.BlockGetter; +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.BushBlock; +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.IntegerProperty; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class HangingCreeprootsBlock extends BushBlock { + public static final IntegerProperty DISTANCE = IntegerProperty.create("distance", 0, 4); + public static final BooleanProperty BOTTOM = BooleanProperty.create("bottom"); + public static final BooleanProperty STUNTED = BooleanProperty.create("stunted"); + private static final int MAX_DISTANCE = 4; + private static final VoxelShape SHAPE = Block.box(4.0D, 0.0D, 4.0D, 12.0D, 16.0D, 12.0D); + + public HangingCreeprootsBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(DISTANCE, 0).setValue(BOTTOM, true).setValue(STUNTED, false)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(this) || state.isFaceSturdy(level, pos, Direction.DOWN); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + BlockPos abovePos = pos.above(); + return this.mayPlaceOn(level.getBlockState(abovePos), level, abovePos); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!state.canSurvive(level, pos)) { + return net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + if (direction == Direction.DOWN) { + boolean bottom = !neighborState.is(this); + if (bottom != state.getValue(BOTTOM)) { + state = state.setValue(BOTTOM, bottom); + } + } + return state; + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return state.getValue(BOTTOM) && !state.getValue(STUNTED) && state.getValue(DISTANCE) < MAX_DISTANCE; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (state.getValue(STUNTED) || !state.getValue(BOTTOM) || state.getValue(DISTANCE) >= MAX_DISTANCE) { + return; + } + + BlockPos belowPos = pos.below(); + if (random.nextInt(4) != 0 || !level.getBlockState(belowPos).isAir()) { + return; + } + + int distance = state.getValue(DISTANCE); + level.setBlock(pos, state.setValue(BOTTOM, false), Block.UPDATE_CLIENTS); + level.setBlock(belowPos, this.defaultBlockState().setValue(DISTANCE, distance + 1).setValue(BOTTOM, true), Block.UPDATE_ALL); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + ItemStack stack = player.getItemInHand(hand); + if (!stack.is(Items.SHEARS) || state.getValue(STUNTED)) { + return super.use(state, level, pos, player, hand, hitResult); + } + + if (!level.isClientSide) { + level.setBlock(pos, state.setValue(STUNTED, true), Block.UPDATE_ALL); + stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(hand)); + level.playSound(null, pos, SoundEvents.SHEEP_SHEAR, SoundSource.BLOCKS, 1.0F, 1.0F); + } + + return InteractionResult.sidedSuccess(level.isClientSide); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(DISTANCE, BOTTOM, STUNTED); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/HangingPeachBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/HangingPeachBlock.java new file mode 100644 index 00000000..166b4d5d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/HangingPeachBlock.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +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.item.ItemStack; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class HangingPeachBlock extends BushBlock { + private static final ResourceLocation PEACH_LEAVES_ID = new ResourceLocation(Antarchy.MODID, "peach_leaves"); + private static final ResourceLocation PEACH_ITEM_ID = new ResourceLocation(Antarchy.MODID, "peach"); + private static final VoxelShape SHAPE = Block.box(4.0D, 2.0D, 4.0D, 12.0D, 16.0D, 12.0D); + + public HangingPeachBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.empty(); + } + + @Override + public ItemStack getCloneItemStack(BlockGetter level, BlockPos pos, BlockState state) { + return new ItemStack(BuiltInRegistries.ITEM.getOptional(PEACH_ITEM_ID).orElse(Blocks.AIR.asItem())); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + BlockState above = level.getBlockState(pos.above()); + return above.is(BuiltInRegistries.BLOCK.getOptional(PEACH_LEAVES_ID).orElse(Blocks.AIR)); + } + + @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(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/HushweedBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/HushweedBlock.java new file mode 100644 index 00000000..f69ce226 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/HushweedBlock.java @@ -0,0 +1,117 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.mojang.serialization.MapCodec; +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.LivingEntity; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +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.DirectionProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +public class HushweedBlock extends BaseEntityBlock { + private static final VoxelShape SHAPE = Block.box(4.0D, 0.0D, 4.0D, 12.0D, 18.0D, 12.0D); + public static final DirectionProperty FACING = BlockStateProperties.VERTICAL_DIRECTION; + + public HushweedBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.UP)); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Direction facing = context.getClickedFace() == Direction.DOWN ? Direction.DOWN : Direction.UP; + BlockState placed = this.defaultBlockState().setValue(FACING, facing); + if (placed.canSurvive(context.getLevel(), context.getClickedPos())) { + return placed; + } + + BlockState fallback = this.defaultBlockState().setValue(FACING, facing.getOpposite()); + return fallback.canSurvive(context.getLevel(), context.getClickedPos()) ? fallback : null; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + Direction facing = state.getValue(FACING); + BlockPos supportPos = facing == Direction.UP ? pos.below() : pos.above(); + Direction supportFace = facing == Direction.UP ? Direction.UP : Direction.DOWN; + return level.getBlockState(supportPos).isFaceSturdy(level, supportPos, supportFace); + } + + @Override + public BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + net.minecraft.world.level.LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + if (!level.isClientSide && entity instanceof LivingEntity livingEntity && !livingEntity.isSteppingCarefully()) { + livingEntity.hurt(level.damageSources().sweetBerryBush(), 1.0F); + } + super.entityInside(state, level, pos, entity); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new HushweedBlockEntity(pos, state); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + Supplier> typeSupplier = AntarchyObjects.HUSHWEED_BLOCK_ENTITY; + return level.isClientSide + ? null + : createTickerHelper(blockEntityType, typeSupplier.get(), + (tickLevel, tickPos, tickState, blockEntity) -> { + if (tickLevel instanceof net.minecraft.server.level.ServerLevel serverLevel) { + HushweedBlockEntity.serverTick(serverLevel, tickPos, tickState, blockEntity); + } + }); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/InfestedCoarseDirtBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/InfestedCoarseDirtBlock.java new file mode 100644 index 00000000..5b19a78a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/InfestedCoarseDirtBlock.java @@ -0,0 +1,100 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; +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 org.jetbrains.annotations.Nullable; + +public class InfestedCoarseDirtBlock extends Block { + + public InfestedCoarseDirtBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (random.nextFloat() < 0.35F) { + this.tryReleaseMoleworm(level, pos); + } + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.Entity entity) { + super.stepOn(level, pos, state, entity); + if (!level.isClientSide && entity instanceof Player && level.random.nextFloat() < 0.22F) { + this.tryReleaseMoleworm((ServerLevel) level, pos); + } + } + + private void tryReleaseMoleworm(ServerLevel level, BlockPos pos) { + Player nearbyPlayer = level.getNearestPlayer(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, 4.5D, false); + if (nearbyPlayer == null) { + return; + } + + BlockPos emergencePos = findEmergencePos(level, pos); + if (emergencePos == null) { + return; + } + + MolewormEntity moleworm = AntarchyObjects.MOLEWORM.get().create(level); + if (moleworm == null) { + return; + } + + moleworm.moveTo(emergencePos.getX() + 0.5D, emergencePos.getY() + 0.05D, emergencePos.getZ() + 0.5D, level.random.nextFloat() * 360.0F, 0.0F); + if (!level.noCollision(moleworm)) { + moleworm.discard(); + return; + } + + level.setBlock(pos, Blocks.COARSE_DIRT.defaultBlockState(), 3); + level.addFreshEntity(moleworm); + level.playSound(null, emergencePos, SoundEvents.SILVERFISH_STEP, net.minecraft.sounds.SoundSource.BLOCKS, 0.45F, 0.8F + level.random.nextFloat() * 0.25F); + level.sendParticles(net.minecraft.core.particles.ParticleTypes.POOF, pos.getX() + 0.5D, pos.getY() + 0.45D, pos.getZ() + 0.5D, 8, 0.18D, 0.08D, 0.18D, 0.01D); + } + + @Nullable + private static BlockPos findEmergencePos(BlockGetter level, BlockPos origin) { + BlockPos[] candidates = new BlockPos[] { + origin.above(), + origin.north(), + origin.south(), + origin.east(), + origin.west(), + origin.north().above(), + origin.south().above(), + origin.east().above(), + origin.west().above() + }; + + for (BlockPos candidate : candidates) { + if (isOpenStandingSpot(level, candidate)) { + return candidate; + } + } + + return null; + } + + private static boolean isOpenStandingSpot(BlockGetter level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + BlockState above = level.getBlockState(pos.above()); + BlockState below = level.getBlockState(pos.below()); + return state.isAir() + && above.isAir() + && below.isFaceSturdy(level, pos.below(), Direction.UP); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/InfestedRootedDirtBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/InfestedRootedDirtBlock.java new file mode 100644 index 00000000..276fc3c8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/InfestedRootedDirtBlock.java @@ -0,0 +1,99 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; +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.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +public class InfestedRootedDirtBlock extends Block { + + public InfestedRootedDirtBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (random.nextFloat() < 0.35F) { + this.tryReleaseMoleworm(level, pos); + } + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.Entity entity) { + super.stepOn(level, pos, state, entity); + if (!level.isClientSide && entity instanceof Player && level.random.nextFloat() < 0.22F) { + this.tryReleaseMoleworm((ServerLevel) level, pos); + } + } + + private void tryReleaseMoleworm(ServerLevel level, BlockPos pos) { + Player nearbyPlayer = level.getNearestPlayer(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, 4.5D, false); + if (nearbyPlayer == null) { + return; + } + + BlockPos emergencePos = findEmergencePos(level, pos); + if (emergencePos == null) { + return; + } + + MolewormEntity moleworm = AntarchyObjects.MOLEWORM.get().create(level); + if (moleworm == null) { + return; + } + + moleworm.moveTo(emergencePos.getX() + 0.5D, emergencePos.getY() + 0.05D, emergencePos.getZ() + 0.5D, level.random.nextFloat() * 360.0F, 0.0F); + if (!level.noCollision(moleworm)) { + moleworm.discard(); + return; + } + + level.setBlock(pos, net.minecraft.world.level.block.Blocks.ROOTED_DIRT.defaultBlockState(), 3); + level.addFreshEntity(moleworm); + level.playSound(null, emergencePos, SoundEvents.SILVERFISH_STEP, net.minecraft.sounds.SoundSource.BLOCKS, 0.45F, 0.8F + level.random.nextFloat() * 0.25F); + level.sendParticles(net.minecraft.core.particles.ParticleTypes.POOF, pos.getX() + 0.5D, pos.getY() + 0.45D, pos.getZ() + 0.5D, 8, 0.18D, 0.08D, 0.18D, 0.01D); + } + + @Nullable + private static BlockPos findEmergencePos(BlockGetter level, BlockPos origin) { + BlockPos[] candidates = new BlockPos[] { + origin.above(), + origin.north(), + origin.south(), + origin.east(), + origin.west(), + origin.north().above(), + origin.south().above(), + origin.east().above(), + origin.west().above() + }; + + for (BlockPos candidate : candidates) { + if (isOpenStandingSpot(level, candidate)) { + return candidate; + } + } + + return null; + } + + private static boolean isOpenStandingSpot(BlockGetter level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + BlockState above = level.getBlockState(pos.above()); + BlockState below = level.getBlockState(pos.below()); + return state.isAir() + && above.isAir() + && below.isFaceSturdy(level, pos.below(), Direction.UP); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/JerryEggBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/JerryEggBlock.java new file mode 100644 index 00000000..9d47fec7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/JerryEggBlock.java @@ -0,0 +1,108 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.JerryEntity; +import com.craisinlord.antarchy.content.horde.CavarynHordeManager; +import com.mojang.serialization.MapCodec; +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.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +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.BooleanProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class JerryEggBlock extends Block { + public static final BooleanProperty ROTATED = BooleanProperty.create("rotated"); + private static final ResourceLocation JERRY_ID = new ResourceLocation(Antarchy.MODID, "jerry"); + private static final int HATCH_CHECK_INTERVAL = 1200; + private static final double HORDE_ACCELERATION_RADIUS = 5.0D; + private static final VoxelShape SHAPE = Block.box(1.5D, 0.0D, 1.5D, 14.5D, 16.0D, 14.5D); + + public JerryEggBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(ROTATED, false)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(ROTATED, context.getHorizontalDirection().getAxis() == Direction.Axis.X); + } + + @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 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 isRandomlyTicking(BlockState state) { + return true; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!CavarynHordeManager.shouldAccelerateNearbyEggHatching(level, pos, HORDE_ACCELERATION_RADIUS, random) + && random.nextInt(HATCH_CHECK_INTERVAL) != 0) { + return; + } + this.hatch(level, pos, random); + } + + public void hatchWithNucleus(ServerLevel level, BlockPos pos) { + this.hatch(level, pos, level.random); + } + + private void hatch(ServerLevel level, BlockPos pos, RandomSource random) { + EntityType entityType = BuiltInRegistries.ENTITY_TYPE.get(JERRY_ID); + if (entityType.create(level) instanceof JerryEntity jerry) { + jerry.setStage(JerryEntity.Stage.INFANT); + jerry.moveTo(pos.getX() + 0.5D, pos.getY() + 0.15D, pos.getZ() + 0.5D, random.nextFloat() * 360.0F, 0.0F); + level.addFreshEntity(jerry); + level.destroyBlock(pos, false); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.HOSTILE, 0.8F, 0.8F + random.nextFloat() * 0.2F); + } + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(ROTATED); + } +} 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 new file mode 100644 index 00000000..48acd3dd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/JumpyBugEggBlock.java @@ -0,0 +1,161 @@ +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 com.mojang.serialization.MapCodec; +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 + protected 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/LotusBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/LotusBlock.java new file mode 100644 index 00000000..9f754b33 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/LotusBlock.java @@ -0,0 +1,100 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +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.RenderShape; +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.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class LotusBlock extends Block { + public static final BooleanProperty HANGING = BlockStateProperties.HANGING; + private static final VoxelShape SHAPE_STANDING = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 6.5D, 13.0D); + private static final VoxelShape SHAPE_HANGING = Block.box(3.0D, 9.5D, 3.0D, 13.0D, 16.0D, 13.0D); + + public LotusBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(HANGING, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HANGING); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Level level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + boolean canHang = canSurvive(this.defaultBlockState().setValue(HANGING, true), level, pos); + boolean canStand = canSurvive(this.defaultBlockState().setValue(HANGING, false), level, pos); + + if (context.getClickedFace() == Direction.DOWN && canHang) { + return this.defaultBlockState().setValue(HANGING, true); + } + + if (canStand) { + return this.defaultBlockState().setValue(HANGING, false); + } + + return canHang ? this.defaultBlockState().setValue(HANGING, true) : null; + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(HANGING) ? SHAPE_HANGING : SHAPE_STANDING; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + if (state.getValue(HANGING)) { + BlockPos abovePos = pos.above(); + return level.getBlockState(abovePos).isFaceSturdy(level, abovePos, Direction.DOWN); + } + + BlockPos belowPos = pos.below(); + return level.getBlockState(belowPos).isFaceSturdy(level, belowPos, Direction.UP); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + Direction supportDirection = state.getValue(HANGING) ? Direction.UP : Direction.DOWN; + if (direction == supportDirection && !state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } + + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + if (random.nextInt(10) != 0) { + return; + } + + double x = pos.getX() + 0.5D + (random.nextDouble() - 0.5D) * 0.6D; + double z = pos.getZ() + 0.5D + (random.nextDouble() - 0.5D) * 0.6D; + double y = state.getValue(HANGING) ? pos.getY() + 0.2D : pos.getY() + 0.8D; + double motionY = state.getValue(HANGING) ? -0.02D : 0.015D; + level.addParticle(AntarchyObjects.LOTUS_POLLEN.get(), x, y, z, 0.0D, motionY, 0.0D); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/LucidAnchorBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/LucidAnchorBlock.java new file mode 100644 index 00000000..cee8cdec --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/LucidAnchorBlock.java @@ -0,0 +1,70 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; +import net.minecraft.core.BlockPos; +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.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +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; + +public class LucidAnchorBlock extends BaseEntityBlock { + public static final BooleanProperty ACTIVE = BlockStateProperties.LIT; + + public LucidAnchorBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(ACTIVE, false)); + } + + @Override + public void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(ACTIVE); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new LucidAnchorBlockEntity(pos, state); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return level.isClientSide + ? null + : createTickerHelper(blockEntityType, AntarchyObjects.LUCID_ANCHOR_BLOCK_ENTITY.get(), (tickLevel, tickPos, tickState, blockEntity) -> { + if (tickLevel instanceof net.minecraft.server.level.ServerLevel serverLevel) { + LucidAnchorBlockEntity.serverTick(serverLevel, tickPos, tickState, blockEntity); + } + }); + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + markStructureDirty(level, pos); + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos neighborPos, boolean movedByPiston) { + super.neighborChanged(state, level, pos, block, neighborPos, movedByPiston); + markStructureDirty(level, pos); + } + + private static void markStructureDirty(Level level, BlockPos pos) { + if (level.getBlockEntity(pos) instanceof LucidAnchorBlockEntity lucidAnchor) { + lucidAnchor.markStructureDirty(); + } + } +} 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 new file mode 100644 index 00000000..5b4d116b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java @@ -0,0 +1,245 @@ +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 com.mojang.serialization.MapCodec; +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 + protected 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/MilkweedBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/MilkweedBlock.java new file mode 100644 index 00000000..146e5334 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/MilkweedBlock.java @@ -0,0 +1,67 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.DoublePlantBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.phys.BlockHitResult; + +public class MilkweedBlock extends DoublePlantBlock implements BonemealableBlock { + + public MilkweedBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(BlockStateProperties.DOUBLE_BLOCK_HALF, DoubleBlockHalf.LOWER)); + } + + @Override + public InteractionResult use( + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + if (player.getItemInHand(hand).is(Items.BONE_MEAL)) { + popResource(level, pos, new ItemStack(state.getBlock().asItem(), 1)); + return InteractionResult.PASS; + } + + return super.use(state, level, pos, player, hand, hitResult); + } + + @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 true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + } + + @Override + public boolean canBeReplaced(BlockState state, BlockPlaceContext context) { + return false; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/MoltingVinesBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/MoltingVinesBlock.java new file mode 100644 index 00000000..32e4575d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/MoltingVinesBlock.java @@ -0,0 +1,227 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +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.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +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.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.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.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class MoltingVinesBlock extends BushBlock implements BonemealableBlock { + public static final EnumProperty GROWTH_DIRECTION = EnumProperty.create("growth_direction", Direction.class, Direction.UP, Direction.DOWN); + public static final BooleanProperty TOP_CAP = BooleanProperty.create("top_cap"); + public static final BooleanProperty BOTTOM_CAP = BooleanProperty.create("bottom_cap"); + public static final BooleanProperty BROODFRUIT = BooleanProperty.create("broodfruit"); + public static final BooleanProperty STUNTED = BooleanProperty.create("stunted"); + public static final IntegerProperty DISTANCE = IntegerProperty.create("distance", 0, 6); + private static final int MAX_DISTANCE = 6; + private static final int NATURAL_FRUIT_CHANCE = 40; + private static final VoxelShape SHAPE = Block.box(5.0D, 0.0D, 5.0D, 11.0D, 16.0D, 11.0D); + private static final ResourceLocation BROODFRUIT_ITEM_ID = new ResourceLocation("antarchy", "broodfruit"); + + public MoltingVinesBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(GROWTH_DIRECTION, Direction.DOWN) + .setValue(TOP_CAP, false) + .setValue(BOTTOM_CAP, true) + .setValue(BROODFRUIT, false) + .setValue(STUNTED, false) + .setValue(DISTANCE, 0)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + BlockGetter level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + Direction growthDirection = resolveGrowthDirection(level, pos); + return computeState(this.defaultBlockState().setValue(GROWTH_DIRECTION, growthDirection).setValue(DISTANCE, 0), level, pos); + } + + private Direction resolveGrowthDirection(BlockGetter level, BlockPos pos) { + BlockState belowState = level.getBlockState(pos.below()); + if (belowState.is(this) && belowState.getValue(GROWTH_DIRECTION) == Direction.UP) { + return Direction.UP; + } + + BlockState aboveState = level.getBlockState(pos.above()); + if (aboveState.is(this) && aboveState.getValue(GROWTH_DIRECTION) == Direction.DOWN) { + return Direction.DOWN; + } + + return hasSturdyAnchor(level, pos, Direction.UP) ? Direction.DOWN : Direction.UP; + } + + private static boolean hasSturdyAnchor(BlockGetter level, BlockPos pos, Direction towardAnchor) { + BlockPos anchorPos = pos.relative(towardAnchor); + BlockState anchorState = level.getBlockState(anchorPos); + return anchorState.isFaceSturdy(level, anchorPos, towardAnchor.getOpposite()); + } + + @Override + public boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(this) || state.isFaceSturdy(level, pos, Direction.DOWN) || state.isFaceSturdy(level, pos, Direction.UP); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + Direction anchorDirection = state.getValue(GROWTH_DIRECTION).getOpposite(); + BlockPos anchorPos = pos.relative(anchorDirection); + BlockState anchorState = level.getBlockState(anchorPos); + if (anchorState.is(this)) { + return true; + } + return anchorState.isFaceSturdy(level, anchorPos, anchorDirection.getOpposite()); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!state.canSurvive(level, pos)) { + return net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + if (direction == Direction.UP || direction == Direction.DOWN) { + return computeState(state, level, pos); + } + return state; + } + + private static BlockState computeState(BlockState state, BlockGetter level, BlockPos pos) { + boolean aboveIsSame = level.getBlockState(pos.above()).is(state.getBlock()); + boolean belowIsSame = level.getBlockState(pos.below()).is(state.getBlock()); + Direction growthDirection = state.getValue(GROWTH_DIRECTION); + + boolean topCap = growthDirection == Direction.UP && !aboveIsSame; + boolean bottomCap = growthDirection == Direction.DOWN && !belowIsSame; + + state = state.setValue(TOP_CAP, topCap).setValue(BOTTOM_CAP, bottomCap); + if (topCap || bottomCap) { + state = state.setValue(BROODFRUIT, false); + } + return state; + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return !state.getValue(STUNTED); + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (state.getValue(STUNTED)) { + return; + } + + boolean isTip = state.getValue(GROWTH_DIRECTION) == Direction.DOWN ? state.getValue(BOTTOM_CAP) : state.getValue(TOP_CAP); + if (isTip && state.getValue(DISTANCE) < MAX_DISTANCE && random.nextInt(6) == 0) { + BlockPos growPos = pos.relative(state.getValue(GROWTH_DIRECTION)); + if (level.getBlockState(growPos).isAir()) { + BlockState grownState = this.defaultBlockState() + .setValue(GROWTH_DIRECTION, state.getValue(GROWTH_DIRECTION)) + .setValue(DISTANCE, state.getValue(DISTANCE) + 1); + level.setBlock(growPos, grownState, Block.UPDATE_ALL); + + BlockState posState = level.getBlockState(pos); + if (posState.is(this)) { + level.setBlock(pos, computeState(posState, level, pos), Block.UPDATE_CLIENTS); + } + BlockState growState = level.getBlockState(growPos); + if (growState.is(this)) { + level.setBlock(growPos, computeState(growState, level, growPos), Block.UPDATE_CLIENTS); + } + } + } + + if (!state.getValue(TOP_CAP) && !state.getValue(BOTTOM_CAP) && !state.getValue(BROODFRUIT) && random.nextInt(NATURAL_FRUIT_CHANCE) == 0) { + level.setBlock(pos, state.setValue(BROODFRUIT, true), Block.UPDATE_ALL); + } + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return !state.getValue(TOP_CAP) && !state.getValue(BOTTOM_CAP) && !state.getValue(BROODFRUIT); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + level.setBlock(pos, state.setValue(BROODFRUIT, true), Block.UPDATE_ALL); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + ItemStack stack = player.getItemInHand(hand); + if (stack.is(Items.SHEARS) && !state.getValue(STUNTED)) { + if (!level.isClientSide) { + level.setBlock(pos, state.setValue(STUNTED, true), Block.UPDATE_ALL); + stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(hand)); + level.playSound(null, pos, SoundEvents.SHEEP_SHEAR, SoundSource.BLOCKS, 1.0F, 1.0F); + } + + return InteractionResult.sidedSuccess(level.isClientSide); + } + + if (!state.getValue(BROODFRUIT)) { + return super.use(state, level, pos, player, hand, hitResult); + } + + if (!level.isClientSide) { + BuiltInRegistries.ITEM.getOptional(BROODFRUIT_ITEM_ID).ifPresent(item -> harvestFruit(level, pos, item)); + level.setBlock(pos, state.setValue(BROODFRUIT, false), Block.UPDATE_ALL); + level.playSound(null, pos, SoundEvents.CAVE_VINES_PICK_BERRIES, SoundSource.BLOCKS, 1.0F, 0.9F + level.random.nextFloat() * 0.2F); + } + + return InteractionResult.sidedSuccess(level.isClientSide); + } + + private static void harvestFruit(Level level, BlockPos pos, Item item) { + Block.popResource(level, pos, new ItemStack(item, 1)); + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!level.isClientSide && state.getValue(BROODFRUIT) && !state.is(newState.getBlock())) { + BuiltInRegistries.ITEM.getOptional(BROODFRUIT_ITEM_ID).ifPresent(item -> harvestFruit(level, pos, item)); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(GROWTH_DIRECTION, TOP_CAP, BOTTOM_CAP, BROODFRUIT, STUNTED, DISTANCE); + } +} 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 new file mode 100644 index 00000000..e15c0799 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/MucusBlock.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.MultifaceBlock; +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.Shapes; +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; + + public MucusBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(MultifaceBlock.getFaceProperty(Direction.DOWN)) ? DOWN_COLLISION_SHAPE : Shapes.empty(); + } + + @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))) { + return; + } + + Vec3 delta = entity.getDeltaMovement(); + Vec3 horizontal = new Vec3(delta.x, 0.0D, delta.z); + double speed = horizontal.length(); + if (speed < SLIDE_MIN_SPEED) { + return; + } + + Vec3 direction = horizontal.scale(1.0D / speed); + double boostedSpeed = Math.min(speed + SLIDE_ACCELERATION, SLIDE_MAX_SPEED); + entity.setDeltaMovement(direction.x * boostedSpeed, delta.y, direction.z * boostedSpeed); + entity.hurtMarked = true; + entity.hasImpulse = true; + } +} 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 new file mode 100644 index 00000000..e0cd10e2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/NadirSaplingBlock.java @@ -0,0 +1,46 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +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.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 NadirSaplingBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(BlockTags.DIRT) || state.is(Blocks.FARMLAND); + } + + @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(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/NyxiteSpikeBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/NyxiteSpikeBlock.java new file mode 100644 index 00000000..565bb3ea --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/NyxiteSpikeBlock.java @@ -0,0 +1,161 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity; +import com.mojang.serialization.MapCodec; +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.item.FallingBlockEntity; +import net.minecraft.world.item.context.BlockPlaceContext; +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.PointedDripstoneBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DripstoneThickness; +import net.minecraft.world.level.material.Fluids; + +public class NyxiteSpikeBlock extends PointedDripstoneBlock { + @SuppressWarnings("rawtypes") + + public NyxiteSpikeBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + LevelAccessor level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + Direction direction = calculateTipDirection(level, pos, context.getNearestLookingVerticalDirection().getOpposite()); + if (direction == null) { + return null; + } + + boolean mergeTips = !context.isSecondaryUseActive(); + DripstoneThickness thickness = calculateDripstoneThickness(level, pos, direction, mergeTips); + if (thickness == null) { + return null; + } + + return this.defaultBlockState() + .setValue(TIP_DIRECTION, direction) + .setValue(THICKNESS, thickness) + .setValue(WATERLOGGED, level.getFluidState(pos).getType() == Fluids.WATER); + } + + @Override + public BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + if (direction != Direction.UP && direction != Direction.DOWN) { + return state; + } + + Direction tipDirection = state.getValue(TIP_DIRECTION); + if (tipDirection == Direction.DOWN && level.getBlockTicks().hasScheduledTick(pos, this)) { + return state; + } + + if (direction == tipDirection.getOpposite() && !this.canSurvive(state, level, pos)) { + if (tipDirection == Direction.DOWN) { + level.scheduleTick(pos, this, 2); + } else { + level.scheduleTick(pos, this, 1); + } + + return state; + } + + boolean mergeTips = state.getValue(THICKNESS) == DripstoneThickness.TIP_MERGE; + return state.setValue(THICKNESS, calculateDripstoneThickness(level, pos, tipDirection, mergeTips)); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return isValidPointedDripstonePlacement(level, pos, state.getValue(TIP_DIRECTION)); + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (this.canSurvive(state, level, pos)) { + return; + } + + if (state.getValue(TIP_DIRECTION) == Direction.DOWN) { + BlockPos.MutableBlockPos root = pos.mutable(); + while (isNyxiteSpikeWithDirection(level.getBlockState(root.above()), Direction.DOWN)) { + root.move(Direction.UP); + } + + BlockPos.MutableBlockPos cursor = root.mutable(); + while (isNyxiteSpikeWithDirection(level.getBlockState(cursor), Direction.DOWN)) { + BlockState fallingState = level.getBlockState(cursor); + if (isNyxiteSpikeWithDirection(fallingState, Direction.DOWN)) { + FallingBlockEntity.fall(level, cursor, fallingState); + } + cursor.move(Direction.DOWN); + } + return; + } + + BlockPos.MutableBlockPos cursor = pos.mutable(); + while (isNyxiteSpikeWithDirection(level.getBlockState(cursor), Direction.UP)) { + BlockState spikeState = level.getBlockState(cursor); + UpwardFallingBlockEntity.fallUp(level, cursor, spikeState); + cursor.move(Direction.UP); + } + } + + private static Direction calculateTipDirection(LevelReader level, BlockPos pos, Direction preferredDirection) { + if (isValidPointedDripstonePlacement(level, pos, preferredDirection)) { + return preferredDirection; + } + + Direction opposite = preferredDirection.getOpposite(); + return isValidPointedDripstonePlacement(level, pos, opposite) ? opposite : null; + } + + private static DripstoneThickness calculateDripstoneThickness(LevelReader level, BlockPos pos, Direction direction, boolean mergeTips) { + Direction opposite = direction.getOpposite(); + BlockState forwardState = level.getBlockState(pos.relative(direction)); + if (isNyxiteSpikeWithDirection(forwardState, opposite)) { + return !mergeTips && forwardState.getValue(THICKNESS) != DripstoneThickness.TIP_MERGE + ? DripstoneThickness.TIP + : DripstoneThickness.TIP_MERGE; + } + + if (!isNyxiteSpikeWithDirection(forwardState, direction)) { + return DripstoneThickness.TIP; + } + + DripstoneThickness forwardThickness = forwardState.getValue(THICKNESS); + if (forwardThickness != DripstoneThickness.TIP && forwardThickness != DripstoneThickness.TIP_MERGE) { + BlockState backState = level.getBlockState(pos.relative(opposite)); + return !isNyxiteSpikeWithDirection(backState, direction) ? DripstoneThickness.BASE : DripstoneThickness.MIDDLE; + } + + return DripstoneThickness.FRUSTUM; + } + + private static boolean isValidPointedDripstonePlacement(LevelReader level, BlockPos pos, Direction direction) { + BlockPos supportPos = pos.relative(direction.getOpposite()); + BlockState supportState = level.getBlockState(supportPos); + return supportState.isFaceSturdy(level, supportPos, direction) || isNyxiteSpikeWithDirection(supportState, direction); + } + + private static boolean isNyxiteSpikeWithDirection(BlockState state, Direction direction) { + return state.is(AntarchyObjects.NYXITE_SPIKE.get()) && state.getValue(TIP_DIRECTION) == direction; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodAcornBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodAcornBlock.java new file mode 100644 index 00000000..17174507 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodAcornBlock.java @@ -0,0 +1,199 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeGrowers; +import com.mojang.serialization.MapCodec; +import java.util.LinkedHashMap; +import java.util.Map; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.BlockTags; +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.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.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class OuranwoodAcornBlock extends BushBlock implements BonemealableBlock { + public static final int MAX_STAGE = 2; + public static final BooleanProperty HANGING = BlockStateProperties.HANGING; + public static final IntegerProperty STAGE = IntegerProperty.create("stage", 0, MAX_STAGE); + private static final VoxelShape[] SAPLING_SHAPES = new VoxelShape[] { + Block.box(5.5D, 0.0D, 5.5D, 10.5D, 4.0D, 10.5D), + Block.box(3.5D, 0.0D, 3.5D, 12.5D, 8.0D, 12.5D), + Block.box(2.0D, 0.0D, 2.0D, 14.0D, 12.0D, 14.0D) + }; + private static final VoxelShape HANGING_SHAPE = Block.box(4.0D, 2.0D, 4.0D, 12.0D, 16.0D, 12.0D); + + public OuranwoodAcornBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(HANGING, false).setValue(STAGE, 0)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + int stage = state.getValue(STAGE); + return state.getValue(HANGING) ? HANGING_SHAPE : SAPLING_SHAPES[stage]; + } + + @Override + public boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(BlockTags.DIRT) || state.is(Blocks.FARMLAND); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + if (state.getValue(HANGING)) { + return level.getBlockState(pos.above()).is(BlockTags.LEAVES); + } + + return super.canSurvive(state, 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(); + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (state.getValue(HANGING)) { + return; + } + + if (level.getMaxLocalRawBrightness(pos.above()) >= 9 && random.nextInt(7) == 0) { + this.advanceGrowth(level, pos, state, random); + } + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return !state.getValue(HANGING); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return !state.getValue(HANGING) && random.nextFloat() < 0.75F; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + if (state.getValue(HANGING)) { + return; + } + + this.advanceGrowth(level, pos, state, random); + } + + private void advanceGrowth(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + if (state.getValue(STAGE) < MAX_STAGE) { + level.setBlock(pos, state.setValue(STAGE, state.getValue(STAGE) + 1), Block.UPDATE_ALL); + return; + } + + this.growConfiguredTree(level, pos, state, random); + } + + private void growConfiguredTree(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + Footprint largeFootprint = this.findFootprint(level, pos, 3); + if (largeFootprint != null) { + if (largeFootprint.fullyMatured()) { + this.placeConfiguredTree(level, largeFootprint, OuranwoodTreeGrowers.OURANWOOD_LARGE_TREE, random); + } + return; + } + + Footprint mediumFootprint = this.findFootprint(level, pos, 2); + if (mediumFootprint != null) { + if (mediumFootprint.fullyMatured()) { + this.placeConfiguredTree(level, mediumFootprint, OuranwoodTreeGrowers.OURANWOOD_MEDIUM_TREE, random); + } + return; + } + + this.placeConfiguredTree(level, new Footprint(pos, Map.of(pos, state)), OuranwoodTreeGrowers.OURANWOOD_YOUNG_TREE, random); + } + + private Footprint findFootprint(ServerLevel level, BlockPos pos, int size) { + for (int offsetX = 0; offsetX < size; offsetX++) { + for (int offsetZ = 0; offsetZ < size; offsetZ++) { + BlockPos origin = pos.offset(-offsetX, 0, -offsetZ); + Map blocks = new LinkedHashMap<>(); + boolean matches = true; + boolean fullyMatured = true; + + for (int x = 0; x < size && matches; x++) { + for (int z = 0; z < size; z++) { + BlockPos checkPos = origin.offset(x, 0, z); + BlockState checkState = level.getBlockState(checkPos); + if (!checkState.is(this) || checkState.getValue(HANGING)) { + matches = false; + break; + } + + fullyMatured &= checkState.getValue(STAGE) >= MAX_STAGE; + blocks.put(checkPos, checkState); + } + } + + if (matches) { + return new Footprint(origin, blocks, fullyMatured); + } + } + } + + return null; + } + + private void placeConfiguredTree(ServerLevel level, Footprint footprint, ResourceKey> featureKey, RandomSource random) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(featureKey); + + for (BlockPos saplingPos : footprint.blocks().keySet()) { + level.removeBlock(saplingPos, false); + } + + if (feature.value().place(level, level.getChunkSource().getGenerator(), random, footprint.origin())) { + return; + } + + for (Map.Entry entry : footprint.blocks().entrySet()) { + level.setBlock(entry.getKey(), entry.getValue(), Block.UPDATE_ALL); + } + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HANGING, STAGE); + } + + private record Footprint(BlockPos origin, Map blocks, boolean fullyMatured) { + private Footprint(BlockPos origin, Map blocks) { + this(origin, blocks, true); + } + } +} 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 new file mode 100644 index 00000000..4ae4f55c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodLeavesBlock.java @@ -0,0 +1,189 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +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.BonemealableBlock; +import net.minecraft.world.level.block.LeavesBlock; +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.IntegerProperty; +import net.minecraft.world.level.material.FluidState; +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; + public static final BooleanProperty WATERLOGGED = LeavesBlock.WATERLOGGED; + + public static final int OURANWOOD_MAX_DISTANCE = 16; + public static final int OURANWOOD_DECAY_DISTANCE = OURANWOOD_MAX_DISTANCE + 1; + + public OuranwoodLeavesBlock(BlockBehaviour.Properties properties) { + super(properties); + + this.registerDefaultState(this.stateDefinition.any() + .setValue(LeavesBlock.DISTANCE, LeavesBlock.DECAY_DISTANCE) + .setValue(OURANWOOD_DISTANCE, OURANWOOD_DECAY_DISTANCE) + .setValue(PERSISTENT, false) + .setValue(WATERLOGGED, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(LeavesBlock.DISTANCE, OURANWOOD_DISTANCE, PERSISTENT, WATERLOGGED); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + FluidState fluidState = context.getLevel().getFluidState(context.getClickedPos()); + + BlockState state = this.defaultBlockState() + .setValue(PERSISTENT, true) + .setValue(WATERLOGGED, fluidState.getType() == Fluids.WATER); + + return recalculateDistance(state, context.getLevel(), context.getClickedPos()); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return decaying(state); + } + + @Override + protected boolean decaying(BlockState state) { + return !state.getValue(PERSISTENT) + && state.getValue(OURANWOOD_DISTANCE) > OURANWOOD_MAX_DISTANCE; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (decaying(state)) { + dropResources(state, level, pos); + level.removeBlock(pos, false); + } + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + level.setBlock(pos, recalculateDistance(state, level, pos), Block.UPDATE_ALL); + } + + @Override + public BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + int neighborDistance = Math.min(OURANWOOD_DECAY_DISTANCE, getDistanceAt(neighborState) + 1); + int currentDistance = state.getValue(OURANWOOD_DISTANCE); + + if (neighborDistance != 1 || currentDistance != neighborDistance) { + level.scheduleTick(pos, this, 1); + } + + return state; + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return this.canGrowHangingAcorn(level, pos); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + if (this.canGrowHangingAcorn(level, pos)) { + level.setBlock(pos.below(), createHangingAcornState(0), Block.UPDATE_ALL); + } + } + + private boolean canGrowHangingAcorn(LevelReader level, BlockPos pos) { + return level.getBlockState(pos.below()).isAir(); + } + + public static BlockState createHangingAcornState(int stage) { + return AntarchyObjects.OURANWOOD_ACORN_BLOCK.get().defaultBlockState() + .setValue(OuranwoodAcornBlock.HANGING, true) + .setValue(OuranwoodAcornBlock.STAGE, stage); + } + + private static BlockState recalculateDistance(BlockState state, LevelReader level, BlockPos pos) { + int bestDistance = OURANWOOD_DECAY_DISTANCE; + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + + for (Direction direction : Direction.values()) { + cursor.setWithOffset(pos, direction); + bestDistance = Math.min(bestDistance, getDistanceAt(level.getBlockState(cursor)) + 1); + + if (bestDistance == 1) { + break; + } + } + + bestDistance = Math.min(OURANWOOD_DECAY_DISTANCE, bestDistance); + return setOuranwoodDistance(state, bestDistance); + } + + private static BlockState setOuranwoodDistance(BlockState state, int distance) { + int ouranwoodDistance = Math.max(1, Math.min(OURANWOOD_DECAY_DISTANCE, distance)); + int vanillaDistance = Math.min(LeavesBlock.DECAY_DISTANCE, ouranwoodDistance); + + return state + .setValue(OURANWOOD_DISTANCE, ouranwoodDistance) + .setValue(LeavesBlock.DISTANCE, vanillaDistance); + } + + private static int getDistanceAt(BlockState state) { + if (state.is(BlockTags.LOGS)) { + return 0; + } + if (state.hasProperty(OURANWOOD_DISTANCE)) { + return state.getValue(OURANWOOD_DISTANCE); + } + if (state.hasProperty(LeavesBlock.DISTANCE)) { + return state.getValue(LeavesBlock.DISTANCE); + } + + return OURANWOOD_DECAY_DISTANCE; + } + + public static BlockState setOuranwoodDistanceForWorldgen(BlockState state, int distance) { + int ouranwoodDistance = Math.max(1, Math.min(OURANWOOD_DECAY_DISTANCE, distance)); + int vanillaDistance = Math.min(LeavesBlock.DECAY_DISTANCE, ouranwoodDistance); + + return state + .setValue(OURANWOOD_DISTANCE, ouranwoodDistance) + .setValue(LeavesBlock.DISTANCE, vanillaDistance); + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodLogBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodLogBlock.java new file mode 100644 index 00000000..49323216 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodLogBlock.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import java.util.function.Supplier; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.Block; + +public class OuranwoodLogBlock extends RotatedPillarBlock { + + public OuranwoodLogBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + public OuranwoodLogBlock(Supplier strippedBlock, BlockBehaviour.Properties properties) { + super(properties); + } + +} 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 new file mode 100644 index 00000000..49eac14e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodSquirrelNestBlock.java @@ -0,0 +1,73 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +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.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); + + public OuranwoodSquirrelNestBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(SQUIRREL_COUNT, 1)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(SQUIRREL_COUNT); + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + int count = state.getValue(SQUIRREL_COUNT); + for (int i = 0; i < count; i++) { + BlockPos spawnPos = findSpawnPos(level, pos, random); + if (spawnPos == null) continue; + + FlyingSquirrelEntity squirrel = AntarchyObjects.FLYING_SQUIRREL.get().create(level); + if (squirrel == null) continue; + + squirrel.moveTo( + spawnPos.getX() + 0.2D + random.nextDouble() * 0.6D, + spawnPos.getY() + 0.05D, + spawnPos.getZ() + 0.2D + random.nextDouble() * 0.6D, + random.nextFloat() * 360.0F, + 0.0F + ); + level.addFreshEntity(squirrel); + } + level.setBlock(pos, Blocks.COARSE_DIRT.defaultBlockState(), Block.UPDATE_ALL); + } + + private static BlockPos findSpawnPos(ServerLevel level, BlockPos nestPos, RandomSource random) { + if (level.isEmptyBlock(nestPos.above())) { + return nestPos.above(); + } + for (int attempt = 0; attempt < 8; attempt++) { + BlockPos candidate = nestPos.offset( + random.nextInt(3) - 1, + random.nextInt(2), + random.nextInt(3) - 1 + ); + if (level.isEmptyBlock(candidate) && !level.getBlockState(candidate.below()).canBeReplaced()) { + return candidate; + } + } + return null; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PeachLeavesBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PeachLeavesBlock.java new file mode 100644 index 00000000..1ffaf230 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PeachLeavesBlock.java @@ -0,0 +1,194 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.MapCodec; +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.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +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.BonemealableBlock; +import net.minecraft.world.level.block.LeavesBlock; +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.IntegerProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; + +public class PeachLeavesBlock extends LeavesBlock implements BonemealableBlock { + private static final ResourceLocation HANGING_PEACH_ID = new ResourceLocation(Antarchy.MODID, "hanging_peach"); + public static final IntegerProperty PEACH_DISTANCE = IntegerProperty.create("peach_distance", 1, 13); + public static final BooleanProperty PERSISTENT = LeavesBlock.PERSISTENT; + public static final BooleanProperty WATERLOGGED = LeavesBlock.WATERLOGGED; + public static final int PEACH_MAX_DISTANCE = 12; + public static final int PEACH_DECAY_DISTANCE = PEACH_MAX_DISTANCE + 1; + + public PeachLeavesBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(DISTANCE, DECAY_DISTANCE) + .setValue(PEACH_DISTANCE, PEACH_DECAY_DISTANCE) + .setValue(PERSISTENT, false) + .setValue(WATERLOGGED, false)); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + FluidState fluidState = context.getLevel().getFluidState(context.getClickedPos()); + BlockState state = this.defaultBlockState() + .setValue(PERSISTENT, true) + .setValue(WATERLOGGED, fluidState.getType() == Fluids.WATER); + + return recalculateDistance(state, context.getLevel(), context.getClickedPos()); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(LeavesBlock.DISTANCE, PEACH_DISTANCE, PERSISTENT, WATERLOGGED); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return decaying(state); + } + + @Override + protected boolean decaying(BlockState state) { + return !state.getValue(PERSISTENT) && state.getValue(PEACH_DISTANCE) > PEACH_MAX_DISTANCE; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (decaying(state)) { + dropResources(state, level, pos); + level.removeBlock(pos, false); + } + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + level.setBlock(pos, recalculateDistance(state, level, pos), Block.UPDATE_ALL); + } + + @Override + public BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + int neighborDistance = Math.min(PEACH_DECAY_DISTANCE, getDistanceAt(neighborState) + 1); + int currentDistance = state.getValue(PEACH_DISTANCE); + + if (neighborDistance != 1 || currentDistance != neighborDistance) { + level.scheduleTick(pos, this, 1); + } + + return state; + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + if (random.nextInt(18) != 0) { + return; + } + + level.addParticle( + AntarchyObjects.PEACH_LEAVES_PARTICLE.get(), + pos.getX() + random.nextDouble(), + pos.getY() + random.nextDouble(), + pos.getZ() + random.nextDouble(), + 0.0D, + -0.02D, + 0.0D + ); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return level.getBlockState(pos.below()).isAir(); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + if (!level.getBlockState(pos.below()).isAir()) { + return; + } + + level.setBlock(pos.below(), createHangingPeachState(), Block.UPDATE_ALL); + } + + public static BlockState createHangingPeachState() { + return BuiltInRegistries.BLOCK.getOptional(HANGING_PEACH_ID) + .map(Block::defaultBlockState) + .orElseThrow(() -> new IllegalStateException("Missing hanging peach block: " + HANGING_PEACH_ID)); + } + + private static BlockState recalculateDistance(BlockState state, LevelReader level, BlockPos pos) { + int bestDistance = PEACH_DECAY_DISTANCE; + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + + for (Direction direction : Direction.values()) { + cursor.setWithOffset(pos, direction); + bestDistance = Math.min(bestDistance, getDistanceAt(level.getBlockState(cursor)) + 1); + if (bestDistance == 1) { + break; + } + } + + return setPeachDistance(state, Math.min(PEACH_DECAY_DISTANCE, bestDistance)); + } + + private static BlockState setPeachDistance(BlockState state, int distance) { + int peachDistance = Math.max(1, Math.min(PEACH_DECAY_DISTANCE, distance)); + int vanillaDistance = Math.min(LeavesBlock.DECAY_DISTANCE, peachDistance); + + return state + .setValue(PEACH_DISTANCE, peachDistance) + .setValue(LeavesBlock.DISTANCE, vanillaDistance); + } + + private static int getDistanceAt(BlockState state) { + if (state.is(BlockTags.LOGS)) { + return 0; + } + if (state.hasProperty(PEACH_DISTANCE)) { + return state.getValue(PEACH_DISTANCE); + } + if (state.hasProperty(LeavesBlock.DISTANCE)) { + return state.getValue(LeavesBlock.DISTANCE); + } + + return PEACH_DECAY_DISTANCE; + } + + public static BlockState setPeachDistanceForWorldgen(BlockState state, int distance) { + int peachDistance = Math.max(1, Math.min(PEACH_DECAY_DISTANCE, distance)); + int vanillaDistance = Math.min(LeavesBlock.DECAY_DISTANCE, peachDistance); + + return state + .setValue(PEACH_DISTANCE, peachDistance) + .setValue(LeavesBlock.DISTANCE, vanillaDistance); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PeachSaplingBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PeachSaplingBlock.java new file mode 100644 index 00000000..d6038a3d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PeachSaplingBlock.java @@ -0,0 +1,128 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeGrowers; +import com.mojang.serialization.MapCodec; +import java.util.LinkedHashMap; +import java.util.Map; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +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; + +public class PeachSaplingBlock extends BushBlock implements BonemealableBlock { + + public PeachSaplingBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (level.getMaxLocalRawBrightness(pos.above()) >= 9 && random.nextInt(7) == 0) { + this.growConfiguredTree(level, pos, state, random); + } + } + + @Override + public BlockState updateShape( + BlockState state, + net.minecraft.core.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 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) { + Footprint largeFootprint = this.findFootprint(level, pos); + if (largeFootprint != null) { + this.placeConfiguredTree(level, largeFootprint, PeachTreeGrowers.PEACH_LARGE_TREE, random); + return; + } + + this.placeConfiguredTree(level, new Footprint(pos, Map.of(pos, state)), PeachTreeGrowers.PEACH_TREE, random); + } + + private Footprint findFootprint(ServerLevel level, BlockPos pos) { + for (int offsetX = 0; offsetX < 2; offsetX++) { + for (int offsetZ = 0; offsetZ < 2; offsetZ++) { + BlockPos origin = pos.offset(-offsetX, 0, -offsetZ); + Map blocks = new LinkedHashMap<>(); + boolean matches = true; + + for (int x = 0; x < 2 && matches; x++) { + for (int z = 0; z < 2; z++) { + BlockPos checkPos = origin.offset(x, 0, z); + BlockState checkState = level.getBlockState(checkPos); + if (!checkState.is(this)) { + matches = false; + break; + } + blocks.put(checkPos, checkState); + } + } + + if (matches) { + return new Footprint(origin, blocks); + } + } + } + + return null; + } + + private void placeConfiguredTree( + ServerLevel level, + Footprint footprint, + net.minecraft.resources.ResourceKey> featureKey, + RandomSource random + ) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(featureKey); + + for (BlockPos saplingPos : footprint.blocks().keySet()) { + level.removeBlock(saplingPos, false); + } + + if (feature.value().place(level, level.getChunkSource().getGenerator(), random, footprint.origin())) { + return; + } + + for (Map.Entry entry : footprint.blocks().entrySet()) { + level.setBlock(entry.getKey(), entry.getValue(), Block.UPDATE_ALL); + } + } + + private record Footprint(BlockPos origin, Map blocks) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PolishedNyxitePressurePlateBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PolishedNyxitePressurePlateBlock.java new file mode 100644 index 00000000..2b3d72cc --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PolishedNyxitePressurePlateBlock.java @@ -0,0 +1,68 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.PressurePlateBlock; +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.BlockSetType; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class PolishedNyxitePressurePlateBlock extends PressurePlateBlock { + public static final BooleanProperty CEILING = BooleanProperty.create("ceiling"); + + private static final VoxelShape CEILING_SHAPE = Block.box(1.0D, 15.0D, 1.0D, 15.0D, 16.0D, 15.0D); + private static final VoxelShape CEILING_PRESSED_SHAPE = Block.box(1.0D, 15.5D, 1.0D, 15.0D, 16.0D, 15.0D); + private static final AABB CEILING_TOUCH_AABB = new AABB(0.0625D, 0.75D, 0.0625D, 0.9375D, 1.0D, 0.9375D); + + public PolishedNyxitePressurePlateBlock(BlockSetType type, BlockBehaviour.Properties properties) { + super(Sensitivity.EVERYTHING, properties, type); + this.registerDefaultState(this.stateDefinition.any().setValue(POWERED, false).setValue(CEILING, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(CEILING); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + boolean ceiling = context.getClickedFace() == Direction.DOWN; + return this.defaultBlockState().setValue(CEILING, ceiling); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return state.getValue(CEILING) + ? Block.canSupportCenter(level, pos.above(), Direction.DOWN) + : super.canSurvive(state, level, pos); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + if (!state.getValue(CEILING)) { + return super.getShape(state, level, pos, context); + } + return state.getValue(POWERED) ? CEILING_PRESSED_SHAPE : CEILING_SHAPE; + } + + @Override + protected int getSignalStrength(Level level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + if (!state.getValue(CEILING)) { + return super.getSignalStrength(level, pos); + } + return getEntityCount(level, CEILING_TOUCH_AABB.move(pos), Entity.class) > 0 ? 15 : 0; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PotentNyxiteBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PotentNyxiteBlock.java new file mode 100644 index 00000000..e3357d95 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/PotentNyxiteBlock.java @@ -0,0 +1,297 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.state.PotentNyxiteState; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; +import com.mojang.serialization.MapCodec; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +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.EnumProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; + +public class PotentNyxiteBlock extends BaseEntityBlock { + private static final ResourceLocation HYPNOTIC_GAS_SOUND_ID = new ResourceLocation("antarchy", "potent_nyxite_hypnotic_gas"); + private static final ResourceLocation HYPNOTIC_GAS_CLOUD_ID = new ResourceLocation("antarchy", "hypnotic_gas_cloud"); + private static final ResourceLocation HYPNOTIC_GAS_CLOUD_DOWN_ID = new ResourceLocation("antarchy", "hypnotic_gas_cloud_down"); + + public static final EnumProperty STATE = EnumProperty.create("state", PotentNyxiteState.class); + + private final Supplier> blockEntityTypeSupplier; + + public PotentNyxiteBlock( + Supplier> blockEntityTypeSupplier, + BlockBehaviour.Properties properties + ) { + super(properties); + this.blockEntityTypeSupplier = blockEntityTypeSupplier; + this.registerDefaultState(this.stateDefinition.any().setValue(STATE, PotentNyxiteState.DRY)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(STATE); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new PotentNyxiteBlockEntity(pos, state, this.blockEntityTypeSupplier); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(STATE, resolveState(context.getLevel(), context.getClickedPos(), this.defaultBlockState())); + } + + @Override + public BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + return state.setValue(STATE, resolveState(level, pos, state)); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return level.isClientSide + ? createTickerHelper(blockEntityType, this.blockEntityTypeSupplier.get(), PotentNyxiteBlockEntity::clientTick) + : createTickerHelper(blockEntityType, this.blockEntityTypeSupplier.get(), (tickLevel, tickPos, tickState, blockEntity) -> { + if (tickLevel instanceof ServerLevel serverLevel) { + PotentNyxiteBlockEntity.serverTick(serverLevel, tickPos, tickState, blockEntity); + } + }); + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + PotentNyxiteBlockEntity.handleStateActivation(level, pos, state); + } + + @Override + public boolean triggerEvent(BlockState state, Level level, BlockPos pos, int id, int param) { + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof PotentNyxiteBlockEntity potentNyxiteBlockEntity) { + potentNyxiteBlockEntity.markEruptionStart(level.getGameTime()); + } + return true; + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + Direction fluidDirection = getFluidColumnDirection(level, pos); + if (state.getValue(STATE) == PotentNyxiteState.DRY || fluidDirection == null) { + return; + } + + Direction eruptionDirection = fluidDirection.getOpposite(); + BlockPos particlePos = pos.relative(eruptionDirection); + ResourceLocation particleId = eruptionDirection == Direction.DOWN ? HYPNOTIC_GAS_CLOUD_DOWN_ID : HYPNOTIC_GAS_CLOUD_ID; + spawnHypnoticGasParticlesAt(level, random, particlePos, particleId, eruptionDirection); + if (random.nextBoolean()) { + spawnHypnoticGasParticlesAt(level, random, particlePos, particleId, eruptionDirection); + } + + if (random.nextInt(10) == 0) { + level.playLocalSound( + pos.getX() + 0.5D, + pos.getY() + 0.5D, + pos.getZ() + 0.5D, + BuiltInRegistries.SOUND_EVENT.get(HYPNOTIC_GAS_SOUND_ID), + SoundSource.AMBIENT, + 1.75F, + 1.0F, + false + ); + } + } + + public static PotentNyxiteState resolveState(LevelAccessor level, BlockPos pos, BlockState state) { + Direction fluidDirection = getFluidColumnDirection(level, pos); + if (fluidDirection == null) { + return hasHypnoticGasFluid(level, pos) ? PotentNyxiteState.WET : PotentNyxiteState.DRY; + } + + if (hasContinuousTrigger(level, pos, fluidDirection)) { + return PotentNyxiteState.CONTINUOUS; + } + + if (hasPeriodicTrigger(level, pos, fluidDirection)) { + return PotentNyxiteState.DORMANT; + } + + return PotentNyxiteState.WET; + } + + public static boolean hasPeriodicTrigger(LevelAccessor level, BlockPos pos) { + Direction fluidDirection = getFluidColumnDirection(level, pos); + return fluidDirection != null && hasPeriodicTrigger(level, pos, fluidDirection); + } + + public static boolean hasHypnoticGasFluid(LevelAccessor level, BlockPos pos) { + return hasGasFluid(level, pos, Direction.UP) || hasGasFluid(level, pos, Direction.DOWN); + } + + public static boolean hasContinuousTrigger(LevelAccessor level, BlockPos pos) { + Direction fluidDirection = getFluidColumnDirection(level, pos); + return fluidDirection != null && hasContinuousTrigger(level, pos, fluidDirection); + } + + public static Direction getEruptionDirection(LevelAccessor level, BlockPos pos) { + Direction fluidDirection = getFluidColumnDirection(level, pos); + if (fluidDirection != null) { + return fluidDirection.getOpposite(); + } + + return Direction.UP; + } + + public static Direction getFluidColumnDirection(LevelAccessor level, BlockPos pos) { + boolean hasUpFluid = hasValidFluidColumn(level, pos, Direction.UP); + boolean hasDownFluid = hasValidFluidColumn(level, pos, Direction.DOWN); + if (!hasUpFluid && !hasDownFluid) { + return null; + } + + if (hasUpFluid && !hasDownFluid) { + return Direction.UP; + } + + if (hasDownFluid && !hasUpFluid) { + return Direction.DOWN; + } + + boolean hasUpHeat = hasContinuousTrigger(level, pos, Direction.UP); + boolean hasDownHeat = hasContinuousTrigger(level, pos, Direction.DOWN); + if (hasUpHeat && !hasDownHeat) { + return Direction.DOWN; + } + + if (hasDownHeat && !hasUpHeat) { + return Direction.UP; + } + + boolean hasUpTag = hasPeriodicTrigger(level, pos, Direction.UP); + boolean hasDownTag = hasPeriodicTrigger(level, pos, Direction.DOWN); + if (hasUpTag && !hasDownTag) { + return Direction.DOWN; + } + + if (hasDownTag && !hasUpTag) { + return Direction.UP; + } + + return Direction.UP; + } + + public static boolean hasAntiwaterOnSide(LevelAccessor level, BlockPos pos, Direction direction) { + FluidState fluidState = level.getFluidState(pos.relative(direction)); + return fluidState.isSource() && AntarchyFluidChecks.isAntiwater(fluidState); + } + + public static boolean hasGasFluid(LevelAccessor level, BlockPos pos, Direction direction) { + FluidState fluidState = level.getFluidState(pos.relative(direction)); + return fluidState.isSource() && AntarchyFluidChecks.isAntiwater(fluidState); + } + + public static boolean hasPeriodicTrigger(LevelAccessor level, BlockPos pos, Direction direction) { + int fluidBlocks = getFluidColumnDepth(level, pos, direction); + return fluidBlocks > 0 + && level.getBlockState(pos.relative(direction, fluidBlocks + 1)).is(AntarchyTags.Blocks.POTENT_NYXITE_ACTIVATION_BLOCKS); + } + + public static boolean hasContinuousTrigger(LevelAccessor level, BlockPos pos, Direction direction) { + int fluidBlocks = getFluidColumnDepth(level, pos, direction); + if (fluidBlocks <= 0) { + return false; + } + + FluidState fluidState = level.getFluidState(pos.relative(direction, fluidBlocks + 1)); + return fluidState.isSourceOfType(Fluids.LAVA); + } + + public static int getFluidColumnDepth(LevelAccessor level, BlockPos pos, Direction direction) { + if (direction != Direction.UP && direction != Direction.DOWN) { + return 0; + } + + int depth = 0; + BlockPos.MutableBlockPos cursor = pos.relative(direction).mutable(); + while (true) { + FluidState fluidState = level.getFluidState(cursor); + if (!AntarchyFluidChecks.isAntiwater(fluidState)) { + break; + } + + depth++; + cursor.move(direction); + } + + if (depth <= 0) { + return 0; + } + + BlockState terminatorState = level.getBlockState(cursor); + FluidState terminatorFluidState = level.getFluidState(cursor); + if (terminatorFluidState.isSourceOfType(Fluids.LAVA) || terminatorState.is(AntarchyTags.Blocks.POTENT_NYXITE_ACTIVATION_BLOCKS)) { + return depth; + } + + return 0; + } + + private static boolean hasValidFluidColumn(LevelAccessor level, BlockPos pos, Direction direction) { + return getFluidColumnDepth(level, pos, direction) > 0; + } + + private static void spawnHypnoticGasParticlesAt( + Level level, + RandomSource random, + BlockPos particlePos, + ResourceLocation particleId, + Direction eruptionDirection + ) { + level.addAlwaysVisibleParticle( + simpleParticle(particleId), + particlePos.getX() + 0.2D + random.nextDouble() * 0.6D, + particlePos.getY() + 0.1D + random.nextDouble() * 0.35D, + particlePos.getZ() + 0.2D + random.nextDouble() * 0.6D, + 0.0D, + eruptionDirection == Direction.UP ? 0.01D : -0.01D, + 0.0D + ); + } + + private static SimpleParticleType simpleParticle(ResourceLocation id) { + return (SimpleParticleType) BuiltInRegistries.PARTICLE_TYPE.get(id); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SeashellBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SeashellBlock.java new file mode 100644 index 00000000..8dc2338b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SeashellBlock.java @@ -0,0 +1,289 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; +import com.mojang.serialization.MapCodec; +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.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.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.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.SimpleWaterloggedBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +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.DirectionProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +public final class SeashellBlock extends BaseEntityBlock implements SimpleWaterloggedBlock { + public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; + + private static final double SHELL_MIN = 1.0D; + private static final double SHELL_MAX = 15.0D; + private static final double SHELL_HEIGHT = 4.333333D; + private static final double COLLISION_FORWARD_OFFSET = 1.0D; + private static final VoxelShape OUTLINE_SHAPE = Block.box(SHELL_MIN, 0.0D, SHELL_MIN, SHELL_MAX, SHELL_HEIGHT, SHELL_MAX); + + public SeashellBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(FACING, Direction.NORTH) + .setValue(POWERED, false) + .setValue(WATERLOGGED, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING, POWERED, WATERLOGGED); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + FluidState fluidState = context.getLevel().getFluidState(context.getClickedPos()); + boolean powered = context.getLevel().hasNeighborSignal(context.getClickedPos()); + return this.defaultBlockState() + .setValue(FACING, context.getHorizontalDirection().getOpposite()) + .setValue(POWERED, powered) + .setValue(WATERLOGGED, fluidState.getType() == Fluids.WATER); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.ENTITYBLOCK_ANIMATED; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return OUTLINE_SHAPE; + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return collisionShape(state.getValue(FACING)); + } + + @Override + public VoxelShape getOcclusionShape(BlockState state, BlockGetter level, BlockPos pos) { + return OUTLINE_SHAPE; + } + + @Override + public BlockState rotate(BlockState state, net.minecraft.world.level.block.Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @Override + public BlockState mirror(BlockState state, net.minecraft.world.level.block.Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))); + } + + @Override + public FluidState getFluidState(BlockState state) { + return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); + } + + @Override + public BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + if (!state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } + + if (level instanceof Level actualLevel && !actualLevel.isClientSide) { + this.updatePowerState(actualLevel, pos, state); + } + + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + @Override + public void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + BlockPos neighborPos, + boolean movedByPiston + ) { + super.neighborChanged(state, level, pos, block, neighborPos, movedByPiston); + if (!level.isClientSide) { + this.updatePowerState(level, pos, state); + } + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + if (!level.isClientSide) { + this.updatePowerState(level, pos, state); + } + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock()) && level.getBlockEntity(pos) instanceof SeashellBlockEntity seashell) { + seashell.dropContents(level, pos); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } + + @Override + public InteractionResult use( + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + ItemStack stack = player.getItemInHand(hand); + if (!(level.getBlockEntity(pos) instanceof SeashellBlockEntity seashell)) { + return InteractionResult.PASS; + } + + if (player.isShiftKeyDown()) { + if (level.isClientSide) { + return InteractionResult.SUCCESS; + } + + if (seashell.closeManually()) { + level.playSound(null, pos, SoundEvents.CHEST_CLOSE, SoundSource.BLOCKS, 0.6F, 0.95F + level.random.nextFloat() * 0.1F); + return InteractionResult.CONSUME; + } + + return InteractionResult.PASS; + } + + if (!seashell.isEffectivelyOpen()) { + if (level.isClientSide) { + return InteractionResult.SUCCESS; + } + + if (seashell.openManually()) { + level.playSound(null, pos, SoundEvents.CHEST_OPEN, SoundSource.BLOCKS, 0.6F, 0.95F + level.random.nextFloat() * 0.1F); + return InteractionResult.CONSUME; + } + + return InteractionResult.PASS; + } + + if (stack.isEmpty() && !seashell.hasAnyContents()) { + if (level.isClientSide) { + return InteractionResult.SUCCESS; + } + + if (seashell.closeManually()) { + level.playSound(null, pos, SoundEvents.CHEST_CLOSE, SoundSource.BLOCKS, 0.6F, 0.95F + level.random.nextFloat() * 0.1F); + return InteractionResult.CONSUME; + } + + return InteractionResult.PASS; + } + + if (!stack.isEmpty()) { + if (level.isClientSide) { + return seashell.canAcceptItem(player, stack) ? InteractionResult.SUCCESS : InteractionResult.PASS; + } + + if (seashell.tryInsert(player, hand, stack)) { + level.playSound(null, pos, SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.BLOCKS, 0.6F, 0.95F + level.random.nextFloat() * 0.1F); + return InteractionResult.CONSUME; + } + + return InteractionResult.PASS; + } + + if (level.isClientSide) { + return seashell.hasAnyContents() ? InteractionResult.SUCCESS : InteractionResult.PASS; + } + + if (seashell.tryRemove(player, hand)) { + level.playSound(null, pos, SoundEvents.ITEM_FRAME_REMOVE_ITEM, SoundSource.BLOCKS, 0.6F, 0.95F + level.random.nextFloat() * 0.1F); + return InteractionResult.CONSUME; + } + + return InteractionResult.PASS; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new SeashellBlockEntity(pos, state); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return level.isClientSide + ? createTickerHelper(blockEntityType, AntarchyObjects.SEASHELL_BLOCK_ENTITY.get(), SeashellBlockEntity::clientTick) + : createTickerHelper(blockEntityType, AntarchyObjects.SEASHELL_BLOCK_ENTITY.get(), SeashellBlockEntity::serverTick); + } + + private void updatePowerState(Level level, BlockPos pos, BlockState state) { + boolean powered = level.hasNeighborSignal(pos); + if (state.getValue(POWERED) == powered) { + if (level.getBlockEntity(pos) instanceof SeashellBlockEntity seashell) { + seashell.syncVisualState(powered); + } + return; + } + + BlockState updatedState = state.setValue(POWERED, powered); + level.setBlock(pos, updatedState, Block.UPDATE_ALL); + if (level.getBlockEntity(pos) instanceof SeashellBlockEntity seashell) { + if (seashell.onPowerStateChanged(powered)) { + level.playSound(null, pos, powered ? SoundEvents.CHEST_OPEN : SoundEvents.CHEST_CLOSE, SoundSource.BLOCKS, 0.6F, 0.95F + level.random.nextFloat() * 0.1F); + } + } + } + + private static VoxelShape collisionShape(Direction facing) { + return switch (facing) { + case NORTH -> Block.box(SHELL_MIN, 0.0D, SHELL_MIN - COLLISION_FORWARD_OFFSET, SHELL_MAX, SHELL_HEIGHT, SHELL_MAX - COLLISION_FORWARD_OFFSET); + case SOUTH -> Block.box(SHELL_MIN, 0.0D, SHELL_MIN + COLLISION_FORWARD_OFFSET, SHELL_MAX, SHELL_HEIGHT, SHELL_MAX + COLLISION_FORWARD_OFFSET); + case WEST -> Block.box(SHELL_MIN - COLLISION_FORWARD_OFFSET, 0.0D, SHELL_MIN, SHELL_MAX - COLLISION_FORWARD_OFFSET, SHELL_HEIGHT, SHELL_MAX); + case EAST -> Block.box(SHELL_MIN + COLLISION_FORWARD_OFFSET, 0.0D, SHELL_MIN, SHELL_MAX + COLLISION_FORWARD_OFFSET, SHELL_HEIGHT, SHELL_MAX); + default -> OUTLINE_SHAPE; + }; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SignalSavingBulbBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SignalSavingBulbBlock.java new file mode 100644 index 00000000..db5f06df --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SignalSavingBulbBlock.java @@ -0,0 +1,82 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.player.Player; +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.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; + +public class SignalSavingBulbBlock extends Block { + + public static final BooleanProperty LIT = BlockStateProperties.LIT; + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + public static final IntegerProperty BRIGHTNESS = IntegerProperty.create("brightness", 0, 15); + + public SignalSavingBulbBlock(BlockBehaviour.Properties properties) { + super(properties.lightLevel(state -> state.getValue(LIT) ? state.getValue(BRIGHTNESS) : 0)); + this.registerDefaultState(this.defaultBlockState() + .setValue(LIT, false) + .setValue(POWERED, false) + .setValue(BRIGHTNESS, 0)); + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean moving) { + if (oldState.getBlock() != state.getBlock() && level instanceof ServerLevel serverLevel) { + this.checkAndFlip(state, serverLevel, pos); + } + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean moving) { + if (level instanceof ServerLevel serverLevel) { + this.checkAndFlip(state, serverLevel, pos); + } + } + + public void checkAndFlip(BlockState state, ServerLevel level, BlockPos pos) { + boolean receiving = level.hasNeighborSignal(pos); + boolean wasPowered = state.getValue(POWERED); + + if (receiving == wasPowered) return; + + BlockState newState = state; + + if (!wasPowered) { + boolean isLit = state.getValue(LIT); + if (!isLit) { + int strength = level.getBestNeighborSignal(pos); + newState = state.setValue(LIT, true).setValue(BRIGHTNESS, Math.max(strength, 1)); + level.playSound((Player) null, pos, SoundEvents.LEVER_CLICK, SoundSource.BLOCKS); + } else { + newState = state.setValue(LIT, false).setValue(BRIGHTNESS, 0); + level.playSound((Player) null, pos, SoundEvents.LEVER_CLICK, SoundSource.BLOCKS); + } + } + + level.setBlock(pos, newState.setValue(POWERED, receiving), 3); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(LIT, POWERED, BRIGHTNESS); + } + + @Override + public boolean hasAnalogOutputSignal(BlockState state) { + return true; + } + + @Override + public int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { + return state.getValue(LIT) ? state.getValue(BRIGHTNESS) : 0; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SpiderLilyBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SpiderLilyBlock.java new file mode 100644 index 00000000..603590b6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SpiderLilyBlock.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +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.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class SpiderLilyBlock extends BushBlock { + private static final VoxelShape SHAPE = Block.box(5.0D, 0.0D, 5.0D, 11.0D, 10.0D, 11.0D); + + public SpiderLilyBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SpitBugEggBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SpitBugEggBlock.java new file mode 100644 index 00000000..7b6442b9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/SpitBugEggBlock.java @@ -0,0 +1,147 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.SpitBugEntity; +import com.craisinlord.antarchy.content.horde.CavarynHordeManager; +import com.mojang.serialization.MapCodec; +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.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.EntityType; +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 SpitBugEggBlock extends Block { + public static final IntegerProperty HATCH = BlockStateProperties.HATCH; + 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 SHAPE = Block.box(1.5D, 0.0D, 1.5D, 14.5D, 16.0D, 14.5D); + private static final ResourceLocation SPIT_BUG_ID = new ResourceLocation(Antarchy.MODID, "spit_bug"); + + public SpitBugEggBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(ROTATED, false)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(ROTATED, context.getHorizontalDirection().getAxis() == Direction.Axis.X); + } + + @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 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 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.hatch(level, pos, random); + } + + private boolean shouldUpdateHatchLevel(Level level, BlockPos pos) { + 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; + } + } + + boolean onAmberMoss = level.getBlockState(pos.below()).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 spitBugType = (EntityType) (EntityType) BuiltInRegistries.ENTITY_TYPE.getOptional(SPIT_BUG_ID).orElse(null); + if (spitBugType == null) { + return; + } + SpitBugEntity entity = spitBugType.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 + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HATCH, ROTATED); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralBlock.java new file mode 100644 index 00000000..06cf823d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralBlock.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import org.jetbrains.annotations.Nullable; +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.tags.FluidTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.BlockBehaviour.Properties; +import net.minecraft.world.level.material.FluidState; + +public class StarCoralBlock extends Block { + private final Block deadBlock; + + public StarCoralBlock(Block deadBlock, Properties properties) { + super(properties); + this.deadBlock = deadBlock; + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!this.scanForWater(level, pos)) { + level.setBlock(pos, this.deadBlock.defaultBlockState(), 2); + } + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!this.scanForWater(level, pos)) { + level.scheduleTick(pos, this, 60 + level.getRandom().nextInt(40)); + } + + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + protected boolean scanForWater(BlockGetter level, BlockPos pos) { + for (Direction direction : Direction.values()) { + FluidState fluidState = level.getFluidState(pos.relative(direction)); + if (fluidState.is(FluidTags.WATER)) { + return true; + } + } + + return false; + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + if (!this.scanForWater(context.getLevel(), context.getClickedPos())) { + context.getLevel().scheduleTick(context.getClickedPos(), this, 60 + context.getLevel().getRandom().nextInt(40)); + } + + return this.defaultBlockState(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralFanBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralFanBlock.java new file mode 100644 index 00000000..74d4af0d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralFanBlock.java @@ -0,0 +1,51 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +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.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.BaseCoralFanBlock; +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.block.state.BlockBehaviour.Properties; +import net.minecraft.world.level.material.Fluids; + +public class StarCoralFanBlock extends BaseCoralFanBlock { + private final Block deadBlock; + + public StarCoralFanBlock(Block deadBlock, Properties properties) { + super(properties); + this.deadBlock = deadBlock; + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + this.tryScheduleDieTick(state, level, pos); + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!scanForWater(state, level, pos)) { + level.setBlock(pos, this.deadBlock.defaultBlockState().setValue(WATERLOGGED, false), 2); + } + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (direction == Direction.DOWN && !state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } else { + this.tryScheduleDieTick(state, level, pos); + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralPlantBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralPlantBlock.java new file mode 100644 index 00000000..c8cb6a32 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralPlantBlock.java @@ -0,0 +1,60 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +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.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.BaseCoralPlantTypeBlock; +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.block.state.BlockBehaviour.Properties; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class StarCoralPlantBlock extends BaseCoralPlantTypeBlock { + private final Block deadBlock; + protected static final VoxelShape SHAPE = Block.box(2.0, 0.0, 2.0, 14.0, 15.0, 14.0); + + public StarCoralPlantBlock(Block deadBlock, Properties properties) { + super(properties); + this.deadBlock = deadBlock; + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + this.tryScheduleDieTick(state, level, pos); + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!scanForWater(state, level, pos)) { + level.setBlock(pos, this.deadBlock.defaultBlockState().setValue(WATERLOGGED, false), 2); + } + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (direction == Direction.DOWN && !state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } else { + this.tryScheduleDieTick(state, level, pos); + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralWallFanBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralWallFanBlock.java new file mode 100644 index 00000000..566c69bf --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/StarCoralWallFanBlock.java @@ -0,0 +1,55 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +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.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.BaseCoralWallFanBlock; +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.block.state.BlockBehaviour.Properties; +import net.minecraft.world.level.material.Fluids; + +public class StarCoralWallFanBlock extends BaseCoralWallFanBlock { + private final Block deadBlock; + + public StarCoralWallFanBlock(Block deadBlock, Properties properties) { + super(properties); + this.deadBlock = deadBlock; + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + this.tryScheduleDieTick(state, level, pos); + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!scanForWater(state, level, pos)) { + level.setBlock( + pos, + this.deadBlock.defaultBlockState().setValue(WATERLOGGED, false).setValue(FACING, state.getValue(FACING)), + 2 + ); + } + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (direction.getOpposite() == state.getValue(FACING) && !state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } else { + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + this.tryScheduleDieTick(state, level, pos); + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + } +} 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 new file mode 100644 index 00000000..3f1294f8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/TriffidGooBlock.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 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/UmbralMossBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UmbralMossBlock.java new file mode 100644 index 00000000..a99540f4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UmbralMossBlock.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.mojang.serialization.MapCodec; +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.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public class UmbralMossBlock extends Block implements BonemealableBlock { + private static final ResourceKey> UMBRAL_MOSS_PATCH_BONEMEAL = ResourceKey.create( + Registries.CONFIGURED_FEATURE, + new ResourceLocation(Antarchy.MODID, "umbral_moss_patch_bonemeal") + ); + + public UmbralMossBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return level.getBlockState(pos.above()).isAir(); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(UMBRAL_MOSS_PATCH_BONEMEAL); + feature.value().place(level, level.getChunkSource().getGenerator(), random, pos); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UmbralMossCarpetBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UmbralMossCarpetBlock.java new file mode 100644 index 00000000..60d545b5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UmbralMossCarpetBlock.java @@ -0,0 +1,130 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockGetter; +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.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.WallSide; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class UmbralMossCarpetBlock extends Block { + public static final BooleanProperty BOTTOM = BlockStateProperties.BOTTOM; + public static final net.minecraft.world.level.block.state.properties.EnumProperty NORTH_WALL = BlockStateProperties.NORTH_WALL; + public static final net.minecraft.world.level.block.state.properties.EnumProperty EAST_WALL = BlockStateProperties.EAST_WALL; + public static final net.minecraft.world.level.block.state.properties.EnumProperty SOUTH_WALL = BlockStateProperties.SOUTH_WALL; + public static final net.minecraft.world.level.block.state.properties.EnumProperty WEST_WALL = BlockStateProperties.WEST_WALL; + + private static final VoxelShape FLOOR_SHAPE = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D); + private static final VoxelShape NORTH_LOW = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 6.0D, 1.0D); + private static final VoxelShape NORTH_TALL = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 1.0D); + private static final VoxelShape EAST_LOW = Block.box(15.0D, 0.0D, 0.0D, 16.0D, 6.0D, 16.0D); + private static final VoxelShape EAST_TALL = Block.box(15.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D); + private static final VoxelShape SOUTH_LOW = Block.box(0.0D, 0.0D, 15.0D, 16.0D, 6.0D, 16.0D); + private static final VoxelShape SOUTH_TALL = Block.box(0.0D, 0.0D, 15.0D, 16.0D, 16.0D, 16.0D); + private static final VoxelShape WEST_LOW = Block.box(0.0D, 0.0D, 0.0D, 1.0D, 6.0D, 16.0D); + private static final VoxelShape WEST_TALL = Block.box(0.0D, 0.0D, 0.0D, 1.0D, 16.0D, 16.0D); + + public UmbralMossCarpetBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(BOTTOM, true) + .setValue(NORTH_WALL, WallSide.NONE) + .setValue(EAST_WALL, WallSide.NONE) + .setValue(SOUTH_WALL, WallSide.NONE) + .setValue(WEST_WALL, WallSide.NONE)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(BOTTOM, NORTH_WALL, EAST_WALL, SOUTH_WALL, WEST_WALL); + } + + @Override + public BlockState getStateForPlacement(net.minecraft.world.item.context.BlockPlaceContext context) { + BlockPos pos = context.getClickedPos(); + Direction face = context.getClickedFace(); + BlockState state = this.defaultBlockState() + .setValue(BOTTOM, face == Direction.UP) + .setValue(NORTH_WALL, WallSide.NONE) + .setValue(EAST_WALL, WallSide.NONE) + .setValue(SOUTH_WALL, WallSide.NONE) + .setValue(WEST_WALL, WallSide.NONE); + if (!state.getValue(BOTTOM)) { + state = switch (face) { + case NORTH -> state.setValue(NORTH_WALL, WallSide.TALL); + case EAST -> state.setValue(EAST_WALL, WallSide.TALL); + case SOUTH -> state.setValue(SOUTH_WALL, WallSide.TALL); + case WEST -> state.setValue(WEST_WALL, WallSide.TALL); + default -> state; + }; + } + return state; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + if (state.getValue(BOTTOM)) { + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + if (supportsWall(level, pos, Direction.NORTH, state.getValue(NORTH_WALL))) { + return true; + } + if (supportsWall(level, pos, Direction.EAST, state.getValue(EAST_WALL))) { + return true; + } + if (supportsWall(level, pos, Direction.SOUTH, state.getValue(SOUTH_WALL))) { + return true; + } + if (supportsWall(level, pos, Direction.WEST, state.getValue(WEST_WALL))) { + return true; + } + + return level.getBlockState(pos.above()).isFaceSturdy(level, pos.above(), Direction.DOWN); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + return state.canSurvive(level, pos) ? state : net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + if (state.getValue(BOTTOM)) { + return FLOOR_SHAPE; + } + + VoxelShape shape = Shapes.empty(); + shape = combine(shape, state.getValue(NORTH_WALL), NORTH_LOW, NORTH_TALL); + shape = combine(shape, state.getValue(EAST_WALL), EAST_LOW, EAST_TALL); + shape = combine(shape, state.getValue(SOUTH_WALL), SOUTH_LOW, SOUTH_TALL); + shape = combine(shape, state.getValue(WEST_WALL), WEST_LOW, WEST_TALL); + return shape.isEmpty() ? FLOOR_SHAPE : shape; + } + + private static boolean supportsWall(LevelReader level, BlockPos pos, Direction direction, WallSide side) { + if (side == WallSide.NONE) { + return false; + } + BlockPos supportPos = pos.relative(direction); + return level.getBlockState(supportPos).isFaceSturdy(level, supportPos, direction.getOpposite()); + } + + private static VoxelShape combine(VoxelShape current, WallSide side, VoxelShape lowShape, VoxelShape tallShape) { + if (side == WallSide.NONE) { + return current; + } + return Shapes.or(current, side == WallSide.TALL ? tallShape : lowShape); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UpperBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UpperBlock.java new file mode 100644 index 00000000..aa95f7a1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UpperBlock.java @@ -0,0 +1,140 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.block.entity.UpperBlockEntity; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.Containers; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.player.Player; +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.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; +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.DirectionProperty; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class UpperBlock extends BaseEntityBlock { + public static final DirectionProperty FACING = DirectionProperty.create("facing", direction -> direction != Direction.DOWN); + public static final BooleanProperty ENABLED = BlockStateProperties.ENABLED; + + private static final VoxelShape TOP = Block.box(0.0, 0.0, 0.0, 16.0, 6.0, 16.0); + private static final VoxelShape MIDDLE = Block.box(4.0, 6.0, 4.0, 12.0, 12.0, 12.0); + private static final VoxelShape BASE = Shapes.or(TOP, MIDDLE); + private static final VoxelShape UP_SHAPE = Shapes.or(BASE, Block.box(6.0, 12.0, 6.0, 10.0, 16.0, 10.0)); + private static final VoxelShape NORTH_SHAPE = Shapes.or(BASE, Block.box(6.0, 8.0, 0.0, 10.0, 12.0, 4.0)); + private static final VoxelShape SOUTH_SHAPE = Shapes.or(BASE, Block.box(6.0, 8.0, 12.0, 10.0, 12.0, 16.0)); + private static final VoxelShape WEST_SHAPE = Shapes.or(BASE, Block.box(0.0, 8.0, 6.0, 4.0, 12.0, 10.0)); + private static final VoxelShape EAST_SHAPE = Shapes.or(BASE, Block.box(12.0, 8.0, 6.0, 16.0, 12.0, 10.0)); + + private final Supplier> blockEntityTypeSupplier; + + public UpperBlock(Supplier> blockEntityTypeSupplier, BlockBehaviour.Properties properties) { + super(properties); + this.blockEntityTypeSupplier = blockEntityTypeSupplier; + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.UP).setValue(ENABLED, true)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING, ENABLED); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Direction opposite = context.getClickedFace().getOpposite(); + Direction facing = opposite == Direction.DOWN ? Direction.UP : opposite; + return this.defaultBlockState() + .setValue(FACING, facing) + .setValue(ENABLED, !context.getLevel().hasNeighborSignal(context.getClickedPos())); + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + this.updateEnabled(level, pos, state); + } + + private void updateEnabled(Level level, BlockPos pos, BlockState state) { + boolean shouldBeEnabled = !level.hasNeighborSignal(pos); + if (shouldBeEnabled != state.getValue(ENABLED)) { + level.setBlock(pos, state.setValue(ENABLED, shouldBeEnabled), Block.UPDATE_CLIENTS); + } + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return switch (state.getValue(FACING)) { + case UP -> UP_SHAPE; + case NORTH -> NORTH_SHAPE; + case SOUTH -> SOUTH_SHAPE; + case WEST -> WEST_SHAPE; + case EAST -> EAST_SHAPE; + default -> UP_SHAPE; + }; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new UpperBlockEntity(pos, state, this.blockEntityTypeSupplier); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + if (level.isClientSide) { + return null; + } + return createTickerHelper(blockEntityType, this.blockEntityTypeSupplier.get(), (tickLevel, tickPos, tickState, blockEntity) -> { + if (tickLevel instanceof net.minecraft.server.level.ServerLevel serverLevel) { + UpperBlockEntity.serverTick(serverLevel, tickPos, tickState, blockEntity); + } + }); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + if (level.getBlockEntity(pos) instanceof MenuProvider menuProvider) { + player.openMenu(menuProvider); + } + return InteractionResult.CONSUME; + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock()) && level.getBlockEntity(pos) instanceof UpperBlockEntity blockEntity) { + Containers.dropContents(level, pos, blockEntity); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } + + @Override + public BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/WaspNestBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/WaspNestBlock.java new file mode 100644 index 00000000..6d93d935 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/WaspNestBlock.java @@ -0,0 +1,115 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.mojang.serialization.MapCodec; +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.EntityType; +import net.minecraft.world.entity.LivingEntity; +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.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +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.DirectionProperty; +import org.jetbrains.annotations.Nullable; +import java.util.function.Supplier; + +public class WaspNestBlock extends BaseEntityBlock { + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + private final Supplier> blockEntityTypeSupplier; + private final int maxOccupants; + private final boolean populateInitialWasps; + + public WaspNestBlock( + Supplier> blockEntityTypeSupplier, + BlockBehaviour.Properties properties + ) { + this(blockEntityTypeSupplier, 4, true, properties); + } + + public WaspNestBlock( + Supplier> blockEntityTypeSupplier, + int maxOccupants, + boolean populateInitialWasps, + BlockBehaviour.Properties properties + ) { + super(properties); + this.blockEntityTypeSupplier = blockEntityTypeSupplier; + this.maxOccupants = maxOccupants; + this.populateInitialWasps = populateInitialWasps; + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new WaspNestBlockEntity(pos, state); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return level.isClientSide + ? null + : createTickerHelper(blockEntityType, this.blockEntityTypeSupplier.get(), + (tickLevel, tickPos, tickState, nest) -> { + if (tickLevel instanceof ServerLevel serverLevel) { + WaspNestBlockEntity.serverTick(serverLevel, tickPos, tickState, nest); + } + }); + } + + @Override + public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { + super.setPlacedBy(level, pos, state, placer, stack); + if (!level.isClientSide && this.populateInitialWasps && level.getBlockEntity(pos) instanceof WaspNestBlockEntity nestBlockEntity) { + nestBlockEntity.populateInitialWasps((ServerLevel) level); + } + } + + @Override + public void playerWillDestroy(Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.player.Player player) { + if (!level.isClientSide && level.getBlockEntity(pos) instanceof WaspNestBlockEntity nestBlockEntity) { + nestBlockEntity.releaseAll((ServerLevel) level); + } + + super.playerWillDestroy(level, pos, state, player); + } + + public int maxOccupants() { + return this.maxOccupants; + } + + public boolean shouldPopulateInitialWasps() { + return this.populateInitialWasps; + } + + public EntityType waspType() { + return com.craisinlord.antarchy.content.AntarchyObjects.WASP.get(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/WildCornBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/WildCornBlock.java new file mode 100644 index 00000000..48743604 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/WildCornBlock.java @@ -0,0 +1,57 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +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.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; + +public final class WildCornBlock extends CornCropBlock { + + public WildCornBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(AGE, 3).setValue(HALF, DoubleBlockHalf.LOWER)); + } + + @Override + public boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(Blocks.GRASS_BLOCK); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return false; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { + return false; + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return false; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + } + + @Override + public ItemStack getCloneItemStack(BlockGetter level, BlockPos pos, BlockState state) { + return new ItemStack(AntarchyObjects.CORN.get()); + } +} 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 new file mode 100644 index 00000000..43141acc --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/AntNestBlockEntity.java @@ -0,0 +1,196 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.AntNestBlock; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +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.world.entity.EntityType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +public class AntNestBlockEntity extends BlockEntity { + private static final String STORED_ANTS = "StoredAnts"; + private static final String NBT_INITIALIZED = "Initialized"; + private static final int RELEASE_COOLDOWN_MIN = 80; + private static final int RELEASE_COOLDOWN_RANGE = 100; + private static final int ENTER_NEST_COOLDOWN = 200; + private static final int INITIAL_ANT_COUNT_MIN = 2; + private static final int INITIAL_ANT_COUNT_RANGE = 4; + private static final double SPAWN_OFFSET_XZ = 0.5D; + private static final double SPAWN_OFFSET_Y = 0.05D; + + private final List storedAnts = new ArrayList<>(); + private int releaseCooldown = RELEASE_COOLDOWN_MIN; + private boolean initialized = false; + + public AntNestBlockEntity(BlockPos pos, BlockState blockState) { + super(AntarchyObjects.ANT_NEST_BLOCK_ENTITY.get(), pos, blockState); + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, AntNestBlockEntity nest) { + if (!nest.initialized) { + nest.populateInitialAnts(level); + } + + boolean ignoreNight = level.dimensionType().hasFixedTime(); + if ((!ignoreNight && level.isNight()) || level.isRaining()) { + return; + } + + if (nest.storedAnts.isEmpty()) { + return; + } + + if (--nest.releaseCooldown > 0) { + return; + } + + nest.releaseCooldown = RELEASE_COOLDOWN_MIN + level.random.nextInt(RELEASE_COOLDOWN_RANGE); + nest.releaseOne(level); + } + + public void populateInitialAnts(ServerLevel level) { + if (this.initialized) { + return; + } + + this.initialized = true; + if (!this.nestBlock().shouldPopulateInitialAnts()) { + return; + } + + int amount = INITIAL_ANT_COUNT_MIN + level.random.nextInt(INITIAL_ANT_COUNT_RANGE); + for (int i = 0; i < amount && this.storedAnts.size() < this.maxOccupants(); i++) { + EntityType antType = this.nestBlock().initialAntType(level.random); + this.storedAnts.add(this.createStoredAnt(level, antType)); + } + this.setChanged(); + } + + public boolean canAccept(EntityType antType) { + return this.nestBlock().canAccept(antType) && this.storedAnts.size() < this.maxOccupants(); + } + + public boolean tryStoreAnt(BaseAntEntity antEntity) { + if (!this.canAccept(antEntity.getType())) { + return false; + } + + antEntity.onEnterNest(); + CompoundTag antTag = new CompoundTag(); + antEntity.addAdditionalSaveData(antTag); + this.storedAnts.add(new StoredAnt(antEntity.getType(), antTag)); + this.releaseCooldown = Math.max(this.releaseCooldown, ENTER_NEST_COOLDOWN); + antEntity.discard(); + this.setChanged(); + return true; + } + + public void releaseAll(ServerLevel level) { + while (!this.storedAnts.isEmpty()) { + this.releaseOne(level); + } + } + + private void releaseOne(ServerLevel level) { + if (this.storedAnts.isEmpty()) { + return; + } + + StoredAnt storedAnt = this.storedAnts.get(0); + BaseAntEntity antEntity = storedAnt.create(level); + if (antEntity == null) { + this.storedAnts.remove(0); + return; + } + + BlockPos spawnPos = this.getBlockPos().above(); + if (!level.getBlockState(spawnPos).canBeReplaced()) { + 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; + } + + this.storedAnts.remove(0); + antEntity.setNestPos(this.getBlockPos()); + antEntity.onExitNest(); + level.addFreshEntity(antEntity); + this.setChanged(); + } + + private int maxOccupants() { + return this.nestBlock().maxOccupants(); + } + + private AntNestBlock nestBlock() { + return (AntNestBlock) this.getBlockState().getBlock(); + } + + private StoredAnt createStoredAnt(ServerLevel level, EntityType antType) { + if (!(antType.create(level) instanceof BaseAntEntity antEntity)) { + return new StoredAnt(antType, new CompoundTag()); + } + + antEntity.setNestPos(this.getBlockPos()); + CompoundTag antTag = new CompoundTag(); + antEntity.addAdditionalSaveData(antTag); + return new StoredAnt(antType, antTag); + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putBoolean(NBT_INITIALIZED, this.initialized); + ListTag listTag = new ListTag(); + for (StoredAnt storedAnt : this.storedAnts) { + listTag.add(storedAnt.save()); + } + tag.put(STORED_ANTS, listTag); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + this.initialized = tag.getBoolean(NBT_INITIALIZED); + this.storedAnts.clear(); + ListTag listTag = tag.getList(STORED_ANTS, Tag.TAG_COMPOUND); + for (int i = 0; i < listTag.size(); i++) { + this.storedAnts.add(StoredAnt.load(listTag.getCompound(i))); + } + } + + private record StoredAnt(EntityType antType, CompoundTag data) { + private CompoundTag save() { + CompoundTag tag = new CompoundTag(); + tag.putString("id", BuiltInRegistries.ENTITY_TYPE.getKey(this.antType).toString()); + tag.put("data", this.data.copy()); + return tag; + } + + private static StoredAnt load(CompoundTag tag) { + EntityType antType = BuiltInRegistries.ENTITY_TYPE.getOptional(new ResourceLocation(tag.getString("id"))).orElse(EntityType.SILVERFISH); + return new StoredAnt(antType, tag.getCompound("data")); + } + + private BaseAntEntity create(ServerLevel level) { + if (!(this.antType.create(level) instanceof BaseAntEntity antEntity)) { + return null; + } + + antEntity.readAdditionalSaveData(this.data.copy()); + return antEntity; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/BluestoneComparatorBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/BluestoneComparatorBlockEntity.java new file mode 100644 index 00000000..0af57b97 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/BluestoneComparatorBlockEntity.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.block.entity; + +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +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 BluestoneComparatorBlockEntity extends BlockEntity { + private int outputSignal; + + public BluestoneComparatorBlockEntity(BlockPos pos, BlockState state, Supplier> blockEntityTypeSupplier) { + super(blockEntityTypeSupplier.get(), pos, state); + } + + public int getOutputSignal() { + return this.outputSignal; + } + + public void setOutputSignal(int outputSignal) { + this.outputSignal = outputSignal; + this.setChanged(); + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putInt("OutputSignal", this.outputSignal); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + this.outputSignal = tag.getInt("OutputSignal"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/CritterCageBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/CritterCageBlockEntity.java new file mode 100644 index 00000000..72d3dfd7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/CritterCageBlockEntity.java @@ -0,0 +1,200 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.item.CritterCageItem; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.network.chat.Component; +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.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +public class CritterCageBlockEntity extends BlockEntity { + private static final String ENTITY_TYPE_TAG = "EntityType"; + private static final String ENTITY_DATA_TAG = "EntityData"; + private static final String PRIMARY_COLOR_TAG = "PrimaryColor"; + private static final String SECONDARY_COLOR_TAG = "SecondaryColor"; + private static final String CUSTOM_NAME_TAG = "CustomName"; + + private ResourceLocation entityTypeId; + private CompoundTag entityData; + private int primaryColor = -1; + private int secondaryColor = -1; + @Nullable + private Component customName; + private int dataVersion; + + private transient int clientVersion = -1; + @Nullable + private transient Entity clientDisplayEntity; + + public CritterCageBlockEntity(BlockPos pos, BlockState blockState) { + super(AntarchyObjects.CRITTER_CAGE_BLOCK_ENTITY.get(), pos, blockState); + } + + public void loadFromItem(ItemStack stack, HolderLookup.Provider registries) { + this.entityTypeId = AntarchyObjects.CRITTER_CAGE_ENTITY_TYPE_COMPONENT.get(stack); + this.entityData = this.extractEntityData(stack); + this.primaryColor = AntarchyObjects.CRITTER_CAGE_PRIMARY_COLOR_COMPONENT.getOrDefault(stack, -1); + this.secondaryColor = AntarchyObjects.CRITTER_CAGE_SECONDARY_COLOR_COMPONENT.getOrDefault(stack, -1); + this.customName = stack.hasCustomHoverName() ? stack.getHoverName() : null; + this.dataVersion++; + this.clientDisplayEntity = null; + this.setChanged(); + if (this.level != null) { + BlockState state = this.getBlockState(); + this.level.sendBlockUpdated(this.worldPosition, state, state, Block.UPDATE_CLIENTS); + } + } + + public ItemStack toItemStack() { + ItemStack stack = new ItemStack(AntarchyObjects.CRITTER_CAGE.get()); + if (this.entityTypeId != null) { + AntarchyObjects.CRITTER_CAGE_ENTITY_TYPE_COMPONENT.set(stack, this.entityTypeId); + } + if (this.entityData != null) { + stack.getOrCreateTag().put(ENTITY_DATA_TAG, this.entityData.copy()); + } + if (this.primaryColor >= 0) { + AntarchyObjects.CRITTER_CAGE_PRIMARY_COLOR_COMPONENT.set(stack, this.primaryColor); + } else { + AntarchyObjects.CRITTER_CAGE_PRIMARY_COLOR_COMPONENT.remove(stack); + } + if (this.secondaryColor >= 0) { + AntarchyObjects.CRITTER_CAGE_SECONDARY_COLOR_COMPONENT.set(stack, this.secondaryColor); + } else { + AntarchyObjects.CRITTER_CAGE_SECONDARY_COLOR_COMPONENT.remove(stack); + } + if (this.customName != null) { + stack.setHoverName(this.customName); + } + return stack; + } + + public int primaryColor() { + return this.primaryColor; + } + + public int secondaryColor() { + return this.secondaryColor; + } + + @Nullable + public ResourceLocation entityTypeId() { + return this.entityTypeId; + } + + @Nullable + public CompoundTag entityData() { + return this.entityData == null ? null : this.entityData.copy(); + } + + @Nullable + public Entity getOrCreateClientDisplayEntity(Level level) { + if (level == null || level.isClientSide == false) { + return null; + } + if (this.clientDisplayEntity != null && this.clientVersion == this.dataVersion) { + return this.clientDisplayEntity; + } + + this.clientVersion = this.dataVersion; + this.clientDisplayEntity = this.createDisplayEntity(level); + return this.clientDisplayEntity; + } + + @Nullable + private Entity createDisplayEntity(Level level) { + if (this.entityTypeId == null || this.entityData == null) { + return null; + } + + EntityType type = BuiltInRegistries.ENTITY_TYPE.getOptional(this.entityTypeId).orElse(null); + if (type == null) { + return null; + } + + CompoundTag savedData = this.entityData.copy(); + savedData.putString("id", this.entityTypeId.toString()); + + Entity entity = EntityType.loadEntityRecursive(savedData, level, loaded -> loaded); + if (entity == null) { + return null; + } + + entity.setUUID(UUID.randomUUID()); + entity.setNoGravity(true); + entity.noPhysics = true; + entity.setSilent(true); + if (entity instanceof Mob mob) { + mob.setNoAi(true); + } + if (this.customName != null) { + entity.setCustomName(this.customName); + } + entity.setCustomNameVisible(false); + return entity; + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + if (this.entityTypeId != null) { + tag.putString(ENTITY_TYPE_TAG, this.entityTypeId.toString()); + } + if (this.entityData != null) { + tag.put(ENTITY_DATA_TAG, this.entityData.copy()); + } + tag.putInt(PRIMARY_COLOR_TAG, this.primaryColor); + tag.putInt(SECONDARY_COLOR_TAG, this.secondaryColor); + if (this.customName != null) { + tag.putString(CUSTOM_NAME_TAG, this.customName.getString()); + } + } + + @Override + public CompoundTag getUpdateTag() { + CompoundTag tag = new CompoundTag(); + this.saveAdditional(tag); + return tag; + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + this.entityTypeId = tag.contains(ENTITY_TYPE_TAG, Tag.TAG_STRING) ? new ResourceLocation(tag.getString(ENTITY_TYPE_TAG)) : null; + this.entityData = tag.contains(ENTITY_DATA_TAG, Tag.TAG_COMPOUND) ? tag.getCompound(ENTITY_DATA_TAG).copy() : null; + this.primaryColor = tag.getInt(PRIMARY_COLOR_TAG); + this.secondaryColor = tag.getInt(SECONDARY_COLOR_TAG); + this.customName = tag.contains(CUSTOM_NAME_TAG, Tag.TAG_STRING) ? Component.literal(tag.getString(CUSTOM_NAME_TAG)) : null; + this.clientDisplayEntity = null; + this.dataVersion++; + } + + private CompoundTag extractEntityData(ItemStack stack) { + CompoundTag tag = stack.hasTag() ? stack.getTag().copy() : new CompoundTag(); + if (!tag.contains(ENTITY_DATA_TAG, Tag.TAG_COMPOUND)) { + return null; + } + return tag.getCompound(ENTITY_DATA_TAG).copy(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/DreamCampfireBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/DreamCampfireBlockEntity.java new file mode 100644 index 00000000..9eee189b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/DreamCampfireBlockEntity.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.entity.CampfireBlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +public class DreamCampfireBlockEntity extends CampfireBlockEntity { + private static final ThreadLocal CONSTRUCTING_DREAM_CAMPFIRE = ThreadLocal.withInitial(() -> false); + + public DreamCampfireBlockEntity(BlockPos pos, BlockState blockState) { + super(pos, blockState); + } + + @Override + public BlockEntityType getType() { + return AntarchyObjects.DREAM_CAMPFIRE_BLOCK_ENTITY.get(); + } + + public static void beginConstruction() { + CONSTRUCTING_DREAM_CAMPFIRE.set(true); + } + + public static void endConstruction() { + CONSTRUCTING_DREAM_CAMPFIRE.set(false); + } + + public static boolean isConstructingDreamCampfire() { + return CONSTRUCTING_DREAM_CAMPFIRE.get(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/HushweedBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/HushweedBlockEntity.java new file mode 100644 index 00000000..06e3b4c4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/HushweedBlockEntity.java @@ -0,0 +1,69 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.block.HushweedBlock; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.Difficulty; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +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; + +public class HushweedBlockEntity extends BlockEntity { + private static final int COOLDOWN_TICKS = 30; + private static final double ATTACK_RANGE = 8.0D; + private static final double PROJECTILE_CLEARANCE = 1.1D; + private int cooldownTicks; + + public HushweedBlockEntity(BlockPos pos, BlockState blockState) { + super(AntarchyObjects.HUSHWEED_BLOCK_ENTITY.get(), pos, blockState); + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, HushweedBlockEntity blockEntity) { + if (level.getDifficulty() == Difficulty.PEACEFUL) { + return; + } + + if (blockEntity.cooldownTicks > 0) { + blockEntity.cooldownTicks--; + return; + } + + Vec3 center = Vec3.atCenterOf(pos); + LivingEntity target = level.getEntitiesOfClass( + LivingEntity.class, + new AABB(pos).inflate(ATTACK_RANGE), + entity -> entity.isAlive() + && entity.getType().is(AntarchyTags.Entities.HUSHWEED_TARGETS) + && (!(entity instanceof Player player) || (!player.isCreative() && !player.isSpectator()))) + .stream() + .min(java.util.Comparator.comparingDouble(entity -> entity.distanceToSqr(center))) + .orElse(null); + if (target == null) { + return; + } + + Direction facing = state.getValue(HushweedBlock.FACING); + Vec3 spawnPos = facing == Direction.UP + ? new Vec3(pos.getX() + 0.5D, pos.getY() + PROJECTILE_CLEARANCE, pos.getZ() + 0.5D) + : new Vec3(pos.getX() + 0.5D, pos.getY() + (1.0D - PROJECTILE_CLEARANCE), pos.getZ() + 0.5D); + Vec3 targetPos = target.getEyePosition().subtract(spawnPos); + if (targetPos.lengthSqr() < 1.0E-6D) { + return; + } + + HushProjectileEntity projectile = new HushProjectileEntity(AntarchyObjects.HUSH_PROJECTILE.get(), level); + projectile.setPos(spawnPos.x, spawnPos.y, spawnPos.z); + projectile.setTargetUuid(target.getUUID()); + projectile.setDeltaMovement(0.0D, 0.27D, 0.0D); + projectile.setNoGravity(true); + level.addFreshEntity(projectile); + blockEntity.cooldownTicks = COOLDOWN_TICKS; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/LucidAnchorBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/LucidAnchorBlockEntity.java new file mode 100644 index 00000000..85b923d4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/LucidAnchorBlockEntity.java @@ -0,0 +1,344 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.block.LucidAnchorBlock; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.IntArrayTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EntitySelector; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BeaconBeamBlock; +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.BlockState; +import net.minecraft.world.phys.AABB; + +public class LucidAnchorBlockEntity extends BlockEntity { + private static final int EFFECT_INTERVAL_TICKS = 20; + private static final int VALIDATION_INTERVAL_TICKS = 60; + private static final int EFFECT_DURATION_TICKS = 60; + private static final int EFFECT_REFRESH_THRESHOLD_TICKS = 30; + private static final int DEFAULT_BEAM_COLOR = 0xFFFF1A1A; + + private int pyramidLevel; + private boolean active; + private boolean beamPathClear; + private int beamLength; + private boolean structureDirty = true; + private long lastValidationTick = Long.MIN_VALUE; + private List beamSections = List.of(); + + public LucidAnchorBlockEntity(BlockPos pos, BlockState blockState) { + super(AntarchyObjects.LUCID_ANCHOR_BLOCK_ENTITY.get(), pos, blockState); + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, LucidAnchorBlockEntity blockEntity) { + blockEntity.serverTick(level, pos, state); + } + + public void markStructureDirty() { + this.structureDirty = true; + this.setChanged(); + } + + public boolean isActive() { + return this.active; + } + + public int getPyramidLevel() { + return this.pyramidLevel; + } + + public int getBeamLength() { + return this.beamLength; + } + + public List getBeamSections() { + return this.beamSections; + } + + private void serverTick(ServerLevel level, BlockPos pos, BlockState state) { + long gameTime = level.getGameTime(); + if (this.structureDirty || gameTime - this.lastValidationTick >= VALIDATION_INTERVAL_TICKS) { + this.revalidate(level, pos, state); + this.structureDirty = false; + this.lastValidationTick = gameTime; + } + + if (this.active && gameTime % EFFECT_INTERVAL_TICKS == 0L) { + this.applyInvertedField(level, pos); + } + } + + private void revalidate(ServerLevel level, BlockPos pos, BlockState state) { + int newPyramidLevel = calculatePyramidLevel(level, pos); + BeamValidation beamValidation = validateBeamPath(level, pos); + boolean newActive = newPyramidLevel > 0 && beamValidation.clear(); + boolean stateChanged = this.pyramidLevel != newPyramidLevel + || this.beamPathClear != beamValidation.clear() + || this.active != newActive + || this.beamLength != beamValidation.length() + || !this.beamSections.equals(beamValidation.sections()); + + boolean activeChanged = this.active != newActive; + this.pyramidLevel = newPyramidLevel; + this.beamPathClear = beamValidation.clear(); + this.beamLength = beamValidation.length(); + this.beamSections = beamValidation.sections(); + this.active = newActive; + + if (state.getBlock() instanceof LucidAnchorBlock && state.getValue(LucidAnchorBlock.ACTIVE) != newActive) { + level.setBlock(pos, state.setValue(LucidAnchorBlock.ACTIVE, newActive), Block.UPDATE_CLIENTS); + state = level.getBlockState(pos); + } + + if (activeChanged) { + level.playSound(null, pos, newActive ? SoundEvents.BEACON_ACTIVATE : SoundEvents.BEACON_DEACTIVATE, SoundSource.BLOCKS, 1.0F, 1.0F); + } + + if (stateChanged) { + this.syncVisualState(state); + } + } + + private void applyInvertedField(ServerLevel level, BlockPos pos) { + if (this.pyramidLevel <= 0) { + return; + } + + int radius = 10 + this.pyramidLevel * 10; + AABB area = new AABB( + pos.getX() - radius, + level.getMinBuildHeight(), + pos.getZ() - radius, + pos.getX() + radius + 1.0D, + pos.getY() + 1.0D, + pos.getZ() + radius + 1.0D + ); + MobEffect invertedEffect = AntarchyObjects.INVERTED_EFFECT.get(); + for (LivingEntity entity : level.getEntitiesOfClass(LivingEntity.class, area, entity -> EntitySelector.NO_SPECTATORS.test(entity) && entity.isAlive())) { + if (entity.getType().is(AntarchyTags.Entities.LUCID_ANCHOR_IMMUNE) || entity.getType().is(AntarchyTags.Entities.INVERTED_IMMUNE)) { + continue; + } + + MobEffectInstance current = entity.getEffect(invertedEffect); + if (current != null && current.getDuration() > EFFECT_REFRESH_THRESHOLD_TICKS && current.getAmplifier() == 0) { + continue; + } + + entity.addEffect(new MobEffectInstance(invertedEffect, EFFECT_DURATION_TICKS, 0, true, true, true)); + } + } + + private void syncVisualState(BlockState state) { + this.setChanged(); + if (this.level != null) { + this.level.sendBlockUpdated(this.worldPosition, state, state, Block.UPDATE_CLIENTS); + } + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putInt("PyramidLevel", this.pyramidLevel); + tag.putBoolean("Active", this.active); + tag.putBoolean("BeamPathClear", this.beamPathClear); + tag.putInt("BeamLength", this.beamLength); + tag.putBoolean("StructureDirty", this.structureDirty); + int[] colors = new int[this.beamSections.size()]; + int[] lengths = new int[this.beamSections.size()]; + for (int i = 0; i < this.beamSections.size(); i++) { + BeamSection section = this.beamSections.get(i); + colors[i] = section.color(); + lengths[i] = section.length(); + } + tag.put("BeamColors", new IntArrayTag(colors)); + tag.put("BeamLengths", new IntArrayTag(lengths)); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + this.pyramidLevel = tag.getInt("PyramidLevel"); + this.active = tag.getBoolean("Active"); + this.beamPathClear = tag.getBoolean("BeamPathClear"); + this.beamLength = tag.getInt("BeamLength"); + this.structureDirty = true; + int[] colors = tag.getIntArray("BeamColors"); + int[] lengths = tag.getIntArray("BeamLengths"); + List sections = new ArrayList<>(); + for (int i = 0; i < Math.min(colors.length, lengths.length); i++) { + if (lengths[i] > 0) { + sections.add(new BeamSection(colors[i], lengths[i])); + } + } + this.beamSections = sections.isEmpty() ? List.of() : List.copyOf(sections); + } + + @Override + public CompoundTag getUpdateTag() { + CompoundTag tag = new CompoundTag(); + this.saveAdditional(tag); + return tag; + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + public static int calculatePyramidLevel(Level level, BlockPos anchorPos) { + int completedLayers = 0; + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + for (int layer = 1; layer <= 4; layer++) { + int y = anchorPos.getY() + layer; + if (y > level.getMaxBuildHeight()) { + break; + } + + boolean complete = true; + for (int x = anchorPos.getX() - layer; x <= anchorPos.getX() + layer && complete; x++) { + for (int z = anchorPos.getZ() - layer; z <= anchorPos.getZ() + layer; z++) { + cursor.set(x, y, z); + if (!level.getBlockState(cursor).is(AntarchyTags.Blocks.LUCID_ANCHOR_BASE_BLOCKS)) { + complete = false; + break; + } + } + } + + if (!complete) { + break; + } + completedLayers = layer; + } + return completedLayers; + } + + private static BeamValidation validateBeamPath(Level level, BlockPos anchorPos) { + int minBuildHeight = level.getMinBuildHeight(); + int floorTolerance = minBuildHeight + 5; + if (anchorPos.getY() <= minBuildHeight) { + return BeamValidation.inactive(); + } + + BlockPos.MutableBlockPos cursor = anchorPos.below().mutable(); + List sections = new ArrayList<>(); + int currentColor = DEFAULT_BEAM_COLOR; + int currentLength = 0; + int totalLength = 0; + boolean clear = false; + + for (int y = anchorPos.getY() - 1; y >= minBuildHeight; y--) { + cursor.set(anchorPos.getX(), y, anchorPos.getZ()); + BlockState state = level.getBlockState(cursor); + + if (state.is(Blocks.BEDROCK)) { + if (y <= floorTolerance) { + currentLength++; + totalLength++; + clear = true; + } + break; + } + + if (!isBeamPassable(level, cursor, state)) { + if (y <= floorTolerance) { + currentLength++; + totalLength++; + clear = true; + break; + } + return BeamValidation.inactive(); + } + + int encounteredColor = colorForBeamState(state, currentColor); + if (encounteredColor != currentColor && currentLength > 0) { + sections.add(new BeamSection(currentColor, currentLength)); + currentColor = encounteredColor; + currentLength = 0; + } else { + currentColor = encounteredColor; + } + + currentLength++; + totalLength++; + if (y <= floorTolerance && state.isAir()) { + clear = true; + } + if (y == minBuildHeight) { + clear = true; + } + } + + if (!clear || totalLength <= 0) { + return BeamValidation.inactive(); + } + + if (currentLength > 0) { + sections.add(new BeamSection(currentColor, currentLength)); + } + + return new BeamValidation(true, totalLength, List.copyOf(sections)); + } + + private static boolean isBeamPassable(Level level, BlockPos pos, BlockState state) { + if (state.isAir()) { + return true; + } + if (!level.getFluidState(pos).isEmpty()) { + return true; + } + if (state.getBlock() instanceof BeaconBeamBlock) { + return true; + } + return state.getLightBlock(level, pos) < 15; + } + + private static int colorForBeamState(BlockState state, int fallbackColor) { + if (!(state.getBlock() instanceof BeaconBeamBlock beamBlock)) { + return fallbackColor; + } + + float[] diffuseComponents = beamBlock.getColor().getTextureDiffuseColors(); + int diffuse = ((int) (diffuseComponents[0] * 255.0F) << 16) + | ((int) (diffuseComponents[1] * 255.0F) << 8) + | (int) (diffuseComponents[2] * 255.0F); + int red = (diffuse >> 16) & 0xFF; + int green = (diffuse >> 8) & 0xFF; + int blue = diffuse & 0xFF; + if (fallbackColor == DEFAULT_BEAM_COLOR) { + return 0xFF000000 | diffuse; + } + + int fallbackRed = (fallbackColor >> 16) & 0xFF; + int fallbackGreen = (fallbackColor >> 8) & 0xFF; + int fallbackBlue = fallbackColor & 0xFF; + return 0xFF000000 + | (((fallbackRed + red) / 2) << 16) + | (((fallbackGreen + green) / 2) << 8) + | ((fallbackBlue + blue) / 2); + } + + public record BeamSection(int color, int length) { + } + + private record BeamValidation(boolean clear, int length, List sections) { + private static BeamValidation inactive() { + return new BeamValidation(false, 0, List.of()); + } + } +} 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 new file mode 100644 index 00000000..31c8486a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PotentNyxiteBlockEntity.java @@ -0,0 +1,522 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchySettings; +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.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import java.util.List; +import java.util.function.Predicate; +import java.util.function.Supplier; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.nbt.CompoundTag; +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.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntitySelector; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +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.gameevent.GameEvent; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +public class PotentNyxiteBlockEntity extends BlockEntity { + public static final long GEYSER_SALT = -904011478L; + + private static final ResourceLocation HYPNOTIC_GAS_ID = new ResourceLocation(Antarchy.MODID, "hypnotic_gas"); + private static final ResourceLocation HYPNOTIC_GAS_DOWN_ID = new ResourceLocation(Antarchy.MODID, "hypnotic_gas_down"); + private static final ResourceLocation HYPNOTIC_GAS_CLOUD_ID = new ResourceLocation(Antarchy.MODID, "hypnotic_gas_cloud"); + private static final ResourceLocation HYPNOTIC_GAS_CLOUD_DOWN_ID = new ResourceLocation(Antarchy.MODID, "hypnotic_gas_cloud_down"); + private static final ResourceLocation INVERTED_GEYSER_ERUPTION_ID = new ResourceLocation(Antarchy.MODID, "inverted_geyser_eruption"); + private static final ResourceLocation GEYSER_ERUPTION_START_SOUND_ID = new ResourceLocation(Antarchy.MODID, "potent_nyxite_geyser_eruption_start"); + private static final ResourceLocation GEYSER_ERUPTION_ACTIVE_SOUND_ID = new ResourceLocation(Antarchy.MODID, "potent_nyxite_geyser_eruption_active"); + private static final ResourceLocation GEYSER_CONTINUOUS_START_SOUND_ID = new ResourceLocation(Antarchy.MODID, "potent_nyxite_geyser_continuous_start"); + private static final ResourceLocation GEYSER_CONTINUOUS_ACTIVE_SOUND_ID = new ResourceLocation(Antarchy.MODID, "potent_nyxite_geyser_continuous_active"); + + private static final int MAX_FLUID_COLUMN_STEPS = 5; + private static final Predicate EFFECT_PREDICATE = EntitySelector.NO_SPECTATORS.and(EntitySelector.ENTITY_STILL_ALIVE); + + private int waitingCountdown = -1; + private long eruptionTick = -1L; + + public PotentNyxiteBlockEntity( + BlockPos pos, + BlockState blockState, + Supplier> blockEntityTypeSupplier + ) { + super(blockEntityTypeSupplier.get(), pos, blockState); + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, PotentNyxiteBlockEntity blockEntity) { + blockEntity.serverTick(level, pos, state); + } + + public static void clientTick(Level level, BlockPos pos, BlockState state, PotentNyxiteBlockEntity blockEntity) { + if (level instanceof ClientLevel clientLevel) { + blockEntity.clientTick(clientLevel, pos, state); + } + } + + public static void handleStateActivation(Level level, BlockPos pos, BlockState state) { + PotentNyxiteState stateValue = state.getValue(PotentNyxiteBlock.STATE); + if (stateValue != PotentNyxiteState.ERUPTING && stateValue != PotentNyxiteState.CONTINUOUS) { + return; + } + + level.blockEvent(pos, state.getBlock(), 0, 0); + level.playSound( + null, + pos, + BuiltInRegistries.SOUND_EVENT.get( + stateValue == PotentNyxiteState.CONTINUOUS ? GEYSER_CONTINUOUS_START_SOUND_ID : GEYSER_ERUPTION_START_SOUND_ID + ), + net.minecraft.sounds.SoundSource.BLOCKS, + 2.5F, + 1.0F + ); + } + + public void markEruptionStart(long gameTime) { + this.eruptionTick = gameTime; + } + + @Override + public void setLevel(Level level) { + super.setLevel(level); + if (this.eruptionTick == -1L) { + this.eruptionTick = level.getGameTime(); + } + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putInt("countdown", this.waitingCountdown); + tag.putLong("eruption_tick", this.eruptionTick); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + this.waitingCountdown = tag.getInt("countdown"); + this.eruptionTick = tag.getLong("eruption_tick"); + } + + private void serverTick(ServerLevel level, BlockPos pos, BlockState state) { + if (!(state.getBlock() instanceof PotentNyxiteBlock)) { + return; + } + + Direction fluidDirection = PotentNyxiteBlock.getFluidColumnDirection(level, pos); + BlockPos source = fluidDirection == null ? null : findHypnoticGasSourceBlock(level, pos, fluidDirection); + BlockPos adjustedSource = source == null || fluidDirection == null ? null : getAdjustedSource(source, fluidDirection); + if (level.getGameTime() % 30L == 0L && adjustedSource != null) { + applyHypnoticGasEffects(level, adjustedSource, fluidDirection); + } + + PotentNyxiteState environmentState = PotentNyxiteBlock.resolveState(level, pos, state); + PotentNyxiteState currentState = state.getValue(PotentNyxiteBlock.STATE); + + if (environmentState == PotentNyxiteState.CONTINUOUS) { + if (currentState != PotentNyxiteState.CONTINUOUS) { + BlockState newState = state.setValue(PotentNyxiteBlock.STATE, PotentNyxiteState.CONTINUOUS); + level.setBlock(pos, newState, Block.UPDATE_CLIENTS); + handleStateActivation(level, pos, newState); + this.setChanged(); + } + this.waitingCountdown = -1; + launchEntities(level, pos); + return; + } + + if (environmentState == PotentNyxiteState.DORMANT) { + if (currentState != PotentNyxiteState.DORMANT && currentState != PotentNyxiteState.ERUPTING) { + level.setBlock(pos, state.setValue(PotentNyxiteBlock.STATE, PotentNyxiteState.DORMANT), Block.UPDATE_CLIENTS); + currentState = PotentNyxiteState.DORMANT; + } + + if (source != null && fluidDirection != null && level.getGameTime() % 20L == 0L) { + int fluidBlocks = getFluidBlocks(level, pos, source, fluidDirection); + RandomSource geyserRandom = geyserPositional(level, pos); + if (this.waitingCountdown <= 0) { + if (currentState == PotentNyxiteState.ERUPTING) { + geyserRandom.nextInt(); + this.waitingCountdown = Math.max(1, fluidBlocks - 1) + geyserRandom.nextIntBetweenInclusive(1, 2); + } else { + this.waitingCountdown = 10 * Math.max(0, fluidBlocks - 1) + geyserRandom.nextIntBetweenInclusive(15, 30); + } + } + + if (this.waitingCountdown > 0) { + this.waitingCountdown--; + } + + if (this.waitingCountdown == 0) { + PotentNyxiteState nextState = currentState == PotentNyxiteState.ERUPTING + ? PotentNyxiteState.DORMANT + : PotentNyxiteState.ERUPTING; + BlockState newState = state.setValue(PotentNyxiteBlock.STATE, nextState); + level.setBlock(pos, newState, Block.UPDATE_CLIENTS); + if (nextState == PotentNyxiteState.ERUPTING) { + handleStateActivation(level, pos, newState); + level.gameEvent(GameEvent.BLOCK_ACTIVATE, pos, GameEvent.Context.of(newState)); + } else { + level.gameEvent(GameEvent.BLOCK_DEACTIVATE, pos, GameEvent.Context.of(newState)); + } + currentState = nextState; + this.setChanged(); + } + } + + if (currentState == PotentNyxiteState.ERUPTING) { + launchEntities(level, pos); + } + return; + } + + PotentNyxiteState fallbackState = environmentState == PotentNyxiteState.WET ? PotentNyxiteState.WET : PotentNyxiteState.DRY; + if (currentState != fallbackState) { + level.setBlock(pos, state.setValue(PotentNyxiteBlock.STATE, fallbackState), Block.UPDATE_CLIENTS); + } + this.waitingCountdown = -1; + } + + private void clientTick(ClientLevel level, BlockPos pos, BlockState state) { + Direction fluidDirection = PotentNyxiteBlock.getFluidColumnDirection(level, pos); + if (fluidDirection == null) { + return; + } + + BlockPos source = findHypnoticGasSourceBlock(level, pos, fluidDirection); + Direction eruptionDirection = PotentNyxiteBlock.getEruptionDirection(level, pos); + if (source != null && level.getGameTime() % 4L == 0L) { + boolean flipped = eruptionDirection == Direction.DOWN; + RandomSource random = level.getRandom(); + int count = flipped ? 3 : 4; + Vec3 center = Vec3.atCenterOf(source); + for (int i = 0; i < count; i++) { + double angle = random.nextDouble() * Mth.TWO_PI; + double radius = 0.18D + random.nextDouble() * 0.32D; + double outwardX = Mth.cos((float) angle) * radius; + double outwardZ = Mth.sin((float) angle) * radius; + double x = center.x + outwardX; + double z = center.z + outwardZ; + double y = source.getY() + (flipped ? 0.72D : 0.18D) + random.nextDouble() * 0.20D; + double driftX = outwardX * 0.015D; + double driftY = flipped ? 0.02D : 0.015D; + double driftZ = outwardZ * 0.015D; + level.addAlwaysVisibleParticle( + simpleParticle(flipped ? HYPNOTIC_GAS_DOWN_ID : HYPNOTIC_GAS_ID), + x, + y, + z, + driftX, + driftY, + driftZ + ); + } + } + if (source != null && level.getGameTime() % 20L == 0L) { + ResourceLocation cloudParticleId = eruptionDirection == Direction.DOWN + ? HYPNOTIC_GAS_CLOUD_DOWN_ID + : HYPNOTIC_GAS_CLOUD_ID; + level.addParticle(simpleParticle(cloudParticleId), source.getX() + 0.5D, source.getY() + 0.5D, source.getZ() + 0.5D, 0.0D, 0.0D, 0.0D); + } + + PotentNyxiteState stateValue = state.getValue(PotentNyxiteBlock.STATE); + if ((stateValue == PotentNyxiteState.ERUPTING || stateValue == PotentNyxiteState.CONTINUOUS) && source != null) { + int fluidBlocks = getFluidBlocks(level, pos, source, fluidDirection); + long eruptionTime = level.getGameTime() - this.eruptionTick; + + if (eruptionDirection == Direction.DOWN && eruptionTime % 20L == 0L) { + spawnDownwardHypnoticGasTrail(level, source, fluidBlocks); + } + + if (eruptionTime % 20L == 0L) { + level.addParticle( + new InvertedGeyserParticleOptions(geyserParticleType(INVERTED_GEYSER_ERUPTION_ID), fluidBlocks, eruptionDirection), + source.getX() + 0.5D, + source.getY(), + source.getZ() + 0.5D, + 0.0D, + 0.0D, + 0.0D + ); + } + + if (eruptionTime % 40L == 0L) { + level.playLocalSound( + source.getX() + 0.5D, + source.getY() + 0.5D, + source.getZ() + 0.5D, + BuiltInRegistries.SOUND_EVENT.get( + stateValue == PotentNyxiteState.CONTINUOUS ? GEYSER_CONTINUOUS_ACTIVE_SOUND_ID : GEYSER_ERUPTION_ACTIVE_SOUND_ID + ), + net.minecraft.sounds.SoundSource.BLOCKS, + 1.0F, + 1.0F, + false + ); + } + } + } + + private static void applyHypnoticGasEffects(ServerLevel level, BlockPos source, Direction fluidDirection) { + for (LivingEntity entity : getNearbyLivingEntities(level, source)) { + if (canBeReachedByHypnoticGas(level, source, entity.getEyePosition(), fluidDirection)) { + entity.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 240, 0, true, true)); + } + } + } + + private void launchEntities(ServerLevel level, BlockPos pos) { + Direction fluidDirection = PotentNyxiteBlock.getFluidColumnDirection(level, pos); + if (fluidDirection == null) { + return; + } + + BlockPos source = findHypnoticGasSourceBlock(level, pos, fluidDirection); + if (source == null) { + return; + } + + Direction eruptionDirection = PotentNyxiteBlock.getEruptionDirection(level, pos); + int fluidBlocks = getFluidBlocks(level, pos, source, fluidDirection); + int unobstructedBlocks = getUnobstructedBlockCount(level, source, eruptionDirection, fluidBlocks); + if (unobstructedBlocks <= 0) { + return; + } + + BlockPos start = source; + BlockPos end = source.relative(eruptionDirection, unobstructedBlocks - 1); + AABB area = new AABB( + Math.min(start.getX(), end.getX()), + Math.min(start.getY(), end.getY()), + Math.min(start.getZ(), end.getZ()), + Math.max(start.getX(), end.getX()) + 1.0D, + Math.max(start.getY(), end.getY()) + 1.0D, + Math.max(start.getZ(), end.getZ()) + 1.0D + ); + + Vec3 worldPush = new Vec3(0.0D, eruptionDirection.getStepY() * 0.2D, 0.0D); + double velocityThreshold = 0.3D + fluidBlocks * 0.1D; + int invertedDurationTicks = Mth.floor(AntarchySettings.potentNyxiteInvertedDurationSeconds() * 20.0D); + MobEffect invertedEffect = AntarchyObjects.INVERTED_EFFECT.get(); + + for (Entity entity : level.getEntitiesOfClass(Entity.class, area, EFFECT_PREDICATE)) { + if (entity instanceof Player player && player.getAbilities().flying) { + continue; + } + + AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(entity); + Vec3 currentWorldVelocity = gravityDirection.isInverted() + ? AntarchyGravityRotationUtil.vecPlayerToWorld(entity.getDeltaMovement(), gravityDirection) + : entity.getDeltaMovement(); + + double axisVelocity = currentWorldVelocity.y * eruptionDirection.getStepY(); + if (axisVelocity <= velocityThreshold) { + Vec3 nextWorldVelocity = currentWorldVelocity.add(worldPush); + entity.setDeltaMovement( + gravityDirection.isInverted() + ? AntarchyGravityRotationUtil.vecWorldToPlayer(nextWorldVelocity, gravityDirection) + : nextWorldVelocity + ); + entity.hurtMarked = true; + entity.hasImpulse = true; + entity.fallDistance = 0.0F; + } + + if (entity instanceof LivingEntity livingEntity) { + livingEntity.addEffect(new MobEffectInstance(invertedEffect, invertedDurationTicks, 0, false, true, true)); + } + } + } + + private static List getNearbyLivingEntities(Level level, BlockPos source) { + AABB aabb = new AABB(source).inflate(2.5D, 0.0D, 2.5D); + return level.getEntitiesOfClass(LivingEntity.class, aabb, entity -> EFFECT_PREDICATE.test(entity)); + } + + public static RandomSource geyserPositional(ServerLevel level, BlockPos pos) { + return new net.minecraft.world.level.levelgen.XoroshiroRandomSource(level.getSeed() ^ GEYSER_SALT).forkPositional().at(pos); + } + + public static BlockPos findHypnoticGasSourceBlock(LevelAccessor level, BlockPos origin, Direction direction) { + if (direction == Direction.DOWN) { + return origin.above(); + } + + return findLegacyHypnoticGasSourceBlock(level, origin, direction); + } + + private static BlockPos findLegacyHypnoticGasSourceBlock(LevelAccessor level, BlockPos origin, Direction direction) { + BlockPos.MutableBlockPos cursor = origin.relative(direction).mutable(); + + for (int i = 0; i <= MAX_FLUID_COLUMN_STEPS; i++) { + FluidState fluidState = level.getFluidState(cursor); + BlockState blockState = level.getBlockState(cursor); + + if (isHypnoticGasFluid(fluidState) && isGeyserPassableBlock(level, cursor)) { + cursor.move(direction); + continue; + } + + if (isGeyserPassableBlock(level, cursor)) { + return cursor.immutable(); + } + + return null; + } + + return null; + } + + public static Vec3 pickRandomHypnoticGasSpawnPoint(Level level, BlockPos source) { + RandomSource random = level.getRandom(); + Vec3 offset = new Vec3(random.nextFloat() - 0.5F, 0.0D, random.nextFloat() - 0.5F).normalize(); + float distance = random.nextFloat() * 3.0F; + return Vec3.atCenterOf(source).add(offset.scale(distance)).subtract(0.0D, 0.25D, 0.0D); + } + + public static boolean canBeReachedByHypnoticGas(Level level, BlockPos source, Vec3 pos) { + Direction fluidDirection = isHypnoticGasFluid(level.getFluidState(source.below())) ? Direction.DOWN : Direction.UP; + return canBeReachedByHypnoticGas(level, source, pos, fluidDirection); + } + + public static boolean canBeReachedByHypnoticGas(Level level, BlockPos source, Vec3 pos, Direction fluidDirection) { + BlockPos blockPos = BlockPos.containing(pos); + if (!isGeyserPassableBlock(level, blockPos)) { + return false; + } + + if (pos.distanceToSqr(Vec3.atCenterOf(source)) > 9.0D) { + return false; + } + + if (fluidDirection == Direction.DOWN) { + return haveLineOfSight(level, Vec3.atCenterOf(source), pos); + } + + Direction adjacentFluidDirection = findAdjacentFluidDirection(level, source); + if (adjacentFluidDirection == null) { + return false; + } + + Vec3 sourceSupport = Vec3.atCenterOf(source.relative(adjacentFluidDirection)); + Vec3 targetSupport = pos.add( + adjacentFluidDirection.getStepX(), + adjacentFluidDirection.getStepY(), + adjacentFluidDirection.getStepZ() + ); + return isHypnoticGasFluid(level.getFluidState(BlockPos.containing(targetSupport))) + && haveLineOfSight(level, sourceSupport, targetSupport); + } + + public static void spawnHypnoticGasParticle(Level level, Vec3 pos, boolean flipped) { + level.addAlwaysVisibleParticle(simpleParticle(flipped ? HYPNOTIC_GAS_DOWN_ID : HYPNOTIC_GAS_ID), pos.x, pos.y, pos.z, 0.0D, 0.0D, 0.0D); + } + + public static void spawnHypnoticGasParticle(Level level, Vec3 pos) { + spawnHypnoticGasParticle(level, pos, false); + } + + private static void spawnDownwardHypnoticGasTrail(ClientLevel level, BlockPos source, int fluidBlocks) { + RandomSource random = level.getRandom(); + int particleCount = Math.max(3, fluidBlocks + 1); + for (int i = 0; i < particleCount; i++) { + double progress = particleCount == 1 ? 0.0D : (double) i / (double) (particleCount - 1); + double y = source.getY() + 0.35D - progress * Math.max(1, fluidBlocks); + double x = source.getX() + 0.5D + (random.nextDouble() - 0.5D) * 0.35D; + double z = source.getZ() + 0.5D + (random.nextDouble() - 0.5D) * 0.35D; + level.addParticle(simpleParticle(HYPNOTIC_GAS_DOWN_ID), x, y, z, 0.0D, -0.01D, 0.0D); + } + } + + private static BlockPos getAdjustedSource(BlockPos source, Direction direction) { + return direction == Direction.DOWN ? source.above() : source; + } + + private static Direction findAdjacentFluidDirection(LevelAccessor level, BlockPos source) { + if (isHypnoticGasFluid(level.getFluidState(source.above()))) { + return Direction.UP; + } + if (isHypnoticGasFluid(level.getFluidState(source.below()))) { + return Direction.DOWN; + } + return null; + } + + private static int getFluidBlocks(LevelAccessor level, BlockPos origin, BlockPos source, Direction fluidDirection) { + if (fluidDirection == Direction.DOWN) { + return PotentNyxiteBlock.getFluidColumnDepth(level, origin, fluidDirection); + } + + return fluidBlocksBetween(origin, source, fluidDirection); + } + + private static int fluidBlocksBetween(BlockPos origin, BlockPos source, Direction fluidDirection) { + return Math.max(1, Math.abs(source.getY() - origin.getY()) - 1); + } + + private static int getUnobstructedBlockCount(LevelAccessor level, BlockPos start, Direction direction, int fluidBlocks) { + int geyserForceHeight = 6 * Math.max(1, fluidBlocks); + for (int i = 0; i < geyserForceHeight; i++) { + BlockPos currentPos = start.relative(direction, i); + if (!isGeyserPassableBlock(level, currentPos)) { + return i; + } + } + return geyserForceHeight; + } + + private static boolean isGeyserPassableBlock(LevelAccessor level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + FluidState fluidState = level.getFluidState(pos); + return state.isAir() + || (fluidState.isSource() && isHypnoticGasFluid(fluidState)) + || state.getCollisionShape(level, pos).isEmpty(); + } + + private static boolean isHypnoticGasFluid(FluidState fluidState) { + return AntarchyFluidChecks.isAntiwater(fluidState); + } + + private static boolean haveLineOfSight(Level level, Vec3 from, Vec3 to) { + HitResult hitResult = level.clip(new ClipContext(from, to, ClipContext.Block.VISUAL, ClipContext.Fluid.NONE, null)); + return hitResult.getType() != HitResult.Type.BLOCK; + } + + private static SimpleParticleType simpleParticle(ResourceLocation id) { + return (SimpleParticleType) BuiltInRegistries.PARTICLE_TYPE.get(id); + } + + @SuppressWarnings("unchecked") + private static ParticleType geyserParticleType(ResourceLocation id) { + return (ParticleType) BuiltInRegistries.PARTICLE_TYPE.get(id); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/SeashellBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/SeashellBlockEntity.java new file mode 100644 index 00000000..04f139f0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/SeashellBlockEntity.java @@ -0,0 +1,366 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.SeashellBlock; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.Containers; +import net.minecraft.world.InteractionHand; +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.ChestMenu; +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.entity.RandomizableContainerBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoBlockEntity; +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.object.PlayState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public final class SeashellBlockEntity extends RandomizableContainerBlockEntity implements GeoBlockEntity { + private static final String MAIN_CONTROLLER = "main_controller"; + private static final String TRANSITION_CONTROLLER = "transition_controller"; + private static final String OPEN_TRIGGER = "close_to_open"; + private static final String CLOSE_TRIGGER = "open_to_close"; + private static final RawAnimation OPEN_ANIM = RawAnimation.begin().thenPlayAndHold("open"); + private static final RawAnimation CLOSED_ANIM = RawAnimation.begin().thenPlayAndHold("closed"); + private static final Component TITLE = Component.translatable("block.antarchy.seashell"); + private static final int OPEN_TRANSITION_TICKS = 8; + private static final int CLOSE_TRANSITION_TICKS = 9; + + private final AnimatableInstanceCache animatableCache = GeckoLibUtil.createInstanceCache(this); + private NonNullList items = NonNullList.withSize(9, ItemStack.EMPTY); + private boolean visualOpen; + private boolean initializedVisualState; + private boolean redstonePowered; + private boolean manuallyOpened; + private boolean transitionTargetOpen; + private int transitionTicksRemaining; + + public SeashellBlockEntity(BlockPos pos, BlockState blockState) { + super(AntarchyObjects.SEASHELL_BLOCK_ENTITY.get(), pos, blockState); + this.redstonePowered = blockState.getValue(SeashellBlock.POWERED); + this.visualOpen = this.redstonePowered; + } + + public static void serverTick(Level level, BlockPos pos, BlockState state, SeashellBlockEntity seashell) { + seashell.syncVisualState(state.getValue(SeashellBlock.POWERED)); + seashell.tickVisualTransition(); + } + + public static void clientTick(Level level, BlockPos pos, BlockState state, SeashellBlockEntity seashell) { + seashell.syncVisualState(state.getValue(SeashellBlock.POWERED)); + seashell.tickVisualTransition(); + } + + public boolean canAcceptItem(@Nullable Player player, ItemStack stack) { + this.unpackLootTable(player); + return !stack.isEmpty() && this.getFirstEmptySlot() >= 0; + } + + public boolean tryInsert(@Nullable Player player, InteractionHand hand, ItemStack heldStack) { + this.unpackLootTable(player); + int slot = this.getFirstEmptySlot(); + if (slot < 0 || heldStack.isEmpty()) { + return false; + } + + ItemStack inserted = heldStack.copyWithCount(1); + this.items.set(slot, inserted); + if (player == null || !player.getAbilities().instabuild) { + heldStack.shrink(1); + } + + this.setChangedAndSync(); + return true; + } + + public boolean tryRemove(Player player, InteractionHand hand) { + this.unpackLootTable(player); + int slot = this.getLastFilledSlot(); + if (slot < 0) { + return false; + } + + ItemStack removed = this.items.get(slot); + this.items.set(slot, ItemStack.EMPTY); + if (player.getItemInHand(hand).isEmpty()) { + player.setItemInHand(hand, removed); + } else if (!player.addItem(removed)) { + player.drop(removed, false); + } + + this.setChangedAndSync(); + return true; + } + + public boolean hasAnyContents() { + this.generateLootIfNeeded(null); + return this.items.stream().anyMatch(stack -> !stack.isEmpty()); + } + + public void dropContents(Level level, BlockPos pos) { + this.unpackLootTable(null); + Containers.dropContents(level, pos, this.items); + this.items = NonNullList.withSize(9, ItemStack.EMPTY); + this.setChanged(); + } + + public boolean onPowerStateChanged(boolean powered) { + boolean wasOpen = this.isEffectivelyOpen(); + this.redstonePowered = powered; + boolean isOpen = this.isEffectivelyOpen(); + if (wasOpen != isOpen) { + if (isOpen) { + this.generateLootIfNeeded(null); + } + this.beginTransition(isOpen); + } + + this.setChangedAndSync(); + return wasOpen != isOpen; + } + + public boolean openManually() { + if (this.isEffectivelyOpen()) { + return false; + } + + this.manuallyOpened = true; + this.generateLootIfNeeded(null); + this.beginTransition(true); + this.setChangedAndSync(); + return true; + } + + public boolean closeManually() { + if (!this.manuallyOpened) { + return false; + } + + this.manuallyOpened = false; + boolean stillOpen = this.isEffectivelyOpen(); + if (!stillOpen) { + this.beginTransition(false); + } + + this.setChangedAndSync(); + return true; + } + + public boolean isEffectivelyOpen() { + return this.redstonePowered || this.manuallyOpened; + } + + public void syncVisualState(boolean powered) { + this.redstonePowered = powered; + if (!this.initializedVisualState) { + this.visualOpen = this.isEffectivelyOpen(); + this.initializedVisualState = true; + return; + } + + if (this.transitionTicksRemaining <= 0) { + this.visualOpen = this.isEffectivelyOpen(); + } + } + + public boolean isVisualOpen() { + return this.visualOpen; + } + + public List getDisplayedStacks() { + List inserted = new ArrayList<>(); + for (ItemStack stack : this.items) { + if (!stack.isEmpty()) { + inserted.add(stack); + } + } + + List displayed = new ArrayList<>(inserted.size()); + for (int i = 0; i < inserted.size(); i++) { + displayed.add(new DisplayedStack(inserted.get(i), displayOffsetFor(i))); + } + return displayed; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, MAIN_CONTROLLER, state -> + state.setAndContinue(this.visualOpen ? OPEN_ANIM : CLOSED_ANIM))); + controllers.add(new AnimationController<>(this, TRANSITION_CONTROLLER, state -> PlayState.STOP) + .triggerableAnim(OPEN_TRIGGER, RawAnimation.begin().thenPlay(OPEN_TRIGGER)) + .triggerableAnim(CLOSE_TRIGGER, RawAnimation.begin().thenPlay(CLOSE_TRIGGER))); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.animatableCache; + } + + @Override + protected Component getDefaultName() { + return TITLE; + } + + @Override + protected NonNullList getItems() { + return this.items; + } + + @Override + protected void setItems(NonNullList items) { + this.items = items; + } + + @Override + protected AbstractContainerMenu createMenu(int containerId, Inventory inventory) { + return ChestMenu.threeRows(containerId, inventory, this); + } + + @Override + public int getMaxStackSize() { + return 1; + } + + @Override + public boolean canPlaceItem(int slot, ItemStack stack) { + return !stack.isEmpty() && this.items.get(slot).isEmpty(); + } + + @Override + public int getContainerSize() { + return this.items.size(); + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + if (!this.trySaveLootTable(tag)) { + net.minecraft.world.ContainerHelper.saveAllItems(tag, this.items); + } + tag.putBoolean("VisualOpen", this.visualOpen); + tag.putBoolean("VisualInitialized", this.initializedVisualState); + tag.putBoolean("ManuallyOpened", this.manuallyOpened); + tag.putBoolean("TransitionTargetOpen", this.transitionTargetOpen); + tag.putInt("TransitionTicksRemaining", this.transitionTicksRemaining); + } + + @Override + public CompoundTag getUpdateTag() { + CompoundTag tag = new CompoundTag(); + this.saveAdditional(tag); + return tag; + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); + if (!this.tryLoadLootTable(tag) && tag.contains("Items")) { + net.minecraft.world.ContainerHelper.loadAllItems(tag, this.items); + } + this.visualOpen = tag.getBoolean("VisualOpen"); + this.initializedVisualState = tag.getBoolean("VisualInitialized"); + this.manuallyOpened = tag.getBoolean("ManuallyOpened"); + this.transitionTargetOpen = tag.getBoolean("TransitionTargetOpen"); + this.transitionTicksRemaining = tag.getInt("TransitionTicksRemaining"); + } + + private void setChangedAndSync() { + this.setChanged(); + if (this.level != null) { + BlockState state = this.getBlockState(); + this.level.sendBlockUpdated(this.worldPosition, state, state, Block.UPDATE_CLIENTS); + } + } + + private void generateLootIfNeeded(@Nullable Player player) { + if (this.level instanceof ServerLevel) { + this.unpackLootTable(player); + } + } + + private int getFirstEmptySlot() { + for (int i = 0; i < this.items.size(); i++) { + if (this.items.get(i).isEmpty()) { + return i; + } + } + return -1; + } + + private int getLastFilledSlot() { + for (int i = this.items.size() - 1; i >= 0; i--) { + if (!this.items.get(i).isEmpty()) { + return i; + } + } + return -1; + } + + private void beginTransition(boolean opening) { + this.transitionTargetOpen = opening; + this.transitionTicksRemaining = opening ? OPEN_TRANSITION_TICKS : CLOSE_TRANSITION_TICKS; + this.triggerAnim(TRANSITION_CONTROLLER, opening ? OPEN_TRIGGER : CLOSE_TRIGGER); + } + + private void tickVisualTransition() { + if (this.transitionTicksRemaining <= 0) { + return; + } + + this.transitionTicksRemaining--; + if (this.transitionTicksRemaining == 0) { + this.visualOpen = this.transitionTargetOpen; + this.setChangedAndSync(); + } + } + + private static Vec3 displayOffsetFor(int insertionIndex) { + return switch (insertionIndex) { + case 0 -> offset(1, 0); + case 1 -> offset(0, 0); + case 2 -> offset(2, 0); + case 3 -> offset(1, 1); + case 4 -> offset(0, 1); + case 5 -> offset(2, 1); + case 6 -> offset(1, 2); + case 7 -> offset(0, 2); + case 8 -> offset(2, 2); + default -> Vec3.ZERO; + }; + } + + private static Vec3 offset(int column, int row) { + double x = -0.22D + column * 0.22D; + double z = -0.22D + row * 0.22D; + return new Vec3(x, 0.155D, z); + } + + public record DisplayedStack(ItemStack stack, Vec3 offset) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UpperBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UpperBlockEntity.java new file mode 100644 index 00000000..f11797d5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UpperBlockEntity.java @@ -0,0 +1,223 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.block.UpperBlock; +import java.util.List; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.Container; +import net.minecraft.world.ContainerHelper; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.HopperMenu; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; + +public class UpperBlockEntity extends RandomizableContainerBlockEntity { + private static final int CONTAINER_SIZE = 5; + private static final int MOVE_ITEM_SPEED = 8; + + private NonNullList items = NonNullList.withSize(CONTAINER_SIZE, ItemStack.EMPTY); + private int cooldownTime = -1; + + public UpperBlockEntity(BlockPos pos, BlockState state, Supplier> typeSupplier) { + super(typeSupplier.get(), pos, state); + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, UpperBlockEntity blockEntity) { + blockEntity.cooldownTime--; + if (!blockEntity.isOnCooldown()) { + blockEntity.setCooldown(0); + tryMoveItems(level, pos, state, blockEntity); + } + } + + private boolean isOnCooldown() { + return this.cooldownTime > 0; + } + + private void setCooldown(int cooldown) { + this.cooldownTime = cooldown; + } + + private static boolean tryMoveItems(ServerLevel level, BlockPos pos, BlockState state, UpperBlockEntity upper) { + if (!state.getValue(UpperBlock.ENABLED)) { + return false; + } + + boolean moved = false; + if (!upper.isEmpty()) { + moved = pushToDestination(level, pos, state, upper); + } + if (!moved) { + moved = pullFromBelow(level, pos, upper); + } + moved |= suckLooseItems(level, pos, upper); + + if (moved) { + upper.setCooldown(MOVE_ITEM_SPEED); + upper.setChanged(); + return true; + } + return false; + } + + private static boolean pullFromBelow(ServerLevel level, BlockPos pos, UpperBlockEntity upper) { + Container source = getContainerAt(level, pos.below()); + if (source == null) { + return false; + } + if (source instanceof UpperBlockEntity sourceUpper && sourceUpper.isOnCooldown()) { + return false; + } + return transferOneItem(source, upper); + } + + private static boolean pushToDestination(ServerLevel level, BlockPos pos, BlockState state, UpperBlockEntity upper) { + Direction facing = state.getValue(UpperBlock.FACING); + Container destination = getContainerAt(level, pos.relative(facing)); + if (destination == null) { + return false; + } + boolean pushed = transferOneItem(upper, destination); + if (pushed && destination instanceof UpperBlockEntity destinationUpper && !destinationUpper.isOnCooldown()) { + destinationUpper.setCooldown(MOVE_ITEM_SPEED); + destinationUpper.setChanged(); + } + return pushed; + } + + private static boolean suckLooseItems(ServerLevel level, BlockPos pos, UpperBlockEntity upper) { + AABB suckArea = new AABB(pos.below()).inflate(-0.05D, 0.0D, -0.05D); + List entities = level.getEntitiesOfClass(ItemEntity.class, suckArea, ItemEntity::isAlive); + boolean moved = false; + for (ItemEntity itemEntity : entities) { + ItemStack stack = itemEntity.getItem(); + ItemStack remainder = addItem(upper, stack.copy()); + if (remainder.isEmpty()) { + itemEntity.discard(); + moved = true; + } else if (remainder.getCount() != stack.getCount()) { + itemEntity.setItem(remainder); + moved = true; + } + } + return moved; + } + + private static Container getContainerAt(ServerLevel level, BlockPos pos) { + BlockEntity blockEntity = level.getBlockEntity(pos); + return blockEntity instanceof Container container ? container : null; + } + + private static boolean transferOneItem(Container source, Container destination) { + for (int slot = 0; slot < source.getContainerSize(); slot++) { + ItemStack stack = source.getItem(slot); + if (stack.isEmpty()) { + continue; + } + + ItemStack single = stack.copyWithCount(1); + ItemStack remainder = addItem(destination, single); + if (remainder.isEmpty()) { + stack.shrink(1); + source.setItem(slot, stack); + destination.setChanged(); + source.setChanged(); + return true; + } + } + return false; + } + + private static ItemStack addItem(Container container, ItemStack stack) { + for (int slot = 0; slot < container.getContainerSize() && !stack.isEmpty(); slot++) { + ItemStack existing = container.getItem(slot); + if (!existing.isEmpty() && ItemStack.isSameItemSameTags(existing, stack)) { + int limit = Math.min(existing.getMaxStackSize(), container.getMaxStackSize()); + int room = limit - existing.getCount(); + if (room > 0) { + int moveCount = Math.min(room, stack.getCount()); + existing.grow(moveCount); + stack.shrink(moveCount); + } + } + } + for (int slot = 0; slot < container.getContainerSize() && !stack.isEmpty(); slot++) { + ItemStack existing = container.getItem(slot); + if (existing.isEmpty() && container.canPlaceItem(slot, stack)) { + int moveCount = Math.min(stack.getMaxStackSize(), stack.getCount()); + container.setItem(slot, stack.split(moveCount)); + } + } + return stack; + } + + @Override + public int getContainerSize() { + return CONTAINER_SIZE; + } + + @Override + protected NonNullList getItems() { + return this.items; + } + + @Override + protected void setItems(NonNullList items) { + this.items = items; + } + + @Override + protected Component getDefaultName() { + return Component.translatable("container.antarchy.upper"); + } + + @Override + protected AbstractContainerMenu createMenu(int containerId, Inventory inventory) { + return new HopperMenu(containerId, inventory, this); + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + if (!this.trySaveLootTable(tag)) { + ContainerHelper.saveAllItems(tag, this.items); + } + tag.putInt("Cooldown", this.cooldownTime); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); + if (!this.tryLoadLootTable(tag)) { + ContainerHelper.loadAllItems(tag, this.items); + } + this.cooldownTime = tag.getInt("Cooldown"); + } + + @Override + public CompoundTag getUpdateTag() { + CompoundTag tag = new CompoundTag(); + this.saveAdditional(tag); + return tag; + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/WaspNestBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/WaspNestBlockEntity.java new file mode 100644 index 00000000..42cd3ff8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/WaspNestBlockEntity.java @@ -0,0 +1,213 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.WaspNestBlock; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +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.world.entity.EntityType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +public class WaspNestBlockEntity extends BlockEntity { + private static final String STORED_WASPS = "StoredWasps"; + private static final String PANDA_VARIANT = "PandaVariant"; + private static final int PANDA_VARIANT_CHANCE = 20; + private final List storedWasps = new ArrayList<>(); + private int releaseCooldown = 100; + private boolean initialized = false; + private boolean pandaVariant; + + public WaspNestBlockEntity(BlockPos pos, BlockState blockState) { + super(AntarchyObjects.WASP_NEST_BLOCK_ENTITY.get(), pos, blockState); + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, WaspNestBlockEntity nest) { + if (!nest.initialized) { + nest.populateInitialWasps(level); + } + + if (level.isNight() || level.isRaining()) { + return; + } + + if (nest.storedWasps.isEmpty()) { + return; + } + + if (--nest.releaseCooldown > 0) { + return; + } + + nest.releaseCooldown = 80 + level.random.nextInt(100); + nest.releaseOne(level); + } + + public void populateInitialWasps(ServerLevel level) { + if (this.initialized) { + return; + } + + this.initialized = true; + if (!this.nestBlock().shouldPopulateInitialWasps()) { + return; + } + + this.pandaVariant = level.random.nextInt(PANDA_VARIANT_CHANCE) == 0; + int amount = 1 + level.random.nextInt(3); + for (int i = 0; i < amount && this.storedWasps.size() < this.maxOccupants(); i++) { + this.storedWasps.add(this.createStoredWasp(level, this.nestBlock().waspType())); + } + this.setChanged(); + } + + public boolean tryStoreWasp(WaspEntity waspEntity) { + if (this.storedWasps.size() >= this.maxOccupants()) { + return false; + } + + waspEntity.setPandaVariant(this.pandaVariant); + CompoundTag waspTag = new CompoundTag(); + waspEntity.addAdditionalSaveData(waspTag); + this.storedWasps.add(new StoredWasp(waspEntity.getType(), waspTag)); + this.releaseCooldown = Math.max(this.releaseCooldown, 200); + waspEntity.discard(); + this.setChanged(); + return true; + } + + public void releaseAll(ServerLevel level) { + while (!this.storedWasps.isEmpty()) { + this.releaseOne(level); + } + } + + private void releaseOne(ServerLevel level) { + if (this.storedWasps.isEmpty()) { + return; + } + + StoredWasp storedWasp = this.storedWasps.get(0); + WaspEntity waspEntity = storedWasp.create(level); + if (waspEntity == null) { + this.storedWasps.remove(0); + return; + } + + BlockPos spawnPos = this.findReleasePos(level); + if (spawnPos == null) { + this.storedWasps.remove(0); + this.setChanged(); + return; + } + + waspEntity.moveTo( + spawnPos.getX() + 0.5D, + spawnPos.getY() + 0.05D, + spawnPos.getZ() + 0.5D, + level.random.nextFloat() * 360.0F, + 0.0F + ); + waspEntity.setHivePos(this.getBlockPos()); + if (!level.noCollision(waspEntity)) { + this.storedWasps.remove(0); + this.setChanged(); + return; + } + + this.storedWasps.remove(0); + level.addFreshEntity(waspEntity); + this.setChanged(); + } + + private int maxOccupants() { + return this.nestBlock().maxOccupants(); + } + + private WaspNestBlock nestBlock() { + return (WaspNestBlock) this.getBlockState().getBlock(); + } + + private BlockPos findReleasePos(ServerLevel level) { + Direction facing = this.getBlockState().getValue(WaspNestBlock.FACING); + BlockPos front = this.getBlockPos().relative(facing); + if (level.getBlockState(front).canBeReplaced() && level.getBlockState(front.above()).canBeReplaced()) { + return front; + } + + BlockPos above = this.getBlockPos().above(); + if (level.getBlockState(above).canBeReplaced() && level.getBlockState(above.above()).canBeReplaced()) { + return above; + } + + return null; + } + + private StoredWasp createStoredWasp(ServerLevel level, EntityType waspType) { + if (!(waspType.create(level) instanceof WaspEntity waspEntity)) { + return new StoredWasp(waspType, new CompoundTag()); + } + + waspEntity.setPandaVariant(this.pandaVariant); + CompoundTag waspTag = new CompoundTag(); + waspEntity.addAdditionalSaveData(waspTag); + return new StoredWasp(waspType, waspTag); + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putBoolean("Initialized", this.initialized); + tag.putBoolean(PANDA_VARIANT, this.pandaVariant); + ListTag listTag = new ListTag(); + for (StoredWasp storedWasp : this.storedWasps) { + listTag.add(storedWasp.save()); + } + tag.put(STORED_WASPS, listTag); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + this.initialized = tag.getBoolean("Initialized"); + this.pandaVariant = tag.getBoolean(PANDA_VARIANT); + this.storedWasps.clear(); + ListTag listTag = tag.getList(STORED_WASPS, Tag.TAG_COMPOUND); + for (int i = 0; i < listTag.size(); i++) { + this.storedWasps.add(StoredWasp.load(listTag.getCompound(i))); + } + } + + private record StoredWasp(EntityType waspType, CompoundTag data) { + private CompoundTag save() { + CompoundTag tag = new CompoundTag(); + tag.putString("id", BuiltInRegistries.ENTITY_TYPE.getKey(this.waspType).toString()); + tag.put("data", this.data.copy()); + return tag; + } + + private static StoredWasp load(CompoundTag tag) { + EntityType waspType = BuiltInRegistries.ENTITY_TYPE.getOptional(new ResourceLocation(tag.getString("id"))) + .orElse(AntarchyObjects.WASP.get()); + return new StoredWasp(waspType, tag.getCompound("data")); + } + + private WaspEntity create(ServerLevel level) { + if (!(this.waspType.create(level) instanceof WaspEntity waspEntity)) { + return null; + } + + waspEntity.readAdditionalSaveData(this.data.copy()); + return waspEntity; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/state/PotentNyxiteState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/state/PotentNyxiteState.java new file mode 100644 index 00000000..87986054 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/state/PotentNyxiteState.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.block.state; + +import net.minecraft.util.StringRepresentable; + +public enum PotentNyxiteState implements StringRepresentable { + DRY("dry"), + WET("wet"), + DORMANT("dormant"), + ERUPTING("erupting"), + CONTINUOUS("continuous"); + + private final String serializedName; + + PotentNyxiteState(String serializedName) { + this.serializedName = serializedName; + } + + @Override + public String getSerializedName() { + return this.serializedName; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/bloodglass/BloodglassAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/bloodglass/BloodglassAccess.java new file mode 100644 index 00000000..54c5b4f1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/bloodglass/BloodglassAccess.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.bloodglass; + +public interface BloodglassAccess { + int antarchy$getArmorShieldsActive(); + void antarchy$setArmorShieldsActive(int count); + int antarchy$getArmorShieldLostCount(); + void antarchy$setArmorShieldLostCount(int count); + int antarchy$getArmorRechargeTimer(); + void antarchy$setArmorRechargeTimer(int ticks); + + int antarchy$getAppleShieldsActive(); + void antarchy$setAppleShieldsActive(int count); + int antarchy$getAppleShieldLostCount(); + void antarchy$setAppleShieldLostCount(int count); + int antarchy$getAppleRechargeTimer(); + void antarchy$setAppleRechargeTimer(int ticks); + + default int antarchy$getTotalShieldsActive() { + return antarchy$getArmorShieldsActive() + antarchy$getAppleShieldsActive(); + } + + default int antarchy$getTotalShieldsMax() { + return antarchy$getArmorShieldsActive() + antarchy$getArmorShieldLostCount() + + antarchy$getAppleShieldsActive() + antarchy$getAppleShieldLostCount(); + } +} 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 new file mode 100644 index 00000000..ca57852b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.content.boss; + +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; + +public final class BossCombatUtil { + private BossCombatUtil() {} + + public static boolean isOutOfDamageRange(Mob boss, double range) { + if (range <= 0.0D) { + return false; + } + 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) { + float halfHealth = boss.getMaxHealth() * 0.5F; + float currentHealth = boss.getHealth(); + if (currentHealth > halfHealth && currentHealth - amount < halfHealth) { + return currentHealth - halfHealth; + } + return amount; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/boss/EntityLinkedServerBossEvent.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/boss/EntityLinkedServerBossEvent.java new file mode 100644 index 00000000..b615c6ef --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/boss/EntityLinkedServerBossEvent.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.content.boss; + +import java.util.UUID; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerBossEvent; +import net.minecraft.world.BossEvent; + +public class EntityLinkedServerBossEvent extends ServerBossEvent { + private final UUID entityId; + + public EntityLinkedServerBossEvent(UUID entityId, Component name, BossEvent.BossBarColor color, BossEvent.BossBarOverlay overlay) { + super(name, color, overlay); + this.entityId = entityId; + } + + @Override + public UUID getId() { + return this.entityId; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AlphaVertexConsumerProxy.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AlphaVertexConsumerProxy.java new file mode 100644 index 00000000..e52de828 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AlphaVertexConsumerProxy.java @@ -0,0 +1,39 @@ +package com.craisinlord.antarchy.content.client; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import com.mojang.blaze3d.vertex.VertexConsumer; + +public final class AlphaVertexConsumerProxy { + private AlphaVertexConsumerProxy() { + } + + public static VertexConsumer wrap(VertexConsumer delegate, float alphaScale) { + if (alphaScale >= 0.999F) { + return delegate; + } + + final VertexConsumer[] proxyHolder = new VertexConsumer[1]; + InvocationHandler handler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + Object[] forwardedArgs = args; + if ("setColor".equals(method.getName()) && args != null && args.length == 4 && args[3] instanceof Integer alpha) { + forwardedArgs = args.clone(); + forwardedArgs[3] = Math.max(0, Math.min(255, Math.round(alpha * alphaScale))); + } + + Object result = method.invoke(delegate, forwardedArgs); + return result == delegate ? proxyHolder[0] : result; + } + }; + + proxyHolder[0] = (VertexConsumer) Proxy.newProxyInstance( + VertexConsumer.class.getClassLoader(), + new Class[] { VertexConsumer.class }, + handler + ); + return proxyHolder[0]; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyGeoItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyGeoItem.java new file mode 100644 index 00000000..9094dc3f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyGeoItem.java @@ -0,0 +1,7 @@ +package com.craisinlord.antarchy.content.client; + +import java.util.function.Supplier; + +public interface AntarchyGeoItem { + Supplier getRenderProvider(); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyGeoItemRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyGeoItemRenderer.java new file mode 100644 index 00000000..461a0eca --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/AntarchyGeoItemRenderer.java @@ -0,0 +1,7 @@ +package com.craisinlord.antarchy.content.client; + +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; + +public interface AntarchyGeoItemRenderer { + BlockEntityWithoutLevelRenderer getCustomRenderer(); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/BloodCrystalKatanaTrailClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/BloodCrystalKatanaTrailClientState.java new file mode 100644 index 00000000..fc64233c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/BloodCrystalKatanaTrailClientState.java @@ -0,0 +1,40 @@ +package com.craisinlord.antarchy.content.client; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public final class BloodCrystalKatanaTrailClientState { + private static final Map ACTIVE = new HashMap<>(); + + private BloodCrystalKatanaTrailClientState() {} + + public static void trigger(int entityId, int durationTicks) { + if (durationTicks <= 0) { + ACTIVE.remove(entityId); + return; + } + ACTIVE.put(entityId, durationTicks); + } + + public static int getRemainingTicks(int entityId) { + return ACTIVE.getOrDefault(entityId, 0); + } + + public static void tick() { + Iterator> iterator = ACTIVE.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + int remaining = entry.getValue() - 1; + if (remaining <= 0) { + iterator.remove(); + } else { + entry.setValue(remaining); + } + } + } + + public static void clear() { + ACTIVE.clear(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/BloodglassClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/BloodglassClientState.java new file mode 100644 index 00000000..36cec713 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/BloodglassClientState.java @@ -0,0 +1,16 @@ +package com.craisinlord.antarchy.content.client; + +public final class BloodglassClientState { + private BloodglassClientState() {} + + private static int shieldsActive = 0; + private static int shieldsMax = 0; + + public static void update(int active, int max) { + shieldsActive = active; + shieldsMax = max; + } + + public static int getShieldsActive() { return shieldsActive; } + public static int getShieldsMax() { return shieldsMax; } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/BrutalflyElytraClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/BrutalflyElytraClientState.java new file mode 100644 index 00000000..61ec3dea --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/BrutalflyElytraClientState.java @@ -0,0 +1,54 @@ +package com.craisinlord.antarchy.content.client; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import net.minecraft.util.Mth; + +public final class BrutalflyElytraClientState { + private static final Map ACTIVE_ANIMATIONS = new ConcurrentHashMap<>(); + + private BrutalflyElytraClientState() { + } + + public static void trigger(int entityId, int durationTicks, float strength) { + if (durationTicks <= 0) { + ACTIVE_ANIMATIONS.remove(entityId); + return; + } + ACTIVE_ANIMATIONS.put(entityId, new AnimationState(durationTicks, durationTicks, strength)); + } + + public static AnimationState get(int entityId) { + return ACTIVE_ANIMATIONS.get(entityId); + } + + public static void tick() { + ACTIVE_ANIMATIONS.entrySet().removeIf(entry -> entry.getValue().tick() <= 0); + } + + public static final class AnimationState { + private final int durationTicks; + private int remainingTicks; + private final float strength; + + private AnimationState(int durationTicks, int remainingTicks, float strength) { + this.durationTicks = Math.max(1, durationTicks); + this.remainingTicks = Math.max(0, remainingTicks); + this.strength = strength; + } + + public float progress(float partialTick) { + float remaining = Mth.clamp(this.remainingTicks - partialTick, 0.0F, (float) this.durationTicks); + return 1.0F - remaining / (float) this.durationTicks; + } + + public float strength() { + return this.strength; + } + + private int tick() { + this.remainingTicks--; + return this.remainingTicks; + } + } +} 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 new file mode 100644 index 00000000..e2a336f9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/CameraShakeClientState.java @@ -0,0 +1,92 @@ +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/GlimmeringHudRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/GlimmeringHudRenderer.java new file mode 100644 index 00000000..b00c0409 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/GlimmeringHudRenderer.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.player.Player; + +public final class GlimmeringHudRenderer { + private static final int TINT_ALPHA = 0x40; + private static final int TINT_RGB = 0x66CCFF; + + private GlimmeringHudRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + Minecraft minecraft = Minecraft.getInstance(); + Player player = minecraft.player; + MobEffect glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + if (player == null || player.isDeadOrDying() || glimmering == null || !player.hasEffect(glimmering)) { + return; + } + + int width = minecraft.getWindow().getGuiScaledWidth(); + int height = minecraft.getWindow().getGuiScaledHeight(); + guiGraphics.fill(0, 0, width, height, (TINT_ALPHA << 24) | TINT_RGB); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/GoopedHudRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/GoopedHudRenderer.java new file mode 100644 index 00000000..e007234b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/GoopedHudRenderer.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.effect.GoopedEffectHooks; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.Holder; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.player.Player; + +public final class GoopedHudRenderer { + private GoopedHudRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + Minecraft minecraft = Minecraft.getInstance(); + Player player = minecraft.player; + Holder gooped = GoopedEffectHooks.holder(); + if (player == null || player.isDeadOrDying() || gooped == null) { + return; + } + + MobEffectInstance effect = player.getEffect(gooped.value()); + if (effect == null) { + return; + } + + float durationFade = effect.isInfiniteDuration() + ? 1.0F + : Mth.clamp(effect.getDuration() / 40.0F, 0.25F, 1.0F); + float strength = Mth.clamp((effect.getAmplifier() + 1) / 3.0F, 0.0F, 1.0F); + int alpha = Mth.clamp((int) ((0x38 + 0x20 * strength) * durationFade), 0, 0x70); + int width = minecraft.getWindow().getGuiScaledWidth(); + int height = minecraft.getWindow().getGuiScaledHeight(); + guiGraphics.fill(0, 0, width, height, (alpha << 24) | 0x16B846); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HerculesBeetleImpactShakeClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HerculesBeetleImpactShakeClientState.java new file mode 100644 index 00000000..3619e950 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HerculesBeetleImpactShakeClientState.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client; + +public final class HerculesBeetleImpactShakeClientState { + private static int shakeTicks; + + private HerculesBeetleImpactShakeClientState() { + } + + public static void trigger(int ticks) { + shakeTicks = Math.max(shakeTicks, Math.max(0, ticks)); + } + + public static void tick() { + if (shakeTicks > 0) { + shakeTicks--; + } + } + + public static int getTicks() { + return shakeTicks; + } + + public static void clear() { + shakeTicks = 0; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HordeClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HordeClientState.java new file mode 100644 index 00000000..96ff8aaa --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HordeClientState.java @@ -0,0 +1,97 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.client.Minecraft; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; + +public final class HordeClientState { + private static final ResourceKey CAVARYN = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "cavaryn") + ); + private static final int STALE_SYNC_TICKS = 20 * 15; + private static float targetIntensity; + private static float intensity; + private static int heartbeatDelayTicks; + private static int ticksSinceSync; + + private HordeClientState() { + } + + public static void update(float syncedIntensity) { + targetIntensity = Mth.clamp(syncedIntensity, 0.0F, 1.0F); + ticksSinceSync = 0; + } + + public static float intensity() { + return intensity; + } + + public static void tick() { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.level == null || minecraft.player == null || !minecraft.level.dimension().equals(CAVARYN) || !minecraft.player.isAlive()) { + reset(); + } + + intensity += (targetIntensity - intensity) * 0.08F; + if (minecraft.level == null || minecraft.player == null || minecraft.isPaused()) { + return; + } + if (minecraft.level.dimension().equals(CAVARYN)) { + if (++ticksSinceSync >= STALE_SYNC_TICKS) { + targetIntensity = 0.0F; + } + tickHeartbeat(minecraft); + } + if (intensity < 0.01F) { + return; + } + + int count = Math.max(1, (int) (intensity * 5.0F)); + Vec3 center = minecraft.player.position(); + for (int i = 0; i < count; i++) { + double x = center.x + (minecraft.level.random.nextDouble() - 0.5D) * 18.0D; + double y = center.y + minecraft.level.random.nextDouble() * 5.0D; + double z = center.z + (minecraft.level.random.nextDouble() - 0.5D) * 18.0D; + minecraft.level.addParticle(ParticleTypes.MYCELIUM, x, y, z, 0.0D, 0.015D + intensity * 0.025D, 0.0D); + } + } + + private static void reset() { + targetIntensity = 0.0F; + intensity = 0.0F; + heartbeatDelayTicks = 0; + ticksSinceSync = 0; + } + + private static void tickHeartbeat(Minecraft minecraft) { + if (heartbeatDelayTicks > 0) { + heartbeatDelayTicks--; + return; + } + + float soundIntensity = Mth.clamp(intensity, 0.0F, 1.0F); + float scaledIntensity = soundIntensity * soundIntensity; + float volume = 0.08F + scaledIntensity * 1.42F; + float pitch = 0.85F + soundIntensity * 0.45F; + heartbeatDelayTicks = Mth.clamp((int) (150.0F - scaledIntensity * 132.0F), 18, 150); + minecraft.level.playLocalSound( + minecraft.player.getX(), + minecraft.player.getY(), + minecraft.player.getZ(), + AntarchySoundEvents.CAVARYN_HEARTBEAT.get(), + SoundSource.AMBIENT, + volume, + pitch, + false + ); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HordeHudRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HordeHudRenderer.java new file mode 100644 index 00000000..fd838347 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/HordeHudRenderer.java @@ -0,0 +1,39 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; + +public final class HordeHudRenderer { + private static final ResourceKey CAVARYN = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "cavaryn") + ); + + private HordeHudRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.level == null || minecraft.player == null || minecraft.player.isDeadOrDying() || !minecraft.level.dimension().equals(CAVARYN)) { + return; + } + + float intensity = HordeClientState.intensity(); + if (intensity <= 0.01F) { + return; + } + + float pulse = 0.9F + 0.1F * Mth.sin(minecraft.player.tickCount * ((float) Math.PI * 2.0F / 90.0F)); + int alpha = Mth.clamp((int) (intensity * pulse * 0x2C), 0, 0x2C); + int width = minecraft.getWindow().getGuiScaledWidth(); + int height = minecraft.getWindow().getGuiScaledHeight(); + int color = (alpha << 24) | 0xD84A16; + guiGraphics.fill(0, 0, width, height, color); + } +} 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 new file mode 100644 index 00000000..56c6d041 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/NightmareSwordTooltipHelper.java @@ -0,0 +1,29 @@ +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; + +public final class NightmareSwordTooltipHelper { + private NightmareSwordTooltipHelper() { + } + + public static Component damageLine() { + Player player = Minecraft.getInstance().player; + 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); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ScorpionWhipTetherClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ScorpionWhipTetherClientState.java new file mode 100644 index 00000000..78e8c942 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ScorpionWhipTetherClientState.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.client; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public final class ScorpionWhipTetherClientState { + private static final Map TETHERS = new ConcurrentHashMap<>(); + + private ScorpionWhipTetherClientState() { + } + + public static void update(int playerId, int targetId) { + if (targetId < 0) { + TETHERS.remove(playerId); + } else { + TETHERS.put(playerId, targetId); + } + } + + public static Map snapshot() { + return Map.copyOf(TETHERS); + } + + public static void clear() { + TETHERS.clear(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/SizeRaySoundHandler.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/SizeRaySoundHandler.java new file mode 100644 index 00000000..59922e2b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/SizeRaySoundHandler.java @@ -0,0 +1,116 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +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.RandomSource; + +public final class SizeRaySoundHandler { + private static SizeRayItem activeItem; + private static SizeRayUseSound chargeSound; + private static SizeRayUseSound loopSound; + + private SizeRaySoundHandler() { + } + + public static void tick(Minecraft minecraft) { + LocalPlayer player = minecraft.player; + if (minecraft.level == null || player == null || !AntarchySettings.sizeChangingRaysEnabled()) { + stopActive(minecraft); + return; + } + + if (!(player.getUseItem().getItem() instanceof SizeRayItem sizeRayItem)) { + stopActive(minecraft); + return; + } + + if (activeItem != sizeRayItem) { + stopActive(minecraft); + activeItem = sizeRayItem; + } + + int useTicks = sizeRayItem.getUseDuration(player.getUseItem()) - player.getUseItemRemainingTicks(); + if (useTicks >= SizeRayItem.LOOP_SOUND_START_TICKS) { + stopCharge(minecraft); + if (loopSound == null || !minecraft.getSoundManager().isActive(loopSound)) { + loopSound = new SizeRayUseSound(player, sizeRayItem.getLoopSound(), true); + minecraft.getSoundManager().play(loopSound); + } + return; + } + + stopLoop(minecraft); + if (chargeSound == null) { + chargeSound = new SizeRayUseSound(player, sizeRayItem.getChargeSound(), false); + minecraft.getSoundManager().play(chargeSound); + } + } + + private static void stopActive(Minecraft minecraft) { + stopCharge(minecraft); + stopLoop(minecraft); + activeItem = null; + } + + private static void stopCharge(Minecraft minecraft) { + if (chargeSound != null) { + chargeSound.stopNow(minecraft); + chargeSound = null; + } + } + + private static void stopLoop(Minecraft minecraft) { + if (loopSound != null) { + loopSound.stopNow(minecraft); + loopSound = null; + } + } + + private static final class SizeRayUseSound extends AbstractTickableSoundInstance { + private final LocalPlayer player; + + private SizeRayUseSound(LocalPlayer player, SoundEvent soundEvent, boolean loop) { + super(soundEvent, SoundSource.PLAYERS, RandomSource.create()); + this.player = player; + this.looping = loop; + this.delay = 0; + this.relative = false; + this.attenuation = SoundInstance.Attenuation.LINEAR; + this.volume = 1.0F; + this.pitch = 1.0F; + this.x = player.getX(); + this.y = player.getY(); + this.z = player.getZ(); + } + + private void stopNow(Minecraft minecraft) { + minecraft.getSoundManager().stop(this); + this.stop(); + } + + @Override + public void tick() { + if (this.player.isRemoved() + || !this.player.isAlive() + || !(this.player.getUseItem().getItem() instanceof SizeRayItem)) { + this.stop(); + return; + } + + this.x = this.player.getX(); + this.y = this.player.getY(); + this.z = this.player.getZ(); + } + + @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 new file mode 100644 index 00000000..b60eb51f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/ThoraxisWeatherClientState.java @@ -0,0 +1,46 @@ +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/TigerEyeCamouflageClientState.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeCamouflageClientState.java new file mode 100644 index 00000000..92957109 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeCamouflageClientState.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.content.client; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public final class TigerEyeCamouflageClientState { + public record CamouflageState(boolean active, int blockStateId) {} + + private static final Map STATES = new ConcurrentHashMap<>(); + + private TigerEyeCamouflageClientState() { + } + + public static void update(int entityId, boolean active, int blockStateId) { + if (!active) { + STATES.remove(entityId); + return; + } + STATES.put(entityId, new CamouflageState(true, blockStateId)); + } + + public static CamouflageState get(int entityId) { + return STATES.get(entityId); + } + + public static void clear() { + STATES.clear(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeClientHooks.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeClientHooks.java new file mode 100644 index 00000000..f35ba9cf --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeClientHooks.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.client; + +import java.util.function.Supplier; +import net.minecraft.network.chat.Component; + +public final class TigerEyeClientHooks { + private static Supplier camouflageKeyText = () -> Component.translatable("key.antarchy.tigers_eye_camouflage"); + + private TigerEyeClientHooks() { + } + + public static void setCamouflageKeyTextSupplier(Supplier supplier) { + camouflageKeyText = supplier; + } + + public static Component camouflageKeyText() { + return camouflageKeyText.get(); + } +} 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 new file mode 100644 index 00000000..1d6422a0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/hud/BloodglassHudRenderer.java @@ -0,0 +1,57 @@ +package com.craisinlord.antarchy.content.client.hud; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.BloodglassClientState; +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 BloodglassHudRenderer { + private static final ResourceLocation HEART_CONTAINER = + new ResourceLocation("textures/gui/sprites/hud/heart/container.png"); + private static final ResourceLocation HEART_FULL = + new ResourceLocation(Antarchy.MODID, "textures/gui/sprites/hud/bloodglass_heart.png"); + private static final ResourceLocation HEART_CRACKED = + new ResourceLocation(Antarchy.MODID, "textures/gui/sprites/hud/bloodglass_heart_cracked.png"); + private static final int HEART_SIZE = 9; + private static final int HEART_PITCH = 8; + + private BloodglassHudRenderer() {} + + public static void render(GuiGraphics gui) { + Minecraft mc = Minecraft.getInstance(); + if (mc.options.hideGui) return; + Player player = mc.player; + if (player == null || player.isDeadOrDying()) return; + if (player.isCreative() || player.isSpectator()) return; + + int total = BloodglassClientState.getShieldsMax(); + if (total <= 0) return; + + int active = BloodglassClientState.getShieldsActive(); + int w = mc.getWindow().getGuiScaledWidth(); + int h = mc.getWindow().getGuiScaledHeight(); + + 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; + int baseTop = h - 39 - (totalVanillaRows * 10) - (hasArmor ? 10 : 0); + + int left = w / 2 - 91; + + for (int i = 0; i < total; i++) { + int row = i / 10; + int col = i % 10; + 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(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 new file mode 100644 index 00000000..caf0a6d7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java @@ -0,0 +1,96 @@ +package com.craisinlord.antarchy.content.client.hud; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +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 java.util.Map; +import java.util.UUID; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.BossEvent; +import net.minecraft.world.entity.Entity; + +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_ENTITY_CLASS = Map.of( + KrakenEntity.class, textures("blue", "kraken", 204, 56, 4), + ToreterrorEntity.class, textures("green", "toreterror", 194, 58, 2), + 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) + ); + + private CustomBossBarRenderer() { + } + + public static boolean render(GuiGraphics guiGraphics, int x, int y, BossEvent bossEvent) { + Textures textures = lookup(bossEvent); + if (textures == null) { + return false; + } + + int baseY = y + GLOBAL_Y_OFFSET; + int barY = baseY + textures.barYOffset; + + guiGraphics.blit(textures.background, x, barY, 0, 0, BAR_WIDTH, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + + int filledWidth = Math.round(BAR_WIDTH * Math.max(0.0F, Math.min(1.0F, bossEvent.getProgress()))); + if (filledWidth > 0) { + guiGraphics.blit(textures.progress, x, barY, 0, 0, filledWidth, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + } + + int overlayX = x + (BAR_WIDTH - textures.overlayWidth) / 2; + int overlayY = baseY + (BAR_HEIGHT - textures.overlayHeight) / 2; + guiGraphics.blit(textures.overlay, overlayX, overlayY, 0, 0, textures.overlayWidth, textures.overlayHeight, textures.overlayWidth, textures.overlayHeight); + + return true; + } + + public static boolean isCustomBoss(BossEvent bossEvent) { + return lookup(bossEvent) != null; + } + + private static Textures lookup(BossEvent bossEvent) { + Entity entity = findEntity(bossEvent.getId()); + if (entity == null) { + return null; + } + return BY_ENTITY_CLASS.get(entity.getClass()); + } + + private static Entity findEntity(UUID id) { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.level == null) { + return null; + } + for (Entity entity : minecraft.level.entitiesForRendering()) { + if (entity.getUUID().equals(id)) { + return entity; + } + } + return null; + } + + private static Textures textures(String barKey, String overlayKey, int overlayWidth, int overlayHeight, int barYOffset) { + return new Textures( + new ResourceLocation(Antarchy.MODID, "textures/gui/boss_bars/healthbars/" + barKey + "_background.png"), + new ResourceLocation(Antarchy.MODID, "textures/gui/boss_bars/healthbars/" + barKey + "_progress.png"), + new ResourceLocation(Antarchy.MODID, "textures/gui/boss_bars/" + overlayKey + ".png"), + overlayWidth, + overlayHeight, + barYOffset + ); + } + + 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/AlphaMantisModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/AlphaMantisModel.java new file mode 100644 index 00000000..ad771e59 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/AlphaMantisModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class AlphaMantisModel extends GeoModel { + @Override + public ResourceLocation getModelResource(AlphaMantisEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/mantis.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(AlphaMantisEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/mantis_alpha.png"); + } + + @Override + public ResourceLocation getAnimationResource(AlphaMantisEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/mantis.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/AntModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/AntModel.java new file mode 100644 index 00000000..ac256e70 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/AntModel.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class AntModel extends GeoModel { + private static final ResourceLocation MODEL = new ResourceLocation(Antarchy.MODID, "geo/ant.geo.json"); + private static final ResourceLocation ANIMATIONS = new ResourceLocation(Antarchy.MODID, "animations/ant.animation.json"); + private static final ResourceLocation BROWN_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/brown_ant.png"); + private static final ResourceLocation RED_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/red_ant.png"); + private static final ResourceLocation RAINBOW_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/rainbow_ant.png"); + + @Override + public ResourceLocation getModelResource(BaseAntEntity animatable) { + return MODEL; + } + + @Override + public ResourceLocation getTextureResource(BaseAntEntity animatable) { + if (animatable instanceof RedAntEntity) { + return RED_TEXTURE; + } + if (animatable instanceof RainbowAntEntity) { + return RAINBOW_TEXTURE; + } + if (animatable instanceof BrownAntEntity) { + return BROWN_TEXTURE; + } + return BROWN_TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(BaseAntEntity animatable) { + return ANIMATIONS; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/AppleCowModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/AppleCowModel.java new file mode 100644 index 00000000..f86f0569 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/AppleCowModel.java @@ -0,0 +1,70 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.AppleCowEntity; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class AppleCowModel extends GeoModel { + private static final ResourceLocation MODEL = + new ResourceLocation(Antarchy.MODID, "geo/apple_cow.geo.json"); + private static final ResourceLocation BABY_MODEL = + new ResourceLocation(Antarchy.MODID, "geo/baby_apple_cow.geo.json"); + private static final ResourceLocation ANIMATION = + new ResourceLocation(Antarchy.MODID, "animations/apple_cow.animation.json"); + private static final ResourceLocation BABY_ANIMATION = + new ResourceLocation(Antarchy.MODID, "animations/baby_apple_cow.animation.json"); + private static final ResourceLocation APPLE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/apple_cow/apple_cow.png"); + private static final ResourceLocation APPLE_SHEARED_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/apple_cow/apple_cow_sheared.png"); + private static final ResourceLocation BABY_APPLE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/apple_cow/baby_apple_cow.png"); + private static final ResourceLocation GOLDEN_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/apple_cow/golden_apple_cow.png"); + private static final ResourceLocation GOLDEN_SHEARED_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/apple_cow/golden_apple_cow_sheared.png"); + private static final ResourceLocation BABY_GOLDEN_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/apple_cow/baby_golden_apple_cow.png"); + private static final ResourceLocation ENCHANTED_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/apple_cow/enchanted_golden_apple_cow.png"); + private static final ResourceLocation ENCHANTED_SHEARED_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/apple_cow/enchanted_golden_apple_cow_sheared.png"); + + @Override + public ResourceLocation getModelResource(AppleCowEntity animatable) { + return animatable.isBaby() ? BABY_MODEL : MODEL; + } + + @Override + public ResourceLocation getTextureResource(AppleCowEntity animatable) { + return textureFor(animatable); + } + + @Override + public ResourceLocation getAnimationResource(AppleCowEntity animatable) { + return animatable.isBaby() ? BABY_ANIMATION : ANIMATION; + } + + public static ResourceLocation textureFor(AppleCowEntity entity) { + if (entity.isBaby()) { + if (entity instanceof EnchantedGoldenAppleCow) { + return entity.isSheared() ? ENCHANTED_SHEARED_TEXTURE : ENCHANTED_TEXTURE; + } + if (entity instanceof GoldenAppleCow) { + return entity.isSheared() ? GOLDEN_SHEARED_TEXTURE : BABY_GOLDEN_TEXTURE; + } + return entity.isSheared() ? APPLE_SHEARED_TEXTURE : BABY_APPLE_TEXTURE; + } + + if (entity instanceof EnchantedGoldenAppleCow) { + return entity.isSheared() ? ENCHANTED_SHEARED_TEXTURE : ENCHANTED_TEXTURE; + } + if (entity instanceof GoldenAppleCow) { + return entity.isSheared() ? GOLDEN_SHEARED_TEXTURE : GOLDEN_TEXTURE; + } + return entity.isSheared() ? APPLE_SHEARED_TEXTURE : APPLE_TEXTURE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BasiliskModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BasiliskModel.java new file mode 100644 index 00000000..84ae39c7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BasiliskModel.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class BasiliskModel extends GeoModel { + public static final ResourceLocation EMISSIVE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/basilisk_emissive.png"); + + @Override + public ResourceLocation getModelResource(BasiliskEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/basilisk.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(BasiliskEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/basilisk.png"); + } + + @Override + public ResourceLocation getAnimationResource(BasiliskEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/basilisk.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BedBugModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BedBugModel.java new file mode 100644 index 00000000..bf2b0a5c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BedBugModel.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class BedBugModel extends GeoModel { + public static final ResourceLocation EMISSIVE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/bed_bug_emissive.png"); + + @Override + public ResourceLocation getModelResource(BedBugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/bed_bug.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(BedBugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/bed_bug.png"); + } + + @Override + public ResourceLocation getAnimationResource(BedBugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/bed_bug.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BomberModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BomberModel.java new file mode 100644 index 00000000..5b737251 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BomberModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class BomberModel extends GeoModel { + @Override + public ResourceLocation getModelResource(BomberEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/bomber.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(BomberEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/bomber.png"); + } + + @Override + public ResourceLocation getAnimationResource(BomberEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/bomber.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BrutalflyElytraModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BrutalflyElytraModel.java new file mode 100644 index 00000000..cbfcee6e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BrutalflyElytraModel.java @@ -0,0 +1,62 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; + +public final class BrutalflyElytraModel { + public static final ModelLayerLocation LAYER_LOCATION = + new ModelLayerLocation(new ResourceLocation(Antarchy.MODID, "brutalfly_elytra"), "main"); + + private final ModelPart root; + private final ModelPart leftWing; + private final ModelPart rightWing; + + public BrutalflyElytraModel(ModelPart root) { + this.root = root; + this.leftWing = root.getChild("left_wing"); + this.rightWing = root.getChild("right_wing"); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshDefinition = new MeshDefinition(); + PartDefinition root = meshDefinition.getRoot(); + root.addOrReplaceChild( + "left_wing", + CubeListBuilder.create().texOffs(22, 0).addBox(-10.0F, 0.0F, -1.0F, 10.0F, 20.0F, 2.0F), + PartPose.offset(5.0F, 0.0F, -1.5F) + ); + root.addOrReplaceChild( + "right_wing", + CubeListBuilder.create().mirror().texOffs(22, 0).addBox(0.0F, 0.0F, -1.0F, 10.0F, 20.0F, 2.0F), + PartPose.offset(-5.0F, 0.0F, -1.5F) + ); + return LayerDefinition.create(meshDefinition, 64, 32); + } + + public void setupAnimation(float progress, float strength, boolean crouching) { + float wave = Mth.sin(progress * Mth.PI); + float flap = wave * strength; + float basePitch = crouching ? -0.18F : -0.05F; + float wingSpread = 0.55F; + this.leftWing.xRot = basePitch - flap * 1.2F; + this.rightWing.xRot = basePitch - flap * 1.2F; + this.leftWing.yRot = -wingSpread; + this.rightWing.yRot = -wingSpread; + this.leftWing.zRot = -0.35F - flap * 0.7F; + this.rightWing.zRot = -0.35F - flap * 0.7F; + } + + public void renderToBuffer(PoseStack poseStack, VertexConsumer consumer, int packedLight, int overlay) { + this.root.render(poseStack, consumer, packedLight, overlay); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BrutalflyModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BrutalflyModel.java new file mode 100644 index 00000000..8122afeb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/BrutalflyModel.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class BrutalflyModel extends GeoModel { + public static final ResourceLocation EMISSIVE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/brutalfly_emissive.png"); + + @Override + public ResourceLocation getModelResource(BrutalflyEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/brutalfly.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(BrutalflyEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/brutalfly.png"); + } + + @Override + public ResourceLocation getAnimationResource(BrutalflyEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/brutalfly.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ButterflyModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ButterflyModel.java new file mode 100644 index 00000000..cd819b80 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ButterflyModel.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class ButterflyModel extends GeoModel { + private static final String TEXTURE_PATH_PREFIX = "textures/entity/butterfly/butterfly_"; + + @Override + public ResourceLocation getModelResource(ButterflyEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/butterfly.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(ButterflyEntity animatable) { + return new ResourceLocation( + Antarchy.MODID, + TEXTURE_PATH_PREFIX + animatable.getTextureVariantName() + ".png" + ); + } + + @Override + public ResourceLocation getAnimationResource(ButterflyEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/butterfly.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CaterpillarModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CaterpillarModel.java new file mode 100644 index 00000000..a1108c91 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CaterpillarModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class CaterpillarModel extends GeoModel { + @Override + public ResourceLocation getModelResource(CaterpillarEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/caterpillar.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(CaterpillarEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/caterpillar.png"); + } + + @Override + public ResourceLocation getAnimationResource(CaterpillarEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/caterpillar.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CheepModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CheepModel.java new file mode 100644 index 00000000..17399371 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CheepModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.CheepEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class CheepModel extends GeoModel { + @Override + public ResourceLocation getModelResource(CheepEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/cheep.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(CheepEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/cheep/cheep_magenta.png"); + } + + @Override + public ResourceLocation getAnimationResource(CheepEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/cheep.animation.json"); + } +} 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 new file mode 100644 index 00000000..8184331b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CloudSharkModel.java @@ -0,0 +1,28 @@ +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/CreepingHorrorModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java new file mode 100644 index 00000000..f738b2fe --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java @@ -0,0 +1,23 @@ +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/DimensionalTearModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/DimensionalTearModel.java new file mode 100644 index 00000000..c6a4cad6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/DimensionalTearModel.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class DimensionalTearModel extends GeoModel { + public static final ResourceLocation TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/dimensional_tear.png"); + + @Override + public ResourceLocation getModelResource(DimensionalTearEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/dimensional_tear.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(DimensionalTearEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(DimensionalTearEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/dimensional_tear.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/DorrieModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/DorrieModel.java new file mode 100644 index 00000000..6bdd2166 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/DorrieModel.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class DorrieModel extends GeoModel { + private static final ResourceLocation TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/dorrie.png"); + private static final ResourceLocation TEXTURE_SADDLED = + new ResourceLocation(Antarchy.MODID, "textures/entity/dorrie_saddle.png"); + + @Override + public ResourceLocation getModelResource(DorrieEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/dorrie.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(DorrieEntity animatable) { + return animatable.hasSaddle() ? TEXTURE_SADDLED : TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(DorrieEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/dorrie.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/EasterBunnyModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/EasterBunnyModel.java new file mode 100644 index 00000000..168695f9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/EasterBunnyModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class EasterBunnyModel extends GeoModel { + @Override + public ResourceLocation getModelResource(EasterBunnyEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/easter_bunny.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(EasterBunnyEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/easter_bunny.png"); + } + + @Override + public ResourceLocation getAnimationResource(EasterBunnyEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/easter_bunny.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ElkaModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ElkaModel.java new file mode 100644 index 00000000..a98b0af1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ElkaModel.java @@ -0,0 +1,34 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.ElkaEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class ElkaModel extends GeoModel { + private static final ResourceLocation ADULT_GEO = rl("geo/elka.geo.json"); + private static final ResourceLocation BABY_GEO = rl("geo/elka_baby.geo.json"); + private static final ResourceLocation ADULT_ANIM = rl("animations/elka.animation.json"); + private static final ResourceLocation BABY_ANIM = rl("animations/elka_baby.animation.json"); + private static final ResourceLocation ADULT_TEXTURE = rl("textures/entity/elka.png"); + private static final ResourceLocation BABY_TEXTURE = rl("textures/entity/elka_baby.png"); + + private static ResourceLocation rl(String path) { + return new ResourceLocation(Antarchy.MODID, path); + } + + @Override + public ResourceLocation getModelResource(ElkaEntity animatable) { + return animatable.isBaby() ? BABY_GEO : ADULT_GEO; + } + + @Override + public ResourceLocation getAnimationResource(ElkaEntity animatable) { + return animatable.isBaby() ? BABY_ANIM : ADULT_ANIM; + } + + @Override + public ResourceLocation getTextureResource(ElkaEntity animatable) { + return animatable.isBaby() ? BABY_TEXTURE : ADULT_TEXTURE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/EmperorScorpionModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/EmperorScorpionModel.java new file mode 100644 index 00000000..2aaa77c1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/EmperorScorpionModel.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class EmperorScorpionModel extends GeoModel { + public static final ResourceLocation NORMAL_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/emperor_scorpion/emperor_scorpion.png"); + public static final ResourceLocation HARDEN_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/emperor_scorpion/emperor_scorpion_harden.png"); + + public static final ResourceLocation EMISSIVE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/emperor_scorpion/emperor_scorpion_emissive.png"); + + @Override + public ResourceLocation getModelResource(EmperorScorpionEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/emperor_scorpion.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(EmperorScorpionEntity animatable) { + return NORMAL_TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(EmperorScorpionEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/emperor_scorpion.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/FlyingSquirrelModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/FlyingSquirrelModel.java new file mode 100644 index 00000000..3e775635 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/FlyingSquirrelModel.java @@ -0,0 +1,67 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.cache.object.GeoBone; +import software.bernie.geckolib.model.GeoModel; + +public class FlyingSquirrelModel extends GeoModel { + private static final ResourceLocation REGULAR_TEXTURE = new ResourceLocation("antarchy", "textures/entity/flying_squirrel/flying_squirrel.png"); + private static final ResourceLocation BROWN_TEXTURE = new ResourceLocation("antarchy", "textures/entity/flying_squirrel/flying_squirrel_brown.png"); + private static final ResourceLocation ALBINO_TEXTURE = new ResourceLocation("antarchy", "textures/entity/flying_squirrel/flying_squirrel_albino.png"); + private static final float SHOULDER_BODY_ROT_X = 65.0F * Mth.DEG_TO_RAD; + private static final float SHOULDER_LEFT_ARM_ROT_Z = 0.0F; + private static final float SHOULDER_RIGHT_ARM_ROT_Z = 0.0F; + private static final float SHOULDER_TAIL_ROT_X = 42.5F * Mth.DEG_TO_RAD; + private static final float SHOULDER_HEAD_ROT_X = -60.0F * Mth.DEG_TO_RAD; + + @Override + public ResourceLocation getModelResource(FlyingSquirrelEntity animatable) { + return new ResourceLocation("antarchy", "geo/flying_squirrel.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(FlyingSquirrelEntity animatable) { + return switch (animatable.getTextureVariantName()) { + case "brown" -> BROWN_TEXTURE; + case "albino" -> ALBINO_TEXTURE; + default -> REGULAR_TEXTURE; + }; + } + + @Override + public ResourceLocation getAnimationResource(FlyingSquirrelEntity animatable) { + return new ResourceLocation("antarchy", "animations/flying_squirrel.animation.json"); + } + + @Override + public void setCustomAnimations(FlyingSquirrelEntity animatable, long instanceId, AnimationState animationState) { + super.setCustomAnimations(animatable, instanceId, animationState); + + this.getBone("squirrel").ifPresent(root -> root.setScaleX(animatable.shouldMirrorIdleAnimation() ? -1.0F : 1.0F)); + + if (animatable.isOnShoulder()) { + this.getBone("body").ifPresent(bone -> bone.setRotX(SHOULDER_BODY_ROT_X)); + this.getBone("left_arm").ifPresent(bone -> bone.setRotZ(SHOULDER_LEFT_ARM_ROT_Z)); + this.getBone("right_arm").ifPresent(bone -> bone.setRotZ(SHOULDER_RIGHT_ARM_ROT_Z)); + this.getBone("tail").ifPresent(bone -> bone.setRotX(SHOULDER_TAIL_ROT_X)); + this.getBone("head").ifPresent(bone -> { + bone.setRotX(SHOULDER_HEAD_ROT_X); + bone.setPosY(-1.0425F); + bone.setPosZ(-1.31366F); + }); + this.getBone("left_flying_part").ifPresent(FlyingSquirrelModel::hideBone); + this.getBone("right_flying_part").ifPresent(FlyingSquirrelModel::hideBone); + this.getBone("left_cheeks").ifPresent(FlyingSquirrelModel::hideBone); + this.getBone("right_cheeks").ifPresent(FlyingSquirrelModel::hideBone); + } + } + + private static void hideBone(GeoBone bone) { + bone.setScaleX(0.0F); + bone.setScaleY(0.0F); + bone.setScaleZ(0.0F); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/HerculesBeetleModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/HerculesBeetleModel.java new file mode 100644 index 00000000..8ba60f45 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/HerculesBeetleModel.java @@ -0,0 +1,30 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class HerculesBeetleModel extends GeoModel { + private static final ResourceLocation TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/hercules_beetle/hercules_beetle.png"); + private static final ResourceLocation TEXTURE_SADDLED = + new ResourceLocation(Antarchy.MODID, "textures/entity/hercules_beetle/hercules_beetle_saddle.png"); + public static final ResourceLocation EMISSIVE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/hercules_beetle/hercules_beetle_emissive.png"); + + @Override + public ResourceLocation getModelResource(HerculesBeetleEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/hercules_beetle.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(HerculesBeetleEntity animatable) { + return animatable.hasSaddle() ? TEXTURE_SADDLED : TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(HerculesBeetleEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/hercules_beetle.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/JerryModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/JerryModel.java new file mode 100644 index 00000000..43b72aca --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/JerryModel.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.JerryEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class JerryModel extends GeoModel { + @Override + public ResourceLocation getModelResource(JerryEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/" + stageName(animatable) + "_jerry.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(JerryEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/jerry/" + stageName(animatable) + "_jerry.png"); + } + + @Override + public ResourceLocation getAnimationResource(JerryEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/" + stageName(animatable) + "_jerry.animation.json"); + } + + private static String stageName(JerryEntity animatable) { + return animatable.getStage().getSerializedName(); + } +} 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 new file mode 100644 index 00000000..a25de655 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/JumpyBugModel.java @@ -0,0 +1,26 @@ +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/KrakenModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/KrakenModel.java new file mode 100644 index 00000000..b7da76da --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/KrakenModel.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class KrakenModel extends GeoModel { + public static final ResourceLocation EMISSIVE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/kraken_emissive.png"); + + @Override + public ResourceLocation getModelResource(KrakenEntity animatable) { + return new ResourceLocation("antarchy", "geo/kraken.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(KrakenEntity animatable) { + return new ResourceLocation("antarchy", "textures/entity/kraken.png"); + } + + @Override + public ResourceLocation getAnimationResource(KrakenEntity animatable) { + return new ResourceLocation("antarchy", "animations/kraken.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/LucidModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/LucidModel.java new file mode 100644 index 00000000..74125757 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/LucidModel.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class LucidModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(LucidEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/lucid.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(LucidEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/lucid.png"); + } + + @Override + public ResourceLocation getAnimationResource(LucidEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/lucid.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 new file mode 100644 index 00000000..7303f12e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/LurkingTerrorModel.java @@ -0,0 +1,23 @@ +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/MantisModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/MantisModel.java new file mode 100644 index 00000000..155ac6a1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/MantisModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class MantisModel extends GeoModel { + @Override + public ResourceLocation getModelResource(MantisEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/mantis.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(MantisEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/mantis.png"); + } + + @Override + public ResourceLocation getAnimationResource(MantisEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/mantis.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/MissileSquidModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/MissileSquidModel.java new file mode 100644 index 00000000..1891cdf3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/MissileSquidModel.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class MissileSquidModel extends GeoModel { + @Override + public ResourceLocation getModelResource(MissileSquidEntity animatable) { + return new ResourceLocation("antarchy", "geo/missile_squid.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(MissileSquidEntity animatable) { + return new ResourceLocation("antarchy", "textures/entity/missile_squid.png"); + } + + @Override + public ResourceLocation getAnimationResource(MissileSquidEntity animatable) { + return new ResourceLocation("antarchy", "animations/missile_squid.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/MolevoreModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/MolevoreModel.java new file mode 100644 index 00000000..c1285f0c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/MolevoreModel.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class MolevoreModel extends GeoModel { + private static final ResourceLocation MODEL = new ResourceLocation(Antarchy.MODID, "geo/molevore.geo.json"); + private static final ResourceLocation TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/molevore.png"); + private static final ResourceLocation ANIMATION = new ResourceLocation(Antarchy.MODID, "animations/molevore.animation.json"); + + @Override + public ResourceLocation getModelResource(MolevoreEntity animatable) { + return MODEL; + } + + @Override + public ResourceLocation getTextureResource(MolevoreEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(MolevoreEntity animatable) { + return ANIMATION; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/MolewormModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/MolewormModel.java new file mode 100644 index 00000000..bf6dfba5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/MolewormModel.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class MolewormModel extends GeoModel { + private static final ResourceLocation MODEL = new ResourceLocation(Antarchy.MODID, "geo/moleworm.geo.json"); + private static final ResourceLocation TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/moleworm.png"); + private static final ResourceLocation ANIMATION = new ResourceLocation(Antarchy.MODID, "animations/moleworm.animation.json"); + + @Override + public ResourceLocation getModelResource(MolewormEntity animatable) { + return MODEL; + } + + @Override + public ResourceLocation getTextureResource(MolewormEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(MolewormEntity animatable) { + return ANIMATION; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareBiteModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareBiteModel.java new file mode 100644 index 00000000..c5c0bd2c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareBiteModel.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class NightmareBiteModel extends GeoModel { + private static final ResourceLocation PHASE_ONE_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/nightmare_bite.png"); + private static final ResourceLocation PHASE_TWO_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/nightmare_bite_phase_2.png"); + + @Override + public ResourceLocation getModelResource(NightmareBiteEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/nightmare_bite.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(NightmareBiteEntity animatable) { + return animatable.isPhaseTwo() ? PHASE_TWO_TEXTURE : PHASE_ONE_TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(NightmareBiteEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/nightmare_bite.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 new file mode 100644 index 00000000..26aeddcd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +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"); + + @Override + public ResourceLocation getModelResource(NightmareEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/nightmare.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(NightmareEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/nightmare.png"); + } + + @Override + public ResourceLocation getAnimationResource(NightmareEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/nightmare.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmarePortalModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmarePortalModel.java new file mode 100644 index 00000000..60b70b08 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmarePortalModel.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class NightmarePortalModel extends GeoModel { + public static final ResourceLocation TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/vfx/nightmare_portal.png"); + + @Override + public ResourceLocation getModelResource(NightmarePortalEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/nightmare_portal.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(NightmarePortalEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(NightmarePortalEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/nightmare_portal.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/OctopusBombModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/OctopusBombModel.java new file mode 100644 index 00000000..f61c8577 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/OctopusBombModel.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class OctopusBombModel extends GeoModel { + @Override + public ResourceLocation getModelResource(OctopusBombEntity animatable) { + return new ResourceLocation("antarchy", "geo/octopus_bomb.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(OctopusBombEntity animatable) { + return new ResourceLocation("antarchy", "textures/entity/octopus_bomb.png"); + } + + @Override + public ResourceLocation getAnimationResource(OctopusBombEntity animatable) { + return new ResourceLocation("antarchy", "animations/octopus_bomb.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/OuranwoodDeerModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/OuranwoodDeerModel.java new file mode 100644 index 00000000..6cd4258c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/OuranwoodDeerModel.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class OuranwoodDeerModel extends GeoModel { + private static final ResourceLocation ADULT_GEO = rl("geo/ouranwood_deer.geo.json"); + private static final ResourceLocation BABY_GEO = rl("geo/ouranwood_deer_baby.geo.json"); + private static final ResourceLocation ADULT_ANIM = rl("animations/ouranwood_deer.animation.json"); + private static final ResourceLocation BABY_ANIM = rl("animations/ouranwood_deer_baby.animation.json"); + private static final ResourceLocation BUCK_TEXTURE = rl("textures/entity/ouranwood_deer/deer_buck.png"); + private static final ResourceLocation DOE_TEXTURE = rl("textures/entity/ouranwood_deer/deer_doe.png"); + private static final ResourceLocation STAG_TEXTURE = rl("textures/entity/ouranwood_deer/deer_stag.png"); + + private static ResourceLocation rl(String path) { + return new ResourceLocation(Antarchy.MODID, path); + } + + @Override + public ResourceLocation getModelResource(OuranwoodDeerEntity animatable) { + return animatable.isBaby() ? BABY_GEO : ADULT_GEO; + } + + @Override + public ResourceLocation getAnimationResource(OuranwoodDeerEntity animatable) { + return animatable.isBaby() ? BABY_ANIM : ADULT_ANIM; + } + + @Override + public ResourceLocation getTextureResource(OuranwoodDeerEntity animatable) { + if (animatable.isBaby()) { + return STAG_TEXTURE; + } + return switch (animatable.getVariant()) { + case BUCK -> BUCK_TEXTURE; + case DOE -> DOE_TEXTURE; + }; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ResourceBackedGeoItemModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ResourceBackedGeoItemModel.java new file mode 100644 index 00000000..68cac850 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ResourceBackedGeoItemModel.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.content.client.model; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import software.bernie.geckolib.core.animatable.GeoAnimatable; +import software.bernie.geckolib.model.GeoModel; + +public class ResourceBackedGeoItemModel extends GeoModel { + private final ResourceLocation modelLocation; + private final ResourceLocation textureLocation; + private final ResourceLocation animationLocation; + + public ResourceBackedGeoItemModel(ResourceLocation modelLocation, ResourceLocation textureLocation, ResourceLocation animationLocation) { + this.modelLocation = modelLocation; + this.textureLocation = textureLocation; + this.animationLocation = animationLocation; + } + + @Override + public ResourceLocation getModelResource(T animatable) { + return this.modelLocation; + } + + @Override + public ResourceLocation getTextureResource(T animatable) { + return this.textureLocation; + } + + @Override + public ResourceLocation getAnimationResource(T animatable) { + return this.animationLocation; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ReverieModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ReverieModel.java new file mode 100644 index 00000000..1d51529c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ReverieModel.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class ReverieModel extends GeoModel { + private static final ResourceLocation WHITE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/reverie/reverie_white.png"); + private static final ResourceLocation YELLOW_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/reverie/reverie_yellow.png"); + private static final ResourceLocation BLUE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/reverie/reverie_blue.png"); + private static final ResourceLocation PURPLE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/reverie/reverie_purple.png"); + private static final ResourceLocation RED_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/reverie/reverie_red.png"); + + @Override + public ResourceLocation getModelResource(ReverieEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/reverie.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(ReverieEntity animatable) { + return textureForMood(animatable.getMood()); + } + + @Override + public ResourceLocation getAnimationResource(ReverieEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/reverie.animation.json"); + } + + public static ResourceLocation textureForMood(ReverieEntity.Mood mood) { + return switch (mood) { + case WHITE -> WHITE_TEXTURE; + case YELLOW -> YELLOW_TEXTURE; + case BLUE -> BLUE_TEXTURE; + case PURPLE -> PURPLE_TEXTURE; + case RED -> RED_TEXTURE; + default -> WHITE_TEXTURE; + }; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/RollyPollyModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/RollyPollyModel.java new file mode 100644 index 00000000..092f26ea --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/RollyPollyModel.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class RollyPollyModel extends GeoModel { + private static final ResourceLocation TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/rolly_polly/rolly_polly.png"); + + @Override + public ResourceLocation getModelResource(RollyPollyEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/rolly_polly.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(RollyPollyEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(RollyPollyEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/rolly_polly.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ScorpionModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ScorpionModel.java new file mode 100644 index 00000000..905e34ec --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ScorpionModel.java @@ -0,0 +1,44 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class ScorpionModel extends GeoModel { + private static final ResourceLocation MODEL = + new ResourceLocation(Antarchy.MODID, "geo/scorpion.geo.json"); + private static final ResourceLocation BLUE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/scorpion/scorpion_blue.png"); + private static final ResourceLocation GREEN_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/scorpion/scorpion_green.png"); + private static final ResourceLocation BLUE_EMISSIVE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/scorpion/scorpion_blue_emissive.png"); + private static final ResourceLocation GREEN_EMISSIVE_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/scorpion/scorpion_green_emissive.png"); + private static final ResourceLocation ANIMATION = + new ResourceLocation(Antarchy.MODID, "animations/scorpion.animation.json"); + + @Override + public ResourceLocation getModelResource(ScorpionEntity animatable) { + return MODEL; + } + + @Override + public ResourceLocation getTextureResource(ScorpionEntity animatable) { + return textureFor(animatable); + } + + @Override + public ResourceLocation getAnimationResource(ScorpionEntity animatable) { + return ANIMATION; + } + + public static ResourceLocation textureFor(ScorpionEntity animatable) { + return animatable.getTextureVariant() == ScorpionEntity.GREEN_VARIANT ? GREEN_TEXTURE : BLUE_TEXTURE; + } + + public static ResourceLocation emissiveTextureFor(ScorpionEntity animatable) { + return animatable.getTextureVariant() == ScorpionEntity.GREEN_VARIANT ? GREEN_EMISSIVE_TEXTURE : BLUE_EMISSIVE_TEXTURE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SeashellModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SeashellModel.java new file mode 100644 index 00000000..609ca4c6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SeashellModel.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public final class SeashellModel extends GeoModel { + private static final ResourceLocation MODEL = new ResourceLocation(Antarchy.MODID, "geo/seashell.geo.json"); + private static final ResourceLocation TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/block/seashell.png"); + private static final ResourceLocation ANIMATION = new ResourceLocation(Antarchy.MODID, "animations/seashell.animation.json"); + + @Override + public ResourceLocation getModelResource(SeashellBlockEntity animatable) { + return MODEL; + } + + @Override + public ResourceLocation getTextureResource(SeashellBlockEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(SeashellBlockEntity animatable) { + return ANIMATION; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SpitBugModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SpitBugModel.java new file mode 100644 index 00000000..1512f4a0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/SpitBugModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.SpitBugEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class SpitBugModel extends GeoModel { + @Override + public ResourceLocation getModelResource(SpitBugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/spit_bug.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(SpitBugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/spit_bug.png"); + } + + @Override + public ResourceLocation getAnimationResource(SpitBugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/spit_bug.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/StinkBugModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/StinkBugModel.java new file mode 100644 index 00000000..57ea8791 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/StinkBugModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class StinkBugModel extends GeoModel { + @Override + public ResourceLocation getModelResource(StinkBugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/stink_bug.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(StinkBugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/stink_bug.png"); + } + + @Override + public ResourceLocation getAnimationResource(StinkBugEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/stink_bug.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/TentacleModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/TentacleModel.java new file mode 100644 index 00000000..dcb68e06 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/TentacleModel.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class TentacleModel extends GeoModel { + @Override + public ResourceLocation getModelResource(TentacleEntity animatable) { + return new ResourceLocation("antarchy", "geo/tentacle.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(TentacleEntity animatable) { + return new ResourceLocation("antarchy", "textures/entity/tentacle.png"); + } + + @Override + public ResourceLocation getAnimationResource(TentacleEntity animatable) { + return new ResourceLocation("antarchy", "animations/tenctacle.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/TermiteModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/TermiteModel.java new file mode 100644 index 00000000..af99764e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/TermiteModel.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.ant.TermiteEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class TermiteModel extends GeoModel { + private static final ResourceLocation MODEL = new ResourceLocation(Antarchy.MODID, "geo/termite.geo.json"); + private static final ResourceLocation TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/termite.png"); + private static final ResourceLocation ANIMATIONS = new ResourceLocation(Antarchy.MODID, "animations/termite.animation.json"); + + @Override + public ResourceLocation getModelResource(TermiteEntity animatable) { + return MODEL; + } + + @Override + public ResourceLocation getTextureResource(TermiteEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(TermiteEntity animatable) { + return ANIMATIONS; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ToreterrorModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ToreterrorModel.java new file mode 100644 index 00000000..89cc0e49 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/ToreterrorModel.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class ToreterrorModel extends GeoModel { + + @Override + public ResourceLocation getModelResource(ToreterrorEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/toreterror.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(ToreterrorEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/entity/toreterror.png"); + } + + @Override + public ResourceLocation getAnimationResource(ToreterrorEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/toreterror.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 new file mode 100644 index 00000000..947cc6f1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/TriffidModel.java @@ -0,0 +1,27 @@ +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/WaspModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/WaspModel.java new file mode 100644 index 00000000..8e59e187 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/WaspModel.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WaspModel extends GeoModel { + private static final ResourceLocation DEFAULT_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/wasp.png"); + private static final ResourceLocation PANDA_TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/wasp_panda.png"); + + @Override + public ResourceLocation getModelResource(WaspEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/wasp.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WaspEntity animatable) { + return animatable.isPandaVariant() ? PANDA_TEXTURE : DEFAULT_TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(WaspEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/wasp.animation.json"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/WaterBombModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/WaterBombModel.java new file mode 100644 index 00000000..578210bf --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/WaterBombModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WaterBombModel extends GeoModel { + @Override + public ResourceLocation getModelResource(WaterBombEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "geo/water_bomb.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WaterBombEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "textures/vfx/water_bomb.png"); + } + + @Override + public ResourceLocation getAnimationResource(WaterBombEntity animatable) { + return new ResourceLocation(Antarchy.MODID, "animations/water_bomb.animation.json"); + } +} 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 new file mode 100644 index 00000000..363c0b28 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerFrogModel.java @@ -0,0 +1,50 @@ +package com.craisinlord.antarchy.content.client.model.glimmer; + +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.EntityModel; +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; + private final ModelPart leftArm; + private final ModelPart rightArm; + private final ModelPart leftLeg; + private final ModelPart rightLeg; + + public GlimmerFrogModel(ModelPart bakeRoot) { + this.root = bakeRoot.getChild("root"); + ModelPart body = this.root.getChild("body"); + this.head = body.getChild("head"); + this.leftArm = body.getChild("left_arm"); + this.rightArm = body.getChild("right_arm"); + this.leftLeg = this.root.getChild("left_leg"); + this.rightLeg = this.root.getChild("right_leg"); + } + + @Override + public void setupAnim(GlimmerEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + this.head.yRot = netHeadYaw * ((float) Math.PI / 180F); + this.head.xRot = headPitch * ((float) Math.PI / 180F); + + float legSwing = Mth.sin(limbSwing * 0.6662F) * limbSwingAmount; + this.leftLeg.xRot = legSwing; + this.rightLeg.xRot = -legSwing; + this.leftArm.xRot = -legSwing; + this.rightArm.xRot = legSwing; + } + + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + this.root.render(poseStack, buffer, packedLight, packedOverlay, red, green, blue, alpha); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerModel.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerModel.java new file mode 100644 index 00000000..82bf3761 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerModel.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.client.model.glimmer; + +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class GlimmerModel extends GeoModel { + @Override + public ResourceLocation getModelResource(GlimmerEntity animatable) { + return animatable.getVariant().getBehavior().modelGeo(); + } + + @Override + public ResourceLocation getAnimationResource(GlimmerEntity animatable) { + return animatable.getVariant().getBehavior().animationFile(); + } + + @Override + public ResourceLocation getTextureResource(GlimmerEntity animatable) { + return animatable.getVariant().getBehavior().texture(animatable); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/DreamFlameParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/DreamFlameParticle.java new file mode 100644 index 00000000..d84d1c71 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/DreamFlameParticle.java @@ -0,0 +1,49 @@ +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 DreamFlameParticle extends TextureSheetParticle { + private final SpriteSet sprites; + + protected DreamFlameParticle(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.friction = 0.96F; + this.xd = xd * 0.01D; + this.yd = yd * 0.01D; + this.zd = zd * 0.01D; + this.quadSize *= 1.25F; + this.lifetime = 8 + this.random.nextInt(4); + this.pickSprite(sprites); + } + + @Override + public void tick() { + super.tick(); + this.pickSprite(this.sprites); + } + + @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 DreamFlameParticle(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/FireflyParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/FireflyParticle.java new file mode 100644 index 00000000..3c82835a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/FireflyParticle.java @@ -0,0 +1,85 @@ +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.client.renderer.LightTexture; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.Mth; + +public final class FireflyParticle extends TextureSheetParticle { + private static final int FADE_TICKS = 8; + + private FireflyParticle(ClientLevel level, double x, double y, double z, SpriteSet sprites) { + super(level, x, y, z, 0.0, 0.0, 0.0); + this.setSprite(sprites.get(0, 1)); + this.lifetime = 30 + this.random.nextInt(78); + this.quadSize = 0.10F + this.random.nextFloat() * 0.04F; + this.setColor(0.92F, 0.98F, 0.45F); + this.setAlpha(0.0F); + this.yd = 0.004 + this.random.nextDouble() * 0.003; + this.xd = (this.random.nextDouble() - 0.5) * 0.008; + this.zd = (this.random.nextDouble() - 0.5) * 0.008; + this.hasPhysics = false; + } + + @Override + public void tick() { + this.xo = this.x; + this.yo = this.y; + this.zo = this.z; + + if (this.age >= this.lifetime) { + this.remove(); + return; + } + + float bobOffset = Mth.sin(this.age * 0.18F) * 0.006F; + this.xd += bobOffset; + this.zd -= bobOffset; + + this.xd *= 0.94; + this.yd *= 0.98; + this.zd *= 0.94; + + this.move(this.xd, this.yd, this.zd); + + float alpha; + if (this.age < FADE_TICKS) { + alpha = (float) this.age / FADE_TICKS; + } else if (this.age > this.lifetime - FADE_TICKS) { + alpha = (float) (this.lifetime - this.age) / FADE_TICKS; + } else { + alpha = 1.0F; + } + this.setAlpha(alpha * 0.85F); + + this.age++; + } + + @Override + public int getLightColor(float partialTick) { + return LightTexture.FULL_BRIGHT; + } + + @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 FireflyParticle(level, x, y, z, this.sprites); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/GlimmerParticles.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/GlimmerParticles.java new file mode 100644 index 00000000..0b5d6400 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/GlimmerParticles.java @@ -0,0 +1,63 @@ +package com.craisinlord.antarchy.content.client.particle; + +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.phys.Vec3; +import org.joml.Vector3f; + +public final class GlimmerParticles { + private static final int AMBIENT_INTERVAL_TICKS = 6; + private static final DustParticleOptions AMBIENT = new DustParticleOptions(new Vector3f(0.55F, 0.85F, 1.0F), 0.9F); + private static final DustParticleOptions TRAIL = new DustParticleOptions(new Vector3f(0.6F, 0.9F, 1.0F), 1.1F); + + private GlimmerParticles() { + } + + public static void tickAmbient(LivingEntity entity, boolean running) { + if (!(entity.level() instanceof ServerLevel serverLevel)) { + return; + } + if (!entity.isAlive() || entity.tickCount % AMBIENT_INTERVAL_TICKS != 0) { + return; + } + + int count = running ? 2 : 1; + serverLevel.sendParticles( + AMBIENT, + entity.getRandomX(0.6D), + entity.getY(0.3D) + entity.getBbHeight() * 0.6D, + entity.getRandomZ(0.6D), + count, + 0.15D, + 0.2D, + 0.15D, + 0.0D + ); + + Vec3 motion = entity.getDeltaMovement(); + if (running && motion.horizontalDistanceSqr() > 1.0E-4D) { + Vec3 direction = new Vec3(motion.x, 0.0D, motion.z).normalize(); + Vec3 behind = entity.position().subtract(direction.scale(0.4D)).add(0.0D, 0.15D, 0.0D); + serverLevel.sendParticles(TRAIL, behind.x, behind.y, behind.z, 1, 0.05D, 0.05D, 0.05D, 0.0D); + } + } + + public static void tickBurst(LivingEntity entity) { + if (!(entity.level() instanceof ServerLevel serverLevel) || !entity.isAlive()) { + return; + } + + serverLevel.sendParticles( + TRAIL, + entity.getRandomX(0.4D), + entity.getY(0.1D) + entity.getBbHeight() * 0.4D, + entity.getRandomZ(0.4D), + 3, + 0.12D, + 0.12D, + 0.12D, + 0.0D + ); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/HypnoticGasCloudParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/HypnoticGasCloudParticle.java new file mode 100644 index 00000000..4881f8de --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/HypnoticGasCloudParticle.java @@ -0,0 +1,51 @@ +package com.craisinlord.antarchy.content.client.particle; + +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.NoRenderParticle; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleProvider; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.world.phys.Vec3; + +public final class HypnoticGasCloudParticle extends NoRenderParticle { + private final boolean flipped; + + public HypnoticGasCloudParticle(ClientLevel level, double x, double y, double z, boolean flipped) { + super(level, x, y, z); + this.flipped = flipped; + this.lifetime = 20; + } + + @Override + public void tick() { + super.tick(); + if (this.age % 2 != 0) { + return; + } + + BlockPos source = BlockPos.containing(this.x, this.y, this.z); + Vec3 spawnPoint = PotentNyxiteBlockEntity.pickRandomHypnoticGasSpawnPoint(this.level, source); + if (PotentNyxiteBlockEntity.canBeReachedByHypnoticGas(this.level, source, spawnPoint)) { + PotentNyxiteBlockEntity.spawnHypnoticGasParticle(this.level, spawnPoint, this.flipped); + } + } + + public static final class Provider implements ParticleProvider { + private final boolean flipped; + + public Provider() { + this(false); + } + + public Provider(boolean flipped) { + this.flipped = flipped; + } + + @Override + public Particle createParticle(SimpleParticleType type, ClientLevel level, double x, double y, double z, double xd, double yd, double zd) { + return new HypnoticGasCloudParticle(level, x, y, z, this.flipped); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/HypnoticGasParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/HypnoticGasParticle.java new file mode 100644 index 00000000..e46d44f3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/HypnoticGasParticle.java @@ -0,0 +1,71 @@ +package com.craisinlord.antarchy.content.client.particle; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.BaseAshSmokeParticle; +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.core.particles.SimpleParticleType; +import net.minecraft.util.Mth; + +public final class HypnoticGasParticle extends BaseAshSmokeParticle { + private final float fadeOutStartingPoint; + + private HypnoticGasParticle( + ClientLevel level, + double x, + double y, + double z, + double xd, + double yd, + double zd, + float scale, + boolean flipped, + SpriteSet sprites + ) { + super(level, x, y, z, 0.1F, 0.1F, 0.1F, xd, yd, zd, scale, sprites, 0.3F, 5, -0.02F, true); + this.rCol = 1.0F; + this.gCol = 1.0F; + this.bCol = 1.0F; + if (flipped) { + this.roll = Mth.PI; + this.oRoll = Mth.PI; + } + this.lifetime = (int) (6.0D / (this.random.nextFloat() * 0.5D + 0.5D) * scale); + this.fadeOutStartingPoint = this.lifetime / 2.0F; + } + + @Override + public void tick() { + super.tick(); + if (this.age > this.fadeOutStartingPoint) { + float agePastFadeStart = this.age - this.fadeOutStartingPoint; + this.setAlpha((this.lifetime - agePastFadeStart) / this.lifetime); + } + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; + } + + public static final class Provider implements ParticleProvider { + private final SpriteSet sprites; + private final boolean flipped; + + public Provider(SpriteSet sprites) { + this(sprites, false); + } + + public Provider(SpriteSet sprites, boolean flipped) { + this.sprites = sprites; + this.flipped = flipped; + } + + @Override + public Particle createParticle(SimpleParticleType type, ClientLevel level, double x, double y, double z, double xd, double yd, double zd) { + return new HypnoticGasParticle(level, x, y, z, xd, yd, zd, 3.0F, this.flipped, this.sprites); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserBaseParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserBaseParticle.java new file mode 100644 index 00000000..5a4e5f6f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserBaseParticle.java @@ -0,0 +1,77 @@ +package com.craisinlord.antarchy.content.client.particle; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.BaseAshSmokeParticle; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleProvider; +import net.minecraft.client.particle.SpriteSet; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; + +public final class InvertedGeyserBaseParticle extends BaseAshSmokeParticle { + protected InvertedGeyserBaseParticle( + ClientLevel level, + double x, + double y, + double z, + double xd, + double yd, + double zd, + float scale, + float lifetimeScale, + Direction direction, + SpriteSet sprites + ) { + super(level, x, y, z, scale, scale, scale, xd, yd, zd, lifetimeScale, sprites, 0.0F, 0, 0.0F, true); + this.friction = 0.725F; + this.rCol = 1.0F; + this.gCol = 1.0F; + this.bCol = 1.0F; + if (direction == Direction.DOWN) { + this.roll = Mth.PI; + this.oRoll = Mth.PI; + } + this.yd = Math.abs(this.yd) * direction.getStepY(); + float lifetimeFactor = 0.8F + 0.2F * level.getRandom().nextFloat(); + this.lifetime = (int) (25.0F * lifetimeFactor); + } + + public static final class Provider implements ParticleProvider { + private final SpriteSet sprites; + + public Provider(SpriteSet sprites) { + this.sprites = sprites; + } + + @Override + public Particle createParticle( + InvertedGeyserBaseParticleOptions options, + ClientLevel level, + double x, + double y, + double z, + double xd, + double yd, + double zd + ) { + double shiftedX = x + (level.getRandom().nextFloat() - 0.5F) * 0.5F; + double shiftedY = y + (level.getRandom().nextFloat() - 0.5F) * 0.5F + 0.2D * options.direction().getStepY(); + double shiftedZ = z + (level.getRandom().nextFloat() - 0.5F) * 0.5F; + float scale = options.burstImpulseBase() + 0.25F + options.fluidBlocks(); + float lifetimeScale = 3.0F + 0.125F * options.fluidBlocks(); + return new InvertedGeyserBaseParticle( + level, + shiftedX, + shiftedY, + shiftedZ, + xd, + yd, + zd, + scale, + lifetimeScale, + options.direction(), + this.sprites + ); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserBaseParticleOptions.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserBaseParticleOptions.java new file mode 100644 index 00000000..6030c42d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserBaseParticleOptions.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.content.client.particle; + +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import java.util.Locale; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.FriendlyByteBuf; + +public record InvertedGeyserBaseParticleOptions( + ParticleType type, + int fluidBlocks, + float burstImpulseBase, + Direction direction +) implements ParticleOptions { + + public static ParticleOptions.Deserializer deserializer() { + return new ParticleOptions.Deserializer<>() { + @Override + public InvertedGeyserBaseParticleOptions fromCommand(ParticleType type, StringReader reader) throws CommandSyntaxException { + reader.expect(' '); + int fluidBlocks = reader.readInt(); + reader.expect(' '); + float burstImpulseBase = reader.readFloat(); + reader.expect(' '); + Direction direction = "down".equals(reader.readUnquotedString()) ? Direction.DOWN : Direction.UP; + return new InvertedGeyserBaseParticleOptions(type, fluidBlocks, burstImpulseBase, direction); + } + + @Override + public InvertedGeyserBaseParticleOptions fromNetwork(ParticleType type, FriendlyByteBuf buffer) { + int fluidBlocks = buffer.readVarInt(); + float burstImpulseBase = buffer.readFloat(); + Direction direction = buffer.readBoolean() ? Direction.DOWN : Direction.UP; + return new InvertedGeyserBaseParticleOptions(type, fluidBlocks, burstImpulseBase, direction); + } + }; + } + + @Override + public void writeToNetwork(FriendlyByteBuf buffer) { + buffer.writeVarInt(this.fluidBlocks); + buffer.writeFloat(this.burstImpulseBase); + buffer.writeBoolean(this.direction == Direction.DOWN); + } + + @Override + public String writeToString() { + return String.format( + Locale.ROOT, + "%s %d %f %s", + BuiltInRegistries.PARTICLE_TYPE.getKey(this.type), + this.fluidBlocks, + this.burstImpulseBase, + this.direction == Direction.DOWN ? "down" : "up"); + } + + @Override + public ParticleType getType() { + return this.type; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserParticleOptions.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserParticleOptions.java new file mode 100644 index 00000000..b95177df --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserParticleOptions.java @@ -0,0 +1,58 @@ +package com.craisinlord.antarchy.content.client.particle; + +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import java.util.Locale; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.FriendlyByteBuf; + +public record InvertedGeyserParticleOptions( + ParticleType type, + int fluidBlocks, + Direction direction +) implements ParticleOptions { + + public static ParticleOptions.Deserializer deserializer() { + return new ParticleOptions.Deserializer<>() { + @Override + public InvertedGeyserParticleOptions fromCommand(ParticleType type, StringReader reader) throws CommandSyntaxException { + reader.expect(' '); + int fluidBlocks = reader.readInt(); + reader.expect(' '); + Direction direction = "down".equals(reader.readUnquotedString()) ? Direction.DOWN : Direction.UP; + return new InvertedGeyserParticleOptions(type, fluidBlocks, direction); + } + + @Override + public InvertedGeyserParticleOptions fromNetwork(ParticleType type, FriendlyByteBuf buffer) { + int fluidBlocks = buffer.readVarInt(); + Direction direction = buffer.readBoolean() ? Direction.DOWN : Direction.UP; + return new InvertedGeyserParticleOptions(type, fluidBlocks, direction); + } + }; + } + + @Override + public void writeToNetwork(FriendlyByteBuf buffer) { + buffer.writeVarInt(this.fluidBlocks); + buffer.writeBoolean(this.direction == Direction.DOWN); + } + + @Override + public String writeToString() { + return String.format( + Locale.ROOT, + "%s %d %s", + BuiltInRegistries.PARTICLE_TYPE.getKey(this.type), + this.fluidBlocks, + this.direction == Direction.DOWN ? "down" : "up"); + } + + @Override + public ParticleType getType() { + return this.type; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserPlumeParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserPlumeParticle.java new file mode 100644 index 00000000..12987240 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/InvertedGeyserPlumeParticle.java @@ -0,0 +1,114 @@ +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.Direction; +import net.minecraft.util.Mth; + +public final class InvertedGeyserPlumeParticle extends TextureSheetParticle { + private final double startY; + private final double limitY; + private final float horizontalSprayX; + private final float horizontalSprayZ; + private final float initialPropulsion; + private final float minSize; + private final float maxSize; + private final SpriteSet sprites; + private final Direction direction; + + public InvertedGeyserPlumeParticle( + ClientLevel level, + double x, + double y, + double z, + double xd, + double yd, + double zd, + InvertedGeyserParticleOptions options, + SpriteSet sprites + ) { + super(level, x, y, z, xd, yd, zd); + int forceHeight = 5 * Math.max(1, options.fluidBlocks()); + this.hasPhysics = true; + this.speedUpWhenYMotionIsBlocked = true; + this.lifetime = forceHeight * 5; + this.yd = 0.0D; + this.startY = y; + this.direction = options.direction(); + this.limitY = this.startY + this.direction.getStepY() * (forceHeight - 1); + if (this.direction == Direction.DOWN) { + this.roll = Mth.PI; + this.oRoll = Mth.PI; + } + this.horizontalSprayX = (level.getRandom().nextFloat() - 0.5F) * 0.2F; + this.horizontalSprayZ = (level.getRandom().nextFloat() - 0.5F) * 0.2F; + this.friction = 1.0F; + this.initialPropulsion = (options.fluidBlocks() == 1 ? 1.5F : 1.0F) * forceHeight * 1.45F; + this.gravity = -this.direction.getStepY() * this.initialPropulsion; + float baseSize = this.quadSize * 0.75F; + this.minSize = baseSize * (2.0F + forceHeight / 8.0F); + this.maxSize = baseSize * (3.0F + forceHeight / 8.0F); + this.quadSize = this.minSize; + this.sprites = sprites; + this.setSpriteFromAge(sprites); + } + + @Override + public void tick() { + super.tick(); + if (!this.removed && hasReachedTerminalState()) { + this.lifetime = Math.min(this.lifetime, this.age + 5); + this.friction = 0.0F; + this.remove(); + } + + double progress = Mth.clamp((this.y - this.startY) / (this.limitY - this.startY), 0.0D, 1.0D); + double progressCurve = Math.pow(progress, 3.0D); + this.gravity = this.direction.getStepY() * this.initialPropulsion * (float) progressCurve * 0.12F; + this.xd = progress * this.horizontalSprayX; + this.zd = progress * this.horizontalSprayZ; + this.setSpriteFromAge(this.sprites); + this.quadSize = this.minSize + (float) (progress * (this.maxSize - this.minSize)); + } + + private boolean hasReachedTerminalState() { + if (this.direction == Direction.UP) { + return this.yd < 0.0D || this.y > this.limitY || this.y == this.yo; + } + return this.yd > 0.0D || this.y < this.limitY || this.y == this.yo; + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_OPAQUE; + } + + public static final class Provider implements ParticleProvider { + private final SpriteSet sprites; + + public Provider(SpriteSet sprites) { + this.sprites = sprites; + } + + @Override + public Particle createParticle( + InvertedGeyserParticleOptions options, + ClientLevel level, + double x, + double y, + double z, + double xd, + double yd, + double zd + ) { + double shiftedX = x + (level.getRandom().nextFloat() - 0.5F) * 0.2F; + double shiftedY = y + level.getRandom().nextFloat() * options.direction().getStepY(); + double shiftedZ = z + (level.getRandom().nextFloat() - 0.5F) * 0.2F; + return new InvertedGeyserPlumeParticle(level, shiftedX, shiftedY, shiftedZ, xd, yd, zd, options, this.sprites); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/LotusPollenParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/LotusPollenParticle.java new file mode 100644 index 00000000..d6faa45b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/LotusPollenParticle.java @@ -0,0 +1,62 @@ +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 LotusPollenParticle extends TextureSheetParticle { + private static final int LIFETIME = 140; + + private LotusPollenParticle(ClientLevel level, double x, double y, double z, double xd, double yd, double zd, SpriteSet sprites) { + super(level, x, y, z, 0.0D, 0.0D, 0.0D); + this.setSprite(sprites.get(this.random)); + this.gravity = 0.0F; + this.friction = 0.98F; + this.lifetime = LIFETIME + this.random.nextInt(60); + this.quadSize = 0.06F + this.random.nextFloat() * 0.03F; + this.xd = xd + (this.random.nextDouble() - 0.5D) * 0.01D; + this.yd = yd; + this.zd = zd + (this.random.nextDouble() - 0.5D) * 0.01D; + this.setColor(1.0F, 0.85F, 0.2F); + this.hasPhysics = false; + } + + @Override + public void tick() { + this.xo = this.x; + this.yo = this.y; + this.zo = this.z; + + if (this.age++ >= this.lifetime) { + this.remove(); + return; + } + + this.alpha = 1.0F - (float) this.age / (float) this.lifetime; + this.move(this.xd, this.yd, this.zd); + this.xd *= this.friction; + this.zd *= this.friction; + } + + @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 LotusPollenParticle(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/OrangeAshParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/OrangeAshParticle.java new file mode 100644 index 00000000..560b427f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/OrangeAshParticle.java @@ -0,0 +1,54 @@ +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 OrangeAshParticle extends TextureSheetParticle { + private final SpriteSet sprites; + + private OrangeAshParticle(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.friction = 0.98F; + this.gravity = 0.0025F; + this.speedUpWhenYMotionIsBlocked = false; + this.hasPhysics = false; + this.xd = xd * 0.08D + (this.random.nextDouble() - 0.5D) * 0.01D; + this.yd = yd * 0.02D - 0.01D - this.random.nextDouble() * 0.01D; + this.zd = zd * 0.08D + (this.random.nextDouble() - 0.5D) * 0.01D; + this.quadSize *= 0.75F + this.random.nextFloat() * 0.5F; + this.lifetime = 40 + this.random.nextInt(28); + this.setColor(0.96F, 0.46F, 0.12F); + this.setAlpha(0.72F); + this.pickSprite(sprites); + } + + @Override + public void tick() { + super.tick(); + this.pickSprite(this.sprites); + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_OPAQUE; + } + + 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 OrangeAshParticle(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/PeachLeavesParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java new file mode 100644 index 00000000..fc1b60e3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java @@ -0,0 +1,117 @@ +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 PeachLeavesParticle extends TextureSheetParticle { + private static final float ACCELERATION_SCALE = 0.0025F; + private static final int INITIAL_LIFETIME = 300; + private static final float WIND_BIG = 2.0F; + private static final boolean SWIRL = false; + private static final boolean FLOW_AWAY = true; + private static final float GRAVITY_SCALE = 1.0F; + private static final float INITIAL_Y_SPEED = 0.0F; + + private float rotSpeed; + private final float spinAcceleration; + private final double xaFlowScale; + private final double zaFlowScale; + private final double swirlPeriod; + private final boolean swirl; + private final boolean flowAway; + private final SpriteSet sprites; + + private PeachLeavesParticle(ClientLevel level, double x, double y, double z, SpriteSet sprites) { + super(level, x, y, z, 0.0D, 0.0D, 0.0D); + this.sprites = sprites; + this.setSprite(sprites.get(level.random)); + this.rotSpeed = (float) Math.toRadians(this.random.nextBoolean() ? -30.0D : 30.0D); + this.spinAcceleration = (float) Math.toRadians(this.random.nextBoolean() ? -5.0D : 5.0D); + this.swirl = SWIRL; + this.flowAway = FLOW_AWAY; + this.lifetime = INITIAL_LIFETIME; + this.gravity = GRAVITY_SCALE * 1.2F * ACCELERATION_SCALE; + + float size = this.random.nextBoolean() ? 0.05F : 0.075F; + this.quadSize = size; + this.setSize(size, size); + this.friction = 1.0F; + this.yd = -INITIAL_Y_SPEED; + + float randomAngle = this.random.nextFloat(); + double flowAngle = Math.toRadians(randomAngle * 60.0F); + this.xaFlowScale = Math.cos(flowAngle) * WIND_BIG; + this.zaFlowScale = Math.sin(flowAngle) * WIND_BIG; + this.swirlPeriod = Math.toRadians(1000.0F + randomAngle * 3000.0F); + } + + @Override + public void tick() { + this.xo = this.x; + this.yo = this.y; + this.zo = this.z; + + if (this.lifetime-- <= 0) { + this.remove(); + return; + } + + float ageProgress = Math.min((INITIAL_LIFETIME - this.lifetime) / (float) INITIAL_LIFETIME, 1.0F); + double windX = 0.0D; + double windZ = 0.0D; + + if (this.flowAway) { + double flowScale = Math.pow(ageProgress, 1.25D); + windX += this.xaFlowScale * flowScale; + windZ += this.zaFlowScale * flowScale; + } + + if (this.swirl) { + double swirlScale = ageProgress * ageProgress; + windX += swirlScale * Math.cos(swirlScale * this.swirlPeriod) * WIND_BIG; + windZ += swirlScale * Math.sin(swirlScale * this.swirlPeriod) * WIND_BIG; + } + + this.xd += windX * ACCELERATION_SCALE; + this.zd += windZ * ACCELERATION_SCALE; + this.yd -= this.gravity; + + this.rotSpeed += this.spinAcceleration / 20.0F; + this.oRoll = this.roll; + this.roll += this.rotSpeed / 20.0F; + + this.move(this.xd, this.yd, this.zd); + if (this.onGround || this.lifetime < INITIAL_LIFETIME - 1 && this.xd == 0.0D && this.zd == 0.0D) { + this.remove(); + return; + } + + this.xd *= this.friction; + this.yd *= this.friction; + this.zd *= this.friction; + this.setSprite(this.sprites.get(INITIAL_LIFETIME - this.lifetime, INITIAL_LIFETIME)); + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_OPAQUE; + } + + 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 PeachLeavesParticle(level, x, y, z, this.sprites); + } + } +} 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 new file mode 100644 index 00000000..6ee5cedf --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.AlphaMantisModel; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +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/AnimatedHeldItemRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AnimatedHeldItemRenderer.java new file mode 100644 index 00000000..52012568 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AnimatedHeldItemRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import net.minecraft.world.item.Item; +import software.bernie.geckolib.core.animatable.GeoAnimatable; +import software.bernie.geckolib.animatable.GeoItem; +import software.bernie.geckolib.model.GeoModel; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class AnimatedHeldItemRenderer extends GeoItemRenderer { + public AnimatedHeldItemRenderer(GeoModel model) { + super(model); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntCarriedFoodGeoLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntCarriedFoodGeoLayer.java new file mode 100644 index 00000000..6ec997a2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntCarriedFoodGeoLayer.java @@ -0,0 +1,44 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.GeoBone; +import software.bernie.geckolib.renderer.GeoRenderer; +import software.bernie.geckolib.renderer.layer.BlockAndItemGeoLayer; + +public class AntCarriedFoodGeoLayer extends BlockAndItemGeoLayer { + private static final String FOOD_BONE = "head"; + + public AntCarriedFoodGeoLayer(GeoRenderer renderer) { + super(renderer); + } + + @Override + protected @Nullable ItemStack getStackForBone(GeoBone bone, BaseAntEntity animatable) { + if (!FOOD_BONE.equals(bone.getName())) { + return super.getStackForBone(bone, animatable); + } + + ItemStack carriedFood = animatable.getCarriedFood(); + return carriedFood.isEmpty() ? super.getStackForBone(bone, animatable) : carriedFood.copy(); + } + + @Override + protected ItemDisplayContext getTransformTypeForStack(GeoBone bone, ItemStack stack, BaseAntEntity animatable) { + return ItemDisplayContext.FIXED; + } + + @Override + protected void renderStackForBone(PoseStack poseStack, GeoBone bone, ItemStack stack, BaseAntEntity animatable, MultiBufferSource bufferSource, float partialTick, int packedLight, int packedOverlay) { + double yOffset = animatable.isDancing() ? 0.58D : 0.15D; + poseStack.translate(0.0D, yOffset, -0.50D); + poseStack.mulPose(Axis.YP.rotationDegrees(90.0F)); + poseStack.scale(0.5F, 0.5F, 0.5F); + super.renderStackForBone(poseStack, bone, stack, animatable, bufferSource, partialTick, packedLight, packedOverlay); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntRenderer.java new file mode 100644 index 00000000..a9c02afb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntRenderer.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.AntModel; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +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 AntRenderer extends GeoEntityRenderer { + private static final float ADULT_SHADOW_RADIUS = 0.3F; + private static final float ADULT_SCALE = 0.85F; + private static final float BABY_SCALE = 0.5F; + + public AntRenderer(EntityRendererProvider.Context context) { + super(context, new AntModel()); + this.shadowRadius = ADULT_SHADOW_RADIUS; + this.addRenderLayer(new AntCarriedFoodGeoLayer(this)); + } + + @Override + public void preRender(PoseStack poseStack, BaseAntEntity 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.isBaby()) { + poseStack.scale(ADULT_SCALE * BABY_SCALE, ADULT_SCALE * BABY_SCALE, ADULT_SCALE * BABY_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS * BABY_SCALE; + } else { + poseStack.scale(ADULT_SCALE, ADULT_SCALE, ADULT_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntiwaterFluidRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntiwaterFluidRenderer.java new file mode 100644 index 00000000..556b8c47 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntiwaterFluidRenderer.java @@ -0,0 +1,345 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.block.LiquidBlockRenderer; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.phys.Vec3; + +public final class AntiwaterFluidRenderer { + private static final float SURFACE_NUDGE = 0.001F; + + private AntiwaterFluidRenderer() { + } + + public static void render( + BlockAndTintGetter level, + BlockPos pos, + VertexConsumer buffer, + BlockState blockState, + FluidState fluidState, + TextureAtlasSprite stillSprite, + TextureAtlasSprite flowSprite, + TextureAtlasSprite overlaySprite, + int tint + ) { + float alpha = (tint >> 24 & 255) / 255.0F; + float red = (tint >> 16 & 255) / 255.0F; + float green = (tint >> 8 & 255) / 255.0F; + float blue = (tint & 255) / 255.0F; + + BlockState downState = level.getBlockState(pos.below()); + FluidState downFluid = downState.getFluidState(); + BlockState upState = level.getBlockState(pos.above()); + BlockState northState = level.getBlockState(pos.north()); + FluidState northFluid = northState.getFluidState(); + BlockState southState = level.getBlockState(pos.south()); + FluidState southFluid = southState.getFluidState(); + BlockState westState = level.getBlockState(pos.west()); + FluidState westFluid = westState.getFluidState(); + BlockState eastState = level.getBlockState(pos.east()); + FluidState eastFluid = eastState.getFluidState(); + + boolean renderBottomSurface = LiquidBlockRenderer.shouldRenderFace(level, pos, fluidState, blockState, Direction.DOWN, downFluid); + boolean renderNorth = LiquidBlockRenderer.shouldRenderFace(level, pos, fluidState, blockState, Direction.NORTH, northFluid); + boolean renderSouth = LiquidBlockRenderer.shouldRenderFace(level, pos, fluidState, blockState, Direction.SOUTH, southFluid); + boolean renderWest = LiquidBlockRenderer.shouldRenderFace(level, pos, fluidState, blockState, Direction.WEST, westFluid); + boolean renderEast = LiquidBlockRenderer.shouldRenderFace(level, pos, fluidState, blockState, Direction.EAST, eastFluid); + boolean renderAttachedTop = LiquidBlockRenderer.shouldRenderFace(level, pos, fluidState, blockState, Direction.UP, upState.getFluidState()); + + if (!renderBottomSurface && !renderNorth && !renderSouth && !renderWest && !renderEast && !renderAttachedTop) { + return; + } + + float shadeDown = level.getShade(Direction.DOWN, true); + float shadeUp = level.getShade(Direction.UP, true); + float shadeNorth = level.getShade(Direction.NORTH, true); + float shadeWest = level.getShade(Direction.WEST, true); + Fluid fluid = fluidState.getType(); + float centerHeight = getHangingHeight(level, fluid, pos, blockState, fluidState); + float neHeight; + float nwHeight; + float seHeight; + float swHeight; + if (centerHeight >= 1.0F) { + neHeight = 1.0F; + nwHeight = 1.0F; + seHeight = 1.0F; + swHeight = 1.0F; + } else { + float northHeight = getHangingHeight(level, fluid, pos.north(), northState, northFluid); + float southHeight = getHangingHeight(level, fluid, pos.south(), southState, southFluid); + float eastHeight = getHangingHeight(level, fluid, pos.east(), eastState, eastFluid); + float westHeight = getHangingHeight(level, fluid, pos.west(), westState, westFluid); + neHeight = calculateAverageHeight(level, fluid, centerHeight, northHeight, eastHeight, pos.north().east()); + nwHeight = calculateAverageHeight(level, fluid, centerHeight, northHeight, westHeight, pos.north().west()); + seHeight = calculateAverageHeight(level, fluid, centerHeight, southHeight, eastHeight, pos.south().east()); + swHeight = calculateAverageHeight(level, fluid, centerHeight, southHeight, westHeight, pos.south().west()); + } + + float neBottom = 1.0F - neHeight; + float nwBottom = 1.0F - nwHeight; + float seBottom = 1.0F - seHeight; + float swBottom = 1.0F - swHeight; + + float x = pos.getX() & 15; + float y = pos.getY() & 15; + float z = pos.getZ() & 15; + float bottomOffset = renderBottomSurface ? SURFACE_NUDGE : 0.0F; + + if (renderBottomSurface) { + renderBottomFace(level, pos, buffer, fluidState, flowSprite, stillSprite, alpha, red, green, blue, x, y, z, nwBottom, swBottom, seBottom, neBottom); + } + + if (renderAttachedTop) { + float u0 = stillSprite.getU0(); + float u1 = stillSprite.getU1(); + float v0 = stillSprite.getV0(); + float v1 = stillSprite.getV1(); + int light = getLightColor(level, pos.above()); + float r = shadeUp * red; + float g = shadeUp * green; + float b = shadeUp * blue; + emitDoubleSidedQuad( + buffer, + x, y + 1.0F - SURFACE_NUDGE, z + 1.0F, u0, v1, + x, y + 1.0F - SURFACE_NUDGE, z, u0, v0, + x + 1.0F, y + 1.0F - SURFACE_NUDGE, z, u1, v0, + x + 1.0F, y + 1.0F - SURFACE_NUDGE, z + 1.0F, u1, v1, + r, g, b, alpha, light + ); + } + + int sideLight = getLightColor(level, pos); + for (Direction direction : Direction.Plane.HORIZONTAL) { + float leftBottom; + float rightBottom; + float x0; + float x1; + float z0; + float z1; + boolean renderSide; + switch (direction) { + case NORTH -> { + leftBottom = nwBottom; + rightBottom = neBottom; + x0 = x; + x1 = x + 1.0F; + z0 = z + SURFACE_NUDGE; + z1 = z + SURFACE_NUDGE; + renderSide = renderNorth; + } + case SOUTH -> { + leftBottom = seBottom; + rightBottom = swBottom; + x0 = x + 1.0F; + x1 = x; + z0 = z + 1.0F - SURFACE_NUDGE; + z1 = z + 1.0F - SURFACE_NUDGE; + renderSide = renderSouth; + } + case WEST -> { + leftBottom = swBottom; + rightBottom = nwBottom; + x0 = x + SURFACE_NUDGE; + x1 = x + SURFACE_NUDGE; + z0 = z + 1.0F; + z1 = z; + renderSide = renderWest; + } + default -> { + leftBottom = neBottom; + rightBottom = seBottom; + x0 = x + 1.0F - SURFACE_NUDGE; + x1 = x + 1.0F - SURFACE_NUDGE; + z0 = z; + z1 = z + 1.0F; + renderSide = renderEast; + } + } + + if (!renderSide) { + continue; + } + + TextureAtlasSprite sideSprite = flowSprite; + + float u0 = sideSprite.getU(0.0F); + float u1 = sideSprite.getU(0.5F); + float lowerVLeft = sideSprite.getV(0.5F); + float lowerVRight = sideSprite.getV(0.5F); + float upperVLeft = sideSprite.getV(leftBottom * 0.5F); + float upperVRight = sideSprite.getV(rightBottom * 0.5F); + float sideShade = direction.getAxis() == Direction.Axis.Z ? shadeNorth : shadeWest; + float r = shadeUp * sideShade * red; + float g = shadeUp * sideShade * green; + float b = shadeUp * sideShade * blue; + + vertex(buffer, x0, y + leftBottom, z0, r, g, b, alpha, u0, upperVLeft, sideLight); + vertex(buffer, x1, y + rightBottom, z1, r, g, b, alpha, u1, upperVRight, sideLight); + vertex(buffer, x1, y + 1.0F - bottomOffset, z1, r, g, b, alpha, u1, lowerVRight, sideLight); + vertex(buffer, x0, y + 1.0F - bottomOffset, z0, r, g, b, alpha, u0, lowerVLeft, sideLight); + + if (sideSprite != overlaySprite) { + vertex(buffer, x0, y + 1.0F - bottomOffset, z0, r, g, b, alpha, u0, lowerVLeft, sideLight); + vertex(buffer, x1, y + 1.0F - bottomOffset, z1, r, g, b, alpha, u1, lowerVRight, sideLight); + vertex(buffer, x1, y + rightBottom, z1, r, g, b, alpha, u1, upperVRight, sideLight); + vertex(buffer, x0, y + leftBottom, z0, r, g, b, alpha, u0, upperVLeft, sideLight); + } + } + } + + private static void renderBottomFace( + BlockAndTintGetter level, + BlockPos pos, + VertexConsumer buffer, + FluidState fluidState, + TextureAtlasSprite flowSprite, + TextureAtlasSprite stillSprite, + float alpha, + float red, + float green, + float blue, + float x, + float y, + float z, + float nwBottom, + float swBottom, + float seBottom, + float neBottom + ) { + Vec3 flow = fluidState.getFlow(level, pos); + float u0; + float u1; + float u2; + float u3; + float v0; + float v1; + float v2; + float v3; + if (flow.x == 0.0D && flow.z == 0.0D) { + u0 = stillSprite.getU(0.0F); + v0 = stillSprite.getV(0.0F); + u1 = u0; + v1 = stillSprite.getV(1.0F); + u2 = stillSprite.getU(1.0F); + v2 = v1; + u3 = u2; + v3 = v0; + } else { + float angle = (float) Mth.atan2(flow.z, flow.x) + (float) (Math.PI / 2); + float sin = Mth.sin(angle) * 0.25F; + float cos = Mth.cos(angle) * 0.25F; + u0 = flowSprite.getU(0.5F + (-cos - sin)); + v0 = flowSprite.getV(0.5F + (-cos + sin)); + u1 = flowSprite.getU(0.5F + (-cos + sin)); + v1 = flowSprite.getV(0.5F + (cos + sin)); + u2 = flowSprite.getU(0.5F + (cos + sin)); + v2 = flowSprite.getV(0.5F + (cos - sin)); + u3 = flowSprite.getU(0.5F + (cos - sin)); + v3 = flowSprite.getV(0.5F + (-cos - sin)); + } + + int light = getLightColor(level, pos.below()); + float r = level.getShade(Direction.DOWN, true) * red; + float g = level.getShade(Direction.DOWN, true) * green; + float b = level.getShade(Direction.DOWN, true) * blue; + emitDoubleSidedQuad( + buffer, + x, y + nwBottom + SURFACE_NUDGE, z, u0, v0, + x, y + swBottom + SURFACE_NUDGE, z + 1.0F, u1, v1, + x + 1.0F, y + seBottom + SURFACE_NUDGE, z + 1.0F, u2, v2, + x + 1.0F, y + neBottom + SURFACE_NUDGE, z, u3, v3, + r, g, b, alpha, light + ); + } + + private static void emitDoubleSidedQuad( + VertexConsumer buffer, + float x0, float y0, float z0, float u0, float v0, + float x1, float y1, float z1, float u1, float v1, + float x2, float y2, float z2, float u2, float v2, + float x3, float y3, float z3, float u3, float v3, + float red, float green, float blue, float alpha, int light + ) { + vertex(buffer, x0, y0, z0, red, green, blue, alpha, u0, v0, light); + vertex(buffer, x1, y1, z1, red, green, blue, alpha, u1, v1, light); + vertex(buffer, x2, y2, z2, red, green, blue, alpha, u2, v2, light); + vertex(buffer, x3, y3, z3, red, green, blue, alpha, u3, v3, light); + + vertex(buffer, x3, y3, z3, red, green, blue, alpha, u3, v3, light); + vertex(buffer, x2, y2, z2, red, green, blue, alpha, u2, v2, light); + vertex(buffer, x1, y1, z1, red, green, blue, alpha, u1, v1, light); + vertex(buffer, x0, y0, z0, red, green, blue, alpha, u0, v0, light); + } + + private static float calculateAverageHeight(BlockAndTintGetter level, Fluid fluid, float currentHeight, float height1, float height2, BlockPos pos) { + if (height2 >= 1.0F || height1 >= 1.0F) { + return 1.0F; + } + + float[] weighted = new float[2]; + if (height2 > 0.0F || height1 > 0.0F) { + float diagonalHeight = getHangingHeight(level, fluid, pos); + if (diagonalHeight >= 1.0F) { + return 1.0F; + } + addWeightedHeight(weighted, diagonalHeight); + } + + addWeightedHeight(weighted, currentHeight); + addWeightedHeight(weighted, height2); + addWeightedHeight(weighted, height1); + return weighted[0] / weighted[1]; + } + + private static void addWeightedHeight(float[] output, float height) { + if (height >= 0.8F) { + output[0] += height * 10.0F; + output[1] += 10.0F; + } else if (height >= 0.0F) { + output[0] += height; + output[1] += 1.0F; + } + } + + private static float getHangingHeight(BlockAndTintGetter level, Fluid fluid, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return getHangingHeight(level, fluid, pos, state, state.getFluidState()); + } + + private static float getHangingHeight(BlockAndTintGetter level, Fluid fluid, BlockPos pos, BlockState blockState, FluidState fluidState) { + if (!fluid.isSame(fluidState.getType())) { + return !blockState.isSolid() ? 0.0F : -1.0F; + } + + BlockState belowState = level.getBlockState(pos.below()); + return fluid.isSame(belowState.getFluidState().getType()) + ? 1.0F + : fluidState.getOwnHeight(); + } + + private static void vertex(VertexConsumer buffer, float x, float y, float z, float red, float green, float blue, float alpha, float u, float v, int light) { + buffer.vertex(x, y, z) + .color(red, green, blue, alpha) + .uv(u, v) + .uv2(light) + .normal(0.0F, -1.0F, 0.0F) + .endVertex(); + } + + private static int getLightColor(BlockAndTintGetter level, BlockPos pos) { + int light = LevelRenderer.getLightColor(level, pos); + int aboveLight = LevelRenderer.getLightColor(level, pos.above()); + int block = Math.max(light & 255, aboveLight & 255); + int sky = Math.max((light >> 16) & 255, (aboveLight >> 16) & 255); + return block | (sky << 16); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AppleCowRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AppleCowRenderer.java new file mode 100644 index 00000000..f75febfd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/AppleCowRenderer.java @@ -0,0 +1,80 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.AppleCowModel; +import com.craisinlord.antarchy.content.entity.AppleCowEntity; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +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.entity.ItemRenderer; +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 AppleCowRenderer extends GeoEntityRenderer { + private static final float ADULT_SHADOW_RADIUS = 0.7F; + private static final float BABY_SCALE = 0.85F; + + public AppleCowRenderer(EntityRendererProvider.Context context) { + super(context, new AppleCowModel()); + this.shadowRadius = ADULT_SHADOW_RADIUS; + this.addRenderLayer(new EnchantedLayer(this)); + } + + @Override + public RenderType getRenderType(AppleCowEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityCutoutNoCull(texture); + } + + @Override + public void preRender(PoseStack poseStack, AppleCowEntity 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.isBaby()) { + poseStack.scale(BABY_SCALE, BABY_SCALE, BABY_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS * BABY_SCALE; + } else { + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + } + + private static final class EnchantedLayer extends GeoRenderLayer { + private EnchantedLayer(AppleCowRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, AppleCowEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + if (!(animatable instanceof EnchantedGoldenAppleCow) || animatable.isBaby()) { + return; + } + + ResourceLocation texture = AppleCowModel.textureFor(animatable); + RenderType foilType = RenderType.entityCutoutNoCull(texture); + VertexConsumer foilBuffer = ItemRenderer.getFoilBufferDirect(bufferSource, foilType, false, true); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + foilType, + foilBuffer, + partialTick, + packedLight, + 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/BasiliskRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BasiliskRenderer.java new file mode 100644 index 00000000..e38d2154 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BasiliskRenderer.java @@ -0,0 +1,67 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.BasiliskModel; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +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 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 BasiliskRenderer extends GeoEntityRenderer { + + public BasiliskRenderer(EntityRendererProvider.Context context) { + super(context, new BasiliskModel()); + this.shadowRadius = 1.0F; + this.addRenderLayer(new BasiliskEmissiveLayer(this)); + } + + @Override + public void preRender(PoseStack poseStack, BasiliskEntity 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.isDeadOrDying()) { + poseStack.translate(0.0D, -0.35D, 0.0D); + } + } + + @Override + protected float getDeathMaxRotation(BasiliskEntity animatable) { + return 0.0F; + } + + private static final class BasiliskEmissiveLayer extends GeoRenderLayer { + private BasiliskEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, BasiliskEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(BasiliskModel.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/BedBugRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BedBugRenderer.java new file mode 100644 index 00000000..3e1c8c77 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BedBugRenderer.java @@ -0,0 +1,68 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.BedBugModel; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +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 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 BedBugRenderer extends GeoEntityRenderer { + private static final float ADULT_SCALE = 0.9F; + private static final float BABY_SCALE = 0.38F; + private static final float ADULT_SHADOW_RADIUS = 0.65F; + + public BedBugRenderer(EntityRendererProvider.Context context) { + super(context, new BedBugModel()); + this.shadowRadius = ADULT_SHADOW_RADIUS; + this.withScale(ADULT_SCALE); + this.addRenderLayer(new BedBugEmissiveLayer(this)); + } + + @Override + public void preRender(PoseStack poseStack, BedBugEntity 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.isBaby()) { + poseStack.scale(BABY_SCALE, BABY_SCALE, BABY_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS * BABY_SCALE; + } else { + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + } + + private static final class BedBugEmissiveLayer extends GeoRenderLayer { + private BedBugEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, BedBugEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(BedBugModel.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/BomberRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BomberRenderer.java new file mode 100644 index 00000000..85bcb5ee --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BomberRenderer.java @@ -0,0 +1,71 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.model.BomberModel; +import com.craisinlord.antarchy.content.entity.BomberEntity; +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 BomberRenderer extends GeoEntityRenderer { + private static final ResourceLocation TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/bomber.png"); + + public BomberRenderer(EntityRendererProvider.Context context) { + super(context, new BomberModel()); + this.shadowRadius = 0.12F; + this.addRenderLayer(new BomberFlashLayer(this)); + } + + @Override + public RenderType getRenderType(BomberEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityCutoutNoCull(texture); + } + + @Override + public void preRender(PoseStack poseStack, BomberEntity 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 = 0.12F; + } + + public static final class BomberFlashLayer extends GeoRenderLayer { + private BomberFlashLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, BomberEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + if (!animatable.isFlashing()) { + return; + } + + RenderType flashType = RenderType.eyes(TEXTURE); + VertexConsumer flashBuffer = bufferSource.getBuffer(flashType); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + flashType, + flashBuffer, + 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/BrutalflyElytraLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BrutalflyElytraLayer.java new file mode 100644 index 00000000..27a44bf7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BrutalflyElytraLayer.java @@ -0,0 +1,81 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.BrutalflyElytraClientState; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.mixins.client.ElytraModelAccessor; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.ElytraModel; +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.model.geom.ModelLayers; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.geom.ModelPart; + +public final class BrutalflyElytraLayer extends RenderLayer> { + private static final ResourceLocation TEXTURE = new ResourceLocation("antarchy", "textures/models/armor/brutalfly_wings.png"); + private final ElytraModel model; + + public BrutalflyElytraLayer(RenderLayerParent> renderer) { + super(renderer); + this.model = new ElytraModel<>(Minecraft.getInstance().getEntityModels().bakeLayer(ModelLayers.ELYTRA)); + } + + @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 (!BrutalflyElytraItem.isWearingBrutalflyElytra(player) || player.isInvisible()) { + return; + } + + ItemStack chestStack = player.getItemBySlot(EquipmentSlot.CHEST); + BrutalflyElytraClientState.AnimationState animationState = BrutalflyElytraClientState.get(player.getId()); + float progress = animationState != null ? animationState.progress(partialTick) : 0.0F; + + poseStack.pushPose(); + this.getParentModel().copyPropertiesTo(this.model); + if (player.isCrouching()) { + poseStack.translate(0.0F, 0.0F, 0.125F); + } + this.model.setupAnim(player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + + ElytraModelAccessor accessor = (ElytraModelAccessor) (Object) this.model; + ModelPart leftWing = accessor.antarchy$getLeftWing(); + ModelPart rightWing = accessor.antarchy$getRightWing(); + float strength = animationState != null ? animationState.strength() : 0.0F; + float flap = net.minecraft.util.Mth.sin(progress * net.minecraft.util.Mth.PI); + float liftOffset = flap * (2.8F + strength * 0.8F); + float pitchOffset = flap * (0.35F + strength * 0.12F); + float tipCurl = flap * (0.30F + strength * 0.10F); + leftWing.y -= liftOffset; + rightWing.y -= liftOffset; + leftWing.xRot -= pitchOffset; + rightWing.xRot -= pitchOffset; + leftWing.zRot -= tipCurl; + rightWing.zRot += tipCurl; + + VertexConsumer consumer = ItemRenderer.getFoilBufferDirect(buffer, RenderType.armorCutoutNoCull(TEXTURE), false, chestStack.hasFoil()); + this.model.renderToBuffer(poseStack, consumer, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + poseStack.popPose(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BrutalflyOrbRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BrutalflyOrbRenderer.java new file mode 100644 index 00000000..3ed0b04b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BrutalflyOrbRenderer.java @@ -0,0 +1,90 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +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.EntityRenderer; +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 org.joml.Matrix4f; + +public class BrutalflyOrbRenderer extends EntityRenderer { + private static final ResourceLocation ORB_TEXTURE = + new ResourceLocation("textures/entity/enderdragon/dragon_fireball.png"); + + public BrutalflyOrbRenderer(EntityRendererProvider.Context context) { + super(context); + } + + @Override + protected int getBlockLightLevel(BrutalflyOrbEntity entity, BlockPos pos) { + return 15; + } + + @Override + public void render(BrutalflyOrbEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { + poseStack.pushPose(); + poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); + + float scale = entity.isLingeringOrb() ? entity.getOrbRadius(partialTick) * 0.38F : 0.8F; + poseStack.scale(scale, scale, scale); + + float red; + float green; + float blue; + if (entity.getOrbVariant() == BrutalflyOrbEntity.OrbVariant.POISON) { + red = 0.32F; + green = 0.92F; + blue = 0.26F; + } else { + red = 1.0F; + green = 0.62F; + blue = 0.08F; + } + + float alpha = entity.isLingeringOrb() ? 0.72F : 0.95F; + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucent(ORB_TEXTURE)); + PoseStack.Pose pose = poseStack.last(); + Matrix4f matrix4f = pose.pose(); + + addVertex(vertexConsumer, pose, matrix4f, -0.5F, -0.5F, 0.0F, 1.0F, red, green, blue, alpha, packedLight); + addVertex(vertexConsumer, pose, matrix4f, 0.5F, -0.5F, 1.0F, 1.0F, red, green, blue, alpha, packedLight); + addVertex(vertexConsumer, pose, matrix4f, 0.5F, 0.5F, 1.0F, 0.0F, red, green, blue, alpha, packedLight); + addVertex(vertexConsumer, pose, matrix4f, -0.5F, 0.5F, 0.0F, 0.0F, red, green, blue, alpha, packedLight); + + poseStack.popPose(); + super.render(entity, entityYaw, partialTick, poseStack, buffer, packedLight); + } + + private static void addVertex( + VertexConsumer vertexConsumer, + PoseStack.Pose pose, + Matrix4f matrix4f, + float x, + float y, + float u, + float v, + float red, + float green, + float blue, + float alpha, + int packedLight + ) { + vertexConsumer.vertex(matrix4f, x, y, 0.0F) + .color(red, green, blue, alpha) + .uv(u, v) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(packedLight) + .normal(pose.normal(), 0.0F, 0.0F, 1.0F) + .endVertex(); + } + + @Override + public ResourceLocation getTextureLocation(BrutalflyOrbEntity entity) { + return ORB_TEXTURE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BrutalflyRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BrutalflyRenderer.java new file mode 100644 index 00000000..e42dd414 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/BrutalflyRenderer.java @@ -0,0 +1,88 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.BrutalflyModel; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.MultiBufferSource; +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 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 BrutalflyRenderer extends GeoEntityRenderer { + + private static final double COCOONED_VISUAL_Y_OFFSET = 1.0D; + + public BrutalflyRenderer(EntityRendererProvider.Context context) { + super(context, new BrutalflyModel()); + this.shadowRadius = 1.35F; + this.addRenderLayer(new BrutalflyEmissiveLayer(this)); + } + + @Override + public RenderType getRenderType(BrutalflyEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + if (animatable.isCocooned()) { + return RenderType.entityCutoutNoCull(texture); + } + + return super.getRenderType(animatable, texture, bufferSource, partialTick); + } + + @Override + public void preRender(PoseStack poseStack, BrutalflyEntity 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.isCocooned()) { + this.shadowRadius = 0.25F; + poseStack.translate(0.0D, COCOONED_VISUAL_Y_OFFSET, 0.0D); + } else { + this.shadowRadius = 1.35F; + } + } + + @Override + protected int getBlockLightLevel(BrutalflyEntity entity, BlockPos pos) { + return entity.isCocooned() ? 8 : super.getBlockLightLevel(entity, pos); + } + + @Override + protected float getDeathMaxRotation(BrutalflyEntity animatable) { + return 0.0F; + } + + private static final class BrutalflyEmissiveLayer extends GeoRenderLayer { + private BrutalflyEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, BrutalflyEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(BrutalflyModel.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/ButterflyRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ButterflyRenderer.java new file mode 100644 index 00000000..2a9714a8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ButterflyRenderer.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.ButterflyModel; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +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 ButterflyRenderer extends GeoEntityRenderer { + private static final float VISUAL_SCALE = 0.8F; + private static final float SHADOW_RADIUS = 0.18F; + + public ButterflyRenderer(EntityRendererProvider.Context context) { + super(context, new ButterflyModel()); + this.shadowRadius = SHADOW_RADIUS; + this.withScale(VISUAL_SCALE); + } + + @Override + public void preRender(PoseStack poseStack, ButterflyEntity 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 = SHADOW_RADIUS; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CaterpillarRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CaterpillarRenderer.java new file mode 100644 index 00000000..eb6f3805 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CaterpillarRenderer.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.CaterpillarModel; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +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 CaterpillarRenderer extends GeoEntityRenderer { + private static final float VISUAL_SCALE = 0.8F; + private static final float SHADOW_RADIUS = 0.25F; + + public CaterpillarRenderer(EntityRendererProvider.Context context) { + super(context, new CaterpillarModel()); + this.shadowRadius = SHADOW_RADIUS; + this.withScale(VISUAL_SCALE); + } + + @Override + public void preRender(PoseStack poseStack, CaterpillarEntity 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 = SHADOW_RADIUS; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CavarynSkyRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CavarynSkyRenderer.java new file mode 100644 index 00000000..02d1833a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CavarynSkyRenderer.java @@ -0,0 +1,157 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.HordeClientState; +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 java.util.Random; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; + +public final class CavarynSkyRenderer { + public static final ResourceKey CAVARYN = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "cavaryn") + ); + + @org.jetbrains.annotations.Nullable + private static VertexBuffer orangeStarBuffer; + + private CavarynSkyRenderer() { + } + + public static boolean shouldRender(ClientLevel level) { + return level.dimension().equals(CAVARYN); + } + + public static void render( + Minecraft minecraft, + ClientLevel level, + PoseStack poseStack, + org.joml.Matrix4f projectionMatrix, + float partialTick, + Camera camera, + boolean isFoggy, + Runnable setupFog, + VertexBuffer skyBuffer, + VertexBuffer darkBuffer + ) { + setupFog.run(); + if (isFoggy || minecraft.gameRenderer.getMainCamera() != camera) { + return; + } + + float intensity = HordeClientState.intensity(); + float red = 0.015F + 0.28F * intensity; + float green = 0.085F + 0.18F * intensity; + float blue = 0.035F + 0.02F * intensity; + + RenderSystem.depthMask(false); + RenderSystem.setShaderColor(red, green, blue, 1.0F); + skyBuffer.bind(); + skyBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader()); + VertexBuffer.unbind(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + + float starBrightness = 0.8F + 0.45F * intensity; + if (orangeStarBuffer == null) { + orangeStarBuffer = buildOrangeStarBuffer(); + } + + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.setShaderColor(starBrightness, starBrightness, starBrightness, starBrightness); + orangeStarBuffer.bind(); + orangeStarBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionColorShader()); + VertexBuffer.unbind(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + + if (camera.getEntity() != null) { + double horizon = camera.getEntity().getEyePosition(partialTick).y - level.getLevelData().getHorizonHeight(level); + if (horizon < 0.0D) { + poseStack.pushPose(); + poseStack.translate(0.0F, 12.0F, 0.0F); + darkBuffer.bind(); + darkBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader()); + VertexBuffer.unbind(); + poseStack.popPose(); + } + } + + RenderSystem.depthMask(true); + } + + private static VertexBuffer buildOrangeStarBuffer() { + Random random = new Random(548721L); + 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.12F + random.nextFloat() * 0.12F; + 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; + double sx = x * 100.0D; + double sy = y * 100.0D; + double sz = z * 100.0D; + double yaw = Math.atan2(x, z); + double sinYaw = Math.sin(yaw); + double cosYaw = Math.cos(yaw); + 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[] color = pickStarColor(random); + + for (int j = 0; j < 4; j++) { + double u = (j & 2) - 1; + double v = (j + 1 & 2) - 1; + double px = u * cosRot - v * sinRot; + double py = v * cosRot + u * sinRot; + double qx = px * sinPitch; + double qy = -px * cosPitch; + double rx = qy * sinYaw - py * cosYaw; + double ry = py * sinYaw + qy * cosYaw; + builder.vertex(sx + rx * size, sy + qx * size, sz + ry * size) + .color(color[0], color[1], color[2], 1.0F) + .endVertex(); + } + } + } + + VertexBuffer buffer = new VertexBuffer(VertexBuffer.Usage.STATIC); + buffer.bind(); + buffer.upload(builder.end()); + VertexBuffer.unbind(); + return buffer; + } + + private static float[] pickStarColor(Random random) { + float roll = random.nextFloat(); + if (roll < 0.70F) return new float[]{1.00F, 0.55F, 0.14F}; + if (roll < 0.90F) return new float[]{1.00F, 0.70F, 0.24F}; + return new float[]{1.00F, 0.84F, 0.40F}; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CheepRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CheepRenderer.java new file mode 100644 index 00000000..d321645a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CheepRenderer.java @@ -0,0 +1,12 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.CheepModel; +import com.craisinlord.antarchy.content.entity.CheepEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class CheepRenderer extends GeoEntityRenderer { + public CheepRenderer(EntityRendererProvider.Context context) { + super(context, new CheepModel()); + } +} 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 new file mode 100644 index 00000000..ac08580d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CloudSharkRenderer.java @@ -0,0 +1,59 @@ +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/CreepingHorrorRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java new file mode 100644 index 00000000..87800344 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java @@ -0,0 +1,29 @@ +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/CritterCageRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CritterCageRenderer.java new file mode 100644 index 00000000..176909e5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/CritterCageRenderer.java @@ -0,0 +1,60 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.block.entity.CritterCageBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; + +public class CritterCageRenderer implements BlockEntityRenderer { + public CritterCageRenderer(BlockEntityRendererProvider.Context context) { + } + + @Override + public void render(CritterCageBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight, int packedOverlay) { + Level level = blockEntity.getLevel(); + if (level == null) { + return; + } + + Entity displayEntity = blockEntity.getOrCreateClientDisplayEntity(level); + if (displayEntity == null) { + return; + } + + displayEntity.tickCount = (int) (level.getGameTime() & Integer.MAX_VALUE); + float scale = 0.36F / Math.max(Math.max(displayEntity.getBbWidth(), displayEntity.getBbHeight()), 0.5F); + float rotation = ((level.getGameTime() + partialTick) * 4.0F) % 360.0F; + + poseStack.pushPose(); + poseStack.translate(0.5D, 0.06D, 0.5D); + poseStack.mulPose(Axis.YP.rotationDegrees(rotation)); + poseStack.scale(scale, scale, scale); + + if (displayEntity instanceof LivingEntity living) { + living.yBodyRot = rotation; + living.yBodyRotO = rotation; + living.yHeadRot = rotation; + living.yHeadRotO = rotation; + } + + Minecraft.getInstance().getEntityRenderDispatcher().render( + displayEntity, + 0.0D, + 0.0D, + 0.0D, + rotation, + partialTick, + poseStack, + buffer, + packedLight + ); + poseStack.popPose(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DiamondMinecartRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DiamondMinecartRenderer.java new file mode 100644 index 00000000..fc93139a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DiamondMinecartRenderer.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import net.minecraft.client.model.geom.ModelLayers; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.MinecartRenderer; +import net.minecraft.resources.ResourceLocation; + +public class DiamondMinecartRenderer extends MinecartRenderer { + private static final ResourceLocation TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/diamond_minecart.png"); + + public DiamondMinecartRenderer(EntityRendererProvider.Context context) { + super(context, ModelLayers.MINECART); + } + + @Override + public ResourceLocation getTextureLocation(DiamondMinecartEntity entity) { + return TEXTURE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DimensionalTearRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DimensionalTearRenderer.java new file mode 100644 index 00000000..46057baf --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DimensionalTearRenderer.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.DimensionalTearModel; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +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 DimensionalTearRenderer extends GeoEntityRenderer { + public DimensionalTearRenderer(EntityRendererProvider.Context context) { + super(context, new DimensionalTearModel()); + this.shadowRadius = 0.0F; + } + + @Override + public void render(DimensionalTearEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + super.render(entity, entityYaw, partialTick, poseStack, bufferSource, 0xF000F0); + } + + @Override + public @Nullable RenderType getRenderType(DimensionalTearEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityTranslucent(DimensionalTearModel.TEXTURE); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DorrieRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DorrieRenderer.java new file mode 100644 index 00000000..bc1c7d4c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DorrieRenderer.java @@ -0,0 +1,12 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.DorrieModel; +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class DorrieRenderer extends GeoEntityRenderer { + public DorrieRenderer(EntityRendererProvider.Context context) { + super(context, new DorrieModel()); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DrTrayaurusRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DrTrayaurusRenderer.java new file mode 100644 index 00000000..2dc83cb1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DrTrayaurusRenderer.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import net.minecraft.client.model.VillagerModel; +import net.minecraft.client.model.geom.ModelLayers; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.resources.ResourceLocation; + +public class DrTrayaurusRenderer extends MobRenderer> { + private final ResourceLocation texture; + + public DrTrayaurusRenderer(EntityRendererProvider.Context context, ResourceLocation texture) { + super(context, new VillagerModel<>(context.bakeLayer(ModelLayers.VILLAGER)), 0.5F); + this.texture = texture; + } + + @Override + public ResourceLocation getTextureLocation(DrTrayaurusEntity entity) { + return this.texture; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/EasterBunnyRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/EasterBunnyRenderer.java new file mode 100644 index 00000000..20c4d1d9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/EasterBunnyRenderer.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.EasterBunnyModel; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class EasterBunnyRenderer extends GeoEntityRenderer { + private static final float SHADOW_RADIUS = 0.3F; + + public EasterBunnyRenderer(EntityRendererProvider.Context context) { + super(context, new EasterBunnyModel()); + this.shadowRadius = SHADOW_RADIUS; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElkaRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElkaRenderer.java new file mode 100644 index 00000000..80a42c0d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElkaRenderer.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.ElkaModel; +import com.craisinlord.antarchy.content.entity.ElkaEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class ElkaRenderer extends GeoEntityRenderer { + private static final float SHADOW_RADIUS = 0.9F; + + public ElkaRenderer(EntityRendererProvider.Context context) { + super(context, new ElkaModel()); + this.shadowRadius = SHADOW_RADIUS; + } +} 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 new file mode 100644 index 00000000..483133a9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElythiaSkyRenderer.java @@ -0,0 +1,366 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.platform.GlStateManager; +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 java.util.Random; +import com.mojang.math.Axis; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import org.joml.Matrix4f; +import org.joml.Matrix4fStack; + +public final class ElythiaSkyRenderer { + public static final ResourceKey ELYTHIA = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "elythia") + ); + private static final ResourceLocation SUN_TEXTURE = new ResourceLocation("textures/environment/sun.png"); + private static final ResourceLocation MOON_TEXTURE = new ResourceLocation("textures/environment/moon_phases.png"); + private static final float SKY_RADIUS = 100.0F; + private static final float BODY_SIZE = 32.0F; + + @org.jetbrains.annotations.Nullable + private static VertexBuffer coloredStarBuffer = null; + + private ElythiaSkyRenderer() { + } + + public static boolean shouldRender(ClientLevel level) { + return level.dimension().equals(ELYTHIA); + } + + public static void render( + Minecraft minecraft, + ClientLevel level, + PoseStack poseStack, + Matrix4f projectionMatrix, + float partialTick, + Camera camera, + boolean isFoggy, + Runnable setupFog, + VertexBuffer skyBuffer, + VertexBuffer darkBuffer, + VertexBuffer starBuffer + ) { + setupFog.run(); + if (isFoggy || minecraft.options.hideLightningFlash().get() || minecraft.gameRenderer.getMainCamera() != camera) { + return; + } + + Vec3 skyColor = level.getSkyColor(camera.getPosition(), partialTick); + float red = (float) skyColor.x; + float green = (float) skyColor.y; + float blue = (float) skyColor.z; + float rainLevel = level.getRainLevel(partialTick); + float starBrightness = level.getStarBrightness(partialTick) * (1.0F - rainLevel); + float timeOfDay = level.getTimeOfDay(partialTick); + + // Blend in a dark purple when it's night (starBrightness > 0) + float nightPurpleR = 0.055F; + float nightPurpleG = 0.010F; + float nightPurpleB = 0.120F; + red = red + nightPurpleR * starBrightness; + green = green + nightPurpleG * starBrightness; + blue = blue + nightPurpleB * starBrightness; + + RenderSystem.depthMask(false); + RenderSystem.setShaderColor(red, green, blue, 1.0F); + skyBuffer.bind(); + skyBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader()); + VertexBuffer.unbind(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + + renderSunrise(poseStack, projectionMatrix, level, partialTick, rainLevel); + renderCelestialBodies(poseStack.last().pose(), projectionMatrix, timeOfDay, rainLevel); + + if (starBrightness > 0.1F) { + if (coloredStarBuffer == null) { + coloredStarBuffer = buildColoredStarBuffer(); + } + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.setShaderColor(starBrightness, starBrightness, starBrightness, starBrightness); + coloredStarBuffer.bind(); + coloredStarBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionColorShader()); + VertexBuffer.unbind(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + } + + if (camera.getEntity() != null) { + double horizon = camera.getEntity().getEyePosition(partialTick).y - level.getLevelData().getHorizonHeight(level); + if (horizon < 0.0D) { + poseStack.pushPose(); + poseStack.translate(0.0F, 12.0F, 0.0F); + darkBuffer.bind(); + darkBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader()); + VertexBuffer.unbind(); + poseStack.popPose(); + } + } + + RenderSystem.depthMask(true); + } + + private static VertexBuffer buildColoredStarBuffer() { + Random random = new Random(10842L); + BufferBuilder builder = Tesselator.getInstance().getBuilder(); + builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + + for (int i = 0; i < 1500; 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.15F + random.nextFloat() * 0.1F; + 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; + double sx = x * 100.0D, sy = y * 100.0D, sz = z * 100.0D; + double yaw = Math.atan2(x, z); + double sinYaw = Math.sin(yaw), cosYaw = Math.cos(yaw); + double pitch = Math.atan2(Math.sqrt(x * x + z * z), y); + double sinPitch = Math.sin(pitch), cosPitch = Math.cos(pitch); + double rot = random.nextDouble() * Math.PI * 2.0D; + double sinRot = Math.sin(rot), cosRot = Math.cos(rot); + + float[] color = pickStarColor(random); + + for (int j = 0; j < 4; j++) { + double u = (j & 2) - 1; + double v = (j + 1 & 2) - 1; + double px = u * cosRot - v * sinRot; + double py = v * cosRot + u * sinRot; + double qx = px * sinPitch; + double qy = -px * cosPitch; + double rx = qy * sinYaw - py * cosYaw; + double ry = py * sinYaw + qy * cosYaw; + builder.vertex(sx + rx * size, sy + qx * size, sz + ry * size) + .color(color[0], color[1], color[2], 1.0F) + .endVertex(); + } + } + } + + VertexBuffer buffer = new VertexBuffer(VertexBuffer.Usage.STATIC); + buffer.bind(); + buffer.upload(builder.end()); + VertexBuffer.unbind(); + return buffer; + } + + 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 + } + + private static void renderSunrise(PoseStack poseStack, Matrix4f projectionMatrix, ClientLevel level, float partialTick, float rainLevel) { + float[] sunriseColor = level.effects().getSunriseColor(level.getTimeOfDay(partialTick), partialTick); + if (sunriseColor == null || rainLevel >= 1.0F) { + return; + } + + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.disableCull(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); + RenderSystem.backupProjectionMatrix(); + RenderSystem.setProjectionMatrix(projectionMatrix, VertexSorting.DISTANCE_TO_ORIGIN); + + poseStack.pushPose(); + poseStack.mulPose(Axis.XP.rotationDegrees(90.0F)); + poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.sin(level.getSunAngle(partialTick)) < 0.0F ? 180.0F : 0.0F)); + poseStack.mulPose(Axis.ZP.rotationDegrees(90.0F)); + + Matrix4f matrix = poseStack.last().pose(); + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); + buffer.vertex(matrix, 0.0F, 100.0F, 0.0F).color(sunriseColor[0], sunriseColor[1], sunriseColor[2], sunriseColor[3] * (1.0F - rainLevel)).endVertex(); + for (int i = 0; i <= 32; i++) { + float angle = i * Mth.TWO_PI / 32.0F; + float x = Mth.sin(angle) * 120.0F; + float y = Mth.cos(angle) * 120.0F; + buffer.vertex(matrix, x, y, -5.0F).color(sunriseColor[0], sunriseColor[1], sunriseColor[2], 0.0F).endVertex(); + } + BufferUploader.drawWithShader(buffer.end()); + + poseStack.popPose(); + RenderSystem.restoreProjectionMatrix(); + RenderSystem.enableCull(); + RenderSystem.disableBlend(); + } + + private static void renderCelestialBodies(Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float timeOfDay, float rainLevel) { + float t = timeOfDay * 360.0F; + + // Purple sun + float sun1Orbit = t; + 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); + + // Orange sub + float sun2Orbit = t * 0.73F + 54.0F; + 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); + + // Dark green moon + float moon2Orbit = t * 1.27F + 228.0F; + 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); + + // Light green moon + float moon3Orbit = t * 0.38F + 122.0F; + 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); + } + + private static void renderBodyGlow( + Matrix4f modelViewMatrix, + Matrix4f projectionMatrix, + float orbitDegrees, + float yawDegrees, + int rgb, + float rainLevel, + float glowRadius + ) { + float orbitRad = (float) Math.toRadians(orbitDegrees); + float yawRad = (float) Math.toRadians(yawDegrees); + + float bodyHeight = Mth.cos(yawRad) * Mth.cos(orbitRad); + + float horizonGlow = 1.0F - Mth.clamp(Math.abs(bodyHeight) * 2.0F, 0.0F, 1.0F); + float visibility = Mth.clamp((bodyHeight + 0.4F) * 2.5F, 0.0F, 1.0F); + float alpha = horizonGlow * visibility * 0.65F * (1.0F - rainLevel); + + if (alpha <= 0.01F) { + return; + } + + float r = ((rgb >> 16) & 0xFF) / 255.0F; + float g = ((rgb >> 8) & 0xFF) / 255.0F; + float b = (rgb & 0xFF) / 255.0F; + + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.disableCull(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); + RenderSystem.backupProjectionMatrix(); + RenderSystem.setProjectionMatrix(projectionMatrix, VertexSorting.DISTANCE_TO_ORIGIN); + + PoseStack modelViewStack = RenderSystem.getModelViewStack(); + modelViewStack.pushPose(); + modelViewStack.setIdentity(); + modelViewStack.mulPoseMatrix(modelViewMatrix); + modelViewStack.mulPose(Axis.XP.rotation(orbitRad)); + modelViewStack.mulPose(Axis.ZP.rotation(yawRad)); + RenderSystem.applyModelViewMatrix(); + + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); + buffer.vertex(0.0F, SKY_RADIUS, 0.0F).color(r, g, b, alpha).endVertex(); + for (int i = 0; i <= 16; i++) { + float angle = i * Mth.TWO_PI / 16.0F; + buffer.vertex(Mth.sin(angle) * glowRadius, SKY_RADIUS, Mth.cos(angle) * glowRadius).color(r, g, b, 0.0F).endVertex(); + } + BufferUploader.drawWithShader(buffer.end()); + + modelViewStack.popPose(); + RenderSystem.applyModelViewMatrix(); + RenderSystem.restoreProjectionMatrix(); + RenderSystem.enableCull(); + RenderSystem.disableBlend(); + } + + private static void renderTexturedBody( + Matrix4f modelViewMatrix, + Matrix4f projectionMatrix, + float orbitDegrees, + float yawDegrees, + float radius, + int rgb, + float alpha, + ResourceLocation texture, + boolean usePhaseSheet, + int phaseIndex, + float selfRotationDegrees + ) { + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate( + GlStateManager.SourceFactor.ONE, + GlStateManager.DestFactor.ONE, + GlStateManager.SourceFactor.ONE, + GlStateManager.DestFactor.ZERO + ); + RenderSystem.disableCull(); + RenderSystem.setShaderColor( + ((rgb >> 16) & 0xFF) / 255.0F, + ((rgb >> 8) & 0xFF) / 255.0F, + (rgb & 0xFF) / 255.0F, + alpha + ); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, texture); + RenderSystem.backupProjectionMatrix(); + RenderSystem.setProjectionMatrix(projectionMatrix, VertexSorting.DISTANCE_TO_ORIGIN); + + PoseStack modelViewStack = RenderSystem.getModelViewStack(); + modelViewStack.pushPose(); + modelViewStack.setIdentity(); + modelViewStack.mulPoseMatrix(modelViewMatrix); + modelViewStack.mulPose(Axis.XP.rotationDegrees(orbitDegrees)); + modelViewStack.mulPose(Axis.ZP.rotationDegrees(yawDegrees)); + modelViewStack.mulPose(Axis.YP.rotationDegrees(selfRotationDegrees)); + RenderSystem.applyModelViewMatrix(); + + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + 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; + } + + 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(); + 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/EmperorScorpionRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/EmperorScorpionRenderer.java new file mode 100644 index 00000000..e590a66c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/EmperorScorpionRenderer.java @@ -0,0 +1,149 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.EmperorScorpionModel; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import java.util.HashMap; +import java.util.Map; +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 EmperorScorpionRenderer extends GeoEntityRenderer { + private static final int CROSSFADE_TICKS = 12; + private final Map transitions = new HashMap<>(); + + public EmperorScorpionRenderer(EntityRendererProvider.Context context) { + super(context, new EmperorScorpionModel()); + this.shadowRadius = 3.0F; + this.addRenderLayer(new EmperorScorpionHardenLayer(this)); + this.addRenderLayer(new EmperorScorpionEmissiveLayer(this)); + } + + @Override + public void render(EmperorScorpionEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + this.updateTransition(entity); + super.render(entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); + } + + @Override + public RenderType getRenderType(EmperorScorpionEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityCutoutNoCull(texture); + } + + @Override + protected float getDeathMaxRotation(EmperorScorpionEntity animatable) { + return 0.0F; + } + + private static final class EmperorScorpionEmissiveLayer extends GeoRenderLayer { + private EmperorScorpionEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, EmperorScorpionEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(EmperorScorpionModel.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 + ); + } + } + + private void updateTransition(EmperorScorpionEntity entity) { + int phase = entity.getHardenPhaseIndex(); + HardenTransitionState state = this.transitions.computeIfAbsent(entity.getId(), ignored -> + new HardenTransitionState(phase, entity.tickCount)); + + if (state.currentPhase != phase) { + state.currentPhase = phase; + state.transitionStartTick = entity.tickCount; + } else if (phase == 0 + && entity.tickCount - state.transitionStartTick > CROSSFADE_TICKS) { + this.transitions.remove(entity.getId()); + } + } + + private float getHardenAlpha(EmperorScorpionEntity entity, float partialTick) { + HardenTransitionState state = this.transitions.get(entity.getId()); + if (state == null) { + return 0.0F; + } + + float elapsed = (entity.tickCount - state.transitionStartTick) + partialTick; + return switch (state.currentPhase) { + case 2 -> Math.max(0.0F, Math.min(1.0F, elapsed / 11.0F)); + case 3 -> 1.0F; + case 4 -> Math.max(0.0F, Math.min(1.0F, 1.0F - (elapsed / 20.0F))); + default -> 0.0F; + }; + } + + private static final class HardenTransitionState { + private int currentPhase; + private int transitionStartTick; + + private HardenTransitionState(int currentPhase, int transitionStartTick) { + this.currentPhase = currentPhase; + this.transitionStartTick = transitionStartTick; + } + } + + private static final class EmperorScorpionHardenLayer extends GeoRenderLayer { + private EmperorScorpionHardenLayer(EmperorScorpionRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, EmperorScorpionEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + EmperorScorpionRenderer renderer = (EmperorScorpionRenderer) this.getRenderer(); + float alpha = renderer.getHardenAlpha(animatable, partialTick); + if (alpha <= 0.0F) { + return; + } + + RenderType hardenType = RenderType.entityTranslucent(EmperorScorpionModel.HARDEN_TEXTURE); + VertexConsumer hardenBuffer = bufferSource.getBuffer(hardenType); + + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + hardenType, + hardenBuffer, + partialTick, + packedLight, + packedOverlay, + 1.0F, + 1.0F, + 1.0F, + alpha + ); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/FlyingSquirrelRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/FlyingSquirrelRenderer.java new file mode 100644 index 00000000..b6d9cafd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/FlyingSquirrelRenderer.java @@ -0,0 +1,53 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.FlyingSquirrelModel; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +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 net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class FlyingSquirrelRenderer extends GeoEntityRenderer { + private static final float ADULT_SHADOW_RADIUS = 0.3F; + private static final float BABY_SCALE = 0.6F; + + public FlyingSquirrelRenderer(EntityRendererProvider.Context context) { + super(context, new FlyingSquirrelModel()); + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + + @Override + public void preRender(PoseStack poseStack, FlyingSquirrelEntity 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.isBaby()) { + poseStack.scale(BABY_SCALE, BABY_SCALE, BABY_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS * BABY_SCALE; + } else { + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + } + + @Override + protected void applyRotations(FlyingSquirrelEntity animatable, PoseStack poseStack, float ageInTicks, float rotationYaw, float partialTick) { + float appliedYaw = rotationYaw; + float appliedPitch = Mth.lerp(partialTick, animatable.xRotO, animatable.getXRot()); + + if (animatable.isOnShoulder() && animatable.getVehicle() instanceof Player player) { + appliedYaw = Mth.rotLerp(partialTick, player.yHeadRotO, player.yHeadRot); + appliedPitch = Mth.lerp(partialTick, player.xRotO, player.getXRot()); + } + + super.applyRotations(animatable, poseStack, ageInTicks, appliedYaw, partialTick); + + if (animatable.isOnShoulder()) { + poseStack.mulPose(Axis.XP.rotationDegrees(-appliedPitch)); + } + } +} 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 new file mode 100644 index 00000000..d82d79c3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmeringLivingLayer.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +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; + + public GlimmeringLivingLayer(RenderLayerParent renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLight, T entity, + float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, + float netHeadYaw, float headPitch) { + MobEffect glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + if (glimmering == null || !entity.hasEffect(glimmering)) { + return; + } + + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucentEmissive(this.getTextureLocation(entity))); + this.getParentModel().renderToBuffer( + poseStack, + vertexConsumer, + LightTexture.FULL_BRIGHT, + LivingEntityRenderer.getOverlayCoords(entity, 0.0F), + GLIMMERING_TINT_R, + GLIMMERING_TINT_G, + GLIMMERING_TINT_B, + GLIMMERING_TINT_A + ); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GoopedGeoLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GoopedGeoLayer.java new file mode 100644 index 00000000..d7d6a4d7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GoopedGeoLayer.java @@ -0,0 +1,59 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.effect.GoopedEffectHooks; +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.core.Holder; +import net.minecraft.world.effect.MobEffect; +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 GoopedGeoLayer extends GeoRenderLayer { + private static final int GOOPED_TINT = 0x6632FF55; + + public GoopedGeoLayer(GeoRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, T animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + if (!(animatable instanceof Entity entity) || !(entity instanceof LivingEntity livingEntity)) { + return; + } + + Holder gooped = GoopedEffectHooks.holder(); + if (gooped == null || !livingEntity.hasEffect(gooped.value())) { + return; + } + + poseStack.pushPose(); + poseStack.scale(1.018F, 1.018F, 1.018F); + RenderType goopedRenderType = RenderType.entityTranslucent(this.getRenderer().getTextureLocation(animatable)); + VertexConsumer goopedBuffer = bufferSource.getBuffer(goopedRenderType); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + goopedRenderType, + goopedBuffer, + partialTick, + packedLight, + packedOverlay, + 0.196F, + 1.0F, + 0.333F, + 0.4F + ); + poseStack.popPose(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GoopedLivingLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GoopedLivingLayer.java new file mode 100644 index 00000000..228ba31e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GoopedLivingLayer.java @@ -0,0 +1,47 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.effect.GoopedEffectHooks; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.core.Holder; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.LivingEntity; + +public final class GoopedLivingLayer> extends RenderLayer { + private static final int GOOPED_TINT = 0x6632FF55; + + public GoopedLivingLayer(RenderLayerParent renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLight, T entity, + float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, + float netHeadYaw, float headPitch) { + Holder gooped = GoopedEffectHooks.holder(); + if (gooped == null || !entity.hasEffect(gooped.value())) { + return; + } + + poseStack.pushPose(); + poseStack.scale(1.018F, 1.018F, 1.018F); + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucent(this.getTextureLocation(entity))); + this.getParentModel().renderToBuffer( + poseStack, + vertexConsumer, + packedLight, + LivingEntityRenderer.getOverlayCoords(entity, 0.0F), + 0.196F, + 1.0F, + 0.333F, + 0.4F + ); + poseStack.popPose(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/HerculesBeetleRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/HerculesBeetleRenderer.java new file mode 100644 index 00000000..4a7f32e5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/HerculesBeetleRenderer.java @@ -0,0 +1,50 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.HerculesBeetleModel; +import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; +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 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 HerculesBeetleRenderer extends GeoEntityRenderer { + public HerculesBeetleRenderer(EntityRendererProvider.Context context) { + super(context, new HerculesBeetleModel()); + this.addRenderLayer(new HerculesBeetleEmissiveLayer(this)); + } + + private static final class HerculesBeetleEmissiveLayer extends GeoRenderLayer { + private HerculesBeetleEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, HerculesBeetleEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(HerculesBeetleModel.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/HushProjectileRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/HushProjectileRenderer.java new file mode 100644 index 00000000..b10a2584 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/HushProjectileRenderer.java @@ -0,0 +1,69 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +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.EntityRenderer; +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 org.joml.Matrix4f; + +public class HushProjectileRenderer extends EntityRenderer { + private static final ResourceLocation ORB_TEXTURE = + new ResourceLocation("textures/entity/enderdragon/dragon_fireball.png"); + + public HushProjectileRenderer(EntityRendererProvider.Context context) { + super(context); + } + + @Override + protected int getBlockLightLevel(HushProjectileEntity entity, BlockPos pos) { + return 15; + } + + @Override + public void render(HushProjectileEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { + poseStack.pushPose(); + poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); + poseStack.scale(0.55F, 0.55F, 0.55F); + + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucent(ORB_TEXTURE)); + PoseStack.Pose pose = poseStack.last(); + Matrix4f matrix4f = pose.pose(); + addVertex(vertexConsumer, pose, matrix4f, -0.5F, -0.5F, 0.0F, 1.0F, packedLight); + addVertex(vertexConsumer, pose, matrix4f, 0.5F, -0.5F, 1.0F, 1.0F, packedLight); + addVertex(vertexConsumer, pose, matrix4f, 0.5F, 0.5F, 1.0F, 0.0F, packedLight); + addVertex(vertexConsumer, pose, matrix4f, -0.5F, 0.5F, 0.0F, 0.0F, packedLight); + + poseStack.popPose(); + super.render(entity, entityYaw, partialTick, poseStack, buffer, packedLight); + } + + private static void addVertex( + VertexConsumer vertexConsumer, + PoseStack.Pose pose, + Matrix4f matrix4f, + float x, + float y, + float u, + float v, + int packedLight + ) { + vertexConsumer.vertex(matrix4f, x, y, 0.0F) + .color(1.0F, 0.08F, 0.08F, 0.95F) + .uv(u, v) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(packedLight) + .normal(pose.normal(), 0.0F, 0.0F, 1.0F) + .endVertex(); + } + + @Override + public ResourceLocation getTextureLocation(HushProjectileEntity entity) { + return ORB_TEXTURE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/JerryRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/JerryRenderer.java new file mode 100644 index 00000000..6010efad --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/JerryRenderer.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.JerryModel; +import com.craisinlord.antarchy.content.entity.JerryEntity; +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 JerryRenderer extends GeoEntityRenderer { + public JerryRenderer(EntityRendererProvider.Context context) { + super(context, new JerryModel()); + this.shadowRadius = 0.7F; + } + + @Override + public RenderType getRenderType(JerryEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityTranslucent(texture); + } +} 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 new file mode 100644 index 00000000..2d9fffed --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/JumpyBugRenderer.java @@ -0,0 +1,79 @@ +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/KrakenRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakenRenderer.java new file mode 100644 index 00000000..3b359314 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakenRenderer.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.KrakenModel; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +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 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 KrakenRenderer extends GeoEntityRenderer { + public KrakenRenderer(EntityRendererProvider.Context context) { + super(context, new KrakenModel()); + this.shadowRadius = 2.0F; + this.withScale(1.5F); + this.addRenderLayer(new KrakenEmissiveLayer(this)); + } + + private static final class KrakenEmissiveLayer extends GeoRenderLayer { + private KrakenEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, KrakenEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(KrakenModel.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/KrakensGraspThrownTridentRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakensGraspThrownTridentRenderer.java new file mode 100644 index 00000000..9f87e6ea --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakensGraspThrownTridentRenderer.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.entity.kraken.KrakensGraspThrownTrident; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.item.ItemDisplayContext; + +public class KrakensGraspThrownTridentRenderer extends EntityRenderer { + private static final ResourceLocation TEXTURE = new ResourceLocation("antarchy", "textures/item/krakens_grasp/krakens_grasp.png"); + + public KrakensGraspThrownTridentRenderer(EntityRendererProvider.Context context) { + super(context); + } + + @Override + public void render(KrakensGraspThrownTrident entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + poseStack.pushPose(); + poseStack.mulPose(Axis.YP.rotationDegrees(Mth.lerp(partialTick, entity.yRotO, entity.getYRot()) - 90.0F)); + poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.lerp(partialTick, entity.xRotO, entity.getXRot()) + 90.0F)); + poseStack.mulPose(Axis.XP.rotationDegrees(180.0F)); + Minecraft.getInstance().getItemRenderer().renderStatic( + entity.getItem(), + ItemDisplayContext.NONE, + packedLight, + OverlayTexture.NO_OVERLAY, + poseStack, + bufferSource, + entity.level(), + entity.getId()); + poseStack.popPose(); + super.render(entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); + } + + @Override + public ResourceLocation getTextureLocation(KrakensGraspThrownTrident entity) { + return TEXTURE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidAnchorBlockEntityRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidAnchorBlockEntityRenderer.java new file mode 100644 index 00000000..0c16c414 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidAnchorBlockEntityRenderer.java @@ -0,0 +1,128 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import org.joml.Matrix3f; +import org.joml.Matrix4f; + +public class LucidAnchorBlockEntityRenderer implements BlockEntityRenderer { + private static final ResourceLocation BEAM_TEXTURE = new ResourceLocation("textures/entity/beacon_beam.png"); + private static final float INNER_RADIUS = 0.14F; + private static final float OUTER_RADIUS = 0.28F; + private static final float START_OFFSET = -0.02F; + + public LucidAnchorBlockEntityRenderer(BlockEntityRendererProvider.Context context) { + } + + @Override + public void render(LucidAnchorBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight, int packedOverlay) { + if (!blockEntity.isActive() || blockEntity.getBeamLength() <= 0 || blockEntity.getBeamSections().isEmpty() || blockEntity.getLevel() == null) { + return; + } + + long gameTime = blockEntity.getLevel().getGameTime(); + float scroll = (gameTime + partialTick) * 0.02F; + float startY = START_OFFSET; + float endY = START_OFFSET - blockEntity.getBeamLength(); + + poseStack.pushPose(); + poseStack.translate(0.5D, 0.0D, 0.5D); + + float currentTop = startY; + for (LucidAnchorBlockEntity.BeamSection section : blockEntity.getBeamSections()) { + float sectionBottom = currentTop - section.length(); + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, sectionBottom, INNER_RADIUS, section.color(), 1.0F, scroll); + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, sectionBottom, OUTER_RADIUS, darken(section.color()), 0.45F, -scroll); + currentTop = sectionBottom; + } + + if (currentTop > endY) { + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, endY, INNER_RADIUS, 0xFFFF1A1A, 1.0F, scroll); + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, endY, OUTER_RADIUS, 0xFF7A0000, 0.45F, -scroll); + } + + poseStack.popPose(); + } + + @Override + public int getViewDistance() { + return 256; + } + + private static void renderBeamPrism(PoseStack poseStack, VertexConsumer consumer, float topY, float bottomY, float radius, int color, float alphaScale, float scroll) { + PoseStack.Pose pose = poseStack.last(); + Matrix4f matrix = pose.pose(); + Matrix3f normal = pose.normal(); + float red = ((color >> 16) & 0xFF) / 255.0F; + float green = ((color >> 8) & 0xFF) / 255.0F; + float blue = (color & 0xFF) / 255.0F; + float alpha = ((color >>> 24) & 0xFF) / 255.0F * alphaScale; + float vTop = scroll + topY * 0.25F; + float vBottom = scroll + bottomY * 0.25F; + + addFace(consumer, matrix, normal, -radius, topY, -radius, radius, topY, -radius, radius, bottomY, -radius, -radius, bottomY, -radius, red, green, blue, alpha, vTop, vBottom); + addFace(consumer, matrix, normal, radius, topY, radius, -radius, topY, radius, -radius, bottomY, radius, radius, bottomY, radius, red, green, blue, alpha, vTop, vBottom); + addFace(consumer, matrix, normal, -radius, topY, radius, -radius, topY, -radius, -radius, bottomY, -radius, -radius, bottomY, radius, red, green, blue, alpha, vTop, vBottom); + addFace(consumer, matrix, normal, radius, topY, -radius, radius, topY, radius, radius, bottomY, radius, radius, bottomY, -radius, red, green, blue, alpha, vTop, vBottom); + } + + private static void addFace( + VertexConsumer consumer, + Matrix4f matrix, + Matrix3f normal, + float x0, + float y0, + float z0, + float x1, + float y1, + float z1, + float x2, + float y2, + float z2, + float x3, + float y3, + float z3, + float red, + float green, + float blue, + float alpha, + float vTop, + float vBottom + ) { + addVertex(consumer, matrix, normal, x0, y0, z0, red, green, blue, alpha, 0.0F, vTop); + addVertex(consumer, matrix, normal, x1, y1, z1, red, green, blue, alpha, 1.0F, vTop); + addVertex(consumer, matrix, normal, x2, y2, z2, red, green, blue, alpha, 1.0F, vBottom); + addVertex(consumer, matrix, normal, x3, y3, z3, red, green, blue, alpha, 0.0F, vBottom); + + addVertex(consumer, matrix, normal, x3, y3, z3, red, green, blue, alpha, 0.0F, vBottom); + addVertex(consumer, matrix, normal, x2, y2, z2, red, green, blue, alpha, 1.0F, vBottom); + addVertex(consumer, matrix, normal, x1, y1, z1, red, green, blue, alpha, 1.0F, vTop); + addVertex(consumer, matrix, normal, x0, y0, z0, red, green, blue, alpha, 0.0F, vTop); + } + + private static void addVertex(VertexConsumer consumer, Matrix4f matrix, Matrix3f normal, float x, float y, float z, float red, float green, float blue, float alpha, float u, float v) { + consumer.vertex(matrix, x, y, z) + .color(red, green, blue, alpha) + .uv(u, v) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(LightTexture.FULL_BRIGHT) + .normal(normal, 0.0F, 1.0F, 0.0F) + .endVertex(); + } + + private static int darken(int color) { + int red = (int) (((color >> 16) & 0xFF) * 0.45F); + int green = (int) (((color >> 8) & 0xFF) * 0.2F); + int blue = (int) ((color & 0xFF) * 0.2F); + return (color & 0xFF000000) | (red << 16) | (green << 8) | blue; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidRenderer.java new file mode 100644 index 00000000..2a54e353 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidRenderer.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.LucidModel; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +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 LucidRenderer extends GeoEntityRenderer { + + private static final float VISUAL_SCALE = 0.9F; + private static final double VISUAL_Y_OFFSET = -0.30D; + + public LucidRenderer(EntityRendererProvider.Context context) { + super(context, new LucidModel()); + this.shadowRadius = 0.5F; + this.withScale(VISUAL_SCALE); + } + + @Override + public void preRender(PoseStack poseStack, LucidEntity 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); + poseStack.translate(0.0D, VISUAL_Y_OFFSET, 0.0D); + } + + @Override + protected float getDeathMaxRotation(LucidEntity animatable) { + return 0.0F; + } +} 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 new file mode 100644 index 00000000..c84ffa19 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LurkingTerrorRenderer.java @@ -0,0 +1,14 @@ +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/MantisRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/MantisRenderer.java new file mode 100644 index 00000000..a6765568 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/MantisRenderer.java @@ -0,0 +1,14 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.MantisModel; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class MantisRenderer extends GeoEntityRenderer { + public MantisRenderer(EntityRendererProvider.Context context) { + super(context, new MantisModel()); + this.shadowRadius = 1.0F; + this.withScale(1.25F); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/MissileSquidRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/MissileSquidRenderer.java new file mode 100644 index 00000000..83943dc3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/MissileSquidRenderer.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.MissileSquidModel; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class MissileSquidRenderer extends GeoEntityRenderer { + public MissileSquidRenderer(EntityRendererProvider.Context context) { + super(context, new MissileSquidModel()); + this.shadowRadius = 1.3F; + } + + @Override + public Vec3 getRenderOffset(MissileSquidEntity entity, float partialTick) { + return new Vec3(0.0D, -2.0D, 0.0D); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/MolevoreRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/MolevoreRenderer.java new file mode 100644 index 00000000..dcbb43e5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/MolevoreRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.MolevoreModel; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class MolevoreRenderer extends GeoEntityRenderer { + public MolevoreRenderer(EntityRendererProvider.Context context) { + super(context, new MolevoreModel()); + this.shadowRadius = 2.0F; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/MolewormRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/MolewormRenderer.java new file mode 100644 index 00000000..a9cc8e79 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/MolewormRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.MolewormModel; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class MolewormRenderer extends GeoEntityRenderer { + public MolewormRenderer(EntityRendererProvider.Context context) { + super(context, new MolewormModel()); + this.shadowRadius = 0.25F; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareBiteRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareBiteRenderer.java new file mode 100644 index 00000000..f6cc1076 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareBiteRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.NightmareBiteModel; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class NightmareBiteRenderer extends GeoEntityRenderer { + public NightmareBiteRenderer(EntityRendererProvider.Context context) { + super(context, new NightmareBiteModel()); + this.shadowRadius = 0.0F; + } +} 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 new file mode 100644 index 00000000..4cbd9d93 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java @@ -0,0 +1,37 @@ +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 { + public NightmarePortalRenderer(EntityRendererProvider.Context context) { + super(context, new NightmarePortalModel()); + this.shadowRadius = 0.0F; + } + + @Override + public void render(NightmarePortalEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + BakedGeoModel model = this.getGeoModel().getBakedModel(this.getGeoModel().getModelResource(entity)); + RenderType renderType = RenderType.eyes(NightmarePortalModel.TEXTURE); + VertexConsumer buffer = bufferSource.getBuffer(renderType); + poseStack.pushPose(); + poseStack.scale(1.0F, 1.0F, 1.0F); + this.reRender(model, poseStack, bufferSource, entity, renderType, buffer, partialTick, 0xF000F0, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + poseStack.popPose(); + } + + @Override + public @Nullable RenderType getRenderType(NightmarePortalEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.eyes(NightmarePortalModel.TEXTURE); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareRenderer.java new file mode 100644 index 00000000..532da57f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareRenderer.java @@ -0,0 +1,57 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.NightmareModel; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +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 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 NightmareRenderer extends GeoEntityRenderer { + public NightmareRenderer(EntityRendererProvider.Context context) { + super(context, new NightmareModel()); + this.shadowRadius = 1.8F; + this.withScale(1.15F); + this.addRenderLayer(new NightmareEmissiveLayer(this)); + } + + @Override + protected float getDeathMaxRotation(NightmareEntity animatable) { + return 0.0F; + } + + private static final class NightmareEmissiveLayer extends GeoRenderLayer { + private NightmareEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + 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); + 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/OctopusBombRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/OctopusBombRenderer.java new file mode 100644 index 00000000..5c557b9a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/OctopusBombRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.OctopusBombModel; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class OctopusBombRenderer extends GeoEntityRenderer { + public OctopusBombRenderer(EntityRendererProvider.Context context) { + super(context, new OctopusBombModel()); + this.shadowRadius = 1.2F; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodBoatRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodBoatRenderer.java new file mode 100644 index 00000000..f724d214 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodBoatRenderer.java @@ -0,0 +1,78 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.model.BoatModel; +import net.minecraft.client.model.ChestBoatModel; +import net.minecraft.client.model.ListModel; +import net.minecraft.client.model.WaterPatchModel; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.vehicle.Boat; +import org.joml.Quaternionf; + +public class OuranwoodBoatRenderer extends EntityRenderer { + private static final String MAIN_LAYER = "main"; + private final ResourceLocation texture; + private final ListModel model; + + public OuranwoodBoatRenderer(EntityRendererProvider.Context context, ResourceLocation texture, boolean chest) { + super(context); + this.shadowRadius = 0.8F; + this.texture = texture; + this.model = chest + ? new ChestBoatModel(context.bakeLayer(chestBoatLayer())) + : new BoatModel(context.bakeLayer(boatLayer())); + } + + public static ModelLayerLocation boatLayer() { + return new ModelLayerLocation(new ResourceLocation("antarchy", "boat/ouranwood"), MAIN_LAYER); + } + + public static ModelLayerLocation chestBoatLayer() { + return new ModelLayerLocation(new ResourceLocation("antarchy", "chest_boat/ouranwood"), MAIN_LAYER); + } + + @Override + public void render(T boat, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { + poseStack.pushPose(); + poseStack.translate(0.0F, 0.375F, 0.0F); + poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - entityYaw)); + + float hurtTime = boat.getHurtTime() - partialTick; + float damage = Math.max(boat.getDamage() - partialTick, 0.0F); + if (hurtTime > 0.0F) { + poseStack.mulPose(Axis.XP.rotationDegrees(Mth.sin(hurtTime) * hurtTime * damage / 10.0F * boat.getHurtDir())); + } + + float bubbleAngle = boat.getBubbleAngle(partialTick); + if (!Mth.equal(bubbleAngle, 0.0F)) { + poseStack.mulPose(new Quaternionf().setAngleAxis(boat.getBubbleAngle(partialTick) * ((float) Math.PI / 180.0F), 1.0F, 0.0F, 1.0F)); + } + + poseStack.scale(-1.0F, -1.0F, 1.0F); + poseStack.mulPose(Axis.YP.rotationDegrees(90.0F)); + this.model.setupAnim(boat, partialTick, 0.0F, -0.1F, 0.0F, 0.0F); + VertexConsumer consumer = buffer.getBuffer(this.model.renderType(this.texture)); + this.model.renderToBuffer(poseStack, consumer, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + if (!boat.isUnderWater() && this.model instanceof WaterPatchModel waterPatchModel) { + VertexConsumer waterConsumer = buffer.getBuffer(RenderType.waterMask()); + waterPatchModel.waterPatch().render(poseStack, waterConsumer, packedLight, OverlayTexture.NO_OVERLAY); + } + + poseStack.popPose(); + super.render(boat, entityYaw, partialTick, poseStack, buffer, packedLight); + } + + @Override + public ResourceLocation getTextureLocation(T boat) { + return this.texture; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodDeerRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodDeerRenderer.java new file mode 100644 index 00000000..c1a1e6ce --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodDeerRenderer.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.OuranwoodDeerModel; +import com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class OuranwoodDeerRenderer extends GeoEntityRenderer { + private static final float SHADOW_RADIUS = 0.5F; + + public OuranwoodDeerRenderer(EntityRendererProvider.Context context) { + super(context, new OuranwoodDeerModel()); + this.shadowRadius = SHADOW_RADIUS; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ParalyzedStoneGeoLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ParalyzedStoneGeoLayer.java new file mode 100644 index 00000000..138bf462 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ParalyzedStoneGeoLayer.java @@ -0,0 +1,57 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.AntarchyObjects; +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.resources.ResourceLocation; +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 ParalyzedStoneGeoLayer extends GeoRenderLayer { + private static final ResourceLocation STONE_TEXTURE = new ResourceLocation("textures/block/stone.png"); + private static final int STONE_TINT = 0xFFB1ADA4; + + public ParalyzedStoneGeoLayer(GeoRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, T animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + if (!(animatable instanceof Entity entity) || !(entity instanceof LivingEntity livingEntity)) { + return; + } + if (!livingEntity.hasEffect(AntarchyObjects.PARALYZED_EFFECT.get())) { + return; + } + + poseStack.pushPose(); + poseStack.scale(1.02f, 1.02f, 1.02f); + RenderType stoneRenderType = RenderType.entityCutoutNoCull(STONE_TEXTURE); + VertexConsumer stoneBuffer = bufferSource.getBuffer(stoneRenderType); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + stoneRenderType, + stoneBuffer, + partialTick, + packedLight, + packedOverlay, + 0.694F, + 0.678F, + 0.643F, + 1.0F + ); + poseStack.popPose(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ParalyzedStoneLivingLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ParalyzedStoneLivingLayer.java new file mode 100644 index 00000000..6743cfcc --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ParalyzedStoneLivingLayer.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; + +public final class ParalyzedStoneLivingLayer> extends RenderLayer { + private static final ResourceLocation STONE_TEXTURE = new ResourceLocation("textures/block/stone.png"); + private static final int STONE_TINT = 0xFFB1ADA4; + + public ParalyzedStoneLivingLayer(RenderLayerParent renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLight, T entity, + float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, + float netHeadYaw, float headPitch) { + if (!entity.hasEffect(AntarchyObjects.PARALYZED_EFFECT.get())) { + return; + } + poseStack.pushPose(); + poseStack.scale(1.02f, 1.02f, 1.02f); + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityCutoutNoCull(STONE_TEXTURE)); + this.getParentModel().renderToBuffer( + poseStack, + vertexConsumer, + packedLight, + LivingEntityRenderer.getOverlayCoords(entity, 0.0F), + 0.694F, + 0.678F, + 0.643F, + 1.0F + ); + poseStack.popPose(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ParalyzedStonePlayerLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ParalyzedStonePlayerLayer.java new file mode 100644 index 00000000..03d82977 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ParalyzedStonePlayerLayer.java @@ -0,0 +1,46 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.resources.ResourceLocation; + +public final class ParalyzedStonePlayerLayer extends RenderLayer> { + private static final ResourceLocation STONE_TEXTURE = new ResourceLocation("textures/block/stone.png"); + private static final int STONE_TINT = 0xFFB1ADA4; + + public ParalyzedStonePlayerLayer(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.hasEffect(AntarchyObjects.PARALYZED_EFFECT.get())) { + return; + } + + poseStack.pushPose(); + poseStack.scale(1.05f, 1.05f, 1.05f); + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityCutoutNoCull(STONE_TEXTURE)); + this.getParentModel().renderToBuffer( + poseStack, + vertexConsumer, + packedLight, + LivingEntityRenderer.getOverlayCoords(player, 0.0F), + 0.694F, + 0.678F, + 0.643F, + 1.0F + ); + poseStack.popPose(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PeachBoatRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PeachBoatRenderer.java new file mode 100644 index 00000000..a938cdd8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PeachBoatRenderer.java @@ -0,0 +1,78 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.model.BoatModel; +import net.minecraft.client.model.ChestBoatModel; +import net.minecraft.client.model.ListModel; +import net.minecraft.client.model.WaterPatchModel; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.vehicle.Boat; +import org.joml.Quaternionf; + +public class PeachBoatRenderer extends EntityRenderer { + private static final String MAIN_LAYER = "main"; + private final ResourceLocation texture; + private final ListModel model; + + public PeachBoatRenderer(EntityRendererProvider.Context context, ResourceLocation texture, boolean chest) { + super(context); + this.shadowRadius = 0.8F; + this.texture = texture; + this.model = chest + ? new ChestBoatModel(context.bakeLayer(chestBoatLayer())) + : new BoatModel(context.bakeLayer(boatLayer())); + } + + public static ModelLayerLocation boatLayer() { + return new ModelLayerLocation(new ResourceLocation("antarchy", "boat/peach"), MAIN_LAYER); + } + + public static ModelLayerLocation chestBoatLayer() { + return new ModelLayerLocation(new ResourceLocation("antarchy", "chest_boat/peach"), MAIN_LAYER); + } + + @Override + public void render(T boat, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { + poseStack.pushPose(); + poseStack.translate(0.0F, 0.375F, 0.0F); + poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - entityYaw)); + + float hurtTime = boat.getHurtTime() - partialTick; + float damage = Math.max(boat.getDamage() - partialTick, 0.0F); + if (hurtTime > 0.0F) { + poseStack.mulPose(Axis.XP.rotationDegrees(Mth.sin(hurtTime) * hurtTime * damage / 10.0F * boat.getHurtDir())); + } + + float bubbleAngle = boat.getBubbleAngle(partialTick); + if (!Mth.equal(bubbleAngle, 0.0F)) { + poseStack.mulPose(new Quaternionf().setAngleAxis(boat.getBubbleAngle(partialTick) * ((float) Math.PI / 180.0F), 1.0F, 0.0F, 1.0F)); + } + + poseStack.scale(-1.0F, -1.0F, 1.0F); + poseStack.mulPose(Axis.YP.rotationDegrees(90.0F)); + this.model.setupAnim(boat, partialTick, 0.0F, -0.1F, 0.0F, 0.0F); + VertexConsumer consumer = buffer.getBuffer(this.model.renderType(this.texture)); + this.model.renderToBuffer(poseStack, consumer, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + if (!boat.isUnderWater() && this.model instanceof WaterPatchModel waterPatchModel) { + VertexConsumer waterConsumer = buffer.getBuffer(RenderType.waterMask()); + waterPatchModel.waterPatch().render(poseStack, waterConsumer, packedLight, OverlayTexture.NO_OVERLAY); + } + + poseStack.popPose(); + super.render(boat, entityYaw, partialTick, poseStack, buffer, packedLight); + } + + @Override + public ResourceLocation getTextureLocation(T boat) { + return this.texture; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ReverieRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ReverieRenderer.java new file mode 100644 index 00000000..2dacd4cd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ReverieRenderer.java @@ -0,0 +1,149 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.ReverieModel; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import java.util.HashMap; +import java.util.Map; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.core.BlockPos; +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 ReverieRenderer extends GeoEntityRenderer { + private static final float VISUAL_SCALE = 0.7F; + private static final float SHADOW_RADIUS = 0.12F; + private static final int CROSSFADE_TICKS = 12; + private final Map transitions = new HashMap<>(); + + public ReverieRenderer(EntityRendererProvider.Context context) { + super(context, new ReverieModel()); + this.shadowRadius = SHADOW_RADIUS; + this.withScale(VISUAL_SCALE); + this.addRenderLayer(new ReverieCrossfadeLayer(this)); + } + + @Override + public void render(ReverieEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + this.updateTransition(entity); + super.render(entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); + } + + @Override + public void preRender(PoseStack poseStack, ReverieEntity 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 = SHADOW_RADIUS; + } + + @Override + public RenderType getRenderType(ReverieEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityTranslucent(texture); + } + + @Override + protected int getBlockLightLevel(ReverieEntity entity, BlockPos pos) { + return 15; + } + + @Nullable + ReverieEntity.Mood getPreviousMood(ReverieEntity entity) { + MoodTransitionState state = this.transitions.get(entity.getId()); + if (state == null || state.currentMood == state.previousMood) { + return null; + } + return state.previousMood; + } + + float getPreviousMoodAlpha(ReverieEntity entity, float partialTick) { + return 1.0F - this.getTransitionProgress(entity, partialTick); + } + + private void updateTransition(ReverieEntity entity) { + ReverieEntity.Mood mood = entity.getMood(); + MoodTransitionState state = this.transitions.computeIfAbsent(entity.getId(), ignored -> + new MoodTransitionState(mood, mood, entity.tickCount)); + + if (state.currentMood != mood) { + state.previousMood = state.currentMood; + state.currentMood = mood; + state.transitionStartTick = entity.tickCount; + } else if (state.currentMood == state.previousMood && entity.tickCount - state.transitionStartTick > CROSSFADE_TICKS) { + this.transitions.remove(entity.getId()); + } + } + + private float getTransitionProgress(ReverieEntity entity, float partialTick) { + MoodTransitionState state = this.transitions.get(entity.getId()); + if (state == null || state.currentMood == state.previousMood) { + return 1.0F; + } + + float elapsed = (entity.tickCount - state.transitionStartTick) + partialTick; + if (elapsed >= CROSSFADE_TICKS) { + state.previousMood = state.currentMood; + return 1.0F; + } + + return Math.max(0.0F, Math.min(1.0F, elapsed / CROSSFADE_TICKS)); + } + + private static final class MoodTransitionState { + private ReverieEntity.Mood previousMood; + private ReverieEntity.Mood currentMood; + private int transitionStartTick; + + private MoodTransitionState(ReverieEntity.Mood previousMood, ReverieEntity.Mood currentMood, int transitionStartTick) { + this.previousMood = previousMood; + this.currentMood = currentMood; + this.transitionStartTick = transitionStartTick; + } + } + + private static final class ReverieCrossfadeLayer extends GeoRenderLayer { + private ReverieCrossfadeLayer(ReverieRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, ReverieEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + ReverieRenderer renderer = (ReverieRenderer) this.getRenderer(); + ReverieEntity.Mood previousMood = renderer.getPreviousMood(animatable); + if (previousMood == null) { + return; + } + + float alpha = renderer.getPreviousMoodAlpha(animatable, partialTick); + if (alpha <= 0.0F) { + return; + } + + ResourceLocation previousTexture = ReverieModel.textureForMood(previousMood); + RenderType previousRenderType = RenderType.entityTranslucent(previousTexture); + VertexConsumer previousBuffer = bufferSource.getBuffer(previousRenderType); + + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + previousRenderType, + previousBuffer, + partialTick, + packedLight, + packedOverlay, + 1.0F, + 1.0F, + 1.0F, + alpha + ); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RollyPollyRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RollyPollyRenderer.java new file mode 100644 index 00000000..ef98511f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RollyPollyRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.RollyPollyModel; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class RollyPollyRenderer extends GeoEntityRenderer { + public RollyPollyRenderer(EntityRendererProvider.Context context) { + super(context, new RollyPollyModel()); + this.shadowRadius = 0.5F; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ScorpionRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ScorpionRenderer.java new file mode 100644 index 00000000..7d0038bf --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ScorpionRenderer.java @@ -0,0 +1,57 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.ScorpionModel; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +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 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 ScorpionRenderer extends GeoEntityRenderer { + + public ScorpionRenderer(EntityRendererProvider.Context context) { + super(context, new ScorpionModel()); + this.shadowRadius = 0.6F; + this.addRenderLayer(new ScorpionEmissiveLayer(this)); + } + + @Override + public RenderType getRenderType(ScorpionEntity animatable, net.minecraft.resources.ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityCutoutNoCull(texture); + } + + private static final class ScorpionEmissiveLayer extends GeoRenderLayer { + private ScorpionEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, ScorpionEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(ScorpionModel.emissiveTextureFor(animatable)); + 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/SeashellRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SeashellRenderer.java new file mode 100644 index 00000000..ba126443 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SeashellRenderer.java @@ -0,0 +1,72 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; +import com.craisinlord.antarchy.content.client.model.SeashellModel; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoBlockRenderer; + +public final class SeashellRenderer extends GeoBlockRenderer { + public SeashellRenderer(BlockEntityRendererProvider.Context context) { + super(new SeashellModel()); + } + + @Override + public void actuallyRender( + PoseStack poseStack, + SeashellBlockEntity 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) { + return; + } + + for (SeashellBlockEntity.DisplayedStack displayedStack : animatable.getDisplayedStacks()) { + this.renderDisplayItem(poseStack, bufferSource, displayedStack.stack(), displayedStack.offset(), packedLight, packedOverlay); + } + } + + private void renderDisplayItem( + PoseStack poseStack, + MultiBufferSource bufferSource, + ItemStack stack, + Vec3 localOffset, + int packedLight, + int packedOverlay + ) { + poseStack.pushPose(); + poseStack.translate(localOffset.x(), localOffset.y(), localOffset.z()); + poseStack.mulPose(Axis.XP.rotationDegrees(90.0F)); + poseStack.scale(0.22F, 0.22F, 0.22F); + 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/SizeRayProjectileRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SizeRayProjectileRenderer.java new file mode 100644 index 00000000..e1c81223 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SizeRayProjectileRenderer.java @@ -0,0 +1,160 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +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.EntityRenderer; +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.phys.Vec3; +import org.joml.Matrix4f; + +public class SizeRayProjectileRenderer extends EntityRenderer { + private static final ResourceLocation BEAM_TEXTURE = new ResourceLocation("textures/entity/beacon_beam.png"); + private static final Vec3 WORLD_UP = new Vec3(0.0D, 1.0D, 0.0D); + private static final Vec3 WORLD_RIGHT = new Vec3(1.0D, 0.0D, 0.0D); + private static final Vec3 WORLD_FORWARD = new Vec3(0.0D, 0.0D, 1.0D); + + public SizeRayProjectileRenderer(EntityRendererProvider.Context context) { + super(context); + } + + @Override + protected int getBlockLightLevel(SizeRayProjectileEntity entity, BlockPos pos) { + return 15; + } + + @Override + public void render( + SizeRayProjectileEntity entity, + float entityYaw, + float partialTick, + PoseStack poseStack, + MultiBufferSource buffer, + int packedLight + ) { + poseStack.pushPose(); + + Vec3 forward = getRenderDirection(entity, partialTick); + Vec3 right = createPerpendicular(forward, WORLD_UP); + Vec3 up = forward.cross(right); + if (up.lengthSqr() < 1.0E-6D) { + up = WORLD_UP; + } else { + up = up.normalize(); + } + + int chargeLevel = Math.max(1, entity.getEffectiveChargeLevel()); + float chargeScale = 1.0F + 0.35F * (chargeLevel - 1); + float pulse = 0.84F + 0.16F * Mth.sin((entity.tickCount + partialTick) * 0.35F); + float alpha = 0.95F * pulse; + float[] color = entity.getSizeRayType() == SizeRayProjectileEntity.SizeRayType.SHRINK + ? new float[] { 1.0F, 0.92F, 0.15F } + : new float[] { 0.24F, 0.62F, 1.0F }; + + Vec3 delta = entity.getDeltaMovement(); + float length = (float) Mth.clamp(delta.length() * 2.8D + 1.2D, 1.2D, 3.2D); + float width = 0.15F * chargeScale; + float outerWidth = 0.28F * chargeScale; + + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)); + PoseStack.Pose pose = poseStack.last(); + + renderBeamRibbon(pose, vertexConsumer, packedLight, color[0], color[1], color[2], alpha, width, forward, right, length); + renderBeamRibbon(pose, vertexConsumer, packedLight, color[0], color[1], color[2], alpha * 0.55F, outerWidth, forward, up, length); + + poseStack.popPose(); + super.render(entity, entityYaw, partialTick, poseStack, buffer, packedLight); + } + + private static Vec3 getRenderDirection(SizeRayProjectileEntity entity, float partialTick) { + Vec3 delta = entity.getDeltaMovement(); + if (delta.lengthSqr() > 1.0E-6D) { + return delta.normalize(); + } + + float yaw = Mth.rotLerp(partialTick, entity.yRotO, entity.getYRot()) * ((float) Math.PI / 180.0F); + float pitch = Mth.lerp(partialTick, entity.xRotO, entity.getXRot()) * ((float) Math.PI / 180.0F); + float cosPitch = Mth.cos(pitch); + Vec3 direction = new Vec3( + -Mth.sin(yaw) * cosPitch, + -Mth.sin(pitch), + Mth.cos(yaw) * cosPitch + ); + return direction.lengthSqr() > 1.0E-6D ? direction.normalize() : WORLD_FORWARD; + } + + private static Vec3 createPerpendicular(Vec3 forward, Vec3 preferredAxis) { + Vec3 perpendicular = forward.cross(preferredAxis); + if (perpendicular.lengthSqr() < 1.0E-6D) { + perpendicular = forward.cross(WORLD_RIGHT); + } + if (perpendicular.lengthSqr() < 1.0E-6D) { + perpendicular = WORLD_UP; + } + return perpendicular.normalize(); + } + + private static void renderBeamRibbon( + PoseStack.Pose pose, + VertexConsumer vertexConsumer, + int packedLight, + float red, + float green, + float blue, + float alpha, + float halfWidth, + Vec3 forward, + Vec3 sideways, + float length + ) { + Matrix4f matrix4f = pose.pose(); + Vec3 offset = sideways.scale(halfWidth); + Vec3 end = forward.scale(length); + Vec3 normal = sideways.cross(forward); + if (normal.lengthSqr() < 1.0E-6D) { + normal = WORLD_UP; + } else { + normal = normal.normalize(); + } + + emitVertex(vertexConsumer, pose, matrix4f, offset.scale(-1.0D), red, green, blue, alpha, 0.0F, 0.0F, normal, packedLight); + emitVertex(vertexConsumer, pose, matrix4f, offset, red, green, blue, alpha, 1.0F, 0.0F, normal, packedLight); + emitVertex(vertexConsumer, pose, matrix4f, end.add(offset), red, green, blue, alpha, 1.0F, 1.0F, normal, packedLight); + emitVertex(vertexConsumer, pose, matrix4f, end.add(offset.scale(-1.0D)), red, green, blue, alpha, 0.0F, 1.0F, normal, packedLight); + } + + private static void emitVertex( + VertexConsumer vertexConsumer, + PoseStack.Pose pose, + Matrix4f matrix4f, + Vec3 position, + float red, + float green, + float blue, + float alpha, + float u, + float v, + Vec3 normal, + int packedLight + ) { + vertexConsumer + .vertex(matrix4f, (float) position.x, (float) position.y, (float) position.z) + .color(red, green, blue, alpha) + .uv(u, v) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(packedLight) + .normal(pose.normal(), (float) normal.x, (float) normal.y, (float) normal.z) + .endVertex(); + } + + @Override + public ResourceLocation getTextureLocation(SizeRayProjectileEntity entity) { + return BEAM_TEXTURE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugProjectileRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugProjectileRenderer.java new file mode 100644 index 00000000..8756c27d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugProjectileRenderer.java @@ -0,0 +1,74 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.entity.SpitBugProjectileEntity; +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.EntityRenderer; +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 org.joml.Matrix4f; + +public class SpitBugProjectileRenderer extends EntityRenderer { + private static final ResourceLocation PROJECTILE_TEXTURE = + new ResourceLocation("textures/entity/enderdragon/dragon_fireball.png"); + + public SpitBugProjectileRenderer(EntityRendererProvider.Context context) { + super(context); + } + + @Override + protected int getBlockLightLevel(SpitBugProjectileEntity entity, BlockPos pos) { + return 15; + } + + @Override + public void render(SpitBugProjectileEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { + poseStack.pushPose(); + poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); + + float scale = entity.getRenderScale(partialTick); + poseStack.scale(scale, scale, scale); + + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucent(PROJECTILE_TEXTURE)); + PoseStack.Pose pose = poseStack.last(); + Matrix4f matrix4f = pose.pose(); + float alpha = entity.isLingering() ? 0.78F : 0.95F; + + addVertex(vertexConsumer, pose, matrix4f, -0.5F, -0.5F, 0.0F, 1.0F, alpha, packedLight); + addVertex(vertexConsumer, pose, matrix4f, 0.5F, -0.5F, 1.0F, 1.0F, alpha, packedLight); + addVertex(vertexConsumer, pose, matrix4f, 0.5F, 0.5F, 1.0F, 0.0F, alpha, packedLight); + addVertex(vertexConsumer, pose, matrix4f, -0.5F, 0.5F, 0.0F, 0.0F, alpha, packedLight); + + poseStack.popPose(); + super.render(entity, entityYaw, partialTick, poseStack, buffer, packedLight); + } + + private static void addVertex( + VertexConsumer vertexConsumer, + PoseStack.Pose pose, + Matrix4f matrix4f, + float x, + float y, + float u, + float v, + float alpha, + int packedLight + ) { + vertexConsumer.vertex(matrix4f, x, y, 0.0F) + .color(0.55F, 1.0F, 0.35F, alpha) + .uv(u, v) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(packedLight) + .normal(pose.normal(), 0.0F, 0.0F, 1.0F) + .endVertex(); + } + + @Override + public ResourceLocation getTextureLocation(SpitBugProjectileEntity entity) { + return PROJECTILE_TEXTURE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugRenderer.java new file mode 100644 index 00000000..34bae797 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugRenderer.java @@ -0,0 +1,14 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.SpitBugModel; +import com.craisinlord.antarchy.content.entity.SpitBugEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class SpitBugRenderer extends GeoEntityRenderer { + public SpitBugRenderer(EntityRendererProvider.Context context) { + super(context, new SpitBugModel()); + this.shadowRadius = 1.6F; + this.withScale(0.85F); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/StinkBugRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/StinkBugRenderer.java new file mode 100644 index 00000000..48cb9ada --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/StinkBugRenderer.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.StinkBugModel; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class StinkBugRenderer extends GeoEntityRenderer { + private static final float ADULT_SCALE = 0.95F; + private static final float ADULT_SHADOW_RADIUS = 0.2F; + + public StinkBugRenderer(EntityRendererProvider.Context context) { + super(context, new StinkBugModel()); + this.shadowRadius = ADULT_SHADOW_RADIUS; + this.withScale(ADULT_SCALE); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TentacleRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TentacleRenderer.java new file mode 100644 index 00000000..fe8e1027 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TentacleRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.TentacleModel; +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class TentacleRenderer extends GeoEntityRenderer { + public TentacleRenderer(EntityRendererProvider.Context context) { + super(context, new TentacleModel()); + this.shadowRadius = 0.0F; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TermiteRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TermiteRenderer.java new file mode 100644 index 00000000..1d362bf6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TermiteRenderer.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.TermiteModel; +import com.craisinlord.antarchy.content.entity.ant.TermiteEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +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 TermiteRenderer extends GeoEntityRenderer { + private static final float ADULT_SHADOW_RADIUS = 0.3F; + private static final float ADULT_SCALE = 0.85F; + private static final float BABY_SCALE = 0.5F; + + public TermiteRenderer(EntityRendererProvider.Context context) { + super(context, new TermiteModel()); + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + + @Override + public void preRender(PoseStack poseStack, TermiteEntity 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.isBaby()) { + poseStack.scale(ADULT_SCALE * BABY_SCALE, ADULT_SCALE * BABY_SCALE, ADULT_SCALE * BABY_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS * BABY_SCALE; + } else { + poseStack.scale(ADULT_SCALE, ADULT_SCALE, ADULT_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflagePlayerLayer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflagePlayerLayer.java new file mode 100644 index 00000000..bac027e7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflagePlayerLayer.java @@ -0,0 +1,65 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Block; + +public final class TigerEyeCamouflagePlayerLayer extends RenderLayer> { + public TigerEyeCamouflagePlayerLayer(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.hasEffect(AntarchyObjects.PARALYZED_EFFECT.get())) { + return; + } + if (!TigerEyeArmorUtil.hasFullSet(player)) { + return; + } + + TigerEyeCamouflageClientState.CamouflageState state = TigerEyeCamouflageClientState.get(player.getId()); + if (state == null || !state.active()) { + return; + } + + var blockState = Block.stateById(state.blockStateId()); + if (!TigerEyeArmorUtil.isValidCamouflageBlock(blockState)) { + return; + } + + poseStack.pushPose(); + poseStack.scale(1.1F, 1.1F, 1.1F); + var resolved = TigerEyeCamouflageTextureResolver.resolve(blockState, BlockPos.containing(player.position())); + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityCutoutNoCull(resolved.texture())); + int argb = resolved.argbTint(); + float alpha = ((argb >> 24) & 0xFF) / 255.0F; + float red = ((argb >> 16) & 0xFF) / 255.0F; + float green = ((argb >> 8) & 0xFF) / 255.0F; + float blue = (argb & 0xFF) / 255.0F; + this.getParentModel().renderToBuffer( + poseStack, + vertexConsumer, + packedLight, + LivingEntityRenderer.getOverlayCoords(player, 0.0F), + red, + green, + blue, + alpha + ); + poseStack.popPose(); + } +} 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 new file mode 100644 index 00000000..517f5898 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java @@ -0,0 +1,146 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.mojang.blaze3d.platform.NativeImage; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import net.minecraft.client.Minecraft; +import net.minecraft.client.color.block.BlockColors; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.Block; +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"); + private static final long QUAD_SEED = 0x54EADL; + + private TigerEyeCamouflageTextureResolver() { + } + + public static ResolvedTexture resolve(BlockState state, BlockPos pos) { + int stateId = Block.getId(state); + ResolvedTexture cached = CACHE.get(stateId); + if (cached != null) { + return cached; + } + + ResolvedTexture resolved = resolveUncached(state, pos); + CACHE.put(stateId, resolved); + return resolved; + } + + public static void clearCache() { + Minecraft minecraft = Minecraft.getInstance(); + for (ResolvedTexture resolved : CACHE.values()) { + if (!resolved.texture().equals(FALLBACK_TEXTURE)) { + minecraft.getTextureManager().release(resolved.texture()); + } + } + CACHE.clear(); + } + + private static ResolvedTexture resolveUncached(BlockState state, BlockPos pos) { + Minecraft minecraft = Minecraft.getInstance(); + BlockRenderDispatcher dispatcher = minecraft.getBlockRenderer(); + var model = dispatcher.getBlockModel(state); + List upwardQuads = model.getQuads(state, Direction.UP, RandomSource.create(QUAD_SEED)); + TextureAtlasSprite sprite = firstSprite(upwardQuads); + int tintIndex = -1; + if (sprite == null) { + sprite = model.getParticleIcon(); + } else if (!upwardQuads.isEmpty()) { + tintIndex = upwardQuads.get(0).getTintIndex(); + } + + if (sprite == null) { + return new ResolvedTexture(FALLBACK_TEXTURE, 0xFFFFFFFF); + } + + int tint = 0xFFFFFFFF; + if (tintIndex >= 0) { + BlockColors colors = minecraft.getBlockColors(); + int color = colors.getColor(state, minecraft.level, pos, tintIndex); + if (color != -1) { + tint = 0xFF000000 | color; + } + } + + ResourceLocation tiled = buildTiledSkin(minecraft, sprite.contents().name()); + return new ResolvedTexture(tiled, tint); + } + + private static ResourceLocation buildTiledSkin(Minecraft minecraft, ResourceLocation spriteId) { + ResourceLocation source = new ResourceLocation( + spriteId.getNamespace(), + "textures/" + spriteId.getPath() + ".png" + ); + ResourceLocation target = new ResourceLocation( + spriteId.getNamespace(), + "dynamic/tiger_eye_camouflage/" + spriteId.getPath() + ); + + try (InputStream stream = openStream(minecraft, source)) { + if (stream == null) { + return FALLBACK_TEXTURE; + } + + 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); + for (int y = 0; y < SKIN_SIZE; y++) { + for (int x = 0; x < SKIN_SIZE; x++) { + canvas.setPixelRGBA(x, y, sourceImage.getPixelRGBA(x % tileWidth, y % tileHeight)); + } + } + + minecraft.getTextureManager().register(target, new DynamicTexture(canvas)); + return target; + } + } catch (IOException e) { + return FALLBACK_TEXTURE; + } + } + + private static InputStream openStream(Minecraft minecraft, ResourceLocation location) { + return minecraft.getResourceManager().getResource(location) + .map(resource -> { + try { + return resource.open(); + } catch (IOException e) { + return null; + } + }) + .orElse(null); + } + + private static TextureAtlasSprite firstSprite(List quads) { + if (quads == null || quads.isEmpty()) { + return null; + } + for (BakedQuad quad : quads) { + if (quad != null && quad.getSprite() != null) { + return quad.getSprite(); + } + } + return null; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ToreterrorRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ToreterrorRenderer.java new file mode 100644 index 00000000..cba019e3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ToreterrorRenderer.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.ToreterrorModel; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class ToreterrorRenderer extends GeoEntityRenderer { + + public ToreterrorRenderer(EntityRendererProvider.Context context) { + super(context, new ToreterrorModel()); + this.shadowRadius = 1.6F; + } + + @Override + protected float getDeathMaxRotation(ToreterrorEntity animatable) { + return 0.0F; + } +} 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 new file mode 100644 index 00000000..423eeb70 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TriffidRenderer.java @@ -0,0 +1,18 @@ +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/UpwardFallingBlockRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java new file mode 100644 index 00000000..3b4f647f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; + +public class UpwardFallingBlockRenderer extends EntityRenderer { + + public UpwardFallingBlockRenderer(EntityRendererProvider.Context context) { + super(context); + this.shadowRadius = 0.5F; + } + + @Override + public void render(UpwardFallingBlockEntity entity, float yaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int light) { + BlockState blockState = entity.getBlockState(); + if (blockState.isAir()) return; + + poseStack.pushPose(); + poseStack.translate(-0.5, 0.0, -0.5); + Minecraft.getInstance().getBlockRenderer().renderSingleBlock( + blockState, poseStack, bufferSource, light, OverlayTexture.NO_OVERLAY + ); + poseStack.popPose(); + + super.render(entity, yaw, partialTick, poseStack, bufferSource, light); + } + + @Override + @SuppressWarnings("deprecation") + public ResourceLocation getTextureLocation(UpwardFallingBlockEntity entity) { + return TextureAtlas.LOCATION_BLOCKS; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WaspRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WaspRenderer.java new file mode 100644 index 00000000..4dff61f4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WaspRenderer.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.WaspModel; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +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 WaspRenderer extends GeoEntityRenderer { + public WaspRenderer(EntityRendererProvider.Context context) { + super(context, new WaspModel()); + this.shadowRadius = 0.55F; + } + + @Override + public void preRender(PoseStack poseStack, WaspEntity 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); + poseStack.translate(0.0D, -0.5D, 0.0D); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WaterBombRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WaterBombRenderer.java new file mode 100644 index 00000000..c5df55d5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WaterBombRenderer.java @@ -0,0 +1,42 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.WaterBombModel; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +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 net.minecraft.util.Mth; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class WaterBombRenderer extends GeoEntityRenderer { + + public WaterBombRenderer(EntityRendererProvider.Context context) { + super(context, new WaterBombModel()); + this.shadowRadius = 0.0F; + } + + @Override + protected void applyRotations(WaterBombEntity animatable, PoseStack poseStack, float ageInTicks, float rotationYaw, float partialTick) { + float appliedYaw = Mth.rotLerp(partialTick, animatable.yRotO, animatable.getYRot()); + float appliedPitch = Mth.lerp(partialTick, animatable.xRotO, animatable.getXRot()); + poseStack.mulPose(Axis.YP.rotationDegrees(appliedYaw - 90.0F)); + poseStack.mulPose(Axis.XP.rotationDegrees(-appliedPitch)); + } + + @Override + protected float getDeathMaxRotation(WaterBombEntity animatable) { + return 0.0F; + } + + @Override + public void preRender(PoseStack poseStack, WaterBombEntity 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) { + float scale = animatable.isHuge() ? 1.5F : 0.5F; + poseStack.scale(scale, scale, scale); + super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, 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 new file mode 100644 index 00000000..006fe20a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java @@ -0,0 +1,141 @@ +package com.craisinlord.antarchy.content.client.renderer.glimmer; + +import com.craisinlord.antarchy.content.client.model.glimmer.GlimmerFrogModel; +import com.craisinlord.antarchy.content.client.model.glimmer.GlimmerModel; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelLayers; +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 net.minecraft.util.Mth; +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 GlimmerRenderer extends GeoEntityRenderer { + private static final float SHADOW_RADIUS = 0.0F; + private static final float COOLDOWN_DIM_MIN = 0.35F; + + private final GlimmerFrogModel frogModel; + + public GlimmerRenderer(EntityRendererProvider.Context context) { + super(context, new GlimmerModel()); + this.shadowRadius = SHADOW_RADIUS; + this.addRenderLayer(new GlimmerEmissiveLayer(this)); + this.frogModel = new GlimmerFrogModel(context.bakeLayer(ModelLayers.FROG)); + } + + @Override + public void render(GlimmerEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + if (entity.getVariant() == GlimmerVariant.FROG) { + this.renderVanillaModel(this.frogModel, entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); + return; + } + super.render(entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); + } + + private void renderVanillaModel(EntityModel model, GlimmerEntity entity, float entityYaw, float partialTick, + PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + poseStack.pushPose(); + 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); + poseStack.translate(0.0F, -1.501F, 0.0F); + + float limbSwing = entity.walkAnimation.position(partialTick); + float limbSwingAmount = entity.walkAnimation.speed(partialTick); + float ageInTicks = entity.tickCount + partialTick; + float rawHeadYaw = Mth.rotLerp(partialTick, entity.yHeadRotO, entity.yHeadRot) - bodyYaw; + float maxHeadYaw = entity.getMaxHeadYRot(); + float netHeadYaw = Mth.clamp(Mth.wrapDegrees(rawHeadYaw), -maxHeadYaw, maxHeadYaw); + float headPitch = Mth.lerp(partialTick, entity.xRotO, entity.getXRot()); + + model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + + float brightness = brightnessFor(entity, partialTick); + float fadeAlpha = entity.getFadeAlpha(partialTick); + + ResourceLocation texture = entity.getVariant().getBehavior().texture(entity); + VertexConsumer buffer = bufferSource.getBuffer(RenderType.entityCutoutNoCull(texture)); + model.renderToBuffer(poseStack, buffer, packedLight, OverlayTexture.NO_OVERLAY, brightness, brightness, brightness, fadeAlpha); + + ResourceLocation emissiveTexture = entity.getVariant().getBehavior().emissiveTexture(entity); + VertexConsumer emissiveBuffer = bufferSource.getBuffer(RenderType.eyes(emissiveTexture)); + model.renderToBuffer(poseStack, emissiveBuffer, 0xF000F0, OverlayTexture.NO_OVERLAY, brightness, brightness, brightness, fadeAlpha); + + poseStack.popPose(); + } + + private static int packColor(float alpha, float brightness) { + int alphaByte = Mth.clamp(Math.round(alpha * 255.0F), 0, 255); + int colorByte = Mth.clamp(Math.round(brightness * 255.0F), 0, 255); + return (alphaByte << 24) | (colorByte << 16) | (colorByte << 8) | colorByte; + } + + private static float brightnessFor(GlimmerEntity entity, float partialTick) { + float cooldownFraction = entity.getAbilityCooldownFraction(partialTick); + return Mth.lerp(cooldownFraction, 1.0F, COOLDOWN_DIM_MIN); + } + + @Override + public RenderType getRenderType(GlimmerEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityTranslucent(texture); + } + + @Override + public software.bernie.geckolib.core.object.Color getRenderColor(GlimmerEntity animatable, float partialTick, int packedLight) { + float brightness = brightnessFor(animatable, partialTick); + return software.bernie.geckolib.core.object.Color.ofRGBA(brightness, brightness, brightness, animatable.getFadeAlpha(partialTick)); + } + + @Override + public void preRender(PoseStack poseStack, GlimmerEntity 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 = SHADOW_RADIUS; + } + + private static final class GlimmerEmissiveLayer extends GeoRenderLayer { + private GlimmerEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, GlimmerEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + ResourceLocation texture = animatable.getVariant().getBehavior().emissiveTexture(animatable); + RenderType emissiveType = RenderType.eyes(texture); + VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + emissiveType, + emissiveBuffer, + partialTick, + 0xF000F0, + OverlayTexture.NO_OVERLAY, + brightnessFor(animatable, partialTick), + brightnessFor(animatable, partialTick), + brightnessFor(animatable, partialTick), + animatable.getFadeAlpha(partialTick) + ); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/screen/DorrieInventoryScreen.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/screen/DorrieInventoryScreen.java new file mode 100644 index 00000000..dff5600b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/screen/DorrieInventoryScreen.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.content.client.screen; + +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import com.craisinlord.antarchy.content.menu.DorrieInventoryMenu; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.gui.screens.inventory.InventoryScreen; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + +public class DorrieInventoryScreen extends AbstractContainerScreen { + private static final ResourceLocation HORSE_INVENTORY_TEXTURE = + new ResourceLocation("textures/gui/container/horse.png"); + private static final ResourceLocation CHEST_SLOTS_SPRITE = + new ResourceLocation("container/horse/chest_slots"); + + private static final int CHEST_SLOTS_TEX_WIDTH = 90; + private static final int CHEST_SLOTS_TEX_HEIGHT = 54; + + private float xMouse; + private float yMouse; + + public DorrieInventoryScreen(DorrieInventoryMenu menu, Inventory playerInventory, Component title) { + super(menu, playerInventory, title); + this.imageWidth = 176; + this.imageHeight = 166; + this.inventoryLabelY = this.imageHeight - 94; + } + + @Override + protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int mouseY) { + int left = this.leftPos; + int top = this.topPos; + + guiGraphics.blit(HORSE_INVENTORY_TEXTURE, left, top, 0, 0, this.imageWidth, this.imageHeight); + + int storageWidth = DorrieInventoryMenu.STORAGE_COLUMNS * 18; + guiGraphics.blit(HORSE_INVENTORY_TEXTURE, left + 79, top + 17, 0, this.imageHeight, storageWidth, CHEST_SLOTS_TEX_HEIGHT); + guiGraphics.blit(HORSE_INVENTORY_TEXTURE, left + 7, top + 17, 0, this.imageHeight + CHEST_SLOTS_TEX_HEIGHT, 18, 18); + + DorrieEntity dorrie = this.menu.dorrie(); + if (dorrie != null) { + InventoryScreen.renderEntityInInventoryFollowsMouse( + guiGraphics, + left + 39, + top + 44, + 24, + (float) (left + 39) - this.xMouse, + (float) (top + 25) - this.yMouse, + dorrie + ); + } + } + + @Override + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + this.xMouse = mouseX; + this.yMouse = mouseY; + this.renderBackground(guiGraphics); + super.render(guiGraphics, mouseX, mouseY, partialTick); + this.renderTooltip(guiGraphics, mouseX, mouseY); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/CaterpillarCommand.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/CaterpillarCommand.java new file mode 100644 index 00000000..990cca73 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/CaterpillarCommand.java @@ -0,0 +1,43 @@ +package com.craisinlord.antarchy.content.command; + +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +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 CaterpillarCommand { + private CaterpillarCommand() { + } + + public static void register(CommandDispatcher dispatcher) { + dispatcher.register( + Commands.literal("caterpillar") + .requires(source -> source.hasPermission(2)) + .then(Commands.literal("pupate") + .then(Commands.argument("targets", EntityArgument.entities()) + .executes(context -> forcePupation(context, EntityArgument.getEntities(context, "targets"))))) + ); + } + + private static int forcePupation(CommandContext context, Collection targets) { + int affected = 0; + for (Entity target : targets) { + if (target instanceof CaterpillarEntity caterpillar) { + caterpillar.forcePupation(); + affected++; + } + } + + final int affectedCount = affected; + context.getSource().sendSuccess( + () -> Component.literal("Forced pupation for " + affectedCount + " caterpillar(s)"), + true + ); + return affectedCount; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/CavarynCommand.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/CavarynCommand.java new file mode 100644 index 00000000..239e313b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/CavarynCommand.java @@ -0,0 +1,71 @@ +package com.craisinlord.antarchy.content.command; + +import com.craisinlord.antarchy.content.horde.CavarynHordeManager; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.arguments.IntegerArgumentType; +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.server.level.ServerPlayer; + +public final class CavarynCommand { + private CavarynCommand() { + } + + public static void register(CommandDispatcher dispatcher) { + dispatcher.register( + Commands.literal("cavaryn") + .requires(source -> source.hasPermission(2)) + .then(Commands.literal("horde") + .then(Commands.literal("get") + .executes(context -> getHordeLevel(context, java.util.List.of(context.getSource().getPlayerOrException()))) + .then(Commands.argument("targets", EntityArgument.players()) + .executes(context -> getHordeLevel(context, EntityArgument.getPlayers(context, "targets"))))) + .then(Commands.literal("set") + .then(Commands.argument("level", IntegerArgumentType.integer(0, CavarynHordeManager.maxHordeLevel())) + .executes(context -> setHordeLevel(context, IntegerArgumentType.getInteger(context, "level"), java.util.List.of(context.getSource().getPlayerOrException()))) + .then(Commands.argument("targets", EntityArgument.players()) + .executes(context -> setHordeLevel(context, IntegerArgumentType.getInteger(context, "level"), EntityArgument.getPlayers(context, "targets"))))))) + ); + } + + private static int getHordeLevel(CommandContext context, Collection targets) { + int found = 0; + for (ServerPlayer target : targets) { + int levelValue = CavarynHordeManager.getHordeLevel(target); + if (levelValue < 0) { + context.getSource().sendSuccess( + () -> Component.literal(target.getName().getString() + ": not in Cavaryn"), + false + ); + continue; + } + + found++; + context.getSource().sendSuccess( + () -> Component.literal(target.getName().getString() + ": Cavaryn horde level " + levelValue + "/" + CavarynHordeManager.maxHordeLevel()), + false + ); + } + return found; + } + + private static int setHordeLevel(CommandContext context, int levelValue, Collection targets) { + int changed = 0; + for (ServerPlayer target : targets) { + if (CavarynHordeManager.setHordeLevel(target, levelValue) >= 0) { + changed++; + } + } + + int finalChanged = changed; + context.getSource().sendSuccess( + () -> Component.literal("Set Cavaryn horde level to " + levelValue + " for " + finalChanged + " player(s) in Cavaryn"), + true + ); + return changed; + } +} 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 new file mode 100644 index 00000000..df009da1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/GravityCommand.java @@ -0,0 +1,75 @@ +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/component/AntarchyItemComponent.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/component/AntarchyItemComponent.java new file mode 100644 index 00000000..c1c932bd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/component/AntarchyItemComponent.java @@ -0,0 +1,64 @@ +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 new file mode 100644 index 00000000..09a8a76c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/component/AntarchyItemTag.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.content.component; + +import java.util.function.Consumer; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; + +public final class AntarchyItemTag { + private AntarchyItemTag() { + } + + public static void update(ItemStack stack, Consumer updater) { + updater.accept(stack.getOrCreateTag()); + } + + public static CompoundTag getOrEmpty(ItemStack stack) { + return stack.hasTag() ? stack.getTag() : new CompoundTag(); + } +} 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 new file mode 100644 index 00000000..993855ec --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java @@ -0,0 +1,524 @@ +package com.craisinlord.antarchy.content.creative; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; +import com.craisinlord.antarchy.content.item.GlimmerBottleItem; +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; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionUtils; +import net.minecraft.world.level.ItemLike; + +public final class CreativeTabContents { + private CreativeTabContents() {} + + private record CatalogEntry(String path, String neoTabPath, String insertAfterPath) {} + + public interface AntarchyTabOutput { + void accept(ItemLike item); + void accept(ItemStack stack); + } + + public interface NeoForgeVanillaTabOutput extends AntarchyTabOutput { + void insertAfter(ItemLike anchor, ItemLike item); + } + + private static final List CATALOG = List.of( + entry("ouranwood_log", "building_blocks"), + entry("ouranwood_wood", "building_blocks"), + entry("mossy_ouranwood_log", "building_blocks"), + entry("mossy_ouranwood_wood", "building_blocks"), + entry("stripped_ouranwood_log", "building_blocks"), + entry("stripped_ouranwood_wood", "building_blocks"), + entry("ouranwood_planks", "building_blocks"), + entry("ouranwood_stairs", "building_blocks"), + entry("ouranwood_slab", "building_blocks"), + entry("ouranwood_fence", "building_blocks"), + entry("ouranwood_fence_gate", "building_blocks"), + entry("ouranwood_boat", "building_blocks"), + entry("ouranwood_chest_boat", "building_blocks"), + entry("ouranwood_door", "building_blocks"), + entry("ouranwood_trapdoor", "building_blocks"), + entry("ouranwood_pressure_plate", "building_blocks"), + entry("ouranwood_button", "building_blocks"), + entry("ouranwood_sign", "building_blocks"), + entry("ouranwood_hanging_sign", "building_blocks"), + entry("peach_log", "building_blocks"), + entry("peach_wood", "building_blocks"), + entry("stripped_peach_log", "building_blocks"), + entry("stripped_peach_wood", "building_blocks"), + entry("peach_planks", "building_blocks"), + entry("peach_stairs", "building_blocks"), + entry("peach_slab", "building_blocks"), + entry("peach_fence", "building_blocks"), + entry("peach_fence_gate", "building_blocks"), + entry("peach_boat", "building_blocks"), + entry("peach_chest_boat", "building_blocks"), + entry("peach_door", "building_blocks"), + entry("peach_trapdoor", "building_blocks"), + entry("peach_pressure_plate", "building_blocks"), + 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("shellstone", "building_blocks"), + entry("shellstone_stairs", "building_blocks"), + entry("shellstone_slab", "building_blocks"), + entry("shellstone_wall", "building_blocks"), + entry("polished_shellstone", "building_blocks"), + entry("polished_shellstone_stairs", "building_blocks"), + entry("polished_shellstone_slab", "building_blocks"), + entry("polished_shellstone_wall", "building_blocks"), + entry("shellstone_bricks", "building_blocks"), + entry("shellstone_brick_stairs", "building_blocks"), + entry("shellstone_brick_slab", "building_blocks"), + entry("shellstone_brick_wall", "building_blocks"), + entry("chiseled_shellstone", "building_blocks"), + entry("mossy_shellstone_bricks", "building_blocks"), + entry("mossy_shellstone_brick_stairs", "building_blocks"), + entry("mossy_shellstone_brick_slab", "building_blocks"), + entry("mossy_shellstone_brick_wall", "building_blocks"), + entry("cracked_shellstone_bricks", "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("nyxite", "building_blocks"), + entry("nyxite_stairs", "building_blocks"), + entry("nyxite_slab", "building_blocks"), + entry("nyxite_wall", "building_blocks"), + entry("polished_nyxite", "building_blocks"), + entry("polished_nyxite_stairs", "building_blocks"), + entry("polished_nyxite_slab", "building_blocks"), + entry("polished_nyxite_wall", "building_blocks"), + entry("polished_nyxite_pressure_plate", "building_blocks"), + entry("polished_nyxite_button", "building_blocks"), + entry("nyxite_bricks", "building_blocks"), + entry("nyxite_brick_stairs", "building_blocks"), + entry("nyxite_brick_slab", "building_blocks"), + entry("nyxite_brick_wall", "building_blocks"), + entry("chiseled_nyxite", "building_blocks"), + entry("pale_nyxite", "building_blocks"), + entry("nyxite_spike", "building_blocks"), + entry("potent_nyxite", "building_blocks"), + entry("antimetal", "building_blocks"), + entry("polished_antimetal", "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("umbral_moss_block", "building_blocks"), + entry("umbral_moss_carpet", "building_blocks"), + entry("dream_torch", "building_blocks"), + entry("dream_lantern", "building_blocks"), + entry("dream_campfire", "building_blocks"), + entry("dream_sand", "building_blocks"), + entry("dream_sandstone", "building_blocks"), + entry("chiseled_dream_sandstone", "building_blocks"), + entry("cut_dream_sandstone", "building_blocks"), + entry("smooth_dream_sandstone", "building_blocks"), + entry("dream_sandstone_stairs", "building_blocks"), + entry("dream_sandstone_slab", "building_blocks"), + entry("dream_sandstone_wall", "building_blocks"), + entry("smooth_dream_sandstone_stairs", "building_blocks"), + entry("smooth_dream_sandstone_slab", "building_blocks"), + entry("cut_dream_sandstone_slab", "building_blocks"), + entry("budding_blood_crystal", "building_blocks"), + entry("blood_crystal_block", "building_blocks"), + entry("blood_crystal_cluster", "building_blocks"), + entry("small_blood_crystal_bud", "building_blocks"), + entry("medium_blood_crystal_bud", "building_blocks"), + entry("large_blood_crystal_bud", "building_blocks"), + entry("myrmite", "building_blocks"), + entry("biomite", "building_blocks"), + entry("biomite_turf", "building_blocks"), + entry("biowart", "building_blocks"), + entry("biowart_tendrils", "building_blocks"), + entry("broodstone", "building_blocks"), + entry("polished_broodstone", "building_blocks"), + entry("chiseled_broodstone", "building_blocks"), + entry("broodstone_bricks", "building_blocks"), + entry("broodstone_stairs", "building_blocks"), + entry("broodstone_slab", "building_blocks"), + entry("broodstone_wall", "building_blocks"), + entry("polished_broodstone_stairs", "building_blocks"), + entry("polished_broodstone_slab", "building_blocks"), + entry("polished_broodstone_wall", "building_blocks"), + entry("broodstone_brick_stairs", "building_blocks"), + entry("broodstone_brick_slab", "building_blocks"), + entry("broodstone_brick_wall", "building_blocks"), + entry("myrmite_coal_ore", "building_blocks"), + entry("broodstone_uranium_ore", "building_blocks"), + entry("broodstone_titanium_ore", "building_blocks"), + entry("bile_vein", "building_blocks"), + entry("chitin_block", "building_blocks"), + entry("chitin_spike", "building_blocks"), + entry("amber_moss_block", "building_blocks"), + entry("amber_moss_carpet", "building_blocks"), + entry("uranium_block", "building_blocks"), + entry("raw_uranium_block", "building_blocks"), + entry("cut_uranium", "building_blocks"), + entry("cut_uranium_stairs", "building_blocks"), + entry("cut_uranium_slab", "building_blocks"), + entry("chiseled_uranium", "building_blocks"), + entry("uranium_door", "building_blocks"), + entry("uranium_trapdoor", "building_blocks"), + entry("uranium_bars", "building_blocks"), + entry("uranium_bulb", "building_blocks"), + entry("bluestone_block", "redstone_blocks"), + entry("bluestone_repeater", "redstone_blocks"), + entry("bluestone_comparator", "redstone_blocks"), + entry("bluestone_torch", "redstone_blocks"), + entry("titanium_block", "building_blocks"), + entry("raw_titanium_block", "building_blocks"), + entry("cut_titanium", "building_blocks"), + entry("cut_titanium_stairs", "building_blocks"), + entry("cut_titanium_slab", "building_blocks"), + entry("chiseled_titanium", "building_blocks"), + entry("titanium_door", "building_blocks"), + entry("titanium_trapdoor", "building_blocks"), + entry("titanium_bars", "building_blocks"), + entry("titanium_bulb", "building_blocks"), + entry("ouranwood_leaves", "natural_blocks"), + entry("ouranwood_acorn", "natural_blocks"), + entry("peach_leaves", "natural_blocks"), + entry("peach_sapling", "natural_blocks"), + entry("duplicator_log", "natural_blocks"), + entry("duplicator_sapling", "natural_blocks"), + entry("orange_milkweed", "natural_blocks"), + entry("pink_milkweed", "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("creepvine", "natural_blocks"), + entry("hanging_creeproots", "natural_blocks"), + entry("molting_vines", "natural_blocks"), + entry("glowcap_mushroom", "natural_blocks"), + 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("bed_bug_egg", "natural_blocks"), + entry("creeping_horror_egg", "natural_blocks"), + entry("lurking_terror_egg", "natural_blocks"), + entry("jumpy_bug_egg", "natural_blocks"), + entry("spit_bug_egg", "natural_blocks"), + entry("jerry_egg", "natural_blocks"), + entry("wasp_nest", "natural_blocks"), + entry("red_ant_nest", "natural_blocks"), + entry("brown_ant_nest", "natural_blocks"), + entry("rainbow_ant_nest", "natural_blocks"), + entry("termite_nest", "natural_blocks"), + entry("uranium_ore", "natural_blocks"), + entry("deepslate_uranium_ore", "natural_blocks"), + entry("titanium_ore", "natural_blocks"), + entry("deepslate_titanium_ore", "natural_blocks"), + entry("bluestone_ore", "redstone_blocks"), + entry("corn_seeds", "natural_blocks"), + entry("star_coral", "natural_blocks"), + entry("star_coral_fan", "natural_blocks"), + entry("star_coral_block", "natural_blocks"), + entry("dead_star_coral", "natural_blocks"), + entry("dead_star_coral_fan", "natural_blocks"), + entry("dead_star_coral_block", "natural_blocks"), + entry("duct_tape", "tools_and_utilities", "shears"), + 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("reverie_bottle", "tools_and_utilities"), + entry("glimmer_bottle", "tools_and_utilities"), + entry("critter_cage", "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("basilisk_dagger", "combat"), + entry("ultimate_helmet", "combat"), + entry("ultimate_chestplate", "combat"), + entry("ultimate_leggings", "combat"), + entry("ultimate_boots", "combat"), + entry("ultimate_sword", "combat"), + entry("ultimate_bow", "combat"), + entry("ultimate_crossbow", "combat"), + entry("squidzooka", "combat"), + entry("rpo_launcher", "combat"), + entry("krakens_grasp", "combat"), + entry("shrink_ray", "combat"), + entry("growth_ray", "combat"), + entry("gravity_gun", "combat"), + entry("water_cannon", "combat"), + entry("attitude_adjuster", "combat"), + entry("lucid_pearl", "combat"), + entry("primordial_helmet", "combat"), + entry("primordial_chestplate", "combat"), + entry("primordial_leggings", "combat"), + entry("primordial_boots", "combat"), + entry("nightmare_helmet", "combat"), + entry("nightmare_chestplate", "combat"), + entry("nightmare_leggings", "combat"), + entry("nightmare_boots", "combat"), + entry("nightmare_sword", "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("moggles", "combat"), + entry("scorpion_whip", "combat"), + entry("fallen_king_crown", "combat"), + entry("brutalfly_elytra", "combat"), + entry("jumpy_boots", "combat"), + entry("raw_uranium_scrap", "ingredients"), + entry("raw_titanium_scrap", "ingredients"), + entry("bluestone", "redstone_blocks"), + entry("raw_uranium", "ingredients"), + entry("raw_titanium", "ingredients"), + entry("uranium_nugget", "ingredients"), + entry("titanium_nugget", "ingredients"), + entry("uranium_ingot", "ingredients"), + entry("titanium_ingot", "ingredients"), + entry("cloud_shark_fin", "ingredients"), + entry("cloud_shark_fin_soup", "ingredients"), + entry("basilisk_fang", "ingredients"), + entry("nightmare_scale", "ingredients"), + entry("molevore_nose", "ingredients"), + entry("moleworm", "ingredients"), + entry("mud_pie", "ingredients"), + entry("lucid_eye", "ingredients"), + entry("blood_crystal_shard", "ingredients"), + entry("blood_crystal_apple", "ingredients"), + entry("spirit_apple", "ingredients"), + entry("mantis_claw", "combat"), + entry("hercules_horn", "ingredients"), + entry("king_scale", "ingredients"), + entry("queen_scale", "ingredients"), + entry("chitin", "ingredients"), + entry("jerry_nucleus", "ingredients"), + entry("stink_bug", "ingredients"), + entry("brutalfly_wing", "ingredients"), + entry("primordial_scute", "ingredients"), + entry("triffid_goo", "ingredients"), + entry("vortex_eye", "ingredients"), + entry("emperor_scorpion_stinger", "ingredients"), + entry("kraken_tooth", "ingredients"), + entry("kraken_tentacle", "ingredients"), + entry("jumpy_bug_leg", "ingredients"), + entry("cornea_ear", "ingredients"), + entry("corn", "ingredients"), + entry("high_fructose_corn_syrup", "ingredients"), + entry("peach", "ingredients"), + entry("peach_pie", "ingredients"), + entry("cornbread", "ingredients"), + entry("popcorn", "ingredients"), + entry("raw_corndog", "ingredients"), + entry("cooked_corndog", "ingredients"), + entry("raw_venison", "ingredients"), + entry("cooked_venison", "ingredients"), + entry("raw_bug_meat", "ingredients"), + entry("cooked_bug_meat", "ingredients"), + entry("broodfruit", "ingredients"), + entry("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("easter_bunny_spawn_egg", "spawn_eggs"), + entry("flying_squirrel_spawn_egg", "spawn_eggs"), + entry("caterpillar_spawn_egg", "spawn_eggs"), + entry("butterfly_spawn_egg", "spawn_eggs"), + entry("reverie_spawn_egg", "spawn_eggs"), + entry("brutalfly_spawn_egg", "spawn_eggs"), + entry("red_ant_spawn_egg", "spawn_eggs"), + entry("brown_ant_spawn_egg", "spawn_eggs"), + entry("rainbow_ant_spawn_egg", "spawn_eggs"), + entry("termite_spawn_egg", "spawn_eggs"), + entry("moleworm_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("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("spit_bug_spawn_egg", "spawn_eggs"), + entry("stink_bug_spawn_egg", "spawn_eggs"), + entry("cloud_shark_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("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("hercules_beetle_spawn_egg", "spawn_eggs"), + entry("jerry_spawn_egg", "spawn_eggs"), + entry("dorrie_spawn_egg", "spawn_eggs"), + entry("ouranwood_deer_spawn_egg", "spawn_eggs"), + entry("glimmer_spawn_egg", "spawn_eggs"), + entry("elka_spawn_egg", "spawn_eggs") + ); + + private static final List ANTARCHY_POTION_FAMILIES = List.of( + "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" + ); + + private static final Map ORDER_INDEX = createOrderIndex(); + + private static CatalogEntry entry(String path, String neoTabPath) { + return new CatalogEntry(path, neoTabPath, null); + } + + private static CatalogEntry entry(String path, String neoTabPath, String insertAfterPath) { + return new CatalogEntry(path, neoTabPath, insertAfterPath); + } + + private static Map createOrderIndex() { + HashMap index = new HashMap<>(); + for (int i = 0; i < CATALOG.size(); i++) { + index.put(CATALOG.get(i).path(), i); + } + return index; + } + + public static int orderIndex(Item item) { + return ORDER_INDEX.getOrDefault(path(item), Integer.MAX_VALUE); + } + + public static void populateAntarchyTab(AntarchyTabOutput output) { + for (CatalogEntry entry : CATALOG) { + if ("glimmer_bottle".equals(entry.path())) { + for (GlimmerVariant variant : GlimmerVariant.values()) { + output.accept(GlimmerBottleItem.create(variant)); + } + continue; + } + output.accept(item(entry.path())); + } + for (String potionPath : ANTARCHY_POTION_FAMILIES) { + acceptPotionFamily(output, potionPath); + } + } + + public static boolean populateNeoForgeVanillaTab(ResourceKey tabKey, HolderLookup.Provider holders, + NeoForgeVanillaTabOutput output) { + String tabPath = tabKey.location().getPath(); + boolean matched = false; + for (CatalogEntry entry : CATALOG) { + if (!tabPath.equals(entry.neoTabPath())) { + continue; + } + matched = true; + if (entry.insertAfterPath() != null) { + output.insertAfter(vanillaItem(entry.insertAfterPath()), item(entry.path())); + continue; + } + if ("combat".equals(tabPath)) { + if (isUltimateArmor(entry.path())) { + output.accept(UltimateGearHelper.createUltimateArmorStack(item(entry.path()), holders)); + continue; + } + if ("ultimate_bow".equals(entry.path())) { + output.accept(UltimateGearHelper.createUltimateBowStack(item(entry.path()), holders)); + continue; + } + } + output.accept(item(entry.path())); + } + if ("combat".equals(tabPath)) { + for (String potionPath : ANTARCHY_POTION_FAMILIES) { + Potion potion = potion(potionPath); + if (potion != null) { + output.accept(PotionUtils.setPotion(new ItemStack(Items.POTION), potion)); + } + } + matched = true; + } + return matched; + } + + private static boolean isUltimateArmor(String path) { + return "ultimate_helmet".equals(path) + || "ultimate_chestplate".equals(path) + || "ultimate_leggings".equals(path) + || "ultimate_boots".equals(path); + } + + private static void acceptPotionFamily(AntarchyTabOutput output, String path) { + Potion potion = potion(path); + if (potion == null) { + return; + } + output.accept(PotionUtils.setPotion(new ItemStack(Items.POTION), potion)); + output.accept(PotionUtils.setPotion(new ItemStack(Items.SPLASH_POTION), potion)); + output.accept(PotionUtils.setPotion(new ItemStack(Items.LINGERING_POTION), potion)); + output.accept(PotionUtils.setPotion(new ItemStack(Items.TIPPED_ARROW), potion)); + } + + private static String path(Item item) { + return BuiltInRegistries.ITEM.getKey(item).getPath(); + } + + private static Item item(String path) { + return BuiltInRegistries.ITEM.get(new ResourceLocation(Antarchy.MODID, path)); + } + + private static Item vanillaItem(String path) { + return BuiltInRegistries.ITEM.get(new ResourceLocation(path)); + } + + private static Potion potion(String path) { + return BuiltInRegistries.POTION.get(new ResourceLocation(Antarchy.MODID, path)); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabOrder.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabOrder.java new file mode 100644 index 00000000..c0197a1c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabOrder.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.content.creative; + +import java.util.Comparator; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.item.Item; + +public final class CreativeTabOrder { + private CreativeTabOrder() {} + + public static final Comparator COMPARATOR = + Comparator.comparingInt(CreativeTabContents::orderIndex) + .thenComparing(CreativeTabOrder::path); + + public static int group(Item item) { + return CreativeTabContents.orderIndex(item); + } + + public static int subOrder(Item item) { + return 0; + } + + private static String path(Item item) { + return BuiltInRegistries.ITEM.getKey(item).getPath(); + } +} 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 new file mode 100644 index 00000000..c9d80c99 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java @@ -0,0 +1,158 @@ +package com.craisinlord.antarchy.content.damage; + +import net.minecraft.core.registries.Registries; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +public final class AntarchyDamageSources { + public static DamageSource krakenMauling(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.KRAKEN_MAULING), + attacker + ); + } + + public static DamageSource krakenLightning(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.KRAKEN_LIGHTNING), + attacker + ); + } + + public static DamageSource bedBugBite(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.BED_BUG_BITE), + attacker + ); + } + + public static DamageSource nightmareMauling(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.NIGHTMARE_MAULING), + attacker + ); + } + + public static DamageSource basiliskBite(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.BASILISK_BITE), + attacker + ); + } + + public static DamageSource emperorScorpionSting(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.EMPEROR_SCORPION_STING), + attacker + ); + } + + public static DamageSource triffidMauling(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.TRIFFID_MAULING), + attacker + ); + } + + public static DamageSource triffidSwallow(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.TRIFFID_SWALLOW), + attacker + ); + } + + public static DamageSource corneaStalkPrick(Level level) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.CORNEA_STALK_PRICK) + ); + } + + public static DamageSource toreterrorSpin(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.TORETERROR_SPIN), + attacker + ); + } + + public static DamageSource toreterrorJump(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.TORETERROR_JUMP), + attacker + ); + } + + public static DamageSource rpoLauncherBlast(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.RPO_LAUNCHER_BLAST), + attacker + ); + } + + public static DamageSource spitBugDisrespect(ServerLevel level, @Nullable Entity directEntity, @Nullable Entity causingEntity) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.SPIT_BUG_DISRESPECT), + directEntity, + causingEntity + ); + } + + public static DamageSource jumpyBugJump(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.JUMPY_BUG_JUMP), + attacker + ); + } + + public static DamageSource herculesBeetleObliteration(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.HERCULES_BEETLE_OBLITERATION), + attacker + ); + } + + public static DamageSource waterSoaked(Level level, @Nullable Entity directEntity, @Nullable Entity causingEntity) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.WATER_SOAKED), + directEntity, + 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 new file mode 100644 index 00000000..baa21014 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java @@ -0,0 +1,108 @@ +package com.craisinlord.antarchy.content.damage; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.damagesource.DamageType; + +public final class AntarchyDamageTypes { + public static final ResourceKey KRAKEN_MAULING = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "kraken_mauling") + ); + + public static final ResourceKey KRAKEN_LIGHTNING = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "kraken_lightning") + ); + + public static final ResourceKey BED_BUG_BITE = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "bed_bug_bite") + ); + + public static final ResourceKey NIGHTMARE_MAULING = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "nightmare_mauling") + ); + + public static final ResourceKey BASILISK_BITE = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "basilisk_bite") + ); + + public static final ResourceKey EMPEROR_SCORPION_STING = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "emperor_scorpion_sting") + ); + + public static final ResourceKey TRIFFID_MAULING = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "triffid_mauling") + ); + + public static final ResourceKey TRIFFID_SWALLOW = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "triffid_swallow") + ); + + public static final ResourceKey CORNEA_STALK_PRICK = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "cornea_stalk_prick") + ); + + public static final ResourceKey TORETERROR_SPIN = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "toreterror_spin") + ); + + public static final ResourceKey TORETERROR_JUMP = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "toreterror_jump") + ); + + public static final ResourceKey WATER_SOAKED = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "water_soaked") + ); + + public static final ResourceKey RPO_LAUNCHER_BLAST = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "rpo_launcher_blast") + ); + + public static final ResourceKey SPIT_BUG_DISRESPECT = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "spit_bug_disrespect") + ); + + public static final ResourceKey JUMPY_BUG_JUMP = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "jumpy_bug_jump") + ); + + public static final ResourceKey HERCULES_BEETLE_OBLITERATION = + ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation(Antarchy.MODID, "hercules_beetle_obliteration") + ); + + private AntarchyDamageTypes() { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/RpoLauncherDispenseBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/RpoLauncherDispenseBehavior.java new file mode 100644 index 00000000..99381637 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/RpoLauncherDispenseBehavior.java @@ -0,0 +1,42 @@ +package com.craisinlord.antarchy.content.dispenser; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import net.minecraft.core.Direction; +import net.minecraft.core.Position; +import net.minecraft.core.BlockSource; +import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.block.DispenserBlock; + +public class RpoLauncherDispenseBehavior extends DefaultDispenseItemBehavior { + @Override + protected ItemStack execute(BlockSource source, ItemStack stack) { + Direction direction = source.getBlockState().getValue(DispenserBlock.FACING); + Position position = DispenserBlock.getDispensePosition(source); + + OctopusBombEntity bomb = AntarchyObjects.OCTOPUS_BOMB.get().create(source.getLevel()); + if (bomb == null) return super.execute(source, stack); + + bomb.setPos(position.x(), position.y(), position.z()); + Vec3 vel = new Vec3(direction.getStepX(), direction.getStepY(), direction.getStepZ()) + .normalize() + .scale(AntarchySettings.rpoLauncherLaunchVelocity()); + bomb.launchAsProjectile(null, vel); + source.getLevel().addFreshEntity(bomb); + + if (stack.isDamageableItem()) { + int nextDamage = stack.getDamageValue() + 1; + if (nextDamage >= stack.getMaxDamage()) { + stack.shrink(1); + } else { + stack.setDamageValue(nextDamage); + } + } else { + stack.shrink(1); + } + return stack; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/SizeRayDispenseBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/SizeRayDispenseBehavior.java new file mode 100644 index 00000000..6328faf0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/SizeRayDispenseBehavior.java @@ -0,0 +1,42 @@ +package com.craisinlord.antarchy.content.dispenser; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import net.minecraft.core.Direction; +import net.minecraft.core.Position; +import net.minecraft.core.BlockSource; +import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.DispenserBlock; + +public class SizeRayDispenseBehavior extends DefaultDispenseItemBehavior { + @Override + protected ItemStack execute(BlockSource source, ItemStack stack) { + if (!AntarchySettings.sizeChangingRaysEnabled()) { + return super.execute(source, stack); + } + + if (!(stack.getItem() instanceof SizeRayItem sizeRayItem)) { + return super.execute(source, stack); + } + + Direction direction = source.getBlockState().getValue(DispenserBlock.FACING); + Position position = DispenserBlock.getDispensePosition(source); + SizeRayProjectileEntity projectile = sizeRayItem.createProjectile(source.getLevel(), stack); + projectile.setPos(position.x(), position.y(), position.z()); + projectile.shoot(direction.getStepX(), direction.getStepY() + 0.1D, direction.getStepZ(), 1.6F, 0.0F); + source.getLevel().addFreshEntity(projectile); + if (stack.isDamageableItem()) { + int nextDamage = stack.getDamageValue() + 1; + if (nextDamage >= stack.getMaxDamage()) { + stack.shrink(1); + } else { + stack.setDamageValue(nextDamage); + } + } else { + stack.shrink(1); + } + return stack; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/SquidzookaDispenseBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/SquidzookaDispenseBehavior.java new file mode 100644 index 00000000..2b365bdc --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/SquidzookaDispenseBehavior.java @@ -0,0 +1,42 @@ +package com.craisinlord.antarchy.content.dispenser; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import net.minecraft.core.Direction; +import net.minecraft.core.Position; +import net.minecraft.core.BlockSource; +import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.block.DispenserBlock; + +public class SquidzookaDispenseBehavior extends DefaultDispenseItemBehavior { + @Override + protected ItemStack execute(BlockSource source, ItemStack stack) { + Direction direction = source.getBlockState().getValue(DispenserBlock.FACING); + Position position = DispenserBlock.getDispensePosition(source); + + MissileSquidEntity squid = AntarchyObjects.MISSILE_SQUID.get().create(source.getLevel()); + if (squid == null) return super.execute(source, stack); + + squid.setPos(position.x(), position.y(), position.z()); + Vec3 vel = new Vec3(direction.getStepX(), direction.getStepY(), direction.getStepZ()) + .normalize() + .scale(AntarchySettings.squidzookaLaunchVelocity()); + squid.launchAsProjectile(null, vel); + source.getLevel().addFreshEntity(squid); + + if (stack.isDamageableItem()) { + int nextDamage = stack.getDamageValue() + 1; + if (nextDamage >= stack.getMaxDamage()) { + stack.shrink(1); + } else { + stack.setDamageValue(nextDamage); + } + } else { + stack.shrink(1); + } + return stack; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/WaterCannonDispenseBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/WaterCannonDispenseBehavior.java new file mode 100644 index 00000000..bcb199ce --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/dispenser/WaterCannonDispenseBehavior.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.content.dispenser; + +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.Direction; +import net.minecraft.core.Position; +import net.minecraft.core.BlockSource; +import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.DispenserBlock; + +public class WaterCannonDispenseBehavior extends DefaultDispenseItemBehavior { + @Override + protected ItemStack execute(BlockSource source, ItemStack stack) { + Direction direction = source.getBlockState().getValue(DispenserBlock.FACING); + Position position = DispenserBlock.getDispensePosition(source); + + WaterBombEntity bomb = AntarchyObjects.WATER_BOMB.get().create(source.getLevel()); + if (bomb == null) return super.execute(source, stack); + bomb.setPos(position.x(), position.y(), position.z()); + bomb.shoot(direction.getStepX(), direction.getStepY() + 0.1D, direction.getStepZ(), 1.5F, 0.0F); + source.getLevel().addFreshEntity(bomb); + + if (stack.isDamageableItem()) { + int nextDamage = stack.getDamageValue() + 1; + if (nextDamage >= stack.getMaxDamage()) { + stack.shrink(1); + } else { + stack.setDamageValue(nextDamage); + } + } else { + stack.shrink(1); + } + return stack; + } +} 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 new file mode 100644 index 00000000..8eb3bd10 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/AntarchySizeScaling.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.content.effect; + +import com.craisinlord.antarchy.config.AntarchySettings; +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.ScaleTypes; + +import java.util.function.Supplier; + +public final class AntarchySizeScaling { + private 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)); + } + + private static ScaleModifier potionModifier(Supplier effectSupplier, int sign, java.util.function.DoubleSupplier deltaPerLevel) { + return new ScaleModifier() { + @Override + public float modifyScale(ScaleData data, float currentValue, float baseValue) { + Entity entity = data.getEntity(); + if (!(entity instanceof LivingEntity living)) { + return currentValue; + } + MobEffectInstance instance; + try { + instance = living.getEffect(effectSupplier.get()); + } catch (NullPointerException notYetConstructed) { + return currentValue; + } + if (instance == null) { + return currentValue; + } + double offset = sign * deltaPerLevel.getAsDouble() * (instance.getAmplifier() + 1); + return (float) (currentValue + baseValue * offset); + } + }; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/BloodglassWardEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/BloodglassWardEffect.java new file mode 100644 index 00000000..e56947b7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/BloodglassWardEffect.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.content.effect; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +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; + +public final class BloodglassWardEffect extends MobEffect { + public static final java.util.UUID MODIFIER_ID = + java.util.UUID.fromString("8e1a2c40-3f6b-4d1e-9a5c-2f7b6e0d1a4f"); + + public BloodglassWardEffect() { + super(MobEffectCategory.BENEFICIAL, 0xAC3E5C); + } + + @Override + public void addAttributeModifiers(net.minecraft.world.entity.LivingEntity livingEntity, AttributeMap attributeMap, int amplifier) { + AttributeInstance instance = attributeMap.getInstance(AntarchyObjects.BLOODGLASS_MAX_HEARTS.get()); + if (instance == null) return; + instance.addTransientModifier( + new AttributeModifier(MODIFIER_ID, "bloodglass_ward_hearts", amplifier + 1, AttributeModifier.Operation.ADDITION) + ); + } + + @Override + public void removeAttributeModifiers(net.minecraft.world.entity.LivingEntity livingEntity, AttributeMap attributeMap, int amplifier) { + AttributeInstance instance = attributeMap.getInstance(AntarchyObjects.BLOODGLASS_MAX_HEARTS.get()); + if (instance == null) return; + instance.removeModifier(MODIFIER_ID); + } +} 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 new file mode 100644 index 00000000..8c151303 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/DreadMobEffect.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.content.effect; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import net.minecraft.server.level.ServerLevel; +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() { + super(MobEffectCategory.HARMFUL, 0x1A0A1A); + } + + @Override + public void applyEffectTick(LivingEntity entity, int amplifier) { + if (AntarchySettings.dreadHallucinationMobsEnabled() + && entity instanceof Player player + && entity.level() instanceof ServerLevel serverLevel) { + int minTicks = Math.max(1, (int) Math.round(AntarchySettings.dreadHallucinationMobMinInterval() * 20.0D)); + 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); + } + } + } + + @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/GlimmeringMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/GlimmeringMobEffect.java new file mode 100644 index 00000000..274fa9b9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/GlimmeringMobEffect.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.content.effect; + +import com.craisinlord.antarchy.content.client.particle.GlimmerParticles; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; +import net.minecraft.world.entity.LivingEntity; + +public final class GlimmeringMobEffect extends MobEffect { + public GlimmeringMobEffect() { + super(MobEffectCategory.BENEFICIAL, 0x66CCFF); + } + + @Override + public void applyEffectTick(LivingEntity entity, int amplifier) { + if (!entity.level().isClientSide()) { + boolean running = entity.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D; + GlimmerParticles.tickAmbient(entity, running); + } + } + + @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/GoopedEffectHooks.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/GoopedEffectHooks.java new file mode 100644 index 00000000..75c5d4a9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/GoopedEffectHooks.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.effect; + +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.effect.MobEffect; +import org.jetbrains.annotations.Nullable; + +public final class GoopedEffectHooks { + public static final int PROJECTILE_DURATION_TICKS = 20 * 8; + private static final ResourceKey GOOPED_KEY = ResourceKey.create( + Registries.MOB_EFFECT, + new ResourceLocation(Antarchy.MODID, "gooped") + ); + + private GoopedEffectHooks() { + } + + @Nullable + public static Holder holder() { + return BuiltInRegistries.MOB_EFFECT.getHolder(GOOPED_KEY).orElse(null); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/GoopedMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/GoopedMobEffect.java new file mode 100644 index 00000000..1f5e1773 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/GoopedMobEffect.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.content.effect; + +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; + +public final class GoopedMobEffect extends MobEffect { + private static final double SLOWDOWN_PER_LEVEL = -0.3D; + + public static final java.util.UUID ATTACK_SPEED_MODIFIER_ID = + java.util.UUID.fromString("6f3a2b9e-7f0d-4f7e-9b7a-3b3e2f6c8a51"); + public static final java.util.UUID MOVEMENT_SPEED_MODIFIER_ID = + java.util.UUID.fromString("5a1d4c8f-9e2b-4d6a-8c7f-2e1b9a4d3f60"); + + public GoopedMobEffect() { + super(MobEffectCategory.HARMFUL, 0x32B84E); + } + + @Override + public void addAttributeModifiers(net.minecraft.world.entity.LivingEntity livingEntity, AttributeMap attributeMap, int amplifier) { + AttributeInstance attackSpeed = attributeMap.getInstance(Attributes.ATTACK_SPEED); + if (attackSpeed != null) { + attackSpeed.addTransientModifier( + new AttributeModifier(ATTACK_SPEED_MODIFIER_ID, "gooped_attack_speed", SLOWDOWN_PER_LEVEL, AttributeModifier.Operation.MULTIPLY_TOTAL) + ); + } + AttributeInstance movementSpeed = attributeMap.getInstance(Attributes.MOVEMENT_SPEED); + if (movementSpeed != null) { + movementSpeed.addTransientModifier( + new AttributeModifier(MOVEMENT_SPEED_MODIFIER_ID, "gooped_movement_speed", SLOWDOWN_PER_LEVEL, AttributeModifier.Operation.MULTIPLY_TOTAL) + ); + } + } + + @Override + public void removeAttributeModifiers(net.minecraft.world.entity.LivingEntity livingEntity, AttributeMap attributeMap, int amplifier) { + AttributeInstance attackSpeed = attributeMap.getInstance(Attributes.ATTACK_SPEED); + if (attackSpeed != null) { + attackSpeed.removeModifier(ATTACK_SPEED_MODIFIER_ID); + } + AttributeInstance movementSpeed = attributeMap.getInstance(Attributes.MOVEMENT_SPEED); + if (movementSpeed != null) { + movementSpeed.removeModifier(MOVEMENT_SPEED_MODIFIER_ID); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/GrowthMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/GrowthMobEffect.java new file mode 100644 index 00000000..3642759e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/GrowthMobEffect.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 GrowthMobEffect extends MobEffect { + public GrowthMobEffect() { + super(MobEffectCategory.NEUTRAL, 0xADD8E6); + } +} 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 new file mode 100644 index 00000000..cb1092b9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/InvertedMobEffect.java @@ -0,0 +1,39 @@ +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/ParalyzedMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/ParalyzedMobEffect.java new file mode 100644 index 00000000..a3f532ac --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/ParalyzedMobEffect.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.content.effect; + +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.phys.Vec3; + +public final class ParalyzedMobEffect extends MobEffect { + public ParalyzedMobEffect() { + super(MobEffectCategory.HARMFUL, 0x808080); + } + + @Override + public void applyEffectTick(LivingEntity entity, int amplifier) { + if (!entity.level().isClientSide()) { + entity.setDeltaMovement(Vec3.ZERO); + entity.hasImpulse = true; + entity.stopUsingItem(); + entity.setSprinting(false); + entity.setYRot(entity.yRotO); + entity.setXRot(entity.xRotO); + entity.yHeadRot = entity.yHeadRotO; + entity.yBodyRot = entity.yBodyRotO; + + if (entity instanceof Mob mob) { + mob.getNavigation().stop(); + } + } + } + + @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/ShrinkMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/ShrinkMobEffect.java new file mode 100644 index 00000000..fad9f3d2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/ShrinkMobEffect.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 ShrinkMobEffect extends MobEffect { + public ShrinkMobEffect() { + super(MobEffectCategory.NEUTRAL, 0xFFFF00); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/StinkyBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/StinkyBehavior.java new file mode 100644 index 00000000..4088a8c6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/StinkyBehavior.java @@ -0,0 +1,233 @@ +package com.craisinlord.antarchy.content.effect; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.EntityTypeTags; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.Vec3; + +public final class StinkyBehavior { + public static final double STINK_BUG_AURA_RADIUS = 5.0D; + public static final double STINKY_NAUSEA_RADIUS = 4.0D; + private static final int TRAIL_INTERVAL_TICKS = 4; + private static final int REACTION_INTERVAL_TICKS = 10; + private static final double ARTHROPOD_ALERT_RADIUS = 28.0D; + private static final double FLEE_RADIUS = 10.0D; + private static final double FLEE_DISTANCE = 8.0D; + private static final int STINKY_NAUSEA_DURATION_TICKS = 60; + private static final int STINK_BUG_BURST_NAUSEA_DURATION_TICKS = 100; + + private StinkyBehavior() { + } + + public static void tickStinkyTrail(LivingEntity entity) { + if (!(entity.level() instanceof ServerLevel serverLevel)) { + return; + } + if (!entity.isAlive() || !entity.hasEffect(AntarchyObjects.STINKY_EFFECT.get()) || isSpectatorPlayer(entity)) { + return; + } + if (entity.tickCount % TRAIL_INTERVAL_TICKS != 0) { + return; + } + + Vec3 motion = entity.getDeltaMovement(); + Vec3 horizontalMotion = new Vec3(motion.x, 0.0D, motion.z); + Vec3 direction = horizontalMotion.lengthSqr() > 1.0E-4D + ? horizontalMotion.normalize() + : entity.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + if (direction.lengthSqr() <= 1.0E-4D) { + direction = new Vec3(0.0D, 0.0D, 1.0D); + } else { + direction = direction.normalize(); + } + + Vec3 origin = entity.position() + .subtract(direction.scale(0.35D)) + .add(0.0D, Math.max(0.15D, entity.getBbHeight() * 0.2D), 0.0D); + serverLevel.sendParticles( + AntarchyObjects.STINKY_GAS.get(), + origin.x, + origin.y, + origin.z, + 2, + entity.getBbWidth() * 0.12D, + 0.04D, + entity.getBbWidth() * 0.12D, + 0.005D + ); + serverLevel.sendParticles( + AntarchyObjects.STINKY_FLY.get(), + entity.getX(), + entity.getY(0.45D), + entity.getZ(), + 1, + entity.getBbWidth() * 0.35D, + entity.getBbHeight() * 0.2D, + entity.getBbWidth() * 0.35D, + 0.0D + ); + applyNearbyNausea(entity, STINKY_NAUSEA_RADIUS, STINKY_NAUSEA_DURATION_TICKS); + if (entity.tickCount % REACTION_INTERVAL_TICKS == 0) { + reactToStinkySource(entity); + } + } + + public static void emitBurst(LivingEntity entity, int count) { + if (!(entity.level() instanceof ServerLevel serverLevel)) { + return; + } + if (isSpectatorPlayer(entity)) { + return; + } + serverLevel.sendParticles( + AntarchyObjects.STINKY_GAS.get(), + entity.getX(), + entity.getY(0.45D), + entity.getZ(), + count, + entity.getBbWidth() * 0.35D, + entity.getBbHeight() * 0.25D, + entity.getBbWidth() * 0.35D, + 0.045D + ); + serverLevel.sendParticles( + AntarchyObjects.STINKY_FLY.get(), + entity.getX(), + entity.getY(0.45D), + entity.getZ(), + Math.max(2, count / 6), + entity.getBbWidth() * 0.45D, + entity.getBbHeight() * 0.25D, + entity.getBbWidth() * 0.45D, + 0.0D + ); + applyNearbyNausea(entity, STINK_BUG_AURA_RADIUS, STINK_BUG_BURST_NAUSEA_DURATION_TICKS); + } + + public static void applyBurstStinkyEffect(LivingEntity source, double radius, int durationTicks) { + if (source.level().isClientSide()) { + return; + } + for (LivingEntity entity : source.level().getEntitiesOfClass( + LivingEntity.class, + source.getBoundingBox().inflate(radius), + e -> e.isAlive() && e != source + )) { + entity.addEffect(new MobEffectInstance(AntarchyObjects.STINKY_EFFECT.get(), durationTicks, 0, false, true, true)); + } + } + + public static void applyNearbyNausea(LivingEntity source, double radius, int durationTicks) { + if (source.level().isClientSide()) { + return; + } + + for (Player player : source.level().getEntitiesOfClass( + Player.class, + source.getBoundingBox().inflate(radius), + player -> player.isAlive() && !player.isSpectator() && player != source + )) { + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, durationTicks, 0, false, true, true)); + } + } + + private static void reactToStinkySource(LivingEntity source) { + if (source.level().isClientSide() || !source.isAlive()) { + return; + } + + for (Mob mob : source.level().getEntitiesOfClass( + Mob.class, + source.getBoundingBox().inflate(ARTHROPOD_ALERT_RADIUS), + mob -> mob.isAlive() && mob != source + )) { + if (mob.getMobType() == net.minecraft.world.entity.MobType.ARTHROPOD) { + if (source.getMobType() == net.minecraft.world.entity.MobType.ARTHROPOD) { + continue; + } + attractArthropod(mob, source); + continue; + } + if (shouldRepelMob(mob, source)) { + repelPassiveOrNeutralMob(mob, source); + } + } + } + + private static void attractArthropod(Mob mob, LivingEntity source) { + if (!isValidStinkyAttackSourceForMob(mob, source)) { + return; + } + + LivingEntity currentTarget = mob.getTarget(); + if (currentTarget != null && currentTarget.isAlive() && currentTarget.hasEffect(AntarchyObjects.STINKY_EFFECT.get()) + && mob.distanceToSqr(currentTarget) <= ARTHROPOD_ALERT_RADIUS * ARTHROPOD_ALERT_RADIUS) { + return; + } + + mob.setTarget(source); + } + + private static void repelPassiveOrNeutralMob(Mob mob, LivingEntity source) { + if (!(mob instanceof PathfinderMob pathfinderMob) || !isValidStinkyRepelSourceForMob(mob, source)) { + return; + } + + Vec3 away = mob.position().subtract(source.position()); + if (away.lengthSqr() < 1.0E-4D) { + away = new Vec3(mob.getRandom().nextDouble() - 0.5D, 0.0D, mob.getRandom().nextDouble() - 0.5D); + } + + Vec3 escapeTarget = mob.position().add(away.normalize().scale(FLEE_DISTANCE)); + pathfinderMob.setTarget(null); + pathfinderMob.getNavigation().moveTo(escapeTarget.x, escapeTarget.y, escapeTarget.z, 1.2D); + } + + private static boolean shouldRepelMob(Mob mob, LivingEntity source) { + if (mob.hasEffect(AntarchyObjects.STINKY_EFFECT.get()) || mob.distanceToSqr(source) > FLEE_RADIUS * FLEE_RADIUS) { + return false; + } + + if (mob.getType().is(AntarchyTags.Entities.STINKY_REPELLED_HOSTILES)) { + return true; + } + + return !(mob instanceof Enemy); + } + + private static boolean isValidStinkyAttackSourceForMob(Mob mob, LivingEntity source) { + if (!isValidStinkyRepelSourceForMob(mob, source)) { + return false; + } + if (source == mob || !source.isAlive() || !source.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + return false; + } + if (source instanceof Player player && (player.isCreative() || player.isSpectator())) { + return false; + } + return !mob.isAlliedTo(source); + } + + private static boolean isValidStinkyRepelSourceForMob(Mob mob, LivingEntity source) { + if (source == mob || !source.isAlive() || !source.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + return false; + } + if (source instanceof Player player && player.isSpectator()) { + return false; + } + return !mob.isAlliedTo(source); + } + + private static boolean isSpectatorPlayer(LivingEntity entity) { + return entity instanceof Player player && player.isSpectator(); + } + +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java new file mode 100644 index 00000000..8eb06a52 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.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 StinkyMobEffect extends MobEffect { + public StinkyMobEffect() { + super(MobEffectCategory.HARMFUL, 0x66773A); + } + + @Override + public void applyEffectTick(LivingEntity entity, int amplifier) { + StinkyBehavior.tickStinkyTrail(entity); + } + + @Override + public boolean isDurationEffectTick(int duration, int amplifier) { + return true; + } +} 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 new file mode 100644 index 00000000..c8aeed8d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java @@ -0,0 +1,221 @@ +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.antarchy.content.boss.BossCombatUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerBossEvent; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.RandomSource; +import net.minecraft.world.BossEvent; +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.goal.MeleeAttackGoal; +import net.minecraft.world.entity.monster.Monster; +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 org.jetbrains.annotations.Nullable; + +public class AlphaMantisEntity extends MantisEntity { + 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; + + public AlphaMantisEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 60; + this.summonCooldownTicks = AntarchySettings.alphaMantisSummonIntervalTicks() / 2; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.alphaMantisHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.alphaMantisAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.alphaMantisMovementSpeed()) + .add(Attributes.FLYING_SPEED, AntarchySettings.alphaMantisFlyingSpeed()) + .add(Attributes.FOLLOW_RANGE, 48.0D) + .add(Attributes.ARMOR, 8.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.8D); + } + + @Override + public boolean isInvulnerableTo(DamageSource source) { + if (super.isInvulnerableTo(source)) { + return true; + } + return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.alphaMantisDamageRange()); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount)); + } + + public static boolean checkAlphaMantisSpawnRules(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG + || spawnReason == MobSpawnType.SPAWNER + || spawnReason == MobSpawnType.COMMAND) { + return true; + } + + if (level.getDifficulty() == Difficulty.PEACEFUL) { + return false; + } + + if (spawnReason != MobSpawnType.NATURAL) { + return false; + } + + 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) + && !(level.getBlockState(pos.below()).getBlock() instanceof LeavesBlock); + + if (!posOpen || !onSolidGround || !atSurface) { + return false; + } + + if (!level.getLevel().getEntitiesOfClass(AlphaMantisEntity.class, new AABB(pos).inflate(128.0D), Entity::isAlive).isEmpty()) { + return false; + } + + boolean ignoreLightLevel = AntarchySettings.mantisIgnoreLightLevel(); + + if (level.getLevel().isDay() && level.getBiome(pos).is(AntarchyTags.Biomes.MANTIS_OVERWORLD_SPAWN_BIOMES)) { + return level.canSeeSky(pos); + } + + if (level.getLevel().isNight() && level.getBiome(pos).is(AntarchyTags.Biomes.MANTIS_SPAWN_BIOMES)) { + return ignoreLightLevel || Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + return false; + } + + @Override + protected MeleeAttackGoal createCombatGoal() { + return new MeleeAttackGoal(this, this.getCombatSpeed(), true); + } + + @Override + protected double getCombatSpeed() { + return 1.05D; + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + + if (this.isDeadOrDying()) { + this.bossEvent.setProgress(0.0F); + return; + } + + this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + this.tickMinionSummon(); + } + + private void tickMinionSummon() { + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + return; + } + + if (this.summonCooldownTicks > 0) { + this.summonCooldownTicks--; + return; + } + this.summonCooldownTicks = AntarchySettings.alphaMantisSummonIntervalTicks(); + + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + int nearbyMinions = serverLevel.getEntitiesOfClass( + MantisEntity.class, + this.getBoundingBox().inflate(32.0D), + mantis -> mantis.isAlive() && !(mantis instanceof AlphaMantisEntity) + ).size(); + int maxMinions = AntarchySettings.alphaMantisMaxMinions(); + if (nearbyMinions >= maxMinions) { + return; + } + + int toSummon = Math.min(1 + this.random.nextInt(2), maxMinions - nearbyMinions); + for (int i = 0; i < toSummon; i++) { + MantisEntity minion = AntarchyObjects.MANTIS.get().create(serverLevel); + if (minion == null) { + continue; + } + double angle = this.random.nextDouble() * Math.PI * 2.0D; + double distance = 3.0D + this.random.nextDouble() * 3.0D; + minion.moveTo( + this.getX() + Math.cos(angle) * distance, + this.getY() + 0.5D, + this.getZ() + Math.sin(angle) * distance, + this.random.nextFloat() * 360.0F, + 0.0F + ); + minion.finalizeSpawn(serverLevel, serverLevel.getCurrentDifficultyAt(minion.blockPosition()), MobSpawnType.MOB_SUMMONED, null, null); + minion.setTarget(target); + serverLevel.addFreshEntity(minion); + } + this.playSound(com.craisinlord.antarchy.content.AntarchySoundEvents.MANTIS_AMBIENT.get(), 2.0F, 0.6F); + } + + @Override + protected void onActiveTarget(LivingEntity target) { + if (this.flyBurstTicks > 0 || this.flyCooldownTicks > 0) { + this.stopFlightBurst(); + } + } + + @Override + protected boolean shouldStartFlightBurst() { + return false; + } + + @Override + public void setTarget(@Nullable LivingEntity target) { + super.setTarget(target); + if (target != null) { + this.setPersistenceRequired(); + } + } + + @Override + public void startSeenByPlayer(ServerPlayer player) { + super.startSeenByPlayer(player); + this.bossEvent.addPlayer(player); + } + + @Override + public void stopSeenByPlayer(ServerPlayer player) { + super.stopSeenByPlayer(player); + this.bossEvent.removePlayer(player); + } + + @Override + public void setCustomName(@Nullable Component name) { + super.setCustomName(name); + this.bossEvent.setName(this.getDisplayName()); + } +} 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 new file mode 100644 index 00000000..8aeb8032 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java @@ -0,0 +1,404 @@ +package com.craisinlord.antarchy.content.entity; + +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.util.Mth; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.Shearable; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.level.Level; +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; + +import java.util.EnumSet; + +public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable { + private static final EntityDataAccessor SLEEPING = + SynchedEntityData.defineId(AppleCowEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor QUIRK_TICKS = + SynchedEntityData.defineId(AppleCowEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor SHEARED = + SynchedEntityData.defineId(AppleCowEntity.class, EntityDataSerializers.BOOLEAN); + + private static final String SLEEPING_KEY = "Sleeping"; + private static final String SLEEP_TICKS_KEY = "SleepTicks"; + private static final String NAP_COOLDOWN_KEY = "NapCooldown"; + private static final String QUIRK_TICKS_KEY = "QuirkTicks"; + private static final String SHEARED_KEY = "Sheared"; + private static final String REGROW_TICKS_KEY = "RegrowTicks"; + private static final String MAIN_CONTROLLER = "main_controller"; + private static final String SLEEP_TRANSITION_CONTROLLER = "sleep_transition_controller"; + private static final String START_SLEEP_TRIGGER = "start_sleep"; + private static final String WAKE_UP_TRIGGER = "wake_up"; + + private static final int IDLE_ANIMATION_CYCLE_TICKS = 40; + private static final int QUIRK_ANIMATION_TICKS = 35; + private static final int QUIRK_CHANCE = 50; + private static final int DAY_NAP_MIN_TICKS = 20 * 60; + private static final int DAY_NAP_MAX_TICKS = 20 * 60 * 2; + private static final int DAY_NAP_COOLDOWN_TICKS = 20 * 60 * 10; + private static final int NIGHT_NAP_COOLDOWN_TICKS = 20 * 60 * 8; + private static final int APPLE_REGROW_TICKS = 20 * 60 * 3; + + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation SLEEP_ANIM = RawAnimation.begin().thenLoop("sleep"); + private static final RawAnimation QUIRK_ANIM = RawAnimation.begin().thenPlay("quirk"); + private static final RawAnimation START_SLEEP_ANIM = RawAnimation.begin().thenPlay("start sleep"); + private static final RawAnimation WAKE_UP_ANIM = RawAnimation.begin().thenPlay("wake up"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int sleepTicksRemaining; + private int napCooldownTicks; + private int idleAnimationCycleTicks; + private int regrowTicks; + + protected AppleCowEntity(EntityType entityType, Level level) { + super(entityType, level); + this.napCooldownTicks = randomNapCooldown(); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(SLEEPING, false); + this.entityData.define(QUIRK_TICKS, 0); + this.entityData.define(SHEARED, false); + } + + @Override + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(0, new AppleCowSleepGoal()); + } + + @Override + public Cow getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return this.getType().create(level) instanceof Cow offspring ? offspring : null; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, MAIN_CONTROLLER, 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, SLEEP_TRANSITION_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(START_SLEEP_TRIGGER, START_SLEEP_ANIM) + .triggerableAnim(WAKE_UP_TRIGGER, WAKE_UP_ANIM)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + + if (this.level().isClientSide) { + return; + } + + int quirkTicks = this.getQuirkTicks(); + if (quirkTicks > 0) { + this.setQuirkTicks(quirkTicks - 1); + } + + if (this.napCooldownTicks > 0) { + this.napCooldownTicks--; + } + + if (this.isSleeping()) { + this.applySleepStillness(); + this.idleAnimationCycleTicks = 0; + + if (this.shouldWakeUp()) { + this.stopCowSleeping(); + return; + } + + if (this.sleepTicksRemaining > 0) { + this.sleepTicksRemaining--; + if (this.sleepTicksRemaining <= 0) { + this.stopCowSleeping(); + } + } + return; + } + + if (this.isSheared()) { + this.regrowTicks++; + if (this.regrowTicks >= APPLE_REGROW_TICKS) { + this.setSheared(false); + this.regrowTicks = 0; + } + } + + if (this.shouldStartNap()) { + this.startSleeping(Mth.nextInt(this.random, DAY_NAP_MIN_TICKS, DAY_NAP_MAX_TICKS)); + return; + } + + this.tickIdleQuirk(); + } + + @Override + public boolean hurt(net.minecraft.world.damagesource.DamageSource source, float amount) { + this.stopCowSleeping(); + return super.hurt(source, amount); + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack heldItem = player.getItemInHand(hand); + if (heldItem.is(Items.SHEARS) && this.readyForShearing()) { + if (!this.level().isClientSide) { + this.shear(player == null ? SoundSource.BLOCKS : SoundSource.PLAYERS); + heldItem.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(hand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND)); + } + this.stopCowSleeping(); + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + this.stopCowSleeping(); + return super.mobInteract(player, hand); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean(SLEEPING_KEY, this.isSleeping()); + tag.putInt(SLEEP_TICKS_KEY, this.sleepTicksRemaining); + tag.putInt(NAP_COOLDOWN_KEY, this.napCooldownTicks); + tag.putInt(QUIRK_TICKS_KEY, this.getQuirkTicks()); + tag.putBoolean(SHEARED_KEY, this.isSheared()); + tag.putInt(REGROW_TICKS_KEY, this.regrowTicks); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.entityData.set(SLEEPING, tag.getBoolean(SLEEPING_KEY)); + this.sleepTicksRemaining = tag.getInt(SLEEP_TICKS_KEY); + this.napCooldownTicks = tag.contains(NAP_COOLDOWN_KEY) ? tag.getInt(NAP_COOLDOWN_KEY) : randomNapCooldown(); + this.setQuirkTicks(tag.getInt(QUIRK_TICKS_KEY)); + this.setSheared(tag.getBoolean(SHEARED_KEY)); + this.regrowTicks = tag.getInt(REGROW_TICKS_KEY); + } + + public boolean isSleeping() { + return this.entityData.get(SLEEPING); + } + + public int getQuirkTicks() { + return this.entityData.get(QUIRK_TICKS); + } + + public boolean isSheared() { + return this.entityData.get(SHEARED); + } + + private void setQuirkTicks(int ticks) { + this.entityData.set(QUIRK_TICKS, Math.max(0, ticks)); + } + + private void setSheared(boolean sheared) { + this.entityData.set(SHEARED, sheared); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.isSleeping()) { + state.getController().setAnimationSpeed(1.0D); + return state.setAndContinue(SLEEP_ANIM); + } + + if (state.isMoving()) { + state.getController().setAnimationSpeed(1.0D); + return state.setAndContinue(WALK_ANIM); + } + + if (this.getQuirkTicks() > 0) { + state.getController().setAnimationSpeed(1.0D); + return state.setAndContinue(QUIRK_ANIM); + } + + state.getController().setAnimationSpeed(1.0D); + return state.setAndContinue(IDLE_ANIM); + } + + private void tickIdleQuirk() { + if (this.getQuirkTicks() > 0 || !this.isEligibleForSleep() || this.isMovingForAnimation()) { + this.idleAnimationCycleTicks = 0; + return; + } + + this.idleAnimationCycleTicks++; + if (this.idleAnimationCycleTicks < IDLE_ANIMATION_CYCLE_TICKS) { + return; + } + + this.idleAnimationCycleTicks = 0; + if (this.random.nextInt(QUIRK_CHANCE) == 0) { + this.setQuirkTicks(QUIRK_ANIMATION_TICKS); + } + } + + private boolean shouldStartNap() { + return this.napCooldownTicks <= 0 + && this.isEligibleForSleep(); + } + + private boolean shouldWakeUp() { + if (!this.isSleeping()) { + return false; + } + + if (!this.isAlive() || this.isInWaterOrBubble() || this.isOnFire() || this.hurtTime > 0 || this.isLeashed() + || this.isPassenger() || this.isVehicle() || this.isInLove() || !this.onGround()) { + return true; + } + + return false; + } + + private boolean isEligibleForSleep() { + return this.onGround() + && !this.isInWaterOrBubble() + && !this.isOnFire() + && !this.isLeashed() + && !this.isPassenger() + && !this.isVehicle() + && !this.isInLove() + && this.getTarget() == null + && !this.isMovingForAnimation(); + } + + private boolean isMovingForAnimation() { + return this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D || this.getNavigation().isInProgress(); + } + + private void startSleeping(int sleepTicks) { + this.entityData.set(SLEEPING, true); + this.sleepTicksRemaining = sleepTicks; + this.idleAnimationCycleTicks = 0; + this.setQuirkTicks(0); + this.applySleepStillness(); + if (!this.level().isClientSide) { + this.triggerAnim(SLEEP_TRANSITION_CONTROLLER, START_SLEEP_TRIGGER); + } + } + + private void stopCowSleeping() { + if (!this.isSleeping()) { + return; + } + + this.entityData.set(SLEEPING, false); + this.sleepTicksRemaining = 0; + this.napCooldownTicks = randomNapCooldown(); + if (!this.level().isClientSide) { + this.triggerAnim(SLEEP_TRANSITION_CONTROLLER, WAKE_UP_TRIGGER); + } + } + + private void applySleepStillness() { + Vec3 motion = 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); + } + + private int randomNapCooldown() { + return this.level().isNight() ? NIGHT_NAP_COOLDOWN_TICKS : DAY_NAP_COOLDOWN_TICKS; + } + + @Override + public boolean readyForShearing() { + return !this.isBaby() && !this.isSleeping() && !this.isSheared(); + } + + @Override + public void shear(SoundSource source) { + if (this.level().isClientSide || !this.readyForShearing()) { + return; + } + + this.setSheared(true); + this.regrowTicks = 0; + this.stopCowSleeping(); + this.playSound(SoundEvents.SHEEP_SHEAR, 1.0F, 1.0F); + this.spawnAtLocation(new ItemStack(this.shearDropItem(), 2), this.getBbHeight() * 0.66F); + } + + @Override + protected void dropCustomDeathLoot(net.minecraft.world.damagesource.DamageSource damageSource, int lootingLevel, boolean recentlyHit) { + super.dropCustomDeathLoot(damageSource, lootingLevel, recentlyHit); + + if (this.isBaby() || this.isSheared()) { + return; + } + + int count = this instanceof AppleCowEntityVariants.EnchantedGoldenAppleCow ? 1 : 1 + this.random.nextInt(2); + this.spawnAtLocation(new ItemStack(this.shearDropItem(), count)); + } + + private net.minecraft.world.item.Item shearDropItem() { + if (this instanceof AppleCowEntityVariants.EnchantedGoldenAppleCow) { + return Items.ENCHANTED_GOLDEN_APPLE; + } + + if (this instanceof AppleCowEntityVariants.GoldenAppleCow) { + return Items.GOLDEN_APPLE; + } + + return Items.APPLE; + } + + private final class AppleCowSleepGoal extends Goal { + private AppleCowSleepGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.JUMP, Flag.LOOK)); + } + + @Override + public boolean canUse() { + return AppleCowEntity.this.isSleeping(); + } + + @Override + public boolean canContinueToUse() { + return AppleCowEntity.this.isSleeping(); + } + + @Override + public void start() { + AppleCowEntity.this.applySleepStillness(); + } + + @Override + public void tick() { + AppleCowEntity.this.applySleepStillness(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntityVariants.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntityVariants.java new file mode 100644 index 00000000..45896731 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntityVariants.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.entity; + +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.level.Level; + +public final class AppleCowEntityVariants { + private AppleCowEntityVariants() { + } + + public static class AppleCow extends AppleCowEntity { + public AppleCow(EntityType entityType, Level level) { + super(entityType, level); + } + } + + public static class GoldenAppleCow extends AppleCowEntity { + public GoldenAppleCow(EntityType entityType, Level level) { + super(entityType, level); + } + } + + public static class EnchantedGoldenAppleCow extends AppleCowEntity { + public EnchantedGoldenAppleCow(EntityType entityType, Level level) { + super(entityType, level); + } + } +} 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 new file mode 100644 index 00000000..a24ed6a0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java @@ -0,0 +1,740 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +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 net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.ExperienceOrb; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +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.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.RandomStrollGoal; +import net.minecraft.world.entity.ai.goal.TemptGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Block; +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.Comparator; +import java.util.EnumSet; + +public class BedBugEntity extends Animal implements GeoEntity { + private static final byte BITE_ANIM_EVENT = 18; + private static final String BITE_TICKS_KEY = "BiteTicks"; + private static final String HAS_PENDING_EGGS_KEY = "HasPendingEggs"; + private static final String LAY_EGG_COOLDOWN_KEY = "LayEggCooldown"; + private static final String EGG_NEST_X_KEY = "EggNestX"; + private static final String EGG_NEST_Y_KEY = "EggNestY"; + private static final String EGG_NEST_Z_KEY = "EggNestZ"; + private static final int BITE_ANIM_TICKS = 10; + private static final int ATTACK_HIT_TICK = 5; + private static final int ATTACK_COOLDOWN_TICKS = 12; + private static final int MIN_LAY_EGG_DELAY = 80; + private static final int MAX_LAY_EGG_DELAY = 160; + private static final double FOOD_SEARCH_RADIUS = 10.0D; + private static final double EGG_GUARD_RADIUS = 7.0D; + private static final double ATTACK_START_REACH_BUFFER = 1.15D; + private static final double ATTACK_REACH_BUFFER = 0.3D; + private static final double ATTACK_LUNGE_HORIZONTAL_SPEED = 0.42D; + private static final double ATTACK_LUNGE_VERTICAL_SPEED = 0.1D; + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation BITE_ANIM = RawAnimation.begin().thenPlay("bite"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + @Nullable + private BlockPos eggNestPos; + private int biteAnimationTicks; + private int attackAnimTicks; + private int attackCooldownTicks; + private boolean attackDamageApplied; + @Nullable + private LivingEntity attackTarget; + private boolean hasPendingEggs; + private int layEggCooldown; + @Nullable + private ItemEntity cachedRottenFlesh; + private int nextFoodSearchTick; + private int guardNestCooldown; + + public BedBugEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 4; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.bedBugHealth()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.bedBugMovementSpeed()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.bedBugAttackDamage()) + .add(Attributes.FOLLOW_RANGE, 20.0D) + .add(Attributes.ARMOR, AntarchySettings.bedBugArmor()); + } + + 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.getFluidState(pos).isEmpty() + && level.getFluidState(pos.above()).isEmpty() + && Animal.checkAnimalSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new TemptGoal(this, 1.0D, Ingredient.of(Items.ROTTEN_FLESH), false)); + this.goalSelector.addGoal(2, new BreedGoal(this, 0.9D)); + this.goalSelector.addGoal(3, new SeekRottenFleshGoal()); + this.goalSelector.addGoal(4, new GuardEggNestGoal()); + this.goalSelector.addGoal(5, new BedBugMeleeAttackGoal()); + this.goalSelector.addGoal(6, new RandomStrollGoal(this, 0.85D)); + this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 10.0F)); + this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>( + this, + Player.class, + 10, + true, + false, + entity -> entity instanceof Player player && this.shouldTargetPlayer(player) + )); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController) + .triggerableAnim("bite", BITE_ANIM)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + + if (this.biteAnimationTicks > 0) { + this.biteAnimationTicks--; + if (this.biteAnimationTicks <= 0) { + this.biteAnimationTicks = 0; + } + } + + if (this.level().isClientSide) { + return; + } + + if (this.attackCooldownTicks > 0) { + this.attackCooldownTicks--; + } + + if (this.attackAnimTicks > 0) { + this.tickAttackWindup(); + this.attackAnimTicks--; + if (this.attackAnimTicks <= 0) { + this.resetAttackState(); + } + } + + if (this.guardNestCooldown > 0) { + this.guardNestCooldown--; + } + + if (this.hasFoodPriorityTarget() && !(this.getTarget() instanceof Player)) { + this.setTarget(null); + } + + if (this.eggNestPos != null && !this.level().getBlockState(this.eggNestPos).is(AntarchyObjects.BED_BUG_EGG.get())) { + this.eggNestPos = this.findNearbyEggNest(); + } + + if (this.hasPendingEggs && --this.layEggCooldown <= 0) { + this.layClutch(); + } + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + if (!(target instanceof LivingEntity livingTarget)) { + return false; + } + + boolean hurt = this.level() instanceof ServerLevel serverLevel + ? livingTarget.hurt(AntarchyDamageSources.bedBugBite(serverLevel, this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)) + : super.doHurtTarget(target); + if (hurt) { + this.playSound(AntarchySoundEvents.BED_BUG_ATTACK.get(), 0.45F, 1.0F + this.random.nextFloat() * 0.1F); + } + return hurt; + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(Items.ROTTEN_FLESH); + } + + @Override + public boolean canMate(Animal otherAnimal) { + return otherAnimal instanceof BedBugEntity + && otherAnimal != this + && this.isInLove() + && otherAnimal.isInLove(); + } + + @Override + @Nullable + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return AntarchyObjects.BED_BUG.get().create(level); + } + + @Override + public void spawnChildFromBreeding(ServerLevel level, Animal otherParent) { + this.setAge(6000); + otherParent.setAge(6000); + this.resetLove(); + otherParent.resetLove(); + this.hasPendingEggs = true; + this.layEggCooldown = MIN_LAY_EGG_DELAY + this.random.nextInt(MAX_LAY_EGG_DELAY - MIN_LAY_EGG_DELAY + 1); + this.level().broadcastEntityEvent(this, (byte) 18); + if (this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { + level.addFreshEntity(new ExperienceOrb(level, this.getX(), this.getY(), this.getZ(), this.random.nextInt(7) + 1)); + } + } + + @Override + @Nullable + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + BedBugSpawnData bedBugSpawnData = spawnGroupData instanceof BedBugSpawnData data ? data : new BedBugSpawnData(); + super.finalizeSpawn(level, difficulty, spawnReason, null, dataTag); + + if (bedBugSpawnData.eggNestPos == null && (spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION) && this.random.nextFloat() < 0.55F) { + bedBugSpawnData.eggNestPos = this.createNaturalEggNest(level); + } + + this.eggNestPos = bedBugSpawnData.eggNestPos; + return bedBugSpawnData; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(BITE_TICKS_KEY, this.biteAnimationTicks); + tag.putBoolean(HAS_PENDING_EGGS_KEY, this.hasPendingEggs); + tag.putInt(LAY_EGG_COOLDOWN_KEY, this.layEggCooldown); + if (this.eggNestPos != null) { + tag.putInt(EGG_NEST_X_KEY, this.eggNestPos.getX()); + tag.putInt(EGG_NEST_Y_KEY, this.eggNestPos.getY()); + tag.putInt(EGG_NEST_Z_KEY, this.eggNestPos.getZ()); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.biteAnimationTicks = Math.max(0, tag.getInt(BITE_TICKS_KEY)); + this.hasPendingEggs = tag.getBoolean(HAS_PENDING_EGGS_KEY); + this.layEggCooldown = tag.getInt(LAY_EGG_COOLDOWN_KEY); + if (tag.contains(EGG_NEST_X_KEY) && tag.contains(EGG_NEST_Y_KEY) && tag.contains(EGG_NEST_Z_KEY)) { + this.eggNestPos = new BlockPos(tag.getInt(EGG_NEST_X_KEY), tag.getInt(EGG_NEST_Y_KEY), tag.getInt(EGG_NEST_Z_KEY)); + } else { + this.eggNestPos = null; + } + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.BED_BUG_AMBIENT.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.BED_BUG_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.BED_BUG_HURT.get(); + } + + @Override + protected float getSoundVolume() { + return 0.45F; + } + + @Override + public float getVoicePitch() { + return 1.25F + this.random.nextFloat() * 0.1F; + } + + public void setHomeEggPos(BlockPos eggPos) { + this.eggNestPos = eggPos.immutable(); + } + + @Nullable + public BlockPos getHomeEggPos() { + return this.eggNestPos; + } + + private PlayState mainAnimController(AnimationState state) { + if (this.biteAnimationTicks > 0) { + return state.setAndContinue(BITE_ANIM); + } + + if (state.isMoving()) { + state.getController().setAnimationSpeed(1.15D); + return state.setAndContinue(WALK_ANIM); + } + + state.getController().setAnimationSpeed(1.0D); + return state.setAndContinue(IDLE_ANIM); + } + + private void startBiteAnimation() { + boolean wasIdle = this.biteAnimationTicks <= 0; + this.biteAnimationTicks = BITE_ANIM_TICKS; + this.level().broadcastEntityEvent(this, BITE_ANIM_EVENT); + if (wasIdle) { + this.triggerAnim("main_controller", "bite"); + } + } + + private void beginAttack(LivingEntity target) { + this.attackTarget = target; + this.attackAnimTicks = BITE_ANIM_TICKS; + this.attackCooldownTicks = ATTACK_COOLDOWN_TICKS; + this.attackDamageApplied = false; + this.getNavigation().stop(); + this.startBiteAnimation(); + this.commitLunge(target, ATTACK_LUNGE_HORIZONTAL_SPEED, ATTACK_LUNGE_VERTICAL_SPEED); + } + + private boolean shouldTargetPlayer(@Nullable Player player) { + return player != null + && !player.isCreative() + && !player.isSpectator() + && this.level().getDifficulty() != Difficulty.PEACEFUL + && !this.hasFoodPriorityTarget(); + } + + private boolean hasFoodPriorityTarget() { + return !this.isAttackLocked() && this.nearestRottenFlesh() != null; + } + + private void tickAttackWindup() { + if (this.attackTarget == null || !this.attackTarget.isAlive()) { + this.resetAttackState(); + return; + } + + this.getLookControl().setLookAt(this.attackTarget, 30.0F, 30.0F); + if (!this.attackDamageApplied + && this.attackAnimTicks == ATTACK_HIT_TICK + && this.distanceToSqr(this.attackTarget) <= this.getAttackReachSqr(this.attackTarget)) { + this.attackDamageApplied = true; + this.doHurtTarget(this.attackTarget); + } + } + + 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); + if (horizontal.lengthSqr() < 1.0E-4D) { + return; + } + horizontal = horizontal.normalize().scale(horizontalSpeed); + this.setDeltaMovement(this.getDeltaMovement().add(horizontal.x, verticalSpeed, horizontal.z)); + this.hasImpulse = true; + } + + private double getAttackStartReachSqr(LivingEntity target) { + double reach = this.getBbWidth() * 1.7D + target.getBbWidth() + ATTACK_START_REACH_BUFFER; + return reach * reach + 1.0D; + } + + private double getAttackReachSqr(LivingEntity target) { + double reach = this.getBbWidth() * 1.55D + target.getBbWidth() + ATTACK_REACH_BUFFER; + return reach * reach + 1.0D; + } + + private void resetAttackState() { + this.attackAnimTicks = 0; + this.attackDamageApplied = false; + this.attackTarget = null; + } + + private boolean isAttackLocked() { + return this.attackAnimTicks > 0; + } + + private boolean shouldSnapBackToCombat() { + if (this.getHealth() < this.getMaxHealth() * 0.4F) { + return true; + } + LivingEntity lastAttacker = this.getLastHurtByMob(); + return lastAttacker != null && lastAttacker.isAlive() && this.distanceToSqr(lastAttacker) < 9.0D; + } + + @Nullable + private ItemEntity nearestRottenFlesh() { + if (this.tickCount >= this.nextFoodSearchTick || (this.cachedRottenFlesh != null && !this.cachedRottenFlesh.isAlive())) { + this.cachedRottenFlesh = this.findNearestRottenFlesh(); + this.nextFoodSearchTick = this.tickCount + 5; + } + return this.cachedRottenFlesh; + } + + @Override + public void handleEntityEvent(byte id) { + if (id == BITE_ANIM_EVENT) { + this.biteAnimationTicks = BITE_ANIM_TICKS; + return; + } + super.handleEntityEvent(id); + } + + private void invalidateFoodCache() { + this.cachedRottenFlesh = null; + this.nextFoodSearchTick = 0; + } + + @Nullable + private ItemEntity findNearestRottenFlesh() { + return this.level().getEntitiesOfClass( + ItemEntity.class, + this.getBoundingBox().inflate(FOOD_SEARCH_RADIUS, 2.0D, FOOD_SEARCH_RADIUS), + itemEntity -> itemEntity.isAlive() + && !itemEntity.getItem().isEmpty() + && itemEntity.getItem().is(Items.ROTTEN_FLESH)) + .stream() + .min(Comparator.comparingDouble(this::distanceToSqr)) + .orElse(null); + } + + @Nullable + private BlockPos findNearbyEggNest() { + BlockPos origin = this.blockPosition(); + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + double bestDistance = Double.MAX_VALUE; + BlockPos bestPos = null; + + for (int x = -10; x <= 10; x++) { + for (int y = -3; y <= 3; y++) { + for (int z = -10; z <= 10; z++) { + cursor.set(origin.getX() + x, origin.getY() + y, origin.getZ() + z); + if (!this.level().getBlockState(cursor).is(AntarchyObjects.BED_BUG_EGG.get())) { + continue; + } + + double distance = cursor.distSqr(origin); + if (distance < bestDistance) { + bestDistance = distance; + bestPos = cursor.immutable(); + } + } + } + } + + return bestPos; + } + + @Nullable + private BlockPos createNaturalEggNest(ServerLevelAccessor level) { + BlockPos origin = this.blockPosition(); + for (int attempt = 0; attempt < 12; attempt++) { + BlockPos candidate = origin.offset(this.random.nextInt(9) - 4, 0, this.random.nextInt(9) - 4); + BlockPos surface = level.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, candidate); + if (!level.isEmptyBlock(surface) || !level.getBlockState(surface.below()).isFaceSturdy(level, surface.below(), net.minecraft.core.Direction.UP)) { + continue; + } + + int eggs = 1 + this.random.nextInt(4); + level.setBlock(surface, AntarchyObjects.BED_BUG_EGG.get().defaultBlockState().setValue(BedBugEggBlock.EGGS, eggs), Block.UPDATE_ALL); + return surface.immutable(); + } + + return null; + } + + private void layClutch() { + BlockPos eggPos = this.findEggLayPos(); + if (eggPos == null) { + this.layEggCooldown = 40; + return; + } + + int eggs = 1 + this.random.nextInt(4); + this.level().setBlock( + eggPos, + AntarchyObjects.BED_BUG_EGG.get().defaultBlockState().setValue(BedBugEggBlock.EGGS, eggs), + 3 + ); + this.eggNestPos = eggPos; + this.hasPendingEggs = false; + this.playSound(SoundEvents.TURTLE_LAY_EGG, 0.8F, 1.15F + this.random.nextFloat() * 0.08F); + } + + @Nullable + private BlockPos findEggLayPos() { + if (this.eggNestPos != null && this.level().getBlockState(this.eggNestPos).isAir() && this.level().getBlockState(this.eggNestPos.below()).isFaceSturdy(this.level(), this.eggNestPos.below(), net.minecraft.core.Direction.UP)) { + return this.eggNestPos; + } + + BlockPos origin = this.blockPosition(); + for (int attempt = 0; attempt < 12; attempt++) { + BlockPos candidate = origin.offset(this.random.nextInt(7) - 3, 0, this.random.nextInt(7) - 3); + BlockPos surface = this.level().getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, candidate); + if (this.level().isEmptyBlock(surface) && this.level().getBlockState(surface.below()).isFaceSturdy(this.level(), surface.below(), net.minecraft.core.Direction.UP)) { + return surface.immutable(); + } + } + + return null; + } + + private final class BedBugMeleeAttackGoal extends MeleeAttackGoal { + private BedBugMeleeAttackGoal() { + super(BedBugEntity.this, 1.0D, true); + } + + @Override + public boolean canUse() { + return !BedBugEntity.this.hasFoodPriorityTarget() && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + return !BedBugEntity.this.hasFoodPriorityTarget() + && (BedBugEntity.this.isAttackLocked() || super.canContinueToUse()); + } + + @Override + protected void checkAndPerformAttack(LivingEntity enemy, double distToEnemySqr) { + if (BedBugEntity.this.isAttackLocked()) { + return; + } + if (BedBugEntity.this.distanceToSqr(enemy) <= BedBugEntity.this.getAttackStartReachSqr(enemy)) { + if (this.isTimeToAttack() && BedBugEntity.this.attackCooldownTicks <= 0) { + this.resetAttackCooldown(); + BedBugEntity.this.beginAttack(enemy); + } + return; + } + super.checkAndPerformAttack(enemy, distToEnemySqr); + } + } + + private final class SeekRottenFleshGoal extends Goal { + @Nullable + private ItemEntity targetFood; + private double lastDistanceSqr; + private int stuckTicks; + + private SeekRottenFleshGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + this.targetFood = BedBugEntity.this.nearestRottenFlesh(); + return this.targetFood != null + && BedBugEntity.this.biteAnimationTicks <= 0 + && !BedBugEntity.this.isAttackLocked() + && BedBugEntity.this.getTarget() == null; + } + + @Override + public boolean canContinueToUse() { + if (BedBugEntity.this.shouldSnapBackToCombat()) { + BedBugEntity.this.invalidateFoodCache(); + return false; + } + return this.targetFood != null + && this.targetFood.isAlive() + && !this.targetFood.getItem().isEmpty() + && this.targetFood.getItem().is(Items.ROTTEN_FLESH) + && BedBugEntity.this.getTarget() == null + && !BedBugEntity.this.isAttackLocked(); + } + + @Override + public void start() { + BedBugEntity.this.setTarget(null); + this.lastDistanceSqr = Double.MAX_VALUE; + this.stuckTicks = 0; + } + + @Override + public void stop() { + BedBugEntity.this.getNavigation().stop(); + this.targetFood = null; + this.lastDistanceSqr = Double.MAX_VALUE; + this.stuckTicks = 0; + } + + @Override + public void tick() { + if (this.targetFood == null) { + return; + } + + BedBugEntity.this.getLookControl().setLookAt(this.targetFood, 30.0F, 30.0F); + BedBugEntity.this.getNavigation().moveTo(this.targetFood, 1.0D); + double distanceSqr = BedBugEntity.this.distanceToSqr(this.targetFood); + + if (distanceSqr < this.lastDistanceSqr - 0.2D) { + this.lastDistanceSqr = distanceSqr; + this.stuckTicks = 0; + } else if (BedBugEntity.this.getNavigation().isDone() && distanceSqr > 4.0D) { + if (++this.stuckTicks >= 20) { + BedBugEntity.this.invalidateFoodCache(); + this.targetFood = null; + return; + } + } else { + this.lastDistanceSqr = distanceSqr; + } + + if (distanceSqr <= 2.0D) { + ItemStack stack = this.targetFood.getItem(); + stack.shrink(1); + if (stack.isEmpty()) { + this.targetFood.discard(); + } else { + this.targetFood.setItem(stack); + } + BedBugEntity.this.heal(2.0F); + BedBugEntity.this.startBiteAnimation(); + BedBugEntity.this.playSound(SoundEvents.GENERIC_EAT, 0.45F, 1.2F + BedBugEntity.this.random.nextFloat() * 0.2F); + BedBugEntity.this.invalidateFoodCache(); + this.targetFood = null; + BedBugEntity.this.getNavigation().stop(); + } + } + } + + private final class GuardEggNestGoal extends Goal { + @Nullable + private Vec3 patrolPos; + + private GuardEggNestGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + if (BedBugEntity.this.guardNestCooldown > 0 + || BedBugEntity.this.eggNestPos == null + || BedBugEntity.this.hasFoodPriorityTarget() + || BedBugEntity.this.getTarget() != null + || BedBugEntity.this.hasPendingEggs) { + return false; + } + + this.patrolPos = this.findPatrolPos(); + return this.patrolPos != null; + } + + @Override + public boolean canContinueToUse() { + return this.patrolPos != null + && BedBugEntity.this.getTarget() == null + && !BedBugEntity.this.hasFoodPriorityTarget() + && !BedBugEntity.this.getNavigation().isDone(); + } + + @Override + public void start() { + if (this.patrolPos != null) { + BedBugEntity.this.getNavigation().moveTo(this.patrolPos.x, this.patrolPos.y, this.patrolPos.z, 0.9D); + } + } + + @Override + public void tick() { + if (this.patrolPos != null) { + BedBugEntity.this.getLookControl().setLookAt(this.patrolPos.x, this.patrolPos.y, this.patrolPos.z, 20.0F, 20.0F); + } + } + + @Override + public void stop() { + BedBugEntity.this.getNavigation().stop(); + BedBugEntity.this.guardNestCooldown = 20 + BedBugEntity.this.random.nextInt(20); + this.patrolPos = null; + } + + @Nullable + private Vec3 findPatrolPos() { + if (BedBugEntity.this.eggNestPos == null) { + return null; + } + + double distanceToNest = BedBugEntity.this.distanceToSqr(Vec3.atCenterOf(BedBugEntity.this.eggNestPos)); + if (distanceToNest < 9.0D && BedBugEntity.this.random.nextInt(6) != 0) { + return null; + } + + for (int attempt = 0; attempt < 10; attempt++) { + BlockPos candidate = BedBugEntity.this.eggNestPos.offset(BedBugEntity.this.random.nextInt(11) - 5, 0, BedBugEntity.this.random.nextInt(11) - 5); + BlockPos surface = BedBugEntity.this.level().getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, candidate); + if (surface.distSqr(BedBugEntity.this.eggNestPos) > EGG_GUARD_RADIUS * EGG_GUARD_RADIUS) { + continue; + } + return Vec3.atBottomCenterOf(surface); + } + + return Vec3.atBottomCenterOf(BedBugEntity.this.eggNestPos); + } + } + + private static final class BedBugSpawnData implements SpawnGroupData { + @Nullable + private BlockPos eggNestPos; + } +} 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 new file mode 100644 index 00000000..8b3fa5ca --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java @@ -0,0 +1,362 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import java.util.Objects; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.tags.DamageTypeTags; +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.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +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.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.entity.projectile.AbstractArrow; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.Level.ExplosionInteraction; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +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 com.craisinlord.antarchy.compat.geckolib.AutoPlayingSoundKeyframeHandlerCompat; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class BomberEntity extends Monster implements GeoEntity { + private static final ResourceLocation INTENTIONALLY_EMPTY_SOUND_ID = new ResourceLocation("intentionally_empty"); + private static final EntityDataAccessor FUSE_TICKS_DATA = + SynchedEntityData.defineId(BomberEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor DETONATING_DATA = + SynchedEntityData.defineId(BomberEntity.class, EntityDataSerializers.BOOLEAN); + + private static final int DEFAULT_FUSE_TICKS = 120; + private static final int EXPLODE_ANIM_START_TICKS = 25; + private static final int FLASH_INTERVAL_TICKS = 5; + private static final double KNOCKBACK_MULTIPLIER = 5.5D; + private static final float EXPLOSION_RADIUS_MULTIPLIER = 0.45F; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation EXPLODE_ANIM = RawAnimation.begin().thenPlay("explode"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int fuseTicks; + private boolean detonating; + + public BomberEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 8; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.bomberHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.28D) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.bomberAttackDamage()) + .add(Attributes.FOLLOW_RANGE, 24.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; + } + + return level.getDifficulty() != Difficulty.PEACEFUL + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(FUSE_TICKS_DATA, 0); + this.entityData.define(DETONATING_DATA, false); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new BomberAttackGoal()); + this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 10.0F)); + this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + double maxHealth = AntarchySettings.bomberHealth(); + double attackDamage = AntarchySettings.bomberAttackDamage(); + Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(maxHealth); + this.setHealth((float) maxHealth); + Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(attackDamage); + SpawnGroupData spawnData = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData, dataTag); + this.primeFuse(); + return spawnData; + } + + @Override + public boolean doHurtTarget(Entity target) { + if (!(target instanceof LivingEntity)) { + return super.doHurtTarget(target); + } + + this.primeFuse(); + return true; + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (source.is(DamageTypeTags.IS_FIRE) || source.is(DamageTypeTags.IS_EXPLOSION)) { + this.primeFuse(); + } + + Entity directEntity = source.getDirectEntity(); + if (directEntity instanceof AbstractArrow arrow && arrow.isOnFire()) { + this.primeFuse(); + } + + this.playSound(AntarchySoundEvents.BOMBER_KNOCK.get(), 1.0F, 0.9F + this.random.nextFloat() * 0.2F); + this.pushAwayFrom(source); + return false; + } + + @Override + public void knockback(double strength, double x, double z) { + super.knockback(strength * KNOCKBACK_MULTIPLIER, x, z); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.BOMBER_KNOCK.get(); + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (this.detonating) { + return InteractionResult.PASS; + } + + if (stack.is(Items.FLINT_AND_STEEL)) { + if (!this.level().isClientSide) { + this.primeFuse(); + stack.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(hand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND)); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (stack.is(Items.FIRE_CHARGE)) { + if (!this.level().isClientSide) { + this.primeFuse(); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + return super.mobInteract(player, hand); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "movement_controller", 0, this::movementAnimController) + .setSoundKeyframeHandler(AutoPlayingSoundKeyframeHandlerCompat.create())); + controllers.add(new AnimationController<>(this, "explode_controller", 0, this::explodeAnimController) + .setSoundKeyframeHandler(AutoPlayingSoundKeyframeHandlerCompat.create()) + .triggerableAnim("explode", EXPLODE_ANIM)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + + if (this.detonating && this.fuseTicks <= EXPLODE_ANIM_START_TICKS) { + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + } + + if (!this.level().isClientSide && this.detonating) { + if (this.fuseTicks > 0) { + this.fuseTicks--; + this.entityData.set(FUSE_TICKS_DATA, this.fuseTicks); + if (this.fuseTicks == EXPLODE_ANIM_START_TICKS) { + this.triggerAnim("explode_controller", "explode"); + } + } + + if (this.fuseTicks <= 0) { + this.detonate(); + } + } + } + + public boolean isDetonating() { + return this.entityData.get(DETONATING_DATA); + } + + public int getFuseTicks() { + return this.entityData.get(FUSE_TICKS_DATA); + } + + public boolean isFlashing() { + return this.isDetonating() + && this.getFuseTicks() > 0 + && (this.getFuseTicks() / FLASH_INTERVAL_TICKS) % 2 == 0; + } + + private PlayState movementAnimController(AnimationState state) { + if (this.isDetonating() && this.getFuseTicks() <= EXPLODE_ANIM_START_TICKS) { + return PlayState.STOP; + } + + return state.setAndContinue(this.isMovingForAnimation() ? WALK_ANIM : IDLE_ANIM); + } + + private PlayState explodeAnimController(AnimationState state) { + if (this.isDetonating() && this.getFuseTicks() <= EXPLODE_ANIM_START_TICKS) { + return state.setAndContinue(EXPLODE_ANIM); + } + + return PlayState.STOP; + } + + public void primeFuse() { + if (this.detonating) { + return; + } + + this.detonating = true; + this.fuseTicks = DEFAULT_FUSE_TICKS; + this.entityData.set(DETONATING_DATA, true); + this.entityData.set(FUSE_TICKS_DATA, this.fuseTicks); + this.playSound(AntarchySoundEvents.BOMBER_EXPLODE.get(), 1.0F, 1.0F); + } + + private void detonate() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + this.discard(); + return; + } + + double x = this.getX(); + double y = this.getY(0.0625D); + double z = this.getZ(); + 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( + this, + null, + null, + x, + y, + z, + radius, + false, + ExplosionInteraction.TNT + ); + + double extraDamage = AntarchySettings.bomberExplosionDamage(); + 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 falloff = radius <= 0.0F ? 0.0D : Math.max(0.0D, 1.0D - distance / radius); + if (falloff <= 0.0D) { + continue; + } + + livingEntity.hurt(this.level().damageSources().generic(), (float) (extraDamage * falloff)); + } + } + + this.detonating = false; + this.fuseTicks = 0; + this.entityData.set(DETONATING_DATA, false); + this.entityData.set(FUSE_TICKS_DATA, 0); + this.discard(); + } + + private void pushAwayFrom(DamageSource source) { + Entity sourceEntity = source.getDirectEntity(); + if (sourceEntity == null) { + sourceEntity = source.getEntity(); + } + if (sourceEntity == null || sourceEntity == this) { + return; + } + + double dx = this.getX() - sourceEntity.getX(); + double dz = this.getZ() - sourceEntity.getZ(); + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance < 1.0E-4D) { + return; + } + + double strength = 0.4D * KNOCKBACK_MULTIPLIER; + this.push(dx / distance * strength, 0.08D, dz / distance * strength); + } + + private boolean isMovingForAnimation() { + return this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D || this.getNavigation().isInProgress(); + } + + private final class BomberAttackGoal extends MeleeAttackGoal { + private BomberAttackGoal() { + super(BomberEntity.this, 1.1D, true); + } + + @Override + public boolean canUse() { + return !BomberEntity.this.isDetonating() || BomberEntity.this.getFuseTicks() > EXPLODE_ANIM_START_TICKS && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + return !BomberEntity.this.isDetonating() || BomberEntity.this.getFuseTicks() > EXPLODE_ANIM_START_TICKS && super.canContinueToUse(); + } + } +} 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 new file mode 100644 index 00000000..a5a9d5bc --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java @@ -0,0 +1,843 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +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 java.util.EnumSet; +import java.util.Optional; +import java.util.function.Predicate; +import net.minecraft.core.BlockPos; +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.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.TagKey; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.damagesource.DamageTypes; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +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.control.LookControl; +import net.minecraft.world.entity.ai.goal.BreedGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.TemptGoal; +import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.ai.util.AirAndWaterRandomPos; +import net.minecraft.world.entity.ai.util.HoverRandomPos; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.animal.FlyingAnimal; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.biome.Biome; +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.CropBlock; +import net.minecraft.world.level.block.DoublePlantBlock; +import net.minecraft.world.level.block.StemBlock; +import net.minecraft.world.level.block.SweetBerryBushBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.pathfinder.BlockPathTypes; +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 ButterflyEntity extends Animal implements FlyingAnimal, GeoEntity { + private static final ResourceKey ELYTHIA_DIMENSION = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "elythia") + ); + private static final TagKey CAN_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "butterfly_can_spawn_biomes") + ); + + private static final EntityDataAccessor ACTIVITY_STATE = + SynchedEntityData.defineId(ButterflyEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor TEXTURE_VARIANT = + SynchedEntityData.defineId(ButterflyEntity.class, EntityDataSerializers.INT); + + private static final String ACTIVITY_STATE_KEY = "ActivityState"; + private static final String STAGE_TICKS_KEY = "StageTicks"; + private static final String TEXTURE_VARIANT_KEY = "TextureVariant"; + private static final String SAVED_FLOWER_X_KEY = "SavedFlowerX"; + private static final String SAVED_FLOWER_Y_KEY = "SavedFlowerY"; + private static final String SAVED_FLOWER_Z_KEY = "SavedFlowerZ"; + private static final String HAS_NECTAR_KEY = "HasNectar"; + + private static final int EMERGE_TICKS = 34; + private static final int FLOWER_SEARCH_COOLDOWN_MIN = 80; + private static final int FLOWER_SEARCH_COOLDOWN_MAX = 200; + private static final int FLOWER_RETRY_COOLDOWN = 200; + private static final int MAX_CROPS_GROWN_PER_POLLINATION = 10; + private static final String[] TEXTURE_VARIANT_NAMES = { + "brown", + "blue", + "green", + "magenta", + "yellow", + "cyan", + "lavender", + "light_blue", + "orange", + "purple" + }; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); + private static final RawAnimation EMERGE_ANIM = RawAnimation.begin().thenPlay("coocon2"); + private static final RawAnimation POLLINATE_ANIM = RawAnimation.begin().thenLoop("eat"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + @Nullable + BlockPos savedFlowerPos; + int remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(this.random, FLOWER_SEARCH_COOLDOWN_MIN, FLOWER_SEARCH_COOLDOWN_MAX); + private boolean hasNectar; + private int cropsGrownSincePollination; + private int stageTicks; + @Nullable + private ButterflyPollinateGoal butterflyPollinateGoal; + + public ButterflyEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new FlyingMoveControl(this, 20, true); + this.lookControl = new ButterflyLookControl(this); + this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, -1.0F); + this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); + this.setPathfindingMalus(BlockPathTypes.WATER_BORDER, 16.0F); + this.setPathfindingMalus(BlockPathTypes.LEAVES, -1.0F); + this.setPathfindingMalus(BlockPathTypes.FENCE, -1.0F); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.butterflyHealth()) + .add(Attributes.FLYING_SPEED, AntarchySettings.butterflyFlyingSpeed()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.butterflyMovementSpeed()) + .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; + } + + return (level.getLevel().dimension().equals(ELYTHIA_DIMENSION) || level.getBiome(pos).is(CAN_SPAWN_BIOMES)) + && Animal.checkAnimalSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ACTIVITY_STATE, ActivityState.NORMAL.ordinal()); + this.entityData.define(TEXTURE_VARIANT, 0); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new TemptGoal(this, 1.25D, Ingredient.of(AntarchyTags.Items.BUTTERFLY_BREEDING_FOODS), false)); + this.goalSelector.addGoal(1, new BreedGoal(this, 1.0D)); + this.butterflyPollinateGoal = new ButterflyPollinateGoal(); + this.goalSelector.addGoal(2, this.butterflyPollinateGoal); + this.goalSelector.addGoal(3, new ButterflyGrowCropGoal()); + this.goalSelector.addGoal(4, new ButterflyWanderGoal()); + this.goalSelector.addGoal(5, new RandomLookAroundGoal(this)); + } + + @Override + protected PathNavigation createNavigation(Level level) { + FlyingPathNavigation navigation = new FlyingPathNavigation(this, level) { + @Override + public boolean isStableDestination(BlockPos pos) { + return !this.level.getBlockState(pos.below()).isAir(); + } + + @Override + public void tick() { + if (!ButterflyEntity.this.isPollinating()) { + super.tick(); + } + } + }; + navigation.setCanOpenDoors(false); + navigation.setCanFloat(false); + navigation.setCanPassDoors(true); + return navigation; + } + + @Override + public float getWalkTargetValue(BlockPos pos, LevelReader level) { + return level.getBlockState(pos).isAir() ? 10.0F : 0.0F; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController) + .triggerableAnim("emerge", EMERGE_ANIM) + .triggerableAnim("pollinate", POLLINATE_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.getActivityState() == ActivityState.EMERGING) { + return state.setAndContinue(EMERGE_ANIM); + } + + if (this.isPollinating()) { + return state.setAndContinue(POLLINATE_ANIM); + } + + if (this.onGround()) { + return state.setAndContinue(IDLE_ANIM); + } + + state.getController().setAnimationSpeed(0.78D); + return state.setAndContinue(FLY_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Nullable + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + this.assignRandomTextureVariant(); + return super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData, dataTag); + } + + @Override + public void tick() { + super.tick(); + + if (this.level().isClientSide) { + return; + } + + if (this.getActivityState() == ActivityState.EMERGING) { + if (this.stageTicks > 0) { + this.stageTicks--; + } + if (this.stageTicks <= 0) { + this.setActivityState(ActivityState.NORMAL); + } + } + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.getActivityState() == ActivityState.EMERGING && source.is(DamageTypes.IN_WALL)) { + return false; + } + + return super.hurt(source, amount); + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + public void aiStep() { + super.aiStep(); + + if (!this.level().isClientSide) { + if (this.remainingCooldownBeforeLocatingNewFlower > 0) { + this.remainingCooldownBeforeLocatingNewFlower--; + } + } + } + + public void setEmergingFromChrysalis() { + this.setActivityState(ActivityState.EMERGING); + this.stageTicks = EMERGE_TICKS; + this.setDeltaMovement(Vec3.ZERO); + } + + public boolean isPollinating() { + return this.getActivityState() == ActivityState.POLLINATING; + } + + private void setPollinating(boolean pollinating) { + if (this.getActivityState() == ActivityState.EMERGING) { + return; + } + + this.setActivityState(pollinating ? ActivityState.POLLINATING : ActivityState.NORMAL); + } + + boolean hasNectar() { + return this.hasNectar; + } + + private void setHasNectar(boolean hasNectar) { + this.hasNectar = hasNectar; + if (hasNectar) { + this.cropsGrownSincePollination = 0; + } + } + + void dropOffNectar() { + this.hasNectar = false; + this.cropsGrownSincePollination = 0; + } + + public boolean hasSavedFlowerPos() { + return this.savedFlowerPos != null; + } + + public boolean isFlowerValid(BlockPos pos) { + return this.level().isLoaded(pos) && this.isValidPollinationBlock(this.level().getBlockState(pos)); + } + + private boolean isValidPollinationBlock(BlockState state) { + if (state.hasProperty(BlockStateProperties.WATERLOGGED) && Boolean.TRUE.equals(state.getValue(BlockStateProperties.WATERLOGGED))) { + return false; + } + + if (!state.is(BlockTags.FLOWERS)) { + return false; + } + + if (state.is(Blocks.SUNFLOWER)) { + return state.getValue(DoublePlantBlock.HALF) == DoubleBlockHalf.UPPER; + } + + return true; + } + + boolean isTooFarAway(BlockPos pos) { + return !pos.closerThan(this.blockPosition(), 32.0D); + } + + boolean closerThan(BlockPos pos, int distance) { + return pos.closerThan(this.blockPosition(), (double) distance); + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(AntarchyTags.Items.BUTTERFLY_BREEDING_FOODS); + } + + public String getTextureVariantName() { + int variant = this.getTextureVariant(); + return TEXTURE_VARIANT_NAMES[Mth.clamp(variant, 0, TEXTURE_VARIANT_NAMES.length - 1)]; + } + + public void assignRandomTextureVariant() { + this.setTextureVariant(this.random.nextInt(TEXTURE_VARIANT_NAMES.length)); + } + + @Nullable + @Override + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + CaterpillarEntity caterpillar = AntarchyObjects.CATERPILLAR.get().create(level); + if (caterpillar != null) { + caterpillar.setBaby(true); + } + return caterpillar; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(ACTIVITY_STATE_KEY, this.getActivityState().ordinal()); + tag.putInt(STAGE_TICKS_KEY, this.stageTicks); + tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); + tag.putBoolean(HAS_NECTAR_KEY, this.hasNectar); + if (this.savedFlowerPos != null) { + tag.putInt(SAVED_FLOWER_X_KEY, this.savedFlowerPos.getX()); + tag.putInt(SAVED_FLOWER_Y_KEY, this.savedFlowerPos.getY()); + tag.putInt(SAVED_FLOWER_Z_KEY, this.savedFlowerPos.getZ()); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + ActivityState savedState = ActivityState.byOrdinal(tag.getInt(ACTIVITY_STATE_KEY)); + this.setActivityState(savedState == ActivityState.POLLINATING ? ActivityState.NORMAL : savedState); + this.stageTicks = tag.getInt(STAGE_TICKS_KEY); + if (tag.contains(TEXTURE_VARIANT_KEY)) { + this.setTextureVariant(tag.getInt(TEXTURE_VARIANT_KEY)); + } else { + this.assignRandomTextureVariant(); + } + this.hasNectar = tag.getBoolean(HAS_NECTAR_KEY); + this.savedFlowerPos = tag.contains(SAVED_FLOWER_X_KEY) + ? new BlockPos(tag.getInt(SAVED_FLOWER_X_KEY), tag.getInt(SAVED_FLOWER_Y_KEY), tag.getInt(SAVED_FLOWER_Z_KEY)) + : null; + } + + @Override + protected SoundEvent getAmbientSound() { + return null; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.BUTTERFLY_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.BEE_DEATH; + } + + @Override + protected void playStepSound(BlockPos pos, BlockState state) { + } + + @Override + protected void checkFallDamage(double distance, boolean onGround, BlockState state, BlockPos pos) { + } + + @Override + protected void jumpInLiquid(net.minecraft.tags.TagKey fluidTag) { + this.setDeltaMovement(this.getDeltaMovement().add(0.0D, 0.01D, 0.0D)); + } + + @Override + public boolean isFlying() { + return !this.onGround(); + } + + private void setActivityState(ActivityState state) { + ActivityState previous = this.getActivityState(); + if (previous != state) { + this.entityData.set(ACTIVITY_STATE, state.ordinal()); + String trigger = switch (state) { + case EMERGING -> "emerge"; + case POLLINATING -> "pollinate"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + if (previous == ActivityState.POLLINATING) { + this.stopTriggeredAnimation("main_controller", "pollinate"); + } + } + } + + private ActivityState getActivityState() { + return ActivityState.byOrdinal(this.entityData.get(ACTIVITY_STATE)); + } + + private int getTextureVariant() { + return this.entityData.get(TEXTURE_VARIANT); + } + + private void setTextureVariant(int variant) { + this.entityData.set(TEXTURE_VARIANT, Mth.clamp(variant, 0, TEXTURE_VARIANT_NAMES.length - 1)); + } + + private enum ActivityState { + NORMAL, + EMERGING, + POLLINATING; + + private static final ActivityState[] VALUES = values(); + + private static ActivityState byOrdinal(int ordinal) { + if (ordinal < 0 || ordinal >= VALUES.length) { + return NORMAL; + } + return VALUES[ordinal]; + } + } + + private abstract class BaseButterflyGoal extends Goal { + @Override + public boolean canUse() { + return ButterflyEntity.this.getActivityState() != ActivityState.EMERGING && this.canButterflyUse(); + } + + @Override + public boolean canContinueToUse() { + return ButterflyEntity.this.getActivityState() != ActivityState.EMERGING && this.canButterflyContinueToUse(); + } + + protected abstract boolean canButterflyUse(); + + protected abstract boolean canButterflyContinueToUse(); + } + + private final class ButterflyLookControl extends LookControl { + private ButterflyLookControl(Mob mob) { + super(mob); + } + + @Override + protected boolean resetXRotOnTick() { + return !ButterflyEntity.this.isPollinating(); + } + } + + private final class ButterflyPollinateGoal extends BaseButterflyGoal { + private static final int MIN_SUCCESSFUL_POLLINATION_TICKS = 24; + private static final int MAX_POLLINATING_TICKS = 70; + private static final int POSITION_CHANGE_CHANCE = 20; + private static final double ARRIVAL_THRESHOLD = 0.18D; + private static final double APPROACH_SPEED = 1.1D; + private static final double HOVER_SPEED = 0.52D; + private static final float HOVER_HEIGHT_WITHIN_FLOWER = 0.7F; + private static final float HOVER_POS_OFFSET = 0.45F; + private static final double SEARCH_RADIUS = 5.0D; + private static final int FLOWER_SEARCH_INTERVAL = 40; + + private final Predicate validFlowerPredicate = ButterflyEntity.this::isValidPollinationBlock; + @Nullable + private Vec3 hoverPos; + private int successfulPollinatingTicks; + private int totalPollinatingTicks; + @Nullable + private BlockPos lastSearchResult; + private int ticksSinceLastSearch = FLOWER_SEARCH_INTERVAL; + + private ButterflyPollinateGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + protected boolean canButterflyUse() { + if (ButterflyEntity.this.remainingCooldownBeforeLocatingNewFlower > 0 || ButterflyEntity.this.hasNectar() || ButterflyEntity.this.level().isRaining()) { + return false; + } + + BlockPos targetFlower = this.resolveFlowerTarget(); + if (targetFlower == null) { + ButterflyEntity.this.remainingCooldownBeforeLocatingNewFlower = + Mth.nextInt(ButterflyEntity.this.random, FLOWER_SEARCH_COOLDOWN_MIN, FLOWER_SEARCH_COOLDOWN_MAX); + return false; + } + + ButterflyEntity.this.savedFlowerPos = targetFlower; + return true; + } + + @Override + protected boolean canButterflyContinueToUse() { + if (ButterflyEntity.this.savedFlowerPos == null || ButterflyEntity.this.level().isRaining()) { + return false; + } + + if (this.totalPollinatingTicks >= MAX_POLLINATING_TICKS) { + return false; + } + + if (ButterflyEntity.this.tickCount % 20 == 0 && !ButterflyEntity.this.isFlowerValid(ButterflyEntity.this.savedFlowerPos)) { + ButterflyEntity.this.savedFlowerPos = null; + return false; + } + + if (this.successfulPollinatingTicks > MIN_SUCCESSFUL_POLLINATION_TICKS) { + return ButterflyEntity.this.random.nextFloat() < 0.2F; + } + + return true; + } + + @Override + public boolean requiresUpdateEveryTick() { + return true; + } + + @Override + public void start() { + this.hoverPos = null; + this.successfulPollinatingTicks = 0; + this.totalPollinatingTicks = 0; + ButterflyEntity.this.setPollinating(false); + this.moveTowardFlowerCenter(); + } + + @Override + public void stop() { + if (this.successfulPollinatingTicks > MIN_SUCCESSFUL_POLLINATION_TICKS) { + ButterflyEntity.this.setHasNectar(true); + } + + ButterflyEntity.this.setPollinating(false); + ButterflyEntity.this.getNavigation().stop(); + ButterflyEntity.this.remainingCooldownBeforeLocatingNewFlower = FLOWER_RETRY_COOLDOWN; + } + + @Override + public void tick() { + if (ButterflyEntity.this.savedFlowerPos == null) { + return; + } + + this.totalPollinatingTicks++; + Vec3 flowerHoverPos = Vec3.atBottomCenterOf(ButterflyEntity.this.savedFlowerPos) + .add(0.0D, HOVER_HEIGHT_WITHIN_FLOWER, 0.0D); + + if (ButterflyEntity.this.position().distanceTo(flowerHoverPos) > 1.1D) { + ButterflyEntity.this.setPollinating(false); + this.hoverPos = flowerHoverPos; + this.moveTowardFlowerCenter(); + return; + } + + ButterflyEntity.this.setPollinating(true); + ButterflyEntity.this.getNavigation().stop(); + if (this.hoverPos == null) { + this.hoverPos = flowerHoverPos; + } + + boolean atHoverPos = ButterflyEntity.this.position().distanceTo(this.hoverPos) <= ARRIVAL_THRESHOLD; + boolean shouldMove = true; + if (atHoverPos) { + if (ButterflyEntity.this.random.nextInt(POSITION_CHANGE_CHANCE) == 0) { + this.hoverPos = new Vec3( + flowerHoverPos.x + this.getOffset(), + flowerHoverPos.y + (ButterflyEntity.this.random.nextDouble() - 0.5D) * 0.12D, + flowerHoverPos.z + this.getOffset() + ); + } else { + shouldMove = false; + } + + ButterflyEntity.this.getLookControl().setLookAt(flowerHoverPos.x, flowerHoverPos.y, flowerHoverPos.z); + } + + if (shouldMove && this.hoverPos != null) { + ButterflyEntity.this.getMoveControl().setWantedPosition( + this.hoverPos.x, + this.hoverPos.y, + this.hoverPos.z, + HOVER_SPEED + ); + } + + this.successfulPollinatingTicks++; + } + + @Nullable + private BlockPos resolveFlowerTarget() { + if (ButterflyEntity.this.savedFlowerPos != null) { + if (ButterflyEntity.this.isFlowerValid(ButterflyEntity.this.savedFlowerPos) && !ButterflyEntity.this.isTooFarAway(ButterflyEntity.this.savedFlowerPos)) { + return ButterflyEntity.this.savedFlowerPos; + } + ButterflyEntity.this.savedFlowerPos = null; + } + + this.ticksSinceLastSearch++; + if (this.ticksSinceLastSearch >= FLOWER_SEARCH_INTERVAL) { + this.ticksSinceLastSearch = 0; + this.lastSearchResult = this.findNearbyFlower().orElse(null); + } + return this.lastSearchResult; + } + + private void moveTowardFlowerCenter() { + if (ButterflyEntity.this.savedFlowerPos == null) { + return; + } + + ButterflyEntity.this.getNavigation().moveTo( + ButterflyEntity.this.savedFlowerPos.getX() + 0.5D, + ButterflyEntity.this.savedFlowerPos.getY() + 0.5D, + ButterflyEntity.this.savedFlowerPos.getZ() + 0.5D, + APPROACH_SPEED + ); + } + + private float getOffset() { + return (ButterflyEntity.this.random.nextFloat() * 2.0F - 1.0F) * HOVER_POS_OFFSET; + } + + private Optional findNearbyFlower() { + BlockPos origin = ButterflyEntity.this.blockPosition(); + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + + for (int y = 0; (double) y <= SEARCH_RADIUS; y = y > 0 ? -y : 1 - y) { + for (int ring = 0; (double) ring < SEARCH_RADIUS; ++ring) { + for (int x = 0; x <= ring; x = x > 0 ? -x : 1 - x) { + for (int z = x < ring && x > -ring ? ring : 0; z <= ring; z = z > 0 ? -z : 1 - z) { + cursor.setWithOffset(origin, x, y - 1, z); + if (origin.closerThan(cursor, SEARCH_RADIUS) + && this.validFlowerPredicate.test(ButterflyEntity.this.level().getBlockState(cursor))) { + return Optional.of(cursor.immutable()); + } + } + } + } + } + + return Optional.empty(); + } + } + + private final class ButterflyGrowCropGoal extends BaseButterflyGoal { + private static final int GROW_CHANCE = 30; + + @Override + protected boolean canButterflyUse() { + if (!ButterflyEntity.this.hasNectar() || ButterflyEntity.this.cropsGrownSincePollination >= MAX_CROPS_GROWN_PER_POLLINATION) { + return false; + } + + return ButterflyEntity.this.random.nextFloat() >= 0.3F; + } + + @Override + protected boolean canButterflyContinueToUse() { + return this.canButterflyUse(); + } + + @Override + public void stop() { + if (ButterflyEntity.this.cropsGrownSincePollination >= MAX_CROPS_GROWN_PER_POLLINATION) { + ButterflyEntity.this.dropOffNectar(); + } + } + + @Override + public void tick() { + if (!(ButterflyEntity.this.level() instanceof ServerLevel serverLevel)) { + return; + } + + if (ButterflyEntity.this.random.nextInt(this.adjustedTickDelay(GROW_CHANCE)) != 0) { + return; + } + + for (int depth = 1; depth <= 2; depth++) { + BlockPos cropPos = ButterflyEntity.this.blockPosition().below(depth); + BlockState cropState = ButterflyEntity.this.level().getBlockState(cropPos); + Block block = cropState.getBlock(); + BlockState updatedState = null; + + if (!cropState.is(BlockTags.BEE_GROWABLES)) { + continue; + } + + if (block instanceof CropBlock cropBlock) { + if (!cropBlock.isMaxAge(cropState)) { + updatedState = cropBlock.getStateForAge(cropBlock.getAge(cropState) + 1); + } + } else if (block instanceof StemBlock) { + int age = cropState.getValue(StemBlock.AGE); + if (age < 7) { + updatedState = cropState.setValue(StemBlock.AGE, age + 1); + } + } else if (cropState.is(Blocks.SWEET_BERRY_BUSH)) { + int age = cropState.getValue(SweetBerryBushBlock.AGE); + if (age < 3) { + updatedState = cropState.setValue(SweetBerryBushBlock.AGE, age + 1); + } + } else if (cropState.is(Blocks.CAVE_VINES) || cropState.is(Blocks.CAVE_VINES_PLANT)) { + ((BonemealableBlock) cropState.getBlock()).performBonemeal(serverLevel, ButterflyEntity.this.random, cropPos, cropState); + ButterflyEntity.this.level().levelEvent(2011, cropPos, 15); + ButterflyEntity.this.cropsGrownSincePollination++; + } + + if (updatedState != null) { + ButterflyEntity.this.level().levelEvent(2011, cropPos, 15); + ButterflyEntity.this.level().setBlockAndUpdate(cropPos, updatedState); + ButterflyEntity.this.cropsGrownSincePollination++; + } + + if (ButterflyEntity.this.cropsGrownSincePollination >= MAX_CROPS_GROWN_PER_POLLINATION) { + ButterflyEntity.this.dropOffNectar(); + return; + } + } + } + } + + private final class ButterflyWanderGoal extends BaseButterflyGoal { + private ButterflyWanderGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + protected boolean canButterflyUse() { + return ButterflyEntity.this.getNavigation().isDone() + && ButterflyEntity.this.random.nextInt(16) == 0; + } + + @Override + protected boolean canButterflyContinueToUse() { + return ButterflyEntity.this.getNavigation().isInProgress(); + } + + @Override + public void start() { + Vec3 target = this.findPos(); + if (target != null) { + ButterflyEntity.this.getNavigation().moveTo(target.x, target.y, target.z, 1.0D); + } + } + + @Nullable + private Vec3 findPos() { + Vec3 direction; + if (ButterflyEntity.this.savedFlowerPos != null && !ButterflyEntity.this.closerThan(ButterflyEntity.this.savedFlowerPos, 10)) { + direction = Vec3.atCenterOf(ButterflyEntity.this.savedFlowerPos).subtract(ButterflyEntity.this.position()).normalize(); + } else { + direction = ButterflyEntity.this.getViewVector(0.0F); + } + + Vec3 hoverTarget = HoverRandomPos.getPos( + ButterflyEntity.this, + 8, + 7, + direction.x, + direction.z, + (float) Math.PI / 2.0F, + 3, + 1 + ); + if (hoverTarget != null) { + return hoverTarget; + } + + return AirAndWaterRandomPos.getPos( + ButterflyEntity.this, + 8, + 4, + -2, + direction.x, + direction.z, + (double) ((float) Math.PI / 2.0F) + ); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java new file mode 100644 index 00000000..6b97a25e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java @@ -0,0 +1,681 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.config.AntarchySettings; + +import java.util.UUID; +import java.util.EnumSet; +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.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.tags.TagKey; +import net.minecraft.util.RandomSource; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.ai.goal.Goal; +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.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.TemptGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.pathfinder.BlockPathTypes; +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 com.craisinlord.antarchy.compat.geckolib.AutoPlayingSoundKeyframeHandlerCompat; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class CaterpillarEntity extends Animal implements GeoEntity { + private static final ResourceKey ELYTHIA_DIMENSION = ResourceKey.create( + net.minecraft.core.registries.Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "elythia") + ); + private static final TagKey CAN_SPAWN_BIOMES = TagKey.create( + net.minecraft.core.registries.Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "caterpillar_can_spawn_biomes") + ); + private static final EntityDataAccessor LIFE_STAGE = + SynchedEntityData.defineId(CaterpillarEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor EAT_ANIMATION_TICKS = + SynchedEntityData.defineId(CaterpillarEntity.class, EntityDataSerializers.INT); + + private static final String GROWTH_TICKS_KEY = "GrowthTicks"; + private static final String STAGE_TICKS_KEY = "StageTicks"; + private static final String EAT_ANIM_TICKS_KEY = "EatAnimTicks"; + private static final String PUPATION_TARGET_X_KEY = "PupationTargetX"; + private static final String PUPATION_TARGET_Y_KEY = "PupationTargetY"; + private static final String PUPATION_TARGET_Z_KEY = "PupationTargetZ"; + + private static final int FOOD_SEARCH_INTERVAL_TICKS = 20; + private static final int FOOD_REPATH_INTERVAL_TICKS = 12; + private static final int EAT_SEARCH_INTERVAL_TICKS = 5; + private static final double FOOD_SEARCH_RANGE = 10.0D; + private static final double FOOD_EAT_REACH = 1.4D; + private static final int GROWTH_TICKS_TO_PUPATE = 4800; + private static final int FOOD_GROWTH_BONUS = 600; + private static final int EAT_ANIM_TICKS = 30; + private static final int EAT_CONSUME_TICK = 16; + private static final int PUPATION_ANIM_TICKS = 25; + private static final int PUPATION_SEARCH_INTERVAL_TICKS = 20; + private static final int PUPATION_SEARCH_RADIUS_HORIZONTAL = 8; + private static final int PUPATION_SEARCH_RADIUS_VERTICAL = 8; + private static final double PUPATION_BEGIN_DISTANCE_SQR = 0.35D; + private static final double FOOD_SPEED = 1.0D; + private static final double PLAYER_FOLLOW_SPEED = 0.95D; + private static final double PUPATION_SPEED = 0.9D; + + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation EAT_ANIM = RawAnimation.begin().thenPlay("eat"); + private static final RawAnimation PUPATION_ANIM = RawAnimation.begin().thenPlay("cocoon"); + private static final RawAnimation CHRYSALIS_ANIM = RawAnimation.begin().thenLoop("cocoon_chrysalis"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + @Nullable + private ItemEntity targetFoodItem; + @Nullable + private BlockPos pupationStandPos; + @Nullable + private UUID eatingFoodEntityId; + private boolean hasConsumedCurrentFood; + private int growthTicks; + private int stageTicks; + private int nextFoodSearchTick; + private int nextFoodRepathTick; + private int nextEatSearchTick; + private int nextPupationSearchTick; + + public CaterpillarEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setPathfindingMalus(BlockPathTypes.LEAVES, -1.0F); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.caterpillarHealth()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.caterpillarMovementSpeed()) + .add(Attributes.FOLLOW_RANGE, 14.0D); + } + + @Override + protected PathNavigation createNavigation(Level level) { + GroundPathNavigation navigation = new GroundPathNavigation(this, level) { + @Override + public boolean isStableDestination(BlockPos pos) { + return CaterpillarEntity.this.isWalkableStandPos(pos); + } + }; + navigation.setCanFloat(false); + navigation.setCanOpenDoors(false); + navigation.setCanPassDoors(true); + return navigation; + } + + 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.getLevel().dimension().equals(ELYTHIA_DIMENSION) || level.getBiome(pos).is(CAN_SPAWN_BIOMES)) + && Animal.checkAnimalSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new TemptGoal(this, PLAYER_FOLLOW_SPEED, Ingredient.of(AntarchyTags.Items.CATERPILLAR_FOODS), false)); + this.goalSelector.addGoal(2, new PupationSeekGoal()); + this.goalSelector.addGoal(3, new WaterAvoidingRandomStrollGoal(this, 0.9D)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); + } + + @Override + public float maxUpStep() { + return 1.0F; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(LIFE_STAGE, LifeStage.CRAWLING.ordinal()); + this.entityData.define(EAT_ANIMATION_TICKS, 0); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController) + .setSoundKeyframeHandler(AutoPlayingSoundKeyframeHandlerCompat.create()) + .triggerableAnim("eat", EAT_ANIM) + .triggerableAnim("pupate", PUPATION_ANIM) + .triggerableAnim("chrysalis", CHRYSALIS_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.getLifeStage() == LifeStage.PUPATING) { + return state.setAndContinue(PUPATION_ANIM); + } + + if (this.getLifeStage() == LifeStage.CHRYSALIS) { + return state.setAndContinue(CHRYSALIS_ANIM); + } + + if (this.getEatAnimationTicks() > 0) { + return state.setAndContinue(EAT_ANIM); + } + + return state.isMoving() ? state.setAndContinue(WALK_ANIM) : state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + + if (this.level().isClientSide) { + return; + } + + LifeStage stage = this.getLifeStage(); + if (stage == LifeStage.PUPATING) { + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + if (this.stageTicks > 0) { + this.stageTicks--; + } + if (this.stageTicks <= 0) { + this.enterChrysalis(); + } + return; + } + + if (stage == LifeStage.CHRYSALIS) { + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + if (this.stageTicks > 0) { + this.stageTicks--; + } + if (this.stageTicks <= 0) { + this.metamorphose(); + } + return; + } + + if (this.getEatAnimationTicks() > 0) { + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + this.tickEatingFood(); + this.setEatAnimationTicks(this.getEatAnimationTicks() - 1); + if (this.getEatAnimationTicks() <= 1) { + this.eatingFoodEntityId = null; + this.hasConsumedCurrentFood = false; + } + return; + } + + if (this.isNoGravity()) { + this.setNoGravity(false); + } + + if (!this.isBaby()) { + this.growthTicks++; + } + + if (this.targetFoodItem != null && !this.isValidFoodItem(this.targetFoodItem)) { + this.targetFoodItem = null; + } + + if (this.pupationStandPos != null && !this.isValidPupationStandPos(this.pupationStandPos)) { + this.pupationStandPos = null; + } + + if (this.readyToPupate()) { + this.setLifeStage(LifeStage.SEEKING_PUPATION); + this.handlePupationSeeking(); + return; + } + + if (this.getLifeStage() != LifeStage.CRAWLING) { + this.setLifeStage(LifeStage.CRAWLING); + } + this.handleFoodForaging(); + } + + private void handleFoodForaging() { + if (this.tryEatNearbyFoodItem()) { + this.targetFoodItem = null; + this.getNavigation().stop(); + return; + } + + ItemEntity targetItem = this.getCurrentFoodTarget(); + if (targetItem == null) { + return; + } + + if (this.getNavigation().isDone() || this.tickCount >= this.nextFoodRepathTick) { + this.getNavigation().moveTo(targetItem, FOOD_SPEED); + this.nextFoodRepathTick = this.tickCount + FOOD_REPATH_INTERVAL_TICKS; + } + } + + private boolean tryEatNearbyFoodItem() { + if (this.tickCount < this.nextEatSearchTick) { + return false; + } + this.nextEatSearchTick = this.tickCount + EAT_SEARCH_INTERVAL_TICKS; + + for (ItemEntity itemEntity : this.level().getEntitiesOfClass( + ItemEntity.class, + this.getBoundingBox().inflate(FOOD_EAT_REACH, 0.6D, FOOD_EAT_REACH), + this::isValidFoodItem)) { + this.startEatingFood(itemEntity); + this.setEatAnimationTicks(EAT_ANIM_TICKS); + return true; + } + + return false; + } + + @Nullable + private ItemEntity getCurrentFoodTarget() { + if (this.targetFoodItem != null && this.isValidFoodItem(this.targetFoodItem)) { + return this.targetFoodItem; + } + + if (this.tickCount < this.nextFoodSearchTick) { + return null; + } + + this.nextFoodSearchTick = this.tickCount + FOOD_SEARCH_INTERVAL_TICKS; + this.targetFoodItem = this.findClosestFoodItem(); + return this.targetFoodItem; + } + + @Nullable + private ItemEntity findClosestFoodItem() { + ItemEntity bestMatch = null; + double bestDistance = Double.MAX_VALUE; + + for (ItemEntity itemEntity : this.level().getEntitiesOfClass( + ItemEntity.class, + this.getBoundingBox().inflate(FOOD_SEARCH_RANGE), + this::isValidFoodItem)) { + double distance = this.distanceToSqr(itemEntity); + if (distance < bestDistance) { + bestDistance = distance; + bestMatch = itemEntity; + } + } + + return bestMatch; + } + + private boolean isValidFoodItem(ItemEntity itemEntity) { + return itemEntity.isAlive() + && !itemEntity.getItem().isEmpty() + && itemEntity.getItem().is(AntarchyTags.Items.CATERPILLAR_FOODS); + } + + private void startEatingFood(ItemEntity itemEntity) { + this.eatingFoodEntityId = itemEntity.getUUID(); + this.hasConsumedCurrentFood = false; + } + + private void tickEatingFood() { + if (this.hasConsumedCurrentFood || this.eatingFoodEntityId == null || this.getEatAnimationTicks() > EAT_CONSUME_TICK) { + return; + } + + ItemEntity itemEntity = this.findFoodEntityByUuid(this.eatingFoodEntityId); + if (itemEntity != null) { + ItemStack stack = itemEntity.getItem(); + if (stack.is(AntarchyTags.Items.CATERPILLAR_FOODS)) { + stack.shrink(1); + if (stack.isEmpty()) { + itemEntity.discard(); + } else { + itemEntity.setItem(stack); + } + this.growthTicks = Math.min(GROWTH_TICKS_TO_PUPATE, this.growthTicks + FOOD_GROWTH_BONUS); + } + } + + this.hasConsumedCurrentFood = true; + } + + @Nullable + private ItemEntity findFoodEntityByUuid(UUID uuid) { + for (ItemEntity itemEntity : this.level().getEntitiesOfClass( + ItemEntity.class, + this.getBoundingBox().inflate(3.0D), + entity -> entity.getUUID().equals(uuid))) { + return itemEntity; + } + return null; + } + + private void handlePupationSeeking() { + BlockPos standPos = this.getCurrentPupationStandPos(); + if (standPos == null) { + return; + } + + Vec3 targetCenter = Vec3.atBottomCenterOf(standPos); + if (this.distanceToSqr(targetCenter) <= PUPATION_BEGIN_DISTANCE_SQR) { + this.beginPupation(standPos); + return; + } + + if (this.getNavigation().isDone() || this.tickCount >= this.nextFoodRepathTick) { + this.getNavigation().moveTo(targetCenter.x, targetCenter.y, targetCenter.z, PUPATION_SPEED); + this.nextFoodRepathTick = this.tickCount + FOOD_REPATH_INTERVAL_TICKS; + } + } + + @Nullable + private BlockPos getCurrentPupationStandPos() { + if (this.pupationStandPos != null && this.isValidPupationStandPos(this.pupationStandPos)) { + return this.pupationStandPos; + } + + if (this.tickCount < this.nextPupationSearchTick) { + return null; + } + + this.nextPupationSearchTick = this.tickCount + PUPATION_SEARCH_INTERVAL_TICKS; + this.pupationStandPos = this.findClosestPupationStandPos(); + return this.pupationStandPos; + } + + @Nullable + private BlockPos findClosestPupationStandPos() { + BlockPos origin = this.blockPosition(); + BlockPos bestPos = null; + double bestDistance = Double.MAX_VALUE; + + for (BlockPos pos : BlockPos.betweenClosed( + origin.offset(-PUPATION_SEARCH_RADIUS_HORIZONTAL, -PUPATION_SEARCH_RADIUS_VERTICAL, -PUPATION_SEARCH_RADIUS_HORIZONTAL), + origin.offset(PUPATION_SEARCH_RADIUS_HORIZONTAL, PUPATION_SEARCH_RADIUS_VERTICAL, PUPATION_SEARCH_RADIUS_HORIZONTAL))) { + if (!this.isValidPupationStandPos(pos)) { + continue; + } + + double distance = pos.distSqr(origin); + if (distance < bestDistance) { + bestDistance = distance; + bestPos = pos.immutable(); + } + } + + return bestPos; + } + + private boolean isValidPupationStandPos(BlockPos pos) { + BlockPos ceilingPos = pos.above(3); + if (!this.level().getBlockState(pos).isAir() + || !this.level().getBlockState(pos.above()).isAir() + || !this.level().getBlockState(pos.above(2)).isAir()) { + return false; + } + + BlockState supportState = this.level().getBlockState(ceilingPos); + return !supportState.isAir() && supportState.isFaceSturdy(this.level(), ceilingPos, Direction.DOWN); + } + + private boolean isWalkableStandPos(BlockPos pos) { + BlockState floorState = this.level().getBlockState(pos.below()); + return this.level().getBlockState(pos).isAir() + && this.level().getBlockState(pos.above()).isAir() + && floorState.isFaceSturdy(this.level(), pos.below(), Direction.UP); + } + + private void beginPupation(BlockPos standPos) { + this.pupationStandPos = standPos.immutable(); + this.setLifeStage(LifeStage.PUPATING); + this.stageTicks = PUPATION_ANIM_TICKS; + this.targetFoodItem = null; + this.getNavigation().stop(); + this.setNoGravity(true); + this.setDeltaMovement(Vec3.ZERO); + this.moveTo(standPos.getX() + 0.5D, standPos.getY() + 0.85D, standPos.getZ() + 0.5D, this.getYRot(), this.getXRot()); + } + + private void enterChrysalis() { + this.setLifeStage(LifeStage.CHRYSALIS); + this.stageTicks = AntarchySettings.caterpillarPupationTimeTicks(); + this.setNoGravity(true); + this.setDeltaMovement(Vec3.ZERO); + } + + public void spawnAsChrysalis() { + this.growthTicks = GROWTH_TICKS_TO_PUPATE; + this.setLifeStage(LifeStage.CHRYSALIS); + this.stageTicks = AntarchySettings.caterpillarPupationTimeTicks(); + this.setNoGravity(true); + this.setDeltaMovement(Vec3.ZERO); + this.setPersistenceRequired(); + } + + private void metamorphose() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + ButterflyEntity butterfly = AntarchyObjects.BUTTERFLY.get().create(serverLevel); + if (butterfly == null) { + return; + } + + butterfly.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); + butterfly.assignRandomTextureVariant(); + butterfly.setEmergingFromChrysalis(); + if (this.hasCustomName()) { + butterfly.setCustomName(this.getCustomName()); + butterfly.setCustomNameVisible(this.isCustomNameVisible()); + } + if (this.isPersistenceRequired()) { + butterfly.setPersistenceRequired(); + } + serverLevel.addFreshEntity(butterfly); + this.discard(); + } + + private boolean readyToPupate() { + return !this.isBaby() && this.growthTicks >= GROWTH_TICKS_TO_PUPATE; + } + + public void forcePupation() { + this.growthTicks = GROWTH_TICKS_TO_PUPATE; + this.pupationStandPos = null; + this.stageTicks = 0; + this.nextPupationSearchTick = 0; + this.setLifeStage(LifeStage.SEEKING_PUPATION); + this.getNavigation().stop(); + this.setNoGravity(false); + } + + private int getEatAnimationTicks() { + return this.entityData.get(EAT_ANIMATION_TICKS); + } + + private void setEatAnimationTicks(int ticks) { + int clamped = Math.max(0, ticks); + boolean wasIdle = this.getEatAnimationTicks() <= 0; + this.entityData.set(EAT_ANIMATION_TICKS, clamped); + if (wasIdle && clamped > 0) { + this.triggerAnim("main_controller", "eat"); + } + } + + private void setLifeStage(LifeStage stage) { + LifeStage previous = this.getLifeStage(); + if (previous != stage) { + this.entityData.set(LIFE_STAGE, stage.ordinal()); + String trigger = switch (stage) { + case PUPATING -> "pupate"; + case CHRYSALIS -> "chrysalis"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + if (previous == LifeStage.CHRYSALIS) { + this.stopTriggeredAnimation("main_controller", "chrysalis"); + } + } + } + + private LifeStage getLifeStage() { + int index = this.entityData.get(LIFE_STAGE); + if (index < 0 || index >= LifeStage.VALUES.length) { + return LifeStage.CRAWLING; + } + return LifeStage.VALUES[index]; + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(AntarchyTags.Items.CATERPILLAR_FOODS); + } + + @Override + public boolean canFallInLove() { + return false; + } + + @Override + @Nullable + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return null; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(GROWTH_TICKS_KEY, this.growthTicks); + tag.putInt(STAGE_TICKS_KEY, this.stageTicks); + tag.putInt(EAT_ANIM_TICKS_KEY, this.getEatAnimationTicks()); + tag.putInt("LifeStage", this.getLifeStage().ordinal()); + if (this.pupationStandPos != null) { + tag.putInt(PUPATION_TARGET_X_KEY, this.pupationStandPos.getX()); + tag.putInt(PUPATION_TARGET_Y_KEY, this.pupationStandPos.getY()); + tag.putInt(PUPATION_TARGET_Z_KEY, this.pupationStandPos.getZ()); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.growthTicks = tag.getInt(GROWTH_TICKS_KEY); + this.stageTicks = tag.getInt(STAGE_TICKS_KEY); + this.setEatAnimationTicks(tag.getInt(EAT_ANIM_TICKS_KEY)); + this.setLifeStage(LifeStage.VALUES[Math.max(0, Math.min(LifeStage.VALUES.length - 1, tag.getInt("LifeStage")))]); + this.pupationStandPos = tag.contains(PUPATION_TARGET_X_KEY) + ? new BlockPos(tag.getInt(PUPATION_TARGET_X_KEY), tag.getInt(PUPATION_TARGET_Y_KEY), tag.getInt(PUPATION_TARGET_Z_KEY)) + : null; + this.targetFoodItem = null; + this.eatingFoodEntityId = null; + this.hasConsumedCurrentFood = false; + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.CATERPILLAR_IDLE.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.CATERPILLAR_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.CATERPILLAR_HURT.get(); + } + + private enum LifeStage { + CRAWLING, + SEEKING_PUPATION, + PUPATING, + CHRYSALIS; + + private static final LifeStage[] VALUES = LifeStage.values(); + } + + private final class PupationSeekGoal extends Goal { + private PupationSeekGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + return !CaterpillarEntity.this.isBaby() && CaterpillarEntity.this.readyToPupate(); + } + + @Override + public boolean canContinueToUse() { + return !CaterpillarEntity.this.isBaby() + && (CaterpillarEntity.this.readyToPupate() + || CaterpillarEntity.this.getLifeStage() == LifeStage.SEEKING_PUPATION + || CaterpillarEntity.this.getLifeStage() == LifeStage.PUPATING + || CaterpillarEntity.this.getLifeStage() == LifeStage.CHRYSALIS); + } + + @Override + public void start() { + CaterpillarEntity.this.setLifeStage(LifeStage.SEEKING_PUPATION); + CaterpillarEntity.this.nextPupationSearchTick = 0; + } + + @Override + public void stop() { + CaterpillarEntity.this.getNavigation().stop(); + } + + @Override + public void tick() { + if (CaterpillarEntity.this.getLifeStage() == LifeStage.PUPATING + || CaterpillarEntity.this.getLifeStage() == LifeStage.CHRYSALIS) { + return; + } + + CaterpillarEntity.this.setLifeStage(LifeStage.SEEKING_PUPATION); + CaterpillarEntity.this.handlePupationSeeking(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CavarynBurrowingMobBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CavarynBurrowingMobBehavior.java new file mode 100644 index 00000000..3653f918 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CavarynBurrowingMobBehavior.java @@ -0,0 +1,39 @@ +package com.craisinlord.antarchy.content.entity; + +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +public final class CavarynBurrowingMobBehavior { + private static final int MAX_UPWARD_SEARCH = 8; + + private CavarynBurrowingMobBehavior() { + } + + public static void moveOutOfBlocks(Mob mob) { + if (!(mob.level() instanceof ServerLevel level) || !mob.isAlive()) { + return; + } + AABB box = mob.getBoundingBox(); + if (level.noCollision(mob, box)) { + return; + } + + double startY = mob.getY(); + for (int offset = 1; offset <= MAX_UPWARD_SEARCH; offset++) { + double candidateY = Math.floor(startY) + offset; + AABB candidateBox = box.move(0.0D, candidateY - startY, 0.0D); + if (!level.noCollision(mob, candidateBox)) { + continue; + } + + mob.setPos(mob.getX(), candidateY, mob.getZ()); + Vec3 motion = mob.getDeltaMovement(); + mob.setDeltaMovement(motion.x, Math.max(0.0D, motion.y), motion.z); + mob.fallDistance = 0.0F; + mob.getNavigation().stop(); + return; + } + } +} 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 new file mode 100644 index 00000000..f67d2dd4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java @@ -0,0 +1,95 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.EntityType; +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.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.animal.AbstractFish; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +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 CheepEntity extends AbstractFish implements GeoEntity { + 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"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public CheepEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + @Override + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.2D, true)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + } + + public static AttributeSupplier.Builder createAttributes() { + return AbstractFish.createAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.cheepHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.cheepAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, 0.5D); + } + + @Override + public ItemStack getBucketItemStack() { + return new ItemStack(Items.WATER_BUCKET); + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.COD_AMBIENT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.COD_DEATH; + } + + @Override + protected SoundEvent getHurtSound(DamageSource source) { + return SoundEvents.COD_HURT; + } + + @Override + protected SoundEvent getFlopSound() { + return SoundEvents.COD_FLOP; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.isAggressive()) { + return state.setAndContinue(ATTACK_ANIM); + } + if (state.isMoving()) { + return state.setAndContinue(SWIM_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/entity/ConfiguredMobSpawnUtil.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ConfiguredMobSpawnUtil.java new file mode 100644 index 00000000..dbe21edf --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ConfiguredMobSpawnUtil.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.content.entity; + +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.Attributes; + +public final class ConfiguredMobSpawnUtil { + private ConfiguredMobSpawnUtil() { + } + + public static void applyConfiguredHealth(Mob mob, double maxHealth) { + AttributeInstance maxHealthAttribute = mob.getAttribute(Attributes.MAX_HEALTH); + if (maxHealthAttribute != null) { + maxHealthAttribute.setBaseValue(maxHealth); + } + mob.setHealth((float) maxHealth); + } +} 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 new file mode 100644 index 00000000..57d86893 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java @@ -0,0 +1,219 @@ +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/CritterCageProjectileEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CritterCageProjectileEntity.java new file mode 100644 index 00000000..ba894ca3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/CritterCageProjectileEntity.java @@ -0,0 +1,82 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.item.CritterCageItem; +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.ThrowableItemProjectile; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; + +public class CritterCageProjectileEntity extends ThrowableItemProjectile { + private static final int MAX_LIFETIME_TICKS = 600; + + public CritterCageProjectileEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public CritterCageProjectileEntity(EntityType entityType, LivingEntity owner, Level level) { + super(entityType, owner, level); + } + + @Override + protected Item getDefaultItem() { + return AntarchyObjects.CRITTER_CAGE.get(); + } + + @Override + public void tick() { + if (!this.level().isClientSide && this.tickCount > MAX_LIFETIME_TICKS) { + this.dropEmptyCage(); + this.discard(); + return; + } + + super.tick(); + } + + @Override + protected void onHitEntity(EntityHitResult hitResult) { + super.onHitEntity(hitResult); + if (this.level().isClientSide) { + return; + } + + Entity target = hitResult.getEntity(); + if (!CritterCageItem.canCapture(target)) { + this.dropEmptyCage(); + this.discard(); + return; + } + + ItemStack filledStack = CritterCageItem.createFilledStack(target); + target.discard(); + this.dropFilledCage(filledStack); + this.discard(); + } + + @Override + protected void onHitBlock(BlockHitResult hitResult) { + super.onHitBlock(hitResult); + if (!this.level().isClientSide) { + this.dropEmptyCage(); + this.discard(); + } + } + + private void dropFilledCage(ItemStack filledStack) { + this.level().addFreshEntity(new ItemEntity(this.level(), this.getX(), this.getY(), this.getZ(), filledStack.copyWithCount(1))); + } + + private void dropEmptyCage() { + if (this.level().isClientSide) { + return; + } + this.spawnAtLocation(new ItemStack(AntarchyObjects.CRITTER_CAGE.get())); + } +} 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 new file mode 100644 index 00000000..c92f3a8e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DiamondMinecartEntity.java @@ -0,0 +1,405 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +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.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.entity.vehicle.AbstractMinecart; +import net.minecraft.world.entity.vehicle.Minecart; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseRailBlock; +import net.minecraft.world.level.block.Blocks; +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 org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class DiamondMinecartEntity extends Minecart { + 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 float currentSpeed = 0.0F; + private Direction facingDir = Direction.SOUTH; + private BlockPos lastBlockPos = null; + private boolean railWarningCooldown = false; + + private final Item dropItem; + + private record RailPlan(RailShape currentShape, BlockPos nextPos, RailShape nextShape) { + } + + public DiamondMinecartEntity(EntityType entityType, Level level, Item dropItem) { + super(entityType, level); + this.dropItem = dropItem; + } + + public DiamondMinecartEntity(EntityType entityType, Level level, + double x, double y, double z, Item dropItem) { + super(entityType, level); + this.setPos(x, y, z); + this.dropItem = dropItem; + } + + @Override + protected Item getDropItem() { + return this.dropItem; + } + + @Override + public AbstractMinecart.Type getMinecartType() { + return AbstractMinecart.Type.RIDEABLE; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(SYNCED_SPEED, 0.0F); + this.entityData.define(SYNCED_FACING, 2); + } + + public float getSyncedSpeed() { + return this.entityData.get(SYNCED_SPEED); + } + + public Direction getSyncedFacing() { + int idx = this.entityData.get(SYNCED_FACING); + return switch (idx) { + case 0 -> Direction.NORTH; + case 1 -> Direction.EAST; + case 3 -> Direction.WEST; + default -> Direction.SOUTH; + }; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putString("DiamondFacing", this.facingDir.getName()); + tag.putFloat("DiamondSpeed", this.currentSpeed); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.contains("DiamondFacing")) { + Direction direction = Direction.byName(tag.getString("DiamondFacing")); + if (direction != null && direction.getAxis() != Direction.Axis.Y) { + this.facingDir = direction; + } + } + this.currentSpeed = tag.getFloat("DiamondSpeed"); + } + + @Override + protected double getMaxSpeed() { + return 0.4D; + } + + public void onInputReceived(byte flags) { + this.inputFlags = flags; + } + + @Override + public void tick() { + super.tick(); + } + + private void serverTick() { + Player rider = this.getRidingPlayer(); + boolean hasRider = rider != null; + + if (this.lastBlockPos == null) { + if (rider != null) { + this.facingDir = getLookFacing(rider, Direction.SOUTH); + } + this.lastBlockPos = this.blockPosition(); + } + + if (hasRider) { + float cruiseSpeed = (float) AntarchySettings.diamondMinecartCruiseSpeed(); + float maxSpeed = (float) AntarchySettings.diamondMinecartMaxSpeed(); + float accel = (float) AntarchySettings.diamondMinecartAcceleration(); + float decel = (float) AntarchySettings.diamondMinecartDeceleration(); + float coast = (float) AntarchySettings.diamondMinecartCoastDeceleration(); + + cruiseSpeed = Math.max(0.0F, Math.min(cruiseSpeed, maxSpeed)); + + boolean forward = (this.inputFlags & 0x01) != 0; + boolean back = (this.inputFlags & 0x02) != 0; + + float targetSpeed = forward ? maxSpeed : cruiseSpeed; + if (back && !forward) { + targetSpeed = Math.max(0.0F, cruiseSpeed - decel); + } + + if (this.currentSpeed < targetSpeed) { + this.currentSpeed = Math.min(this.currentSpeed + accel, targetSpeed); + } else if (this.currentSpeed > targetSpeed) { + this.currentSpeed = Math.max(this.currentSpeed - coast, targetSpeed); + } + } else { + float coast = (float) AntarchySettings.diamondMinecartCoastDeceleration(); + this.currentSpeed = Math.max(this.currentSpeed - coast, 0.0F); + this.railWarningCooldown = false; + } + + this.entityData.set(SYNCED_SPEED, this.currentSpeed); + this.entityData.set(SYNCED_FACING, facingDirectionIndex(this.facingDir)); + + BlockPos currentPos = this.blockPosition(); + if (!currentPos.equals(this.lastBlockPos)) { + this.onEnteredNewBlock(currentPos, rider); + this.lastBlockPos = currentPos; + } + + if (AntarchySettings.diamondMinecartPlacesRails() && hasRider) { + this.ensureRailAt(currentPos, this.level().getBlockState(currentPos), getStockShape(this.facingDir), false); + } + + if (AntarchySettings.diamondMinecartMobDamageEnabled() && this.currentSpeed > 0.15F && hasRider) { + this.applyMobCollisionDamage(); + } + } + + 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; + } + } + + boolean turned = this.facingDir != previousFacing; + if (!AntarchySettings.diamondMinecartPlacesRails() || rider == null) { + return; + } + + RailPlan railPlan = this.buildRailPlan(currentPos, previousFacing, turned); + if (railPlan == null) { + return; + } + + this.ensureRailAt(currentPos, this.level().getBlockState(currentPos), railPlan.currentShape(), false); + this.placeRailAt(railPlan.nextPos(), railPlan.nextShape(), rider); + this.refreshRailConnections(currentPos); + this.refreshRailConnections(railPlan.nextPos()); + } + + @Nullable + private RailPlan buildRailPlan(BlockPos currentPos, Direction previousFacing, boolean turned) { + BlockPos flatAhead = currentPos.relative(this.facingDir); + if (canPlaceRailAt(flatAhead)) { + RailShape currentShape = turned ? getTurnShape(previousFacing, this.facingDir) : getStockShape(this.facingDir); + return new RailPlan(currentShape, flatAhead, getStockShape(this.facingDir)); + } + + if (!turned) { + BlockPos upAhead = flatAhead.above(); + if (canPlaceRailAt(upAhead)) { + return new RailPlan(getAscendingShape(this.facingDir), upAhead, getStockShape(this.facingDir)); + } + + BlockPos downAhead = flatAhead.below(); + if (canPlaceRailAt(downAhead)) { + return new RailPlan(getDescendingEntryShape(this.facingDir), downAhead, getStockShape(this.facingDir)); + } + } + + return null; + } + + private void placeRailAt(BlockPos pos, RailShape shape, Player rider) { + BlockState existing = this.level().getBlockState(pos); + if (BaseRailBlock.isRail(existing)) { + this.setRailShapeAt(pos, shape); + return; + } + + if (!canPlaceRailAt(pos, existing)) { + return; + } + + if (!consumeRailFromInventory(rider)) { + if (!this.railWarningCooldown) { + rider.displayClientMessage( + net.minecraft.network.chat.Component.literal("The Diamond Minecart is out of rails!"), + true + ); + this.railWarningCooldown = true; + this.currentSpeed = 0.0F; + } + return; + } + + this.railWarningCooldown = false; + this.level().setBlock(pos, Blocks.RAIL.defaultBlockState().setValue(RailBlock.SHAPE, shape), 3); + this.refreshRailConnections(pos); + } + + private void ensureRailAt(BlockPos pos, BlockState existing, RailShape shape, boolean consume) { + if (BaseRailBlock.isRail(existing)) { + this.setRailShapeAt(pos, shape); + return; + } + + if (!canPlaceRailAt(pos, existing)) { + return; + } + + Player rider = this.getRidingPlayer(); + if (consume && rider != null && !consumeRailFromInventory(rider)) { + return; + } + + this.level().setBlock(pos, Blocks.RAIL.defaultBlockState().setValue(RailBlock.SHAPE, shape), 3); + this.refreshRailConnections(pos); + } + + private void setRailShapeAt(BlockPos pos, RailShape shape) { + BlockState state = this.level().getBlockState(pos); + if (state.getBlock() instanceof RailBlock) { + this.level().setBlock(pos, state.setValue(RailBlock.SHAPE, shape), 3); + this.refreshRailConnections(pos); + } + } + + private void refreshRailConnections(BlockPos pos) { + this.level().updateNeighborsAt(pos, Blocks.RAIL); + this.level().updateNeighborsAt(pos.above(), Blocks.RAIL); + this.level().updateNeighborsAt(pos.below(), Blocks.RAIL); + for (Direction direction : Direction.Plane.HORIZONTAL) { + this.level().updateNeighborsAt(pos.relative(direction), Blocks.RAIL); + this.level().updateNeighborsAt(pos.relative(direction).above(), Blocks.RAIL); + this.level().updateNeighborsAt(pos.relative(direction).below(), Blocks.RAIL); + } + } + + private boolean consumeRailFromInventory(Player player) { + for (int i = 0; i < player.getInventory().getContainerSize(); i++) { + ItemStack stack = player.getInventory().getItem(i); + if (stack.is(Items.RAIL)) { + stack.shrink(1); + return true; + } + } + return false; + } + + public static RailShape getStockShape(Direction facing) { + return (facing == Direction.NORTH || facing == Direction.SOUTH) + ? RailShape.NORTH_SOUTH + : RailShape.EAST_WEST; + } + + public static RailShape getTurnShape(Direction oldFacing, Direction newFacing) { + Direction entry = oldFacing.getOpposite(); + Direction exit = newFacing; + + boolean hasNorth = entry == Direction.NORTH || exit == Direction.NORTH; + boolean hasEast = entry == Direction.EAST || exit == Direction.EAST; + boolean hasSouth = entry == Direction.SOUTH || exit == Direction.SOUTH; + boolean hasWest = entry == Direction.WEST || exit == Direction.WEST; + + if (hasNorth && hasEast) return RailShape.NORTH_EAST; + if (hasNorth && hasWest) return RailShape.NORTH_WEST; + if (hasSouth && hasEast) return RailShape.SOUTH_EAST; + if (hasSouth && hasWest) return RailShape.SOUTH_WEST; + return getStockShape(newFacing); + } + + private static RailShape getAscendingShape(Direction facing) { + return switch (facing) { + case NORTH -> RailShape.ASCENDING_NORTH; + case SOUTH -> RailShape.ASCENDING_SOUTH; + case EAST -> RailShape.ASCENDING_EAST; + case WEST -> RailShape.ASCENDING_WEST; + default -> RailShape.NORTH_SOUTH; + }; + } + + private static RailShape getDescendingEntryShape(Direction facing) { + return getAscendingShape(facing.getOpposite()); + } + + private static boolean isWithinRailBuildHeight(BlockPos pos) { + return pos.getY() >= -64 && pos.getY() < 320; + } + + private boolean canPlaceRailAt(BlockPos pos) { + return canPlaceRailAt(pos, this.level().getBlockState(pos)); + } + + private boolean canPlaceRailAt(BlockPos pos, BlockState existing) { + if (!isWithinRailBuildHeight(pos) || !this.level().getBlockState(pos.below()).isSolid()) { + return false; + } + return BaseRailBlock.isRail(existing) || existing.isAir() || existing.canBeReplaced(); + } + + private void applyMobCollisionDamage() { + double maxDamage = AntarchySettings.diamondMinecartMaxMobDamage(); + double maxSpeed = AntarchySettings.diamondMinecartMaxSpeed(); + float damage = maxSpeed <= 0.0D ? 0.0F : (float) (maxDamage * (this.currentSpeed / maxSpeed)); + + 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))); + + for (LivingEntity mob : nearby) { + mob.hurt(source, damage); + double dx = mob.getX() - this.getX(); + double dz = mob.getZ() - this.getZ(); + double len = Math.sqrt(dx * dx + dz * dz); + if (len > 0.001D) { + mob.setDeltaMovement(mob.getDeltaMovement().add( + dx / len * 0.5D, + 0.3D, + dz / len * 0.5D + )); + } + } + } + + @Nullable + private Player getRidingPlayer() { + for (Entity passenger : this.getPassengers()) { + if (passenger instanceof Player player) { + return player; + } + } + return null; + } + + private static Direction getLookFacing(Player rider, Direction fallback) { + Direction direction = Direction.fromYRot(rider.getYRot()); + return direction.getAxis() == Direction.Axis.Y ? fallback : direction; + } + + private static int facingDirectionIndex(Direction dir) { + return switch (dir) { + case NORTH -> 0; + case EAST -> 1; + case WEST -> 3; + default -> 2; + }; + } +} 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 new file mode 100644 index 00000000..32d248ea --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java @@ -0,0 +1,967 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.EnumSet; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +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.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +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.EntityType; +import net.minecraft.world.entity.Entity.MoveFunction; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.control.MoveControl; +import net.minecraft.world.entity.ai.control.SmoothSwimmingLookControl; +import net.minecraft.world.entity.ai.control.SmoothSwimmingMoveControl; +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.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.RandomSwimmingGoal; +import net.minecraft.world.entity.ai.goal.TryFindWaterGoal; +import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.ai.navigation.WaterBoundPathNavigation; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.SimpleMenuProvider; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.pathfinder.BlockPathTypes; +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 DorrieEntity extends Animal implements GeoEntity { + private static final ResourceLocation CHEEP_ITEM_ID = new ResourceLocation("antarchy", "cheep"); + private static final String INVENTORY_TAG = "Inventory"; + private static final int SADDLE_SLOT = 0; + private static final int INVENTORY_SIZE = 17; + + private static final EntityDataAccessor HAS_SADDLE = + SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor TAMED = + SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor JUMP_CHARGE = + SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor QUIRK_TICKS = + SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.INT); + + private static final int MAX_CHARGE_TICKS = 22; + private static final float WATER_RIDE_SPEED = 0.42F; + private static final float LAND_BEACH_SPEED = 0.07F; + private static final double ASCEND_SPEED = 0.06D; + private static final int QUIRK_DURATION_TICKS = 65; + private static final int MIN_QUIRK_COOLDOWN_TICKS = 260; + private static final int MAX_QUIRK_COOLDOWN_TICKS = 420; + private static final double MOVING_ANIM_THRESHOLD_SQ = 0.0025D; + + private static final RawAnimation IDLE_GROUND_ANIM = RawAnimation.begin().thenLoop("idle_ground"); + private static final RawAnimation IDLE_WATER_ANIM = RawAnimation.begin().thenLoop("idle_water"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); + private static final RawAnimation JUMP_START_ANIM = RawAnimation.begin().thenPlay("jump_start"); + private static final RawAnimation JUMP_LOOP_ANIM = RawAnimation.begin().thenLoop("jump_idle"); + private static final RawAnimation JUMP_LAND_ANIM = RawAnimation.begin().thenPlay("jump_end"); + private static final RawAnimation QUIRK_ANIM = RawAnimation.begin().thenPlay("quirk"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private final MoveControl landMoveControl; + private final MoveControl waterMoveControl; + private final SimpleContainer inventory = new SimpleContainer(INVENTORY_SIZE) { + @Override + public void setChanged() { + super.setChanged(); + DorrieEntity.this.onInventoryChanged(); + } + }; + + private static final int RIDES_TO_TAME = 4; + private static final int BUCK_DELAY_TICKS = 60; + + private int chargeTicks = 0; + private boolean isCharging = false; + private boolean isLeaping = false; + private boolean wasInAir = false; + private int landAnimTicks = 0; + private int rideAttempts = 0; + private int buckTimer = 0; + private int swimForwardTicks = 0; + private int quirkCooldownTicks = MIN_QUIRK_COOLDOWN_TICKS; + private boolean usingLandNavigation = true; + private boolean pressingJump = false; + + public DorrieEntity(EntityType entityType, Level level) { + super(entityType, level); + this.landMoveControl = new MoveControl(this); + this.waterMoveControl = new SmoothSwimmingMoveControl(this, 85, 10, 0.02F, 1.0F, true); + this.moveControl = this.landMoveControl; + this.lookControl = new SmoothSwimmingLookControl(this, 10); + this.setPathfindingMalus(BlockPathTypes.WATER, 0.0F); + this.setPathfindingMalus(BlockPathTypes.WATER_BORDER, 0.0F); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(HAS_SADDLE, false); + this.entityData.define(TAMED, false); + this.entityData.define(JUMP_CHARGE, 0); + this.entityData.define(QUIRK_TICKS, 0); + } + + @Override + protected PathNavigation createNavigation(Level level) { + return this.createLandNavigation(level); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new TryFindWaterGoal(this)); + this.goalSelector.addGoal(1, new HuntCheepGoal(this)); + this.goalSelector.addGoal(2, new DolphinSwimGoal()); + this.goalSelector.addGoal(3, new RandomSwimmingGoal(this, 1.45D, 4)); + this.goalSelector.addGoal(4, new WaterAvoidingRandomStrollGoal(this, 0.9D, 10)); + this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 6.0F)); + this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.dorrieHealth()) + .add(Attributes.MOVEMENT_SPEED, 1.15D) + .add(Attributes.FOLLOW_RANGE, 16.0D) + .add(Attributes.ATTACK_DAMAGE, 4.0D); + } + + public boolean hasSaddle() { + return this.entityData.get(HAS_SADDLE); + } + + public void setSaddle(boolean saddle) { + this.entityData.set(HAS_SADDLE, saddle); + } + + public SimpleContainer inventory() { + return this.inventory; + } + + public boolean isTamed() { + return this.entityData.get(TAMED); + } + + public void setTamed(boolean tamed) { + this.entityData.set(TAMED, tamed); + } + + public int getJumpCharge() { + return this.entityData.get(JUMP_CHARGE); + } + + private void setJumpCharge(int charge) { + this.entityData.set(JUMP_CHARGE, charge); + } + + public int getQuirkTicks() { + return this.entityData.get(QUIRK_TICKS); + } + + private void setQuirkTicks(int ticks) { + boolean wasIdle = this.getQuirkTicks() <= 0; + this.entityData.set(QUIRK_TICKS, ticks); + if (wasIdle && ticks > 0) { + this.triggerAnim("main_controller", "quirk"); + } + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean("Tamed", this.isTamed()); + tag.putInt("RideAttempts", this.rideAttempts); + ListTag inventoryTag = new ListTag(); + for (int slot = 0; slot < this.inventory.getContainerSize(); slot++) { + ItemStack stack = this.inventory.getItem(slot); + if (stack.isEmpty()) { + continue; + } + + CompoundTag stackTag = new CompoundTag(); + stackTag.putByte("Slot", (byte) slot); + stackTag.put("Item", stack.save(new CompoundTag())); + inventoryTag.add(stackTag); + } + tag.put(INVENTORY_TAG, inventoryTag); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.setTamed(tag.getBoolean("Tamed")); + this.rideAttempts = tag.getInt("RideAttempts"); + this.inventory.clearContent(); + ListTag inventoryTag = tag.getList(INVENTORY_TAG, 10); + for (int i = 0; i < inventoryTag.size(); i++) { + CompoundTag stackTag = inventoryTag.getCompound(i); + int slot = stackTag.getByte("Slot") & 255; + if (slot < 0 || slot >= this.inventory.getContainerSize()) { + continue; + } + this.inventory.setItem(slot, ItemStack.of(stackTag.getCompound("Item"))); + } + this.syncSaddleState(); + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + + if (!this.isTamed()) { + if (!this.level().isClientSide) { + player.startRiding(this); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (player.isSecondaryUseActive()) { + this.openInventory(player); + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (this.hasSaddle() && stack.isEmpty() && !player.isPassengerOfSameVehicle(this)) { + if (!this.level().isClientSide) { + player.startRiding(this); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (!stack.isEmpty() && this.isFood(stack)) { + return super.mobInteract(player, hand); + } + + this.openInventory(player); + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + @Override + @Nullable + public LivingEntity getControllingPassenger() { + if (!this.isTamed() || !this.hasSaddle()) { + return null; + } + Entity passenger = this.getFirstPassenger(); + if (passenger instanceof Player player) { + return player; + } + return null; + } + + @Override + protected Vec3 getRiddenInput(Player player, Vec3 travelVector) { + float forward = player.zza; + float strafe = player.xxa * 0.5F; + float pitch = Mth.clamp(player.getXRot(), -60.0F, 60.0F); + double vertical = 0.0D; + if (player.zza > 0.02F) { + vertical = -pitch / 45.0D; + } else if (Math.abs(pitch) > 10.0F) { + vertical = -pitch / 60.0D; + } + return new Vec3(strafe, Mth.clamp(vertical, -1.0D, 1.0D), forward); + } + + @Override + protected float getRiddenSpeed(Player player) { + float speed = (this.isInWater() || this.isInLava()) + ? WATER_RIDE_SPEED * (1.0F + Math.min(this.swimForwardTicks, 60) * 0.0125F) + : LAND_BEACH_SPEED; + return (float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * speed; + } + + @Override + public void tick() { + super.tick(); + this.updateNavigationMode(); + this.setNoGravity(false); + + if (this.getControllingPassenger() instanceof Player player) { + this.setYRot(player.getYRot()); + this.yRotO = this.getYRot(); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + if (this.getQuirkTicks() > 0) { + this.setQuirkTicks(0); + } + if (this.isInWater() || this.isInLava()) { + if (player.zza > 0.05F) { + this.swimForwardTicks = Math.min(this.swimForwardTicks + 1, 60); + } else { + this.swimForwardTicks = Math.max(this.swimForwardTicks - 2, 0); + } + } else { + this.swimForwardTicks = 0; + } + } else { + this.swimForwardTicks = 0; + } + + if (this.isVehicle() && this.getQuirkTicks() > 0) { + this.setQuirkTicks(0); + } + + if (!this.level().isClientSide && !this.isTamed() && this.getFirstPassenger() instanceof Player rider) { + buckTimer++; + if (buckTimer >= BUCK_DELAY_TICKS) { + rider.stopRiding(); + buckTimer = 0; + rideAttempts++; + if (rideAttempts >= RIDES_TO_TAME) { + this.setTamed(true); + this.playSound(SoundEvents.DOLPHIN_JUMP, 0.8F, 1.0F); + } else { + this.playSound(SoundEvents.DOLPHIN_HURT, 0.8F, 1.0F); + } + } + } else if (!this.isTamed() && this.getFirstPassenger() == null) { + buckTimer = 0; + } + + if (!this.level().isClientSide && this.getControllingPassenger() instanceof Player && isCharging) { + chargeTicks = Math.min(chargeTicks + 1, MAX_CHARGE_TICKS); + setJumpCharge((int) ((chargeTicks / (float) MAX_CHARGE_TICKS) * 100)); + } + + if (!this.level().isClientSide) { + this.tickQuirkAnimation(); + } + + if (landAnimTicks > 0) { + landAnimTicks--; + } + + boolean inAirNow = !this.onGround() && !this.isInWater() && !this.isInLava(); + if (wasInAir && !inAirNow && isLeaping) { + isLeaping = false; + landAnimTicks = 12; + if (!this.level().isClientSide) { + this.triggerAnim("main_controller", "land"); + } + if (this.isInWater()) { + this.playSound(SoundEvents.DOLPHIN_SPLASH, 1.0F, 0.8F + this.random.nextFloat() * 0.4F); + } + } + wasInAir = inAirNow; + } + + public void setPressingJump(boolean pressing) { + this.pressingJump = pressing; + } + + public void startJumpCharge() { + if (!this.level().isClientSide) { + isCharging = true; + } + } + + @Override + public void baseTick() { + super.baseTick(); + if (this.isInWater() || this.isInLava()) { + this.setAirSupply(this.getMaxAirSupply()); + } + } + + @Override + public void travel(Vec3 travelVector) { + if (this.getControllingPassenger() instanceof Player rider && this.isVehicle()) { + this.setYRot(rider.getYRot()); + this.yRotO = this.getYRot(); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + + Vec3 riddenInput = this.getRiddenInput(rider, travelVector); + this.setSpeed(this.getRiddenSpeed(rider)); + + 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); + 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(); + double vertical = 0.0D; + if (this.isUnderWater()) { + vertical = riddenInput.y * 0.025D; + } else if (riddenInput.y < 0.0D) { + vertical = riddenInput.y * 0.02D; + } + if (this.pressingJump) { + vertical += ASCEND_SPEED; + } + this.setDeltaMovement( + motion.x * 0.92D, + motion.y * 0.90D + vertical, + motion.z * 0.92D + ); + this.move(net.minecraft.world.entity.MoverType.SELF, this.getDeltaMovement()); + return; + } + } + + super.travel(travelVector); + } + + public void applyJumpImpulseClient() { + 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(); + double forwardAdd = 0.15D + power * 0.45D; + double vertical = 0.55D + power * 0.80D; + this.setDeltaMovement( + current.x + flatLook.x * forwardAdd, + vertical, + current.z + flatLook.z * forwardAdd + ); + } + } + + public void releaseJump() { + if (!this.level().isClientSide && isCharging) { + 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(); + double forwardAdd = 0.15D + power * 0.45D; + double vertical = 0.55D + power * 0.80D; + this.setDeltaMovement( + current.x + flatLook.x * forwardAdd, + vertical, + current.z + flatLook.z * forwardAdd + ); + this.hasImpulse = true; + isLeaping = true; + this.triggerAnim("main_controller", "jump_start"); + } + isCharging = false; + chargeTicks = 0; + setJumpCharge(0); + } + } + + @Override + protected void positionRider(Entity passenger, MoveFunction moveFunction) { + if (this.hasPassenger(passenger)) { + Vec3 forward = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + moveFunction.accept(passenger, + this.getX() - forward.x * 0.65D, + this.getY() + 0.5D, + this.getZ() - forward.z * 0.65D); + } + } + + public double getPassengersRidingOffset() { + return 0.6D; + } + + @Override + protected void dropEquipment() { + super.dropEquipment(); + if (this.level().isClientSide) { + return; + } + for (int slot = 0; slot < this.inventory.getContainerSize(); slot++) { + ItemStack stack = this.inventory.removeItemNoUpdate(slot); + if (!stack.isEmpty()) { + this.spawnAtLocation(stack); + } + } + } + + private void onInventoryChanged() { + this.syncSaddleState(); + } + + private void syncSaddleState() { + ItemStack saddleStack = this.inventory.getItem(SADDLE_SLOT); + this.setSaddle(!saddleStack.isEmpty() && saddleStack.is(Items.SADDLE)); + } + + private void openInventory(Player player) { + if (this.level().isClientSide) { + return; + } + player.openMenu(new SimpleMenuProvider( + (containerId, playerInventory, ignored) -> new com.craisinlord.antarchy.content.menu.DorrieInventoryMenu(containerId, playerInventory, this.inventory, this), + this.getDisplayName() + )); + } + + @Override + @Nullable + public DorrieEntity getBreedOffspring(ServerLevel level, AgeableMob mob) { + return null; + } + + @Override + public float getSpeed() { + float base = (float) this.getAttributeValue(Attributes.MOVEMENT_SPEED); + return this.isInWater() ? base * 0.15F : base * 0.04F; + } + + @Override + public boolean canBeLeashed(Player player) { + return true; + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.DOLPHIN_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource source) { + return SoundEvents.DOLPHIN_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.DOLPHIN_DEATH; + } + + @Override + protected SoundEvent getSwimSound() { + return SoundEvents.DOLPHIN_SWIM; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController) + .triggerableAnim("land", JUMP_LAND_ANIM) + .triggerableAnim("jump_start", JUMP_START_ANIM) + .triggerableAnim("quirk", QUIRK_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + state.getController().setAnimationSpeed(1.0D); + + if (landAnimTicks > 0) { + return state.setAndContinue(JUMP_LAND_ANIM); + } + if (isLeaping) { + return state.setAndContinue(wasInAir ? JUMP_LOOP_ANIM : JUMP_START_ANIM); + } + if (this.getQuirkTicks() > 0) { + return state.setAndContinue(QUIRK_ANIM); + } + + boolean moving = this.isMovingForAnimation(state); + if (this.onGround()) { + if (moving) { + state.getController().setAnimationSpeed(0.75D); + return state.setAndContinue(WALK_ANIM); + } + return state.setAndContinue(IDLE_GROUND_ANIM); + } + + if (this.isInWater() || this.isInLava()) { + return state.setAndContinue(moving ? SWIM_ANIM : IDLE_WATER_ANIM); + } + return state.setAndContinue(moving ? SWIM_ANIM : IDLE_GROUND_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public boolean isFood(ItemStack stack) { + return this.isCheepItem(stack); + } + + private boolean isCheepItem(ItemStack stack) { + return !stack.isEmpty() && stack.is(BuiltInRegistries.ITEM.getOptional(CHEEP_ITEM_ID).orElse(Items.AIR)); + } + + private PathNavigation createLandNavigation(Level level) { + GroundPathNavigation navigation = new GroundPathNavigation(this, level); + navigation.setCanFloat(true); + navigation.setCanOpenDoors(false); + navigation.setCanPassDoors(true); + return navigation; + } + + private PathNavigation createWaterNavigation(Level level) { + return new WaterBoundPathNavigation(this, level); + } + + private void updateNavigationMode() { + boolean shouldUseLandNavigation = !this.isInWater() && !this.isUnderWater() && !this.isInLava(); + if (this.navigation == null || this.usingLandNavigation != shouldUseLandNavigation) { + this.usingLandNavigation = shouldUseLandNavigation; + if (this.navigation != null) { + this.navigation.stop(); + } + this.navigation = shouldUseLandNavigation + ? this.createLandNavigation(this.level()) + : this.createWaterNavigation(this.level()); + this.moveControl = shouldUseLandNavigation ? this.landMoveControl : this.waterMoveControl; + } + } + + private void tickQuirkAnimation() { + if (this.getQuirkTicks() > 0) { + if (this.canUseQuirkAnimation()) { + this.setQuirkTicks(this.getQuirkTicks() - 1); + } else { + this.setQuirkTicks(0); + this.quirkCooldownTicks = this.nextQuirkCooldown(); + } + return; + } + + if (this.quirkCooldownTicks > 0) { + this.quirkCooldownTicks--; + return; + } + + if (this.canUseQuirkAnimation()) { + this.setQuirkTicks(QUIRK_DURATION_TICKS); + this.quirkCooldownTicks = this.nextQuirkCooldown(); + } + } + + private int nextQuirkCooldown() { + return MIN_QUIRK_COOLDOWN_TICKS + this.random.nextInt(MAX_QUIRK_COOLDOWN_TICKS - MIN_QUIRK_COOLDOWN_TICKS + 1); + } + + private boolean canUseQuirkAnimation() { + return this.isInWater() + && !this.isUnderWater() + && !this.isVehicle() + && !this.isLeaping + && this.landAnimTicks <= 0 + && !this.isCharging + && !this.isMovingForAnimation(null); + } + + @Nullable + private Vec3 findWaterSurfaceTarget(double radius, int minYDelta, int maxYDelta) { + int baseY = Mth.floor(this.getY()); + for (int attempt = 0; attempt < 12; attempt++) { + double offsetX = (this.random.nextDouble() - 0.5D) * radius * 2.0D; + double offsetZ = (this.random.nextDouble() - 0.5D) * radius * 2.0D; + int x = Mth.floor(this.getX() + offsetX); + int z = Mth.floor(this.getZ() + offsetZ); + Vec3 target = this.findWaterSurfaceTarget(x, z, baseY + minYDelta, baseY + maxYDelta); + if (target != null) { + return target; + } + } + return this.findWaterSurfaceTarget(Mth.floor(this.getX()), Mth.floor(this.getZ()), + baseY + minYDelta, baseY + maxYDelta); + } + + @Nullable + private Vec3 findWaterSurfaceTarget(int x, int z, int minY, int maxY) { + int top = Math.min(maxY, this.level().getMaxBuildHeight() - 2); + 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())) { + continue; + } + return new Vec3(x + 0.5D, y + 0.85D, z + 0.5D); + } + return null; + } + + @Nullable + private Vec3 findSubmergedTarget(double radius, int minYDelta, int maxYDelta) { + int baseY = Mth.floor(this.getY()); + for (int attempt = 0; attempt < 16; attempt++) { + double offsetX = (this.random.nextDouble() - 0.5D) * radius * 2.0D; + double offsetZ = (this.random.nextDouble() - 0.5D) * radius * 2.0D; + int x = Mth.floor(this.getX() + offsetX); + int z = Mth.floor(this.getZ() + offsetZ); + Vec3 target = this.findSubmergedTarget(x, z, baseY + minYDelta, baseY + maxYDelta); + if (target != null) { + return target; + } + } + return this.findSubmergedTarget(Mth.floor(this.getX()), Mth.floor(this.getZ()), + baseY + minYDelta, baseY + maxYDelta); + } + + @Nullable + private Vec3 findSubmergedTarget(int x, int z, int minY, int maxY) { + int top = Math.min(maxY, this.level().getMaxBuildHeight() - 2); + 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())) { + continue; + } + return new Vec3(x + 0.5D, y + 0.3D, z + 0.5D); + } + return null; + } + + private boolean isWaterAt(BlockPos pos) { + return this.level().getFluidState(pos).is(FluidTags.WATER); + } + + private boolean isMovingForAnimation(@Nullable AnimationState state) { + if (state != null && state.isMoving()) { + return true; + } + 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 + || this.getNavigation().isInProgress(); + } + + private class DolphinSwimGoal extends Goal { + private static final int COOLDOWN_MIN_TICKS = 120; + private static final int COOLDOWN_MAX_TICKS = 180; + private static final int DIVE_MIN_TICKS = 50; + private static final int DIVE_MAX_TICKS = 110; + private static final int ROAM_MIN_TICKS = 70; + private static final int ROAM_MAX_TICKS = 140; + private static final int TARGET_REFRESH_TICKS = 20; + private static final double AQUATIC_SPEED = 1.15D; + private static final double SEARCH_RADIUS = 12.0D; + + @Nullable + private Vec3 targetPos; + private int phaseTicks; + private int targetRefreshTicks; + private int cooldownTicks; + private Phase phase = Phase.ROAM; + + DolphinSwimGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + if (DorrieEntity.this.level().isClientSide + || DorrieEntity.this.isVehicle() + || DorrieEntity.this.getControllingPassenger() != null + || DorrieEntity.this.isCharging + || DorrieEntity.this.isLeaping + || DorrieEntity.this.landAnimTicks > 0 + || DorrieEntity.this.getTarget() != null) { + return false; + } + if (!DorrieEntity.this.isInWater()) { + return false; + } + if (this.cooldownTicks > 0) { + this.cooldownTicks--; + return false; + } + if (DorrieEntity.this.random.nextInt(3) != 0) { + return false; + } + this.targetPos = DorrieEntity.this.isUnderWater() + ? DorrieEntity.this.findSubmergedTarget(SEARCH_RADIUS, -5, 2) + : DorrieEntity.this.findSubmergedTarget(SEARCH_RADIUS, -5, 1); + return this.targetPos != null; + } + + @Override + public boolean canContinueToUse() { + return this.targetPos != null + && !DorrieEntity.this.isVehicle() + && DorrieEntity.this.getControllingPassenger() == null + && DorrieEntity.this.isAlive() + && DorrieEntity.this.isInWater(); + } + + @Override + public void start() { + this.phase = DorrieEntity.this.isUnderWater() ? Phase.ROAM : Phase.DIVE; + this.phaseTicks = this.phase == Phase.DIVE + ? DorrieEntity.this.random.nextInt(DIVE_MAX_TICKS - DIVE_MIN_TICKS + 1) + DIVE_MIN_TICKS + : DorrieEntity.this.random.nextInt(ROAM_MAX_TICKS - ROAM_MIN_TICKS + 1) + ROAM_MIN_TICKS; + this.targetRefreshTicks = 0; + if (this.targetPos == null) { + this.targetPos = this.pickTargetForPhase(); + } + if (this.targetPos == null) { + this.stop(); + } + } + + @Override + public void stop() { + this.targetPos = null; + this.phaseTicks = 0; + this.targetRefreshTicks = 0; + DorrieEntity.this.getNavigation().stop(); + this.cooldownTicks = DorrieEntity.this.random.nextInt(COOLDOWN_MAX_TICKS - COOLDOWN_MIN_TICKS + 1) + COOLDOWN_MIN_TICKS; + } + + @Override + public void tick() { + if (this.targetPos == null) { + this.stop(); + return; + } + + if (this.phaseTicks > 0) { + this.phaseTicks--; + } + if (this.targetRefreshTicks > 0) { + this.targetRefreshTicks--; + } + + if (this.phase == Phase.DIVE && this.phaseTicks <= 0) { + this.phase = Phase.ROAM; + this.phaseTicks = DorrieEntity.this.random.nextInt(ROAM_MAX_TICKS - ROAM_MIN_TICKS + 1) + ROAM_MIN_TICKS; + this.targetPos = this.pickTargetForPhase(); + } else if (this.phase == Phase.ROAM && this.phaseTicks <= 0) { + this.phase = Phase.SURFACE; + this.phaseTicks = DorrieEntity.this.random.nextInt(DIVE_MAX_TICKS - DIVE_MIN_TICKS + 1) + DIVE_MIN_TICKS; + this.targetPos = DorrieEntity.this.findWaterSurfaceTarget(SEARCH_RADIUS, -1, 4); + } else if (this.phase == Phase.SURFACE && this.phaseTicks <= 0 && this.isCloseToTarget()) { + this.stop(); + return; + } + + if (this.targetPos == null || this.targetRefreshTicks <= 0 || this.isCloseToTarget()) { + this.targetPos = this.pickTargetForPhase(); + this.targetRefreshTicks = TARGET_REFRESH_TICKS; + } + + if (this.targetPos == null) { + this.stop(); + return; + } + + DorrieEntity.this.getLookControl().setLookAt(this.targetPos.x, this.targetPos.y, this.targetPos.z, 25.0F, 20.0F); + DorrieEntity.this.getNavigation().moveTo(this.targetPos.x, this.targetPos.y, this.targetPos.z, AQUATIC_SPEED); + } + + @Nullable + private Vec3 pickTargetForPhase() { + return this.phase == Phase.SURFACE + ? DorrieEntity.this.findWaterSurfaceTarget(SEARCH_RADIUS, -1, 4) + : DorrieEntity.this.findSubmergedTarget(SEARCH_RADIUS, -5, 2); + } + + private boolean isCloseToTarget() { + return this.targetPos != null && DorrieEntity.this.distanceToSqr(this.targetPos) < 4.0D; + } + + private enum Phase { + DIVE, + ROAM, + SURFACE + } + } + + private static class HuntCheepGoal extends Goal { + private static final int COOLDOWN_TICKS = 600; + private static final double HUNT_RANGE = 16.0D; + private static final double ATTACK_RANGE_SQ = 2.5D * 2.5D; + + private final DorrieEntity dorrie; + private CheepEntity target; + private int cooldown = 0; + + HuntCheepGoal(DorrieEntity dorrie) { + this.dorrie = dorrie; + setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + if (dorrie.level().isClientSide) { + return false; + } + if (cooldown > 0) { + cooldown--; + return false; + } + if (dorrie.getControllingPassenger() != null) { + return false; + } + List nearby = dorrie.level().getEntitiesOfClass( + CheepEntity.class, dorrie.getBoundingBox().inflate(HUNT_RANGE)); + if (nearby.isEmpty()) { + return false; + } + nearby.sort((a, b) -> Double.compare(a.distanceToSqr(dorrie), b.distanceToSqr(dorrie))); + target = nearby.get(0); + return true; + } + + @Override + public boolean canContinueToUse() { + return target != null && target.isAlive() + && dorrie.getControllingPassenger() == null + && dorrie.distanceToSqr(target) <= HUNT_RANGE * HUNT_RANGE * 4; + } + + @Override + public void start() { + dorrie.getNavigation().moveTo(target, 1.4D); + } + + @Override + public void tick() { + if (target == null) { + return; + } + dorrie.getLookControl().setLookAt(target, 30.0F, 30.0F); + dorrie.getNavigation().moveTo(target, 1.4D); + if (dorrie.distanceToSqr(target) <= ATTACK_RANGE_SQ) { + target.hurt(dorrie.damageSources().mobAttack(dorrie), + (float) dorrie.getAttributeValue(Attributes.ATTACK_DAMAGE)); + stop(); + } + } + + @Override + public void stop() { + target = null; + dorrie.getNavigation().stop(); + cooldown = COOLDOWN_TICKS; + } + } +} 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 new file mode 100644 index 00000000..d186471b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java @@ -0,0 +1,156 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.npc.AbstractVillager; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.PanicGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.RandomStrollGoal; +import net.minecraft.world.entity.ai.goal.TradeWithPlayerGoal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.trading.MerchantOffers; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +public class DrTrayaurusEntity extends AbstractVillager { + private static final Component DISPLAY_NAME = Component.literal("Dr. Trayaurus"); + private static final String TRADES_INITIALIZED_KEY = "TradesInitialized"; + private boolean tradesInitialized; + + public DrTrayaurusEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setCustomName(DISPLAY_NAME); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean(TRADES_INITIALIZED_KEY, this.tradesInitialized); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + this.tradesInitialized = tag.getBoolean(TRADES_INITIALIZED_KEY); + if (this.tradesInitialized) { + super.readAdditionalSaveData(tag); + return; + } + + CompoundTag withoutOffers = tag.copy(); + withoutOffers.remove("Offers"); + super.readAdditionalSaveData(withoutOffers); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new TradeWithPlayerGoal(this)); + this.goalSelector.addGoal(2, new PanicGoal(this, 0.8D)); + this.goalSelector.addGoal(5, new RandomStrollGoal(this, 0.45D)); + this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); + this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); + } + + @Override + public Component getName() { + return DISPLAY_NAME; + } + + @Override + public boolean hasCustomName() { + return true; + } + + @Override + public boolean isCustomNameVisible() { + return true; + } + + @Override + public boolean shouldShowName() { + return true; + } + + @Override + public boolean requiresCustomPersistence() { + return true; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + protected Component getTypeName() { + return DISPLAY_NAME; + } + + @Override + protected void updateTrades() { + MerchantOffers offers = this.getOffers(); + offers.clear(); + offers.addAll(DrTrayaurusTradeManager.createOffers()); + this.overrideXp(1); + this.tradesInitialized = true; + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.VILLAGER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.VILLAGER_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.VILLAGER_DEATH; + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (stack.interactLivingEntity(player, this, hand).consumesAction()) { + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (!this.level().isClientSide && this.isAlive() && !this.isTrading()) { + this.setTradingPlayer(player); + MerchantOffers offers = this.getOffers(); + if (!offers.isEmpty()) { + this.openTradingScreen(player, this.getName(), 0); + } + } + + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + @Override + public void notifyTradeUpdated(ItemStack stack) { + } + + @Override + public void rewardTradeXp(net.minecraft.world.item.trading.MerchantOffer offer) { + } + + @Nullable + @Override + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return null; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/EasterBunnyEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/EasterBunnyEntity.java new file mode 100644 index 00000000..251d1b28 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/EasterBunnyEntity.java @@ -0,0 +1,180 @@ +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 java.util.Comparator; +import java.util.List; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.BuiltInRegistries; +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.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.SpawnEggItem; +import net.minecraft.world.level.Level; +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 EasterBunnyEntity extends Rabbit implements GeoEntity { + private static final int MIN_LAY_COOLDOWN = 20 * 45; + private static final int MAX_LAY_COOLDOWN = 20 * 120; + private static final int LAY_ANIMATION_TICKS = 40; + private static final String MAIN_CONTROLLER = "main_controller"; + private static final String LAY_CONTROLLER = "lay_controller"; + private static final String LAY_TRIGGER = "lay"; + private static final String LAY_COOLDOWN_KEY = "LayCooldown"; + private static final String LAY_ANIM_TICKS_KEY = "LayAnimTicks"; + private static final EntityDataAccessor LAY_ANIM_TICKS = + SynchedEntityData.defineId(EasterBunnyEntity.class, EntityDataSerializers.INT); + private static final List SPAWN_EGG_ITEMS = BuiltInRegistries.ITEM.stream() + .filter(SpawnEggItem.class::isInstance) + .sorted(Comparator.comparing(item -> BuiltInRegistries.ITEM.getKey(item).toString())) + .toList(); + private int layCooldown = this.createLayCooldown(); + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation HOP_ANIM = RawAnimation.begin().thenLoop("hop"); + public EasterBunnyEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(LAY_ANIM_TICKS, 0); + } + + @Override + public void tick() { + super.tick(); + + if (this.level().isClientSide || !this.isAlive()) { + return; + } + + if (!AntarchySettings.easterBunnyEnabled() || this.isBaby()) { + return; + } + + if (this.getLayAnimationTicks() > 0) { + this.setLayAnimationTicks(this.getLayAnimationTicks() - 1); + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + if (this.getLayAnimationTicks() == 0) { + this.layRandomSpawnEgg(); + this.layCooldown = this.createLayCooldown(); + } + } else if (--this.layCooldown <= 0 && this.onGround()) { + this.startLayingEgg(); + } + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(Items.CARROT) || stack.is(Items.GOLDEN_CARROT) || stack.is(Items.DANDELION); + } + + @Override + public Rabbit getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return AntarchyObjects.EASTER_BUNNY.get().create(level); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(LAY_COOLDOWN_KEY, this.layCooldown); + tag.putInt(LAY_ANIM_TICKS_KEY, this.getLayAnimationTicks()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.layCooldown = tag.contains(LAY_COOLDOWN_KEY) ? tag.getInt(LAY_COOLDOWN_KEY) : this.createLayCooldown(); + this.setLayAnimationTicks(Math.max(0, tag.getInt(LAY_ANIM_TICKS_KEY))); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, MAIN_CONTROLLER, 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, LAY_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(LAY_TRIGGER, RawAnimation.begin().thenPlay("lay"))); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + private PlayState mainAnimController(AnimationState state) { + if (this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D) { + state.getController().setAnimationSpeed(1.35D); + return state.setAndContinue(HOP_ANIM); + } + + state.getController().setAnimationSpeed(1.0D); + return state.setAndContinue(IDLE_ANIM); + } + + private int getLayAnimationTicks() { + return this.entityData.get(LAY_ANIM_TICKS); + } + + private void setLayAnimationTicks(int ticks) { + this.entityData.set(LAY_ANIM_TICKS, Math.max(0, ticks)); + } + + private void startLayingEgg() { + this.setLayAnimationTicks(LAY_ANIMATION_TICKS); + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + this.triggerAnim(LAY_CONTROLLER, LAY_TRIGGER); + } + + private void layRandomSpawnEgg() { + Item item = this.getRandomSpawnEgg(); + if (item == Items.AIR) { + return; + } + + this.spawnAtLocation(new ItemStack(item), 0.2F); + this.playSound(SoundEvents.CHICKEN_EGG, 1.0F, 0.95F + this.random.nextFloat() * 0.1F); + } + + private Item getRandomSpawnEgg() { + HolderGetter items = this.level().registryAccess().lookupOrThrow(Registries.ITEM); + List candidates = SPAWN_EGG_ITEMS.stream() + .filter(item -> !this.isBlacklistedSpawnEgg(items, item)) + .toList(); + + return candidates.isEmpty() ? Items.AIR : candidates.get(this.random.nextInt(candidates.size())); + } + + private boolean isBlacklistedSpawnEgg(HolderGetter items, Item item) { + return BuiltInRegistries.ITEM.getResourceKey(item) + .map(items::getOrThrow) + .map(holder -> holder.is(AntarchyTags.Items.EASTER_BUNNY_SPAWN_EGG_BLACKLIST)) + .orElse(false); + } + + private int createLayCooldown() { + return MIN_LAY_COOLDOWN + this.random.nextInt(MAX_LAY_COOLDOWN - MIN_LAY_COOLDOWN + 1); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ElkaEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ElkaEntity.java new file mode 100644 index 00000000..67af7ded --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ElkaEntity.java @@ -0,0 +1,448 @@ +package com.craisinlord.antarchy.content.entity; + +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.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.Mth; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.AgeableMob; +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.Pose; +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.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.TemptGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.core.BlockPos; +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 ElkaEntity extends Animal implements GeoEntity { + private static final EntityDataAccessor SITTING = + SynchedEntityData.defineId(ElkaEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor QUIRK_TICKS = + SynchedEntityData.defineId(ElkaEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor QUIRK_VARIANT = + SynchedEntityData.defineId(ElkaEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ATTACK_TICKS = + SynchedEntityData.defineId(ElkaEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor CRY_TICKS = + SynchedEntityData.defineId(ElkaEntity.class, EntityDataSerializers.INT); + + private static final String SITTING_KEY = "Sitting"; + private static final String SIT_TICKS_KEY = "SitTicks"; + private static final String SIT_COOLDOWN_KEY = "SitCooldown"; + private static final String QUIRK_TICKS_KEY = "QuirkTicks"; + private static final String QUIRK_VARIANT_KEY = "QuirkVariant"; + + private static final String MAIN_CONTROLLER = "main_controller"; + private static final String SIT_TRANSITION_CONTROLLER = "sit_transition_controller"; + private static final String START_SIT_TRIGGER = "start_sit"; + private static final String GET_UP_TRIGGER = "get_up"; + + private static final int IDLE_ANIMATION_CYCLE_TICKS = 60; + private static final int QUIRK_ANIMATION_TICKS = 40; + private static final int QUIRK_CHANCE = 60; + private static final int SIT_MIN_TICKS = 20 * 60; + private static final int SIT_MAX_TICKS = 20 * 60 * 3; + private static final int SIT_COOLDOWN_TICKS = 20 * 60 * 6; + private static final int SIT_CHECK_CHANCE_SHADE = 300; + private static final int SIT_CHECK_CHANCE_OPEN = 1200; + private static final int ATTACK_ANIM_TICKS = 20; + private static final int CRY_ANIM_TICKS = 60; + + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation SIT_IDLE_ANIM = RawAnimation.begin().thenLoop("sit_idle"); + private static final RawAnimation QUIRK_ANIM = RawAnimation.begin().thenPlay("quirk"); + private static final RawAnimation QUIRK_2_ANIM = RawAnimation.begin().thenPlay("quirk_2"); + private static final RawAnimation QUIRK_3_ANIM = RawAnimation.begin().thenPlay("quirk_3"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation CRY_ANIM = RawAnimation.begin().thenPlay("cry"); + private static final RawAnimation START_SIT_ANIM = RawAnimation.begin().thenPlay("sit"); + private static final RawAnimation GET_UP_ANIM = RawAnimation.begin().thenPlay("get_up"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int sitTicksRemaining; + private int sitCooldownTicks; + private int idleAnimationCycleTicks; + + public ElkaEntity(EntityType entityType, net.minecraft.world.level.Level level) { + super(entityType, level); + this.sitCooldownTicks = SIT_COOLDOWN_TICKS; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 34.0D) + .add(Attributes.MOVEMENT_SPEED, 0.22D) + .add(Attributes.ATTACK_DAMAGE, 7.0D) + .add(Attributes.FOLLOW_RANGE, 24.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.3D); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(SITTING, false); + this.entityData.define(QUIRK_TICKS, 0); + this.entityData.define(QUIRK_VARIANT, 0); + this.entityData.define(ATTACK_TICKS, 0); + this.entityData.define(CRY_TICKS, 0); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + if (!this.isBaby()) { + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.2D, true)); + } + this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); + this.goalSelector.addGoal(3, new TemptGoal(this, 1.1D, Ingredient.of(AntarchyObjects.PEACH.get()), false)); + this.goalSelector.addGoal(4, new ElkaSitGoal()); + this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new ElkaHurtByTargetGoal(this)); + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(AntarchyObjects.PEACH.get()); + } + + @Override + public ElkaEntity getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return AntarchyObjects.ELKA.get().create(level); + } + + @Override + public boolean requiresCustomPersistence() { + return true; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + public boolean isSitting() { + return this.entityData.get(SITTING); + } + + private void startSitting() { + this.entityData.set(SITTING, true); + this.sitTicksRemaining = Mth.nextInt(this.random, SIT_MIN_TICKS, SIT_MAX_TICKS); + this.getNavigation().stop(); + if (!this.level().isClientSide) { + this.triggerAnim(SIT_TRANSITION_CONTROLLER, START_SIT_TRIGGER); + } + } + + private void stopSitting() { + if (!this.isSitting()) { + return; + } + this.entityData.set(SITTING, false); + this.sitTicksRemaining = 0; + this.sitCooldownTicks = SIT_COOLDOWN_TICKS; + if (!this.level().isClientSide) { + this.triggerAnim(SIT_TRANSITION_CONTROLLER, GET_UP_TRIGGER); + } + } + + private boolean isEligibleToSit() { + return this.onGround() + && !this.isInWaterOrBubble() + && !this.isOnFire() + && !this.isLeashed() + && !this.isPassenger() + && !this.isVehicle() + && !this.isInLove() + && !this.isBaby() + && this.getTarget() == null + && this.getDeltaMovement().horizontalDistanceSqr() < 1.0E-4D + && this.getNavigation().isDone(); + } + + private boolean isNearShade() { + BlockPos base = this.blockPosition(); + for (BlockPos pos : BlockPos.betweenClosed(base.offset(-3, -1, -3), base.offset(3, 3, 3))) { + if (this.level().getBlockState(pos).is(BlockTags.LEAVES)) { + return true; + } + } + return false; + } + + private void tickSitDecision() { + if (this.isSitting()) { + if (this.getTarget() != null || this.isInWaterOrBubble() || this.isOnFire() || this.hurtTime > 0 + || this.isLeashed() || this.isPassenger() || this.isVehicle() || this.isInLove() || !this.onGround()) { + this.stopSitting(); + return; + } + if (this.sitTicksRemaining > 0) { + this.sitTicksRemaining--; + if (this.sitTicksRemaining <= 0) { + this.stopSitting(); + } + } + return; + } + + if (this.sitCooldownTicks > 0) { + this.sitCooldownTicks--; + return; + } + + if (!this.isEligibleToSit()) { + return; + } + + int chance = this.isNearShade() ? SIT_CHECK_CHANCE_SHADE : SIT_CHECK_CHANCE_OPEN; + if (this.random.nextInt(chance) == 0) { + this.startSitting(); + } + } + + private void tickIdleQuirk() { + if (this.entityData.get(QUIRK_TICKS) > 0 || this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D + || this.getTarget() != null) { + this.idleAnimationCycleTicks = 0; + return; + } + + this.idleAnimationCycleTicks++; + if (this.idleAnimationCycleTicks < IDLE_ANIMATION_CYCLE_TICKS) { + return; + } + this.idleAnimationCycleTicks = 0; + + if (this.random.nextInt(QUIRK_CHANCE) != 0) { + return; + } + + this.entityData.set(QUIRK_TICKS, QUIRK_ANIMATION_TICKS); + if (this.isBaby()) { + this.entityData.set(QUIRK_VARIANT, 0); + } else if (this.isSitting()) { + this.entityData.set(QUIRK_VARIANT, 2); + } else { + this.entityData.set(QUIRK_VARIANT, this.random.nextBoolean() ? 0 : 1); + } + } + + public void triggerCry() { + this.entityData.set(CRY_TICKS, CRY_ANIM_TICKS); + } + + public void triggerAttackAnim() { + this.entityData.set(ATTACK_TICKS, ATTACK_ANIM_TICKS); + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + boolean hurt = super.doHurtTarget(target); + if (hurt) { + this.triggerAttackAnim(); + } + return hurt; + } + + @Override + public void tick() { + super.tick(); + + if (this.level().isClientSide) { + return; + } + + int quirkTicks = this.entityData.get(QUIRK_TICKS); + if (quirkTicks > 0) { + this.entityData.set(QUIRK_TICKS, quirkTicks - 1); + } + + int attackTicks = this.entityData.get(ATTACK_TICKS); + if (attackTicks > 0) { + this.entityData.set(ATTACK_TICKS, attackTicks - 1); + } + + int cryTicks = this.entityData.get(CRY_TICKS); + if (cryTicks > 0) { + this.entityData.set(CRY_TICKS, cryTicks - 1); + } + + this.tickSitDecision(); + this.tickIdleQuirk(); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + this.stopSitting(); + return super.hurt(source, amount); + } + + @Override + public EntityDimensions getDimensions(Pose pose) { + return this.isBaby() + ? EntityDimensions.scalable(1.0F, 1.5F) + : EntityDimensions.scalable(2.2F, 2.75F); + } + + @Override + protected void ageBoundaryReached() { + super.ageBoundaryReached(); + this.refreshDimensions(); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean(SITTING_KEY, this.isSitting()); + tag.putInt(SIT_TICKS_KEY, this.sitTicksRemaining); + tag.putInt(SIT_COOLDOWN_KEY, this.sitCooldownTicks); + tag.putInt(QUIRK_TICKS_KEY, this.entityData.get(QUIRK_TICKS)); + tag.putInt(QUIRK_VARIANT_KEY, this.entityData.get(QUIRK_VARIANT)); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.entityData.set(SITTING, tag.getBoolean(SITTING_KEY)); + this.sitTicksRemaining = tag.getInt(SIT_TICKS_KEY); + this.sitCooldownTicks = tag.contains(SIT_COOLDOWN_KEY) ? tag.getInt(SIT_COOLDOWN_KEY) : SIT_COOLDOWN_TICKS; + this.entityData.set(QUIRK_TICKS, tag.getInt(QUIRK_TICKS_KEY)); + this.entityData.set(QUIRK_VARIANT, tag.getInt(QUIRK_VARIANT_KEY)); + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.PANDA_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.PANDA_BITE; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.PANDA_DEATH; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, MAIN_CONTROLLER, 0, this::mainAnimController)); + if (!this.isBaby()) { + controllers.add(new AnimationController<>(this, SIT_TRANSITION_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(START_SIT_TRIGGER, START_SIT_ANIM) + .triggerableAnim(GET_UP_TRIGGER, GET_UP_ANIM)); + } + } + + private PlayState mainAnimController(AnimationState state) { + if (this.entityData.get(ATTACK_TICKS) > 0) { + return state.setAndContinue(ATTACK_ANIM); + } + if (this.entityData.get(CRY_TICKS) > 0) { + return state.setAndContinue(CRY_ANIM); + } + if (state.isMoving()) { + return state.setAndContinue(WALK_ANIM); + } + if (this.entityData.get(QUIRK_TICKS) > 0) { + return switch (this.entityData.get(QUIRK_VARIANT)) { + case 1 -> state.setAndContinue(QUIRK_2_ANIM); + case 2 -> state.setAndContinue(QUIRK_3_ANIM); + default -> state.setAndContinue(QUIRK_ANIM); + }; + } + if (this.isSitting()) { + return state.setAndContinue(SIT_IDLE_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + private final class ElkaSitGoal extends Goal { + private ElkaSitGoal() { + this.setFlags(java.util.EnumSet.of(Flag.MOVE, Flag.JUMP, Flag.LOOK)); + } + + @Override + public boolean canUse() { + return ElkaEntity.this.isSitting(); + } + + @Override + public boolean canContinueToUse() { + return ElkaEntity.this.isSitting(); + } + + @Override + public void start() { + ElkaEntity.this.getNavigation().stop(); + ElkaEntity.this.setDeltaMovement(0.0D, ElkaEntity.this.getDeltaMovement().y, 0.0D); + } + + @Override + public void tick() { + ElkaEntity.this.getNavigation().stop(); + ElkaEntity.this.setZza(0.0F); + ElkaEntity.this.setXxa(0.0F); + } + } + + private static final class ElkaHurtByTargetGoal extends HurtByTargetGoal { + private ElkaHurtByTargetGoal(ElkaEntity elka) { + super(elka); + } + + @Override + public void start() { + super.start(); + if (this.mob instanceof ElkaEntity elka && elka.isBaby()) { + this.alertOthers(); + this.stop(); + } + } + + @Override + protected void alertOther(Mob mob, LivingEntity target) { + if (mob instanceof ElkaEntity elka && !elka.isBaby()) { + elka.triggerCry(); + super.alertOther(mob, target); + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ElythiaFrog.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ElythiaFrog.java new file mode 100644 index 00000000..68aefe3c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ElythiaFrog.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.animal.FrogVariant; +import net.minecraft.world.entity.animal.frog.Frog; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; + +public final class ElythiaFrog { + public static final ResourceKey ELYTHIA = ResourceKey.create( + net.minecraft.core.registries.Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "elythia") + ); + public static final ResourceKey VARIANT = ResourceKey.create( + net.minecraft.core.registries.Registries.FROG_VARIANT, + new ResourceLocation(Antarchy.MODID, "elythia") + ); + public static final ResourceLocation TEXTURE = + new ResourceLocation(Antarchy.MODID, "textures/entity/frog/frog_elythia.png"); + + private ElythiaFrog() { + } + + public static boolean shouldBecomeElythiaFrog(ServerLevelAccessor level) { + return level.getLevel().dimension().equals(ELYTHIA); + } + + public static void applyVariant(Frog frog) { + FrogVariant variant = BuiltInRegistries.FROG_VARIANT.get(VARIANT.location()); + if (variant != null) { + frog.setVariant(variant); + } + } + + public static boolean isElythiaFrog(Frog frog) { + return VARIANT.location().equals(BuiltInRegistries.FROG_VARIANT.getKey(frog.getVariant())); + } +} 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 new file mode 100644 index 00000000..35b3c886 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java @@ -0,0 +1,854 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchySettings; +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 net.minecraft.core.BlockPos; +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.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerBossEvent; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.RandomSource; +import net.minecraft.world.BossEvent; +import net.minecraft.world.Difficulty; +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.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.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.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; + +public class EmperorScorpionEntity extends Monster implements GeoEntity { + private static final byte CLAW_ATTACK_EVENT = 4; + private static final byte STING_ATTACK_EVENT = 5; + private static final EntityDataAccessor ANIMATION_STATE = + SynchedEntityData.defineId(EmperorScorpionEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor HARDEN_PHASE = + SynchedEntityData.defineId(EmperorScorpionEntity.class, EntityDataSerializers.INT); + + private static final int DEATH_ANIM_TICKS = 40; + private static final int ANIM_IDLE = 0; + private static final int ANIM_WALK = 1; + private static final int ANIM_CLAW_ATTACK = 2; + private static final int ANIM_STING_ATTACK = 3; + private static final int ANIM_DEATH = 4; + private static final int ANIM_HARDEN_START = 5; + private static final int ANIM_HARDEN_ACTIVE = 6; + private static final int ANIM_HARDEN_END = 7; + private static final double CLAW_LUNGE_SPEED = 0.12D; + 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 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 ResourceKey THORAXIS_KEY = + ResourceKey.create(Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "thoraxis")); + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation CLAW_ATTACK_ANIM = RawAnimation.begin().thenPlay("snap"); + private static final RawAnimation STING_ATTACK_ANIM = RawAnimation.begin().thenPlay("sting"); + private static final RawAnimation HARDEN_START_ANIM = RawAnimation.begin().thenPlay("harden"); + private static final RawAnimation HARDEN_ACTIVE_ANIM = RawAnimation.begin().thenLoop("harden_state"); + private static final RawAnimation HARDEN_END_ANIM = RawAnimation.begin().thenPlay("end_of_harden_state"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private final ServerBossEvent bossEvent = + new com.craisinlord.antarchy.content.boss.EntityLinkedServerBossEvent(this.getUUID(), this.getDisplayName(), BossEvent.BossBarColor.PURPLE, BossEvent.BossBarOverlay.PROGRESS); + + private int attackAnimTicks; + private int clawCooldownTicks; + private int stingCooldownTicks; + private int hardenCooldownTicks = AntarchySettings.emperorScorpionHardenCooldownTicks(); + private int hardenCastTicks; + private int hardenCastSpawnTicks; + private int hardenStateTicks; + private int hardenDurationTicks; + private int hardenHealTicks; + private int hardenSummonedScorpions; + private float hardenLockedYaw; + private float hardenLockedPitch; + private boolean attackDamageApplied; + private AttackType currentAttack = AttackType.NONE; + private HardenPhase hardenPhase = HardenPhase.NONE; + @Nullable private LivingEntity attackTarget; + private boolean hasTakenDamage; + + public EmperorScorpionEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = AntarchySettings.emperorScorpionXpReward(); + this.bossEvent.setDarkenScreen(false); + } + + public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.emperorScorpionHealth()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.emperorScorpionMovementSpeed()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.emperorScorpionAttackDamage()) + .add(Attributes.ARMOR, AntarchySettings.emperorScorpionArmor()) + .add(Attributes.ARMOR_TOUGHNESS, 10.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.emperorScorpionKnockbackResistance()) + .add(Attributes.FOLLOW_RANGE, AntarchySettings.emperorScorpionFollowRange()); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + this.entityData.define(HARDEN_PHASE, HardenPhase.NONE.ordinal()); + } + + @Override + protected void registerGoals() { + 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)); + } + + @Override + public boolean fireImmune() { + return true; + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.isHardenedStateActive()) { + return false; + } + amount = BossCombatUtil.capSingleHitAtHalfHealth(this, amount); + boolean hurt = super.hurt(source, amount); + if (hurt) { + this.hasTakenDamage = true; + } + return hurt; + } + + @Override + public boolean isInvulnerableTo(DamageSource source) { + if (this.isHardenedStateActive() || super.isInvulnerableTo(source)) { + return true; + } + return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.emperorScorpionDamageRange()); + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + if (this.hasTakenDamage || this.tickCount < AntarchySettings.emperorScorpionMinDespawnTicks()) { + return false; + } + return super.removeWhenFarAway(distanceToClosestPlayer); + } + + @Override + public void lavaHurt() { + } + + 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; + } + if (!level.getLevel().dimension().equals(THORAXIS_KEY)) { + return false; + } + return level.getDifficulty() != Difficulty.PEACEFUL + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + public float maxUpStep() { + return 1.5F; + } + + @Override + public int getMaxHeadYRot() { + return 40; + } + + @Override + public void tick() { + super.tick(); + this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + + if (this.clawCooldownTicks > 0) { + this.clawCooldownTicks--; + } + if (this.stingCooldownTicks > 0) { + this.stingCooldownTicks--; + } + if (this.hardenCooldownTicks > 0) { + this.hardenCooldownTicks--; + } + if (this.attackAnimTicks > 0) { + if (!this.level().isClientSide) { + this.tickActiveAttack(); + } + this.attackAnimTicks--; + if (this.attackAnimTicks <= 0) { + this.resetAttackState(); + } + } + if (!this.level().isClientSide) { + this.tickHardenState(); + } + + this.updateAnimationState(); + } + + @Override + public boolean doHurtTarget(Entity target) { + boolean hurt = super.doHurtTarget(target); + if (!hurt) { + return false; + } + this.playSound(AntarchySoundEvents.EMPEROR_SCORPION_ATTACK.get(), 0.9F, 0.95F + this.random.nextFloat() * 0.08F); + return true; + } + + private boolean doStingAttack(LivingEntity target) { + boolean hurt; + if (this.level() instanceof net.minecraft.server.level.ServerLevel serverLevel) { + hurt = target.hurt( + AntarchyDamageSources.emperorScorpionSting(serverLevel, this), + (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE) + ); + } else { + hurt = target.hurt(this.damageSources().mobAttack(this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)); + } + + if (!hurt) { + return false; + } + + int poisonDuration = this.level().getDifficulty() == Difficulty.HARD + ? AntarchySettings.emperorScorpionPoisonTicks() * 2 + : AntarchySettings.emperorScorpionPoisonTicks(); + target.addEffect(new MobEffectInstance(MobEffects.POISON, poisonDuration, 1)); + target.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, AntarchySettings.emperorScorpionWeaknessTicks(), 0)); + this.playSound(AntarchySoundEvents.EMPEROR_SCORPION_ATTACK.get(), 1.0F, 0.88F + this.random.nextFloat() * 0.08F); + return true; + } + + private void beginAttack(LivingEntity target, AttackType attackType) { + if (this.isHardenSequenceActive()) { + return; + } + this.attackTarget = target; + this.currentAttack = attackType; + this.attackAnimTicks = attackType.animTicks(); + this.attackDamageApplied = false; + this.getNavigation().stop(); + if (attackType == AttackType.CLAW) { + this.clawCooldownTicks = AntarchySettings.emperorScorpionClawCooldownTicks(); + this.level().broadcastEntityEvent(this, CLAW_ATTACK_EVENT); + this.commitLunge(target, CLAW_LUNGE_SPEED, CLAW_LUNGE_LIFT); + } else if (attackType == AttackType.STING) { + this.stingCooldownTicks = AntarchySettings.emperorScorpionStingCooldownTicks(); + this.level().broadcastEntityEvent(this, STING_ATTACK_EVENT); + this.commitLunge(target, STING_LUNGE_SPEED, STING_LUNGE_LIFT); + } + } + + private void tickActiveAttack() { + if (this.attackTarget == null || !this.attackTarget.isAlive() || this.isHardenSequenceActive()) { + this.resetAttackState(); + return; + } + + this.getLookControl().setLookAt(this.attackTarget, 30.0F, 30.0F); + if (!this.attackDamageApplied + && this.attackAnimTicks == this.currentAttack.hitTick() + && this.canHitAttackTarget(this.attackTarget, this.currentAttack)) { + this.attackDamageApplied = true; + if (this.currentAttack == AttackType.STING) { + this.doStingAttack(this.attackTarget); + } else { + this.doHurtTarget(this.attackTarget); + } + } + } + + 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); + } + + private void resetAttackState() { + this.attackAnimTicks = 0; + this.attackDamageApplied = false; + this.currentAttack = AttackType.NONE; + this.attackTarget = null; + } + + private void tickHardenState() { + if (this.getHardenPhase() == HardenPhase.NONE) { + if (this.hardenCooldownTicks <= 0 && this.getTarget() != null && this.getTarget().isAlive()) { + this.beginHardenCast(); + } + return; + } + + this.getNavigation().stop(); + this.setSpeed(0.0F); + this.setZza(0.0F); + + switch (this.getHardenPhase()) { + case CASTING -> { + if (this.hardenCastTicks % this.hardenCastSpawnTicks == 0 + && this.hardenSummonedScorpions < AntarchySettings.emperorScorpionMaxSummonedScorpions() + && this.countNearbyScorpionMinions() < AntarchySettings.emperorScorpionMaxNearbyScorpions()) { + this.summonScorpionMinion(); + this.hardenSummonedScorpions++; + if (this.hardenSummonedScorpions >= AntarchySettings.emperorScorpionMaxSummonedScorpions()) { + this.beginHardening(); + return; + } + } + if (--this.hardenCastTicks <= 0) { + this.beginHardening(); + } + } + 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); + if (--this.hardenDurationTicks <= 0) { + this.beginHardeningEnd(); + return; + } + if (--this.hardenHealTicks <= 0) { + this.hardenHealTicks = HARDEN_HEAL_INTERVAL_TICKS; + this.heal(HARDEN_HEAL_AMOUNT); + } + } + case END -> { + this.lockHardenRotation(); + Vec3 motion = this.getDeltaMovement(); + this.setDeltaMovement(0.0D, motion.y, 0.0D); + if (--this.hardenStateTicks <= 0) { + this.setHardenPhase(HardenPhase.NONE); + this.hardenCooldownTicks = Math.max(1, AntarchySettings.emperorScorpionSummonIntervalTicks()); + } + } + } + } + + private void beginHardenCast() { + this.setHardenPhase(HardenPhase.CASTING); + this.hardenCastTicks = Math.max(1, AntarchySettings.emperorScorpionSummonIntervalTicks()); + this.hardenCastSpawnTicks = Math.max(1, this.hardenCastTicks / Math.max(1, AntarchySettings.emperorScorpionMaxSummonedScorpions())); + this.hardenStateTicks = 0; + this.hardenDurationTicks = 0; + this.hardenHealTicks = 0; + this.hardenSummonedScorpions = 0; + this.resetAttackState(); + 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); + } + + private void beginHardened() { + this.setHardenPhase(HardenPhase.ACTIVE); + this.hardenDurationTicks = HARDEN_MIN_DURATION_TICKS + this.random.nextInt(HARDEN_MAX_DURATION_TICKS - HARDEN_MIN_DURATION_TICKS + 1); + this.hardenHealTicks = HARDEN_HEAL_INTERVAL_TICKS; + } + + private void beginHardeningEnd() { + this.setHardenPhase(HardenPhase.END); + this.hardenStateTicks = HARDEN_END_TICKS; + this.setAggressive(false); + } + + private static final double NEARBY_SCORPION_CHECK_RADIUS = 24.0D; + + private int countNearbyScorpionMinions() { + return this.level().getEntitiesOfClass( + ScorpionEntity.class, + this.getBoundingBox().inflate(NEARBY_SCORPION_CHECK_RADIUS), + Entity::isAlive + ).size(); + } + + private void summonScorpionMinion() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + ScorpionEntity scorpion = AntarchyObjects.SCORPION.get().create(serverLevel); + if (scorpion == null) { + return; + } + + Vec3 ring = 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); + scorpion.finalizeSpawn(serverLevel, serverLevel.getCurrentDifficultyAt(spawnPos), MobSpawnType.MOB_SUMMONED, null, null); + scorpion.setPersistenceRequired(); + LivingEntity target = this.getTarget(); + if (target != null) { + scorpion.setTarget(target); + } + serverLevel.addFreshEntity(scorpion); + } + + 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); + if (horizontal.lengthSqr() < 1.0E-4D) { + return; + } + horizontal = horizontal.normalize().scale(horizontalSpeed); + this.setDeltaMovement(this.getDeltaMovement().add(horizontal.x, verticalSpeed, horizontal.z)); + this.hasImpulse = true; + } + + @Override + public void handleEntityEvent(byte id) { + if (id == CLAW_ATTACK_EVENT) { + this.currentAttack = AttackType.CLAW; + this.attackAnimTicks = AntarchySettings.emperorScorpionClawAnimTicks(); + this.attackDamageApplied = false; + return; + } + if (id == STING_ATTACK_EVENT) { + this.currentAttack = AttackType.STING; + this.attackAnimTicks = AntarchySettings.emperorScorpionStingAnimTicks(); + this.attackDamageApplied = false; + return; + } + super.handleEntityEvent(id); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main", 3, this::mainController) + .triggerableAnim("snap", CLAW_ATTACK_ANIM) + .triggerableAnim("sting", STING_ATTACK_ANIM) + .triggerableAnim("harden", HARDEN_START_ANIM) + .triggerableAnim("harden_state", HARDEN_ACTIVE_ANIM) + .triggerableAnim("end_of_harden_state", HARDEN_END_ANIM)); + } + + private PlayState mainController(AnimationState state) { + return switch (this.getAnimationState()) { + case ANIM_WALK -> state.setAndContinue(WALK_ANIM); + case ANIM_CLAW_ATTACK -> state.setAndContinue(CLAW_ATTACK_ANIM); + case ANIM_STING_ATTACK -> state.setAndContinue(STING_ATTACK_ANIM); + case ANIM_HARDEN_START -> state.setAndContinue(HARDEN_START_ANIM); + case ANIM_HARDEN_ACTIVE -> state.setAndContinue(HARDEN_ACTIVE_ANIM); + case ANIM_HARDEN_END -> state.setAndContinue(HARDEN_END_ANIM); + case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); + default -> state.setAndContinue(IDLE_ANIM); + }; + } + + private int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private HardenPhase getHardenPhase() { + HardenPhase[] phases = HardenPhase.values(); + int phaseOrdinal = this.entityData.get(HARDEN_PHASE); + return phaseOrdinal >= 0 && phaseOrdinal < phases.length ? phases[phaseOrdinal] : HardenPhase.NONE; + } + + public int getHardenPhaseIndex() { + return this.entityData.get(HARDEN_PHASE); + } + + private void setAnimationState(int animationState) { + if (this.entityData.get(ANIMATION_STATE) != animationState) { + this.entityData.set(ANIMATION_STATE, animationState); + String trigger = switch (animationState) { + case ANIM_CLAW_ATTACK -> "snap"; + case ANIM_STING_ATTACK -> "sting"; + case ANIM_HARDEN_START -> "harden"; + case ANIM_HARDEN_ACTIVE -> "harden_state"; + case ANIM_HARDEN_END -> "end_of_harden_state"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main", trigger); + } + } + } + + private void setHardenPhase(HardenPhase phase) { + this.hardenPhase = phase; + 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); + return; + } + HardenPhase currentHardenPhase = this.getHardenPhase(); + if (currentHardenPhase == HardenPhase.START) { + this.setAnimationState(ANIM_HARDEN_START); + return; + } + if (currentHardenPhase == HardenPhase.ACTIVE) { + this.setAnimationState(ANIM_HARDEN_ACTIVE); + return; + } + if (currentHardenPhase == HardenPhase.END) { + this.setAnimationState(ANIM_HARDEN_END); + return; + } + if (this.attackAnimTicks > 0) { + this.setAnimationState(this.currentAttack == AttackType.STING ? ANIM_STING_ATTACK : ANIM_CLAW_ATTACK); + return; + } + if (currentHardenPhase == HardenPhase.CASTING) { + this.setAnimationState(ANIM_IDLE); + return; + } + if (this.getTarget() != null || this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D) { + this.setAnimationState(ANIM_WALK); + return; + } + this.setAnimationState(ANIM_IDLE); + } + + @Override + protected void tickDeath() { + this.deathTime++; + if (this.deathTime >= DEATH_ANIM_TICKS && !this.level().isClientSide && !this.isRemoved()) { + this.level().broadcastEntityEvent(this, (byte) 60); + this.remove(RemovalReason.KILLED); + } + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.EMPEROR_SCORPION_AMBIENT.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource source) { + return AntarchySoundEvents.EMPEROR_SCORPION_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.EMPEROR_SCORPION_HURT.get(); + } + + @Override + protected float getSoundVolume() { + return 0.8F; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt("HardenPhase", this.hardenPhase.ordinal()); + tag.putInt("HardenCooldownTicks", this.hardenCooldownTicks); + tag.putInt("HardenCastTicks", this.hardenCastTicks); + tag.putInt("HardenCastSpawnTicks", this.hardenCastSpawnTicks); + tag.putInt("HardenStateTicks", this.hardenStateTicks); + tag.putInt("HardenDurationTicks", this.hardenDurationTicks); + tag.putInt("HardenHealTicks", this.hardenHealTicks); + tag.putInt("HardenSummonedScorpions", this.hardenSummonedScorpions); + tag.putBoolean("HasTakenDamage", this.hasTakenDamage); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.contains("HardenPhase")) { + int phaseOrdinal = tag.getInt("HardenPhase"); + HardenPhase[] phases = HardenPhase.values(); + this.setHardenPhase(phaseOrdinal >= 0 && phaseOrdinal < phases.length ? phases[phaseOrdinal] : HardenPhase.NONE); + } + if (tag.contains("HardenCooldownTicks")) { + this.hardenCooldownTicks = tag.getInt("HardenCooldownTicks"); + } + if (tag.contains("HardenCastTicks")) { + this.hardenCastTicks = tag.getInt("HardenCastTicks"); + } + if (tag.contains("HardenCastSpawnTicks")) { + this.hardenCastSpawnTicks = tag.getInt("HardenCastSpawnTicks"); + } + if (tag.contains("HardenStateTicks")) { + this.hardenStateTicks = tag.getInt("HardenStateTicks"); + } + if (tag.contains("HardenDurationTicks")) { + this.hardenDurationTicks = tag.getInt("HardenDurationTicks"); + } + if (tag.contains("HardenHealTicks")) { + this.hardenHealTicks = tag.getInt("HardenHealTicks"); + } + if (tag.contains("HardenSummonedScorpions")) { + this.hardenSummonedScorpions = tag.getInt("HardenSummonedScorpions"); + } + if (tag.contains("HasTakenDamage")) { + this.hasTakenDamage = tag.getBoolean("HasTakenDamage"); + } + } + + @Override + public void setCustomName(@Nullable net.minecraft.network.chat.Component name) { + super.setCustomName(name); + this.bossEvent.setName(this.getDisplayName()); + } + + @Override + public void startSeenByPlayer(ServerPlayer serverPlayer) { + super.startSeenByPlayer(serverPlayer); + this.bossEvent.addPlayer(serverPlayer); + } + + @Override + public void stopSeenByPlayer(ServerPlayer serverPlayer) { + super.stopSeenByPlayer(serverPlayer); + this.bossEvent.removePlayer(serverPlayer); + } + + @Override + public void remove(RemovalReason reason) { + super.remove(reason); + this.bossEvent.removeAllPlayers(); + } + + private boolean isAttackLocked() { + return this.attackAnimTicks > 0; + } + + public boolean isHardenSequenceActive() { + return this.getHardenPhase() != HardenPhase.NONE; + } + + public boolean isHardenedStateActive() { + HardenPhase currentHardenPhase = this.getHardenPhase(); + return currentHardenPhase == HardenPhase.START + || currentHardenPhase == HardenPhase.ACTIVE + || currentHardenPhase == HardenPhase.END; + } + + public boolean isHardened() { + return this.getHardenPhase() == HardenPhase.ACTIVE; + } + + public boolean shouldUseHardenTexture() { + return this.getHardenPhase() == HardenPhase.START + || this.getHardenPhase() == HardenPhase.ACTIVE + || this.getHardenPhase() == HardenPhase.END; + } + + private final class EmperorScorpionCombatGoal extends Goal { + private static final double CHASE_SPEED = 1.1D; + + private EmperorScorpionCombatGoal() { + this.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = EmperorScorpionEntity.this.getTarget(); + return target != null && target.isAlive() && !EmperorScorpionEntity.this.isHardenSequenceActive(); + } + + @Override + public boolean canContinueToUse() { + LivingEntity target = EmperorScorpionEntity.this.getTarget(); + return (target != null && target.isAlive()) || EmperorScorpionEntity.this.isAttackLocked(); + } + + @Override + public void start() { + EmperorScorpionEntity.this.setAggressive(true); + } + + @Override + public void stop() { + EmperorScorpionEntity.this.setAggressive(false); + EmperorScorpionEntity.this.getNavigation().stop(); + } + + @Override + public void tick() { + LivingEntity target = EmperorScorpionEntity.this.getTarget(); + if (target == null) { + EmperorScorpionEntity.this.getNavigation().stop(); + return; + } + + if (EmperorScorpionEntity.this.isHardenSequenceActive()) { + this.stopMovement(); + 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); + } + + private void stopMovement() { + EmperorScorpionEntity.this.getNavigation().stop(); + EmperorScorpionEntity.this.setSpeed(0.0F); + EmperorScorpionEntity.this.setZza(0.0F); + } + } + + @Override + public boolean isWithinMeleeAttackRange(LivingEntity target) { + return this.distanceToSqr(target) <= STING_RANGE * STING_RANGE; + } + + 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)) { + return AttackType.STING; + } + if (canClaw) { + return AttackType.CLAW; + } + if (canSting) { + return AttackType.STING; + } + return AttackType.NONE; + } + + private enum AttackType { + NONE, + CLAW, + STING; + + private int animTicks() { + return switch (this) { + case CLAW -> AntarchySettings.emperorScorpionClawAnimTicks(); + case STING -> AntarchySettings.emperorScorpionStingAnimTicks(); + default -> 0; + }; + } + + private int hitTick() { + return switch (this) { + case CLAW -> AntarchySettings.emperorScorpionClawHitTick(); + case STING -> AntarchySettings.emperorScorpionStingHitTick(); + default -> 0; + }; + } + } + + private enum HardenPhase { + NONE, + CASTING, + START, + ACTIVE, + END + } +} 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 new file mode 100644 index 00000000..db882ba9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java @@ -0,0 +1,1478 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.boss.BossCombatUtil; +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.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import java.util.EnumSet; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.server.level.ServerBossEvent; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.DamageTypeTags; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.BossEvent; +import net.minecraft.world.Difficulty; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.MobSpawnType; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.entity.TamableAnimal; +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.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +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.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.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.entity.BlockEntity; +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.entity.Pose; +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 HerculesBeetleEntity extends TamableAnimal implements GeoEntity, FlyingAnimal { + private static final EntityDataAccessor ANIMATION_STATE = + SynchedEntityData.defineId(HerculesBeetleEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor SADDLED = + SynchedEntityData.defineId(HerculesBeetleEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor FLYING = + SynchedEntityData.defineId(HerculesBeetleEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor KNOCKED_DOWN = + SynchedEntityData.defineId(HerculesBeetleEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor MOUNTED_CHARGE = + SynchedEntityData.defineId(HerculesBeetleEntity.class, EntityDataSerializers.INT); + + 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_CRY = 3; + private static final int ANIM_ATTACK = 4; + private static final int ANIM_FLY_ATTACK = 5; + private static final int ANIM_CHARGE_START = 6; + private static final int ANIM_CHARGE = 7; + private static final int ANIM_KNOCKED_DOWN = 8; + private static final int ANIM_KNOCKED_DOWN_IDLE = 9; + private static final int ANIM_GET_UP = 10; + private static final int ANIM_OPEN_WINGS = 11; + private static final int ANIM_CLOSE_WINGS = 12; + private static final int ANIM_DEATH = 13; + + 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 CRY_ANIM = RawAnimation.begin().thenPlay("cry"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("fly_attack"); + private static final RawAnimation CHARGE_START_ANIM = RawAnimation.begin().thenPlay("charge_start"); + private static final RawAnimation CHARGE_ANIM = RawAnimation.begin().thenLoop("charge"); + private static final RawAnimation KNOCKED_DOWN_ANIM = RawAnimation.begin().thenPlay("knocked_down"); + private static final RawAnimation KNOCKED_DOWN_IDLE_ANIM = RawAnimation.begin().thenLoop("knocked_down_idle"); + private static final RawAnimation GET_UP_ANIM = RawAnimation.begin().thenPlay("get_up"); + private static final RawAnimation OPEN_WINGS_ANIM = RawAnimation.begin().thenPlay("open_wings"); + private static final RawAnimation CLOSE_WINGS_ANIM = RawAnimation.begin().thenPlay("close_wings"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); + + private static final int CRY_TICKS = 30; + private static final int ATTACK_TICKS = 10; + private static final int ATTACK_HIT_TICK = 5; + private static final int FLY_ATTACK_TICKS = 10; + private static final int FLY_ATTACK_HIT_TICK = 5; + private static final int OPEN_WINGS_TICKS = 10; + private static final int CLOSE_WINGS_TICKS = 5; + private static final int CHARGE_START_TICKS = 15; + private static final int KNOCKED_DOWN_TICKS = 16; + private static final int GET_UP_TICKS = 20; + private static final int MAX_PLAYER_CHARGE_TICKS = 40; + private static final int MIN_MOUNTED_CHARGE_TICKS = 40; + private static final int MAX_CHARGE_TICKS = 200; + private static final int CHARGE_COOLDOWN_TICKS = 200; + private static final int REGULAR_ATTACK_COOLDOWN_TICKS = 18; + 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 double FLIGHT_SPEED = 1.38D; + private static final double GROUND_SPEED = 0.34D; + private static final double CHARGE_SPEED = 1.5D; + private static final double CHARGE_DISTANCE = 10.0D; + private static final double ATTACK_RANGE = 4.5D; + private static final double FLY_ATTACK_RANGE = 5.5D; + private static final double CHARGE_TRIGGER_RANGE = 12.0D; + private static final int MAX_BROKEN_BLOCKS = 32; + private static final int MAX_SUFFOCATION_BLOCKS = 12; + private static final EntityDimensions DEFAULT_DIMENSIONS = EntityDimensions.scalable(3.0F, 4.0F); + private static final double MOUNTED_FLYING_SPEED_MULTIPLIER = 0.052D; + private static final double MOUNTED_GROUND_BRAKE = 0.6D; + private static final double MOUNTED_FLIGHT_LIFT = 0.36D; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private final ServerBossEvent bossEvent = + new com.craisinlord.antarchy.content.boss.EntityLinkedServerBossEvent(this.getUUID(), Component.translatable("entity.antarchy.hercules_beetle"), BossEvent.BossBarColor.RED, BossEvent.BossBarOverlay.PROGRESS); + + private int actionTicks; + private int actionHitTick; + private int chargeTicksRemaining; + private double chargeDistanceTravelled; + private double chargeDistanceTarget; + private int chargeCooldown; + private int attackCooldown; + private int cryCooldown; + private int flightCooldown; + private int targetlessTicks; + private int groundedTicks; + private int airborneTicks; + private int mountedChargeTicks; + private boolean attackDamageApplied; + private boolean riderJumpPressed; + private boolean mountedChargeActive; + private boolean combatCryDone; + private boolean pendingChargeStart; + private boolean pendingMountedCharge; + private boolean groundedMountedCharge; + private int pendingChargeDuration; + @Nullable + private UUID attackTargetId; + private Vec3 chargeDirection = Vec3.ZERO; + + public HerculesBeetleEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new FlyingMoveControl(this, 20, true); + this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); + this.setPathfindingMalus(BlockPathTypes.LAVA, -1.0F); + this.xpReward = 50; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.herculesBeetleHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.herculesBeetleAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, GROUND_SPEED) + .add(Attributes.FLYING_SPEED, FLIGHT_SPEED) + .add(Attributes.FOLLOW_RANGE, 48.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.9D) + .add(Attributes.ARMOR, 12.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; + } + return level.getDifficulty() != Difficulty.PEACEFUL + && level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP) + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()); + } + + @Override + protected PathNavigation createNavigation(Level level) { + FlyingPathNavigation navigation = new FlyingPathNavigation(this, level); + navigation.setCanFloat(true); + navigation.setCanOpenDoors(false); + return navigation; + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new HerculesCombatGoal()); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.75D) { + @Override + public boolean canUse() { + return !HerculesBeetleEntity.this.isKnockedDown() + && !HerculesBeetleEntity.this.isVehicle() + && !HerculesBeetleEntity.this.isInBusyAnimation() + && super.canUse(); + } + }); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 16.0F)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, entity -> + entity instanceof Player player + && !this.isTame() + && !this.isKnockedDown() + && !player.isCreative() + && !player.isSpectator())); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + this.entityData.define(SADDLED, false); + this.entityData.define(FLYING, false); + this.entityData.define(KNOCKED_DOWN, false); + this.entityData.define(MOUNTED_CHARGE, 0); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .triggerableAnim("cry", CRY_ANIM) + .triggerableAnim("attack", ATTACK_ANIM) + .triggerableAnim("charge_start", CHARGE_START_ANIM)); + controllers.add(new AnimationController<>(this, "flying_charge_controller", 0, this::flyingChargeAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.isFlying() && (this.getAnimationState() == ANIM_CHARGE_START || this.getAnimationState() == ANIM_CHARGE)) { + return state.setAndContinue(FLY_ANIM); + } + return switch (this.getAnimationState()) { + case ANIM_WALK -> state.setAndContinue(WALK_ANIM); + case ANIM_FLY -> state.setAndContinue(FLY_ANIM); + case ANIM_CRY -> state.setAndContinue(CRY_ANIM); + case ANIM_ATTACK -> state.setAndContinue(ATTACK_ANIM); + case ANIM_FLY_ATTACK -> state.setAndContinue(FLY_ATTACK_ANIM); + case ANIM_CHARGE_START -> state.setAndContinue(CHARGE_START_ANIM); + case ANIM_CHARGE -> state.setAndContinue(CHARGE_ANIM); + case ANIM_KNOCKED_DOWN -> state.setAndContinue(KNOCKED_DOWN_ANIM); + case ANIM_KNOCKED_DOWN_IDLE -> state.setAndContinue(KNOCKED_DOWN_IDLE_ANIM); + case ANIM_GET_UP -> state.setAndContinue(GET_UP_ANIM); + case ANIM_OPEN_WINGS -> state.setAndContinue(OPEN_WINGS_ANIM); + case ANIM_CLOSE_WINGS -> state.setAndContinue(CLOSE_WINGS_ANIM); + case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); + default -> state.setAndContinue(IDLE_ANIM); + }; + } + + private PlayState flyingChargeAnimController(AnimationState state) { + if (!this.isFlying()) { + state.resetCurrentAnimation(); + return PlayState.STOP; + } + + return switch (this.getAnimationState()) { + case ANIM_CHARGE_START -> state.setAndContinue(CHARGE_START_ANIM); + case ANIM_CHARGE -> state.setAndContinue(CHARGE_ANIM); + default -> { + state.resetCurrentAnimation(); + yield PlayState.STOP; + } + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + CavarynBurrowingMobBehavior.moveOutOfBlocks(this); + super.tick(); + CavarynBurrowingMobBehavior.moveOutOfBlocks(this); + + if (this.level().isClientSide) { + return; + } + + this.syncConfiguredAttributes(); + + if (this.attackCooldown > 0) { + this.attackCooldown--; + } + if (this.chargeCooldown > 0) { + this.chargeCooldown--; + } + if (this.cryCooldown > 0) { + this.cryCooldown--; + } + + if (this.getTarget() == null) { + if (this.targetlessTicks++ >= COMBAT_RESET_TICKS) { + this.combatCryDone = false; + } + } else { + this.targetlessTicks = 0; + } + + if (this.onGround()) { + this.groundedTicks++; + this.airborneTicks = 0; + } else { + this.groundedTicks = 0; + this.airborneTicks++; + } + + this.tickMountedCharge(); + + if (this.isDeadOrDying()) { + this.noPhysics = false; + this.setAnimationState(ANIM_DEATH); + this.bossEvent.setProgress(0.0F); + return; + } + + if (this.flightCooldown > 0) { + this.flightCooldown--; + } + + if (this.isFlying() && this.tickCount % 32 == 0) { + this.playSound(AntarchySoundEvents.MANTIS_FLY_LOOP.get(), 0.5F, 0.85F + this.random.nextFloat() * 0.1F); + } + + if (this.isKnockedDown()) { + this.tickKnockedDown(); + } else if (this.chargeTicksRemaining > 0 || this.getAnimationState() == ANIM_CHARGE) { + this.tickCharge(); + } else if (this.isInBusyAnimation()) { + this.tickBusyAnimation(); + } else { + this.tickFlightState(); + this.updateAmbientAnimation(); + } + + if (this.isVehicle()) { + this.tickMountedMotion(); + } + + boolean airborneCharge = this.chargeTicksRemaining > 0 && !this.groundedMountedCharge; + this.setNoGravity(this.isFlying() || airborneCharge); + if (this.isFlying() || airborneCharge) { + this.fallDistance = 0.0F; + } + + if (this.shouldShowBossBar()) { + this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + } else { + this.bossEvent.removeAllPlayers(); + } + } + + private void tickKnockedDown() { + this.getNavigation().stop(); + Vec3 motion = this.getDeltaMovement(); + this.setDeltaMovement(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) { + this.setAnimationState(ANIM_KNOCKED_DOWN_IDLE); + } + } else if (this.getAnimationState() != ANIM_KNOCKED_DOWN_IDLE) { + this.setAnimationState(ANIM_KNOCKED_DOWN_IDLE); + } + } + + private void tickBusyAnimation() { + this.getNavigation().stop(); + if (this.getTarget() != null) { + this.getLookControl().setLookAt(this.getTarget(), 25.0F, 20.0F); + } + + int state = this.getAnimationState(); + if (state == ANIM_ATTACK || state == ANIM_FLY_ATTACK) { + int elapsed = (state == ANIM_ATTACK ? ATTACK_TICKS : FLY_ATTACK_TICKS) - this.actionTicks; + if (!this.attackDamageApplied && elapsed >= this.actionHitTick) { + this.attackDamageApplied = true; + this.performRegularAttack(state == ANIM_FLY_ATTACK); + } + } + + if (this.actionTicks > 0) { + this.actionTicks--; + } + if (this.actionTicks > 0) { + return; + } + + switch (state) { + 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); + this.hasImpulse = true; + } + if (this.pendingChargeStart) { + this.pendingChargeStart = false; + this.beginChargeStart(this.chargeDirection, this.pendingChargeDuration, this.pendingMountedCharge); + return; + } + } + case ANIM_CLOSE_WINGS -> this.setFlying(false); + case ANIM_CHARGE_START -> this.beginChargeLoop(); + case ANIM_GET_UP -> this.setAnimationState(this.isFlying() ? ANIM_FLY : ANIM_IDLE); + case ANIM_CRY, ANIM_ATTACK, ANIM_FLY_ATTACK -> { + } + default -> { + } + } + + this.updateAmbientAnimation(); + } + + private void tickCharge() { + if (this.getAnimationState() != ANIM_CHARGE) { + this.setAnimationState(ANIM_CHARGE); + } + if (!this.groundedMountedCharge) { + this.setFlying(true); + this.setNoGravity(true); + } + this.noPhysics = true; + this.fallDistance = 0.0F; + + double remainingDistance = Math.max(0.0D, this.chargeDistanceTarget - this.chargeDistanceTravelled); + if (remainingDistance <= 0.0D) { + this.finishChargeImpact(); + return; + } + + Vec3 move = this.chargeDirection.scale(Math.min(CHARGE_SPEED, remainingDistance)); + Vec3 nextPosition = this.position().add(move); + if (this.blocksChargePath(nextPosition)) { + this.finishChargeImpact(); + return; + } + + this.breakBlocksForChargePath(nextPosition); + this.setDeltaMovement(move); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.lookInDirection(this.chargeDirection); + + this.chargeDistanceTravelled += move.length(); + this.chargeTicksRemaining--; + if (this.chargeDistanceTravelled >= this.chargeDistanceTarget || this.chargeTicksRemaining <= 0) { + this.finishChargeImpact(); + } + } + + private void tickFlightState() { + if (!this.isVehicle() && this.isFlying() && this.onGround() && this.groundedTicks > 10 && this.getTarget() == null && !this.riderJumpPressed) { + this.requestFlightStop(); + } + } + + private void tickMountedMotion() { + if (!(this.getControllingPassenger() instanceof Player rider) || this.isKnockedDown()) { + return; + } + if (this.chargeTicksRemaining > 0 || this.getAnimationState() == ANIM_CHARGE_START || this.getAnimationState() == ANIM_OPEN_WINGS) { + return; + } + + this.setYRot(rider.getYHeadRot()); + this.yHeadRot = this.getYRot(); + this.yBodyRot = this.getYRot(); + if (this.isFlying()) { + 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); + this.hasImpulse = true; + } + } else { + this.setNoGravity(false); + this.noPhysics = false; + } + } + + private void updateAmbientAnimation() { + if (this.isKnockedDown()) { + this.setAnimationState(ANIM_KNOCKED_DOWN_IDLE); + return; + } + if (this.isFlying()) { + this.setAnimationState(ANIM_FLY); + return; + } + if (!this.onGround()) { + this.setAnimationState(ANIM_IDLE); + return; + } + if (this.getControllingPassenger() instanceof Player rider) { + boolean riderMoving = Math.abs(rider.zza) > 0.05F || Math.abs(rider.xxa) > 0.05F; + if (riderMoving) { + this.setAnimationState(ANIM_WALK); + return; + } + } + Vec3 motion = this.getDeltaMovement(); + boolean moving = motion.horizontalDistanceSqr() > 0.0025D; + this.setAnimationState(moving ? ANIM_WALK : ANIM_IDLE); + } + + @Override + protected Vec3 getRiddenInput(Player player, Vec3 travelVector) { + if (!this.isFlying()) { + return new Vec3(player.xxa * 0.22D, 0.0D, player.zza); + } + + double vertical = 0.0D; + if (this.riderJumpPressed) { + vertical += 0.18D; + } + if (player.zza > 0.0F && player.getXRot() < -5.0F) { + vertical += 0.16D; + } else if (player.zza > 0.0F && player.getXRot() > 20.0F) { + vertical -= 0.16D; + } + + return new Vec3(player.xxa * 0.22D, vertical, player.zza); + } + + @Override + protected float getRiddenSpeed(Player player) { + if (this.isFlying()) { + return (float) (this.getAttributeValue(Attributes.FLYING_SPEED) * MOUNTED_FLYING_SPEED_MULTIPLIER); + } + return (float) this.getAttributeValue(Attributes.MOVEMENT_SPEED); + } + + private void syncConfiguredAttributes() { + Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(AntarchySettings.herculesBeetleHealth()); + Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(AntarchySettings.herculesBeetleAttackDamage()); + if (this.getHealth() > this.getMaxHealth()) { + this.setHealth(this.getMaxHealth()); + } + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (source.is(DamageTypeTags.IS_FALL)) { + return false; + } + + if (source.is(DamageTypeTags.IS_PROJECTILE)) { + amount *= 0.5F; + } + + amount = BossCombatUtil.capSingleHitAtHalfHealth(this, amount); + + 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 && this.isAlive()) { + this.enterKnockedDown(); + } + return hurt; + } + } + + return super.hurt(source, amount); + } + + @Override + public boolean isInvulnerableTo(DamageSource source) { + if (super.isInvulnerableTo(source)) { + return true; + } + return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.herculesBeetleDamageRange()); + } + + private void enterKnockedDown() { + if (this.isKnockedDown()) { + return; + } + this.setKnockedDown(true); + this.setFlying(false); + this.setNoGravity(false); + this.noPhysics = false; + this.pendingChargeStart = false; + this.groundedMountedCharge = false; + this.chargeTicksRemaining = 0; + this.attackCooldown = 0; + this.getNavigation().stop(); + this.setTarget(null); + this.setDeltaMovement(Vec3.ZERO); + this.actionTicks = KNOCKED_DOWN_TICKS; + this.setAnimationState(ANIM_KNOCKED_DOWN); + this.playSound(AntarchySoundEvents.HERCULES_BEETLE_KNOCKED_DOWN.get(), 1.2F, 0.9F); + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + + if (this.isKnockedDown() && this.isFood(stack)) { + if (!this.level().isClientSide) { + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + if (this.random.nextInt(3) == 0) { + this.setTame(true); + this.setOwnerUUID(player.getUUID()); + if (player instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.TAME_ANIMAL.trigger(serverPlayer, this); + } + this.setKnockedDown(false); + this.heal(this.getMaxHealth()); + this.setTarget(null); + this.actionTicks = GET_UP_TICKS; + this.setAnimationState(ANIM_GET_UP); + this.level().broadcastEntityEvent(this, (byte) 7); + this.bossEvent.removeAllPlayers(); + } else { + this.level().broadcastEntityEvent(this, (byte) 6); + } + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (this.isTame()) { + if (!this.hasSaddle() && stack.is(Items.SADDLE) && this.isOwnedBy(player)) { + if (!this.level().isClientSide) { + this.setSaddled(true); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + this.playSound(SoundEvents.HORSE_SADDLE, 1.0F, 1.0F); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (this.hasSaddle() && stack.isEmpty() && player.isShiftKeyDown() && this.isOwnedBy(player) && !player.isPassengerOfSameVehicle(this)) { + if (!this.level().isClientSide) { + this.setSaddled(false); + this.spawnAtLocation(new ItemStack(Items.SADDLE)); + this.playSound(SoundEvents.HORSE_SADDLE, 1.0F, 0.8F); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (this.hasSaddle() && stack.isEmpty() && !player.isPassengerOfSameVehicle(this) && !this.isKnockedDown()) { + if (!this.level().isClientSide) { + player.startRiding(this); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + } + + return super.mobInteract(player, hand); + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(AntarchyTags.Items.HERCULES_BEETLE_FOOD); + } + + public boolean hasSaddle() { + return this.entityData.get(SADDLED); + } + + public void setSaddled(boolean saddled) { + this.entityData.set(SADDLED, saddled); + } + + private void setFlying(boolean flying) { + if (this.entityData.get(FLYING) != flying) { + this.entityData.set(FLYING, flying); + this.refreshDimensions(); + } + } + + private boolean isMountedFlightPoseActive() { + return this.isFlying() && (!this.onGround() || this.getDeltaMovement().y > 0.08D); + } + + private void startMountedFlight() { + this.pendingChargeStart = false; + this.setFlying(true); + this.setNoGravity(true); + 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); + this.hasImpulse = true; + this.setAnimationState(ANIM_FLY); + } + + private void stopMountedFlight() { + this.setFlying(false); + this.setNoGravity(false); + this.noPhysics = false; + this.fallDistance = 0.0F; + this.flightCooldown = 8; + this.updateAmbientAnimation(); + } + + public boolean isKnockedDown() { + return this.entityData.get(KNOCKED_DOWN); + } + + private void setKnockedDown(boolean knockedDown) { + this.entityData.set(KNOCKED_DOWN, knockedDown); + } + + public 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); + String trigger = switch (animationState) { + case ANIM_CRY -> "cry"; + case ANIM_ATTACK -> "attack"; + case ANIM_CHARGE_START -> "charge_start"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + } + } + + private boolean isInBusyAnimation() { + int state = this.getAnimationState(); + return state == ANIM_CRY + || state == ANIM_ATTACK + || state == ANIM_FLY_ATTACK + || state == ANIM_CHARGE_START + || state == ANIM_CHARGE + || state == ANIM_OPEN_WINGS + || state == ANIM_CLOSE_WINGS + || state == ANIM_GET_UP + || state == ANIM_KNOCKED_DOWN; + } + + private void requestFlightStart() { + if (this.isFlying() + || this.isKnockedDown() + || this.getAnimationState() == ANIM_OPEN_WINGS + || this.getAnimationState() == ANIM_CHARGE + || this.getAnimationState() == ANIM_CHARGE_START + || !this.onGround() + || this.flightCooldown > 0) { + return; + } + this.setAnimationState(ANIM_OPEN_WINGS); + this.actionTicks = OPEN_WINGS_TICKS; + } + + private void requestFlightStop() { + if (!this.isFlying() || this.getAnimationState() == ANIM_CLOSE_WINGS || this.isInBusyAnimation()) { + return; + } + this.setAnimationState(ANIM_CLOSE_WINGS); + this.actionTicks = CLOSE_WINGS_TICKS; + this.flightCooldown = 8; + } + + private void startCry() { + this.setAnimationState(ANIM_CRY); + this.actionTicks = CRY_TICKS; + this.cryCooldown = CRY_COOLDOWN_TICKS; + this.combatCryDone = true; + this.addEffect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 200, 1)); + this.playSound(AntarchySoundEvents.HERCULES_BEETLE_CRY.get(), 1.5F, 0.7F); + } + + private void startRegularAttack(boolean flyingAttack, @Nullable LivingEntity target) { + this.setAnimationState(flyingAttack ? ANIM_FLY_ATTACK : ANIM_ATTACK); + this.actionTicks = flyingAttack ? FLY_ATTACK_TICKS : ATTACK_TICKS; + this.actionHitTick = flyingAttack ? FLY_ATTACK_HIT_TICK : ATTACK_HIT_TICK; + this.attackDamageApplied = false; + this.attackTargetId = target == null ? null : target.getUUID(); + this.attackCooldown = REGULAR_ATTACK_COOLDOWN_TICKS; + } + + private void performRegularAttack(boolean flyingAttack) { + LivingEntity target = this.attackTargetId == null ? null : this.findNearbyLivingEntity(this.attackTargetId); + boolean hit = false; + if (target != null && target.isAlive() && this.distanceToSqr(target) <= 49.0D) { + hit = this.hurtAndLaunchTarget(target, (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE), flyingAttack ? 1.0D : 0.7D); + } + if (!hit) { + for (LivingEntity candidate : this.getFrontTargets(flyingAttack ? 6.0D : 5.0D, 2.5D)) { + if (this.hurtAndLaunchTarget(candidate, (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE), flyingAttack ? 1.0D : 0.7D)) { + break; + } + } + } + this.playSound(AntarchySoundEvents.HERCULES_BEETLE_ATTACK.get(), 1.2F, flyingAttack ? 1.1F : 0.9F); + } + + private boolean hurtAndLaunchTarget(LivingEntity target, float damage, double horizontalKnockback) { + if (!this.canHarm(target)) { + return false; + } + boolean hurt = this.level() instanceof ServerLevel serverLevel + ? 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); + if (push.lengthSqr() < 1.0E-4D) { + push = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + } + push = push.normalize().scale(horizontalKnockback); + target.setDeltaMovement(target.getDeltaMovement().add(push.x, 1.25D, push.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); + if (horizontal.lengthSqr() < 1.0E-4D) { + horizontal = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + } + this.chargeDirection = horizontal.normalize(); + this.pendingChargeDuration = Mth.clamp(durationTicks, MIN_MOUNTED_CHARGE_TICKS, MAX_CHARGE_TICKS); + this.pendingMountedCharge = mountedCharge; + + if (!this.isFlying() && !mountedCharge) { + this.pendingChargeStart = true; + this.requestFlightStart(); + return; + } + this.beginChargeStart(this.chargeDirection, this.pendingChargeDuration, mountedCharge); + } + + private void beginChargeStart(Vec3 direction, int durationTicks, boolean mountedCharge) { + this.chargeDirection = direction.normalize(); + this.pendingChargeDuration = durationTicks; + this.pendingMountedCharge = mountedCharge; + this.setAnimationState(ANIM_CHARGE_START); + this.actionTicks = CHARGE_START_TICKS; + this.playSound(AntarchySoundEvents.HERCULES_BEETLE_CHARGE_START.get(), 1.3F, 0.7F); + } + + private void beginChargeLoop() { + this.setAnimationState(ANIM_CHARGE); + this.chargeTicksRemaining = this.pendingChargeDuration; + this.chargeDistanceTravelled = 0.0D; + this.chargeDistanceTarget = CHARGE_DISTANCE; + this.chargeCooldown = CHARGE_COOLDOWN_TICKS; + this.pendingChargeDuration = 0; + this.groundedMountedCharge = this.pendingMountedCharge && !this.isFlying(); + this.pendingMountedCharge = false; + if (!this.groundedMountedCharge) { + this.setFlying(true); + } + } + + private void finishChargeImpact() { + this.groundedMountedCharge = false; + if (!(this.level() instanceof ServerLevel serverLevel)) { + this.chargeTicksRemaining = 0; + this.noPhysics = false; + this.updateAmbientAnimation(); + return; + } + + this.chargeTicksRemaining = 0; + this.noPhysics = false; + this.setDeltaMovement(Vec3.ZERO); + + AABB impactBox = this.getBoundingBox().inflate(3.0D, 2.0D, 3.0D); + float damage = (float) AntarchySettings.herculesBeetleChargeDamage(); + for (LivingEntity victim : this.level().getEntitiesOfClass(LivingEntity.class, impactBox, this::canHarm)) { + if (victim == this) { + continue; + } + if (victim.hurt(AntarchyDamageSources.herculesBeetleObliteration(serverLevel, this), damage)) { + Vec3 push = victim.position().subtract(this.position()); + if (push.lengthSqr() < 1.0E-4D) { + push = this.chargeDirection; + } + push = push.normalize(); + victim.setDeltaMovement(victim.getDeltaMovement().add(push.x * 1.25D, 0.9D, push.z * 1.25D)); + victim.hurtMarked = true; + } + } + + this.breakBlocksForChargeImpact(serverLevel); + this.playSound(SoundEvents.GENERIC_EXPLODE, 1.6F, 0.75F); + serverLevel.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY() + 0.8D, this.getZ(), 4, 1.5D, 0.5D, 1.5D, 0.0D); + serverLevel.sendParticles(ParticleTypes.CRIT, this.getX(), this.getY() + 0.8D, this.getZ(), 20, 2.0D, 0.6D, 2.0D, 0.08D); + this.broadcastImpactShake(serverLevel); + + if (this.onGround()) { + this.requestFlightStop(); + } else { + this.updateAmbientAnimation(); + } + } + + private void breakBlocksForChargeImpact(ServerLevel level) { + if (!this.isHerculesBeetleGriefingEnabled(level)) { + return; + } + + AABB impactBox = this.getBoundingBox().inflate(3.0D, 2.0D, 3.0D); + int broken = 0; + for (BlockPos pos : BlockPos.betweenClosed( + BlockPos.containing(impactBox.minX, impactBox.minY, impactBox.minZ), + BlockPos.containing(impactBox.maxX, impactBox.maxY, impactBox.maxZ) + )) { + if (broken >= MAX_BROKEN_BLOCKS) { + break; + } + BlockState state = level.getBlockState(pos); + BlockEntity blockEntity = level.getBlockEntity(pos); + if (state.isAir() + || state.is(AntarchyTags.Blocks.HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS) + || blockEntity != null + || state.getDestroySpeed(level, pos) < 0.0F) { + continue; + } + if (level.destroyBlock(pos, true, this)) { + broken++; + } + } + } + + private void breakBlocksForChargePath(Vec3 nextPosition) { + if (!(this.level() instanceof ServerLevel serverLevel) || !this.isHerculesBeetleGriefingEnabled(serverLevel)) { + return; + } + + AABB pathBox = this.getBoundingBox().expandTowards(nextPosition.subtract(this.position())).inflate(1.25D, 1.25D, 1.25D); + int broken = 0; + for (BlockPos pos : BlockPos.betweenClosed( + BlockPos.containing(pathBox.minX, pathBox.minY, pathBox.minZ), + BlockPos.containing(pathBox.maxX, pathBox.maxY, pathBox.maxZ) + )) { + if (broken >= MAX_BROKEN_BLOCKS) { + break; + } + BlockState state = serverLevel.getBlockState(pos); + BlockEntity blockEntity = serverLevel.getBlockEntity(pos); + if (state.isAir() + || state.is(AntarchyTags.Blocks.HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS) + || blockEntity != null + || state.getDestroySpeed(serverLevel, pos) < 0.0F) { + continue; + } + if (serverLevel.destroyBlock(pos, true, this)) { + broken++; + } + } + } + + private void breakBlocksForSuffocation() { + if (!(this.level() instanceof ServerLevel serverLevel) || !this.isHerculesBeetleGriefingEnabled(serverLevel)) { + return; + } + + AABB box = this.getBoundingBox().inflate(0.15D, 0.15D, 0.15D); + int broken = 0; + for (BlockPos pos : BlockPos.betweenClosed( + BlockPos.containing(box.minX, box.minY, box.minZ), + BlockPos.containing(box.maxX, box.maxY, box.maxZ) + )) { + if (broken >= MAX_SUFFOCATION_BLOCKS) { + break; + } + BlockState state = serverLevel.getBlockState(pos); + BlockEntity blockEntity = serverLevel.getBlockEntity(pos); + if (state.isAir() + || state.is(AntarchyTags.Blocks.HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS) + || blockEntity != null + || state.getDestroySpeed(serverLevel, pos) < 0.0F) { + continue; + } + if (serverLevel.destroyBlock(pos, true, this)) { + broken++; + } + } + } + + private boolean blocksChargePath(Vec3 nextPosition) { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return false; + } + + AABB pathBox = this.getBoundingBox().expandTowards(nextPosition.subtract(this.position())).inflate(1.25D, 1.25D, 1.25D); + for (BlockPos pos : BlockPos.betweenClosed( + BlockPos.containing(pathBox.minX, pathBox.minY, pathBox.minZ), + BlockPos.containing(pathBox.maxX, pathBox.maxY, pathBox.maxZ) + )) { + BlockState state = serverLevel.getBlockState(pos); + if (state.isAir()) { + continue; + } + if (state.is(AntarchyTags.Blocks.HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS) || serverLevel.getBlockEntity(pos) != null || state.getDestroySpeed(serverLevel, pos) < 0.0F) { + return true; + } + } + return false; + } + + private boolean isHerculesBeetleGriefingEnabled(ServerLevel level) { + return level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) + && level.getGameRules().getBoolean(AntarchyGameRules.RULE_DO_HERCULES_BEETLE_GREIFING); + } + + private void broadcastImpactShake(ServerLevel level) { + for (ServerPlayer player : level.players()) { + if (player.distanceToSqr(this) <= 48.0D * 48.0D) { + HerculesBeetleImpactShakeSync.send(player, IMPACT_SHAKE_TICKS); + } + } + } + + public void setRiderJumpPressed(boolean riderJumpPressed) { + this.riderJumpPressed = riderJumpPressed; + } + + public int getMountedCharge() { + return this.entityData.get(MOUNTED_CHARGE); + } + + public void handleMountedRegularAttack(ServerPlayer player) { + if (!this.canPlayerControl(player) || this.attackCooldown > 0 || this.isKnockedDown() || this.isInBusyAnimation() || this.chargeTicksRemaining > 0) { + return; + } + LivingEntity target = this.findFrontTarget(6.0D, 3.0D); + this.startRegularAttack(this.isFlying(), target); + } + + public void toggleMountedFlight(ServerPlayer player) { + if (!this.canPlayerControl(player) || this.isKnockedDown() || this.chargeTicksRemaining > 0 || this.isInBusyAnimation()) { + return; + } + if (this.isFlying()) { + this.stopMountedFlight(); + return; + } + this.startMountedFlight(); + } + + public void startMountedCharge(ServerPlayer player) { + if (!this.canPlayerControl(player) || this.chargeCooldown > 0 || this.isKnockedDown() || this.isInBusyAnimation() || this.chargeTicksRemaining > 0) { + this.resetMountedChargeState(); + return; + } + this.mountedChargeActive = true; + } + + public void releaseMountedCharge(ServerPlayer player) { + if (!this.canPlayerControl(player)) { + this.resetMountedChargeState(); + return; + } + if (!this.mountedChargeActive) { + return; + } + + int clamped = Mth.clamp(this.mountedChargeTicks, 0, MAX_PLAYER_CHARGE_TICKS); + this.resetMountedChargeState(); + if (this.chargeCooldown > 0 || this.isKnockedDown() || this.isInBusyAnimation() || this.chargeTicksRemaining > 0 || clamped <= 0) { + return; + } + + int duration = MIN_MOUNTED_CHARGE_TICKS + Mth.floor((MAX_CHARGE_TICKS - MIN_MOUNTED_CHARGE_TICKS) * (clamped / (float) MAX_PLAYER_CHARGE_TICKS)); + this.startCharge(player.getLookAngle(), duration, true); + } + + private boolean canPlayerControl(ServerPlayer player) { + return this.isTame() + && this.hasSaddle() + && player.getVehicle() == this + && this.getControllingPassenger() == player; + } + + @Override + @Nullable + public LivingEntity getControllingPassenger() { + if (!this.isTame() || !this.hasSaddle()) { + return null; + } + Entity passenger = this.getFirstPassenger(); + return passenger instanceof LivingEntity living ? living : null; + } + + @Override + protected void positionRider(Entity passenger, MoveFunction moveFunction) { + if (this.hasPassenger(passenger)) { + Vec3 forward = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + boolean mountedFlightPose = this.isMountedFlightPoseActive(); + double yOffset = mountedFlightPose ? 5.3D : 3.0D; + double forwardOffset = mountedFlightPose ? 2.2D : 1.25D; + if (!this.isFlying()) { + yOffset -= 0.25D; + forwardOffset += 0.25D; + } + moveFunction.accept( + passenger, + this.getX() + forward.x * forwardOffset, + this.getY() + yOffset, + this.getZ() + forward.z * forwardOffset + ); + } + } + + @Override + public boolean canAddPassenger(Entity passenger) { + return this.getPassengers().isEmpty(); + } + + @Override + public void travel(Vec3 travelVector) { + if (!(this.getControllingPassenger() instanceof Player rider) || !this.isVehicle() || this.isKnockedDown()) { + super.travel(travelVector); + return; + } + + this.setYRot(rider.getYHeadRot()); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + + Vec3 riddenInput = this.getRiddenInput(rider, travelVector); + this.setSpeed(this.getRiddenSpeed(rider)); + + if (!this.isFlying()) { + 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); + } + } else { + Vec3 motion = new Vec3(0.0D, this.getDeltaMovement().y, 0.0D); + 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); + this.move(MoverType.SELF, this.getDeltaMovement()); + } + } + + @Override + public boolean doHurtTarget(Entity target) { + if (this.attackCooldown > 0 || this.isKnockedDown()) { + return false; + } + if (target instanceof LivingEntity livingTarget) { + this.startRegularAttack(this.isFlying(), livingTarget); + return true; + } + return super.doHurtTarget(target); + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + public boolean isInWall() { + return false; + } + + @Override + protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) { + } + + @Override + public boolean isFlying() { + return this.entityData.get(FLYING); + } + + @Override + public float maxUpStep() { + return this.isFlying() ? 0.6F : 1.5F; + } + + @Override + public EntityDimensions getDimensions(Pose pose) { + return DEFAULT_DIMENSIONS; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + public boolean canAttack(LivingEntity target) { + if (target instanceof Player player) { + return !this.isTame() && !player.isCreative() && !player.isSpectator() && super.canAttack(target); + } + return super.canAttack(target); + } + + private boolean canHarm(@Nullable LivingEntity target) { + if (target == null || !target.isAlive() || target == this || target == this.getControllingPassenger()) { + return false; + } + if (target instanceof Player player) { + return !player.isCreative() && !player.isSpectator() && !this.isTame(); + } + return target.canBeSeenAsEnemy(); + } + + private void lookInDirection(Vec3 direction) { + if (direction.lengthSqr() <= 1.0E-4D) { + return; + } + float yaw = (float) (Mth.atan2(direction.z, direction.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(yaw); + this.yBodyRot = yaw; + this.yHeadRot = yaw; + this.setYHeadRot(yaw); + } + + @Nullable + private LivingEntity findNearbyLivingEntity(UUID uuid) { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return null; + } + Entity entity = serverLevel.getEntity(uuid); + return entity instanceof LivingEntity living ? living : null; + } + + 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); + 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); + if (forward.lengthSqr() < 1.0E-4D || toTarget.lengthSqr() < 1.0E-4D) { + return true; + } + return forward.normalize().dot(toTarget.normalize()) >= 0.15D; + }) + .toList(); + } + + @Nullable + private LivingEntity findFrontTarget(double range, double inflation) { + List targets = this.getFrontTargets(range, inflation); + return targets.isEmpty() ? null : targets.get(0); + } + + private boolean shouldShowBossBar() { + return !this.isTame(); + } + + @Override + public void startSeenByPlayer(ServerPlayer player) { + super.startSeenByPlayer(player); + if (this.shouldShowBossBar()) { + this.bossEvent.addPlayer(player); + } + } + + @Override + public void stopSeenByPlayer(ServerPlayer player) { + super.stopSeenByPlayer(player); + this.bossEvent.removePlayer(player); + } + + @Override + public void setCustomName(@Nullable Component name) { + super.setCustomName(name); + this.bossEvent.setName(this.getDisplayName()); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean("Saddled", this.hasSaddle()); + tag.putBoolean("KnockedDown", this.isKnockedDown()); + tag.putBoolean("Flying", this.isFlying()); + tag.putInt("AnimationState", this.getAnimationState()); + tag.putInt("ChargeCooldown", this.chargeCooldown); + tag.putInt("AttackCooldown", this.attackCooldown); + tag.putBoolean("CombatCryDone", this.combatCryDone); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.setSaddled(tag.getBoolean("Saddled")); + this.setKnockedDown(tag.getBoolean("KnockedDown")); + this.setFlying(tag.getBoolean("Flying")); + this.setAnimationState(tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_IDLE); + this.chargeCooldown = tag.getInt("ChargeCooldown"); + this.attackCooldown = tag.getInt("AttackCooldown"); + this.combatCryDone = tag.getBoolean("CombatCryDone"); + if (this.isKnockedDown() && this.getAnimationState() != ANIM_KNOCKED_DOWN_IDLE) { + this.setAnimationState(ANIM_KNOCKED_DOWN_IDLE); + } + } + + @Override + protected SoundEvent getAmbientSound() { + return this.isKnockedDown() ? null : AntarchySoundEvents.HERCULES_BEETLE_IDLE.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.HERCULES_BEETLE_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.HERCULES_BEETLE_HURT.get(); + } + + @Override + protected float getSoundVolume() { + return 1.3F; + } + + @Override + protected void playStepSound(BlockPos pos, BlockState state) { + this.playSound(SoundEvents.RAVAGER_STEP, 0.28F, 0.92F); + } + + private void tickMountedCharge() { + if (this.level().isClientSide) { + return; + } + if (!(this.getControllingPassenger() instanceof ServerPlayer player) || !this.canPlayerControl(player)) { + this.resetMountedChargeState(); + return; + } + if (!this.mountedChargeActive) { + if (this.getMountedCharge() != 0) { + this.entityData.set(MOUNTED_CHARGE, 0); + } + return; + } + if (this.chargeCooldown > 0 || this.isKnockedDown() || this.isInBusyAnimation() || this.chargeTicksRemaining > 0) { + this.resetMountedChargeState(); + return; + } + + this.mountedChargeTicks = Math.min(this.mountedChargeTicks + 1, MAX_PLAYER_CHARGE_TICKS); + this.entityData.set(MOUNTED_CHARGE, Mth.floor((this.mountedChargeTicks / (float) MAX_PLAYER_CHARGE_TICKS) * 100.0F)); + } + + private void resetMountedChargeState() { + this.mountedChargeActive = false; + this.mountedChargeTicks = 0; + if (this.getMountedCharge() != 0) { + this.entityData.set(MOUNTED_CHARGE, 0); + } + } + + @Override + @Nullable + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return null; + } + + private final class HerculesCombatGoal extends Goal { + HerculesCombatGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + return !HerculesBeetleEntity.this.isTame() + && !HerculesBeetleEntity.this.isKnockedDown() + && HerculesBeetleEntity.this.getTarget() != null + && HerculesBeetleEntity.this.canAttack(HerculesBeetleEntity.this.getTarget()); + } + + @Override + public boolean canContinueToUse() { + LivingEntity target = HerculesBeetleEntity.this.getTarget(); + return target != null + && target.isAlive() + && !HerculesBeetleEntity.this.isTame() + && !HerculesBeetleEntity.this.isKnockedDown() + && HerculesBeetleEntity.this.canAttack(target); + } + + @Override + public void tick() { + LivingEntity target = HerculesBeetleEntity.this.getTarget(); + if (target == null) { + return; + } + if (!HerculesBeetleEntity.this.canAttack(target)) { + HerculesBeetleEntity.this.setTarget(null); + HerculesBeetleEntity.this.getNavigation().stop(); + return; + } + + HerculesBeetleEntity.this.getLookControl().setLookAt(target, 30.0F, 20.0F); + + if (!HerculesBeetleEntity.this.combatCryDone && HerculesBeetleEntity.this.cryCooldown <= 0 && !HerculesBeetleEntity.this.isInBusyAnimation()) { + HerculesBeetleEntity.this.startCry(); + return; + } + + if (HerculesBeetleEntity.this.isInBusyAnimation() || HerculesBeetleEntity.this.chargeTicksRemaining > 0) { + return; + } + + double distanceSqr = HerculesBeetleEntity.this.distanceToSqr(target); + double verticalDelta = Math.abs(target.getY() - HerculesBeetleEntity.this.getY()); + + if (!HerculesBeetleEntity.this.isFlying() && (verticalDelta > 5.0D || HerculesBeetleEntity.this.fallDistance > 4.0F)) { + HerculesBeetleEntity.this.requestFlightStart(); + } else if (HerculesBeetleEntity.this.isFlying() && HerculesBeetleEntity.this.onGround() && distanceSqr < 25.0D && verticalDelta < 1.5D) { + HerculesBeetleEntity.this.requestFlightStop(); + } + + if (HerculesBeetleEntity.this.chargeCooldown <= 0 + && distanceSqr >= CHARGE_TRIGGER_RANGE * CHARGE_TRIGGER_RANGE + && distanceSqr <= 36.0D * 36.0D + && HerculesBeetleEntity.this.random.nextFloat() < 0.015F) { + HerculesBeetleEntity.this.startCharge(target.position().subtract(HerculesBeetleEntity.this.position()), MAX_CHARGE_TICKS, false); + return; + } + + double attackRange = HerculesBeetleEntity.this.isFlying() ? FLY_ATTACK_RANGE : ATTACK_RANGE; + if (HerculesBeetleEntity.this.attackCooldown <= 0 && distanceSqr <= attackRange * attackRange) { + HerculesBeetleEntity.this.startRegularAttack(HerculesBeetleEntity.this.isFlying(), target); + return; + } + + double speed = HerculesBeetleEntity.this.isFlying() ? 1.2D : 1.0D; + HerculesBeetleEntity.this.getNavigation().moveTo(target, speed); + } + } +} 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 new file mode 100644 index 00000000..5d109ae1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/HushProjectileEntity.java @@ -0,0 +1,172 @@ +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 java.util.UUID; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +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.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; + +public class HushProjectileEntity extends ThrowableItemProjectile { + private static final int DREAD_DURATION_TICKS = 300; + private static final double TRAVEL_SPEED = 0.27D; + private static final int RETARGET_GRACE_TICKS = 60; + private static final double RETARGET_SEARCH_RADIUS = 16.0D; + private static final DustParticleOptions HUSH_PARTICLES = new DustParticleOptions(new org.joml.Vector3f(1.0F, 0.05F, 0.05F), 1.0F); + private static final String TARGET_UUID_KEY = "HushTarget"; + + private UUID targetUuid; + private int retargetGraceTicksRemaining; + + public HushProjectileEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + @Override + protected Item getDefaultItem() { + return Items.REDSTONE; + } + + @Override + protected float getGravity() { + return (float) (0.0D); + } + + @Override + public boolean isPickable() { + return true; + } + + @Override + public boolean hurt(net.minecraft.world.damagesource.DamageSource source, float amount) { + if (!this.level().isClientSide && !this.isRemoved()) { + this.discard(); + return true; + } + return false; + } + + @Override + public void tick() { + if (!this.level().isClientSide) { + if (this.tickCount > AntarchySettings.hushweedSporeLifetimeTicks()) { + this.discard(); + return; + } + + this.tickGuidedFlight(); + } + + super.tick(); + if (this.level().isClientSide) { + this.level().addParticle(HUSH_PARTICLES, this.getX(), this.getY(), this.getZ(), 0.0D, 0.0D, 0.0D); + } + } + + public void setTargetUuid(UUID targetUuid) { + this.targetUuid = targetUuid; + } + + private void tickGuidedFlight() { + if (this.targetUuid == null) { + this.discard(); + return; + } + + LivingEntity target = this.level().getEntitiesOfClass( + LivingEntity.class, + this.getBoundingBox().inflate(48.0D), + entity -> entity.isAlive() && entity.getUUID().equals(this.targetUuid) + ).stream().findFirst().orElse(null); + + if (target == null) { + target = this.findReplacementTarget(); + if (target != null) { + this.targetUuid = target.getUUID(); + this.retargetGraceTicksRemaining = 0; + } else { + if (this.retargetGraceTicksRemaining <= 0) { + this.retargetGraceTicksRemaining = RETARGET_GRACE_TICKS; + } + if (--this.retargetGraceTicksRemaining <= 0) { + this.discard(); + } + return; + } + } else { + this.retargetGraceTicksRemaining = 0; + } + + Vec3 toTarget = target.getEyePosition().subtract(this.position()); + if (toTarget.lengthSqr() < 1.0E-6D) { + this.discard(); + return; + } + + // Smoothly steer toward the target each tick + Vec3 desired = toTarget.normalize().scale(TRAVEL_SPEED); + this.setDeltaMovement(this.getDeltaMovement().lerp(desired, 0.1D)); + } + + private LivingEntity findReplacementTarget() { + return this.level().getEntitiesOfClass( + LivingEntity.class, + this.getBoundingBox().inflate(RETARGET_SEARCH_RADIUS), + entity -> entity.isAlive() + && !entity.getUUID().equals(this.targetUuid) + && entity.getType().is(AntarchyTags.Entities.HUSHWEED_TARGETS) + && (!(entity instanceof Player player) || (!player.isCreative() && !player.isSpectator()))) + .stream() + .min(java.util.Comparator.comparingDouble(this::distanceToSqr)) + .orElse(null); + } + + @Override + protected void onHitEntity(EntityHitResult result) { + super.onHitEntity(result); + if (!this.level().isClientSide && result.getEntity() instanceof LivingEntity livingEntity) { + livingEntity.hurt(this.damageSources().magic(), 1.0F); + livingEntity.addEffect(new MobEffectInstance(AntarchyObjects.DREAD.get(), DREAD_DURATION_TICKS, 0, false, true, true)); + this.discard(); + } + } + + @Override + protected void onHitBlock(BlockHitResult result) { + super.onHitBlock(result); + if (!this.level().isClientSide) { + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(HUSH_PARTICLES, this.getX(), this.getY(), this.getZ(), 6, 0.1D, 0.1D, 0.1D, 0.0D); + } + this.discard(); + } + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + if (this.targetUuid != null) { + tag.putUUID(TARGET_UUID_KEY, this.targetUuid); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.hasUUID(TARGET_UUID_KEY)) { + this.targetUuid = tag.getUUID(TARGET_UUID_KEY); + } + } +} 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 new file mode 100644 index 00000000..2316039b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.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.horde.CavarynHordeManager; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.core.registries.BuiltInRegistries; +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.util.ByIdMap; +import net.minecraft.util.Mth; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.Difficulty; +import net.minecraft.world.DifficultyInstance; +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.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +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.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.item.ItemStack; +import net.minecraft.world.item.SpawnEggItem; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +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; +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.Locale; +import java.util.Objects; +import java.util.function.IntFunction; + +public class JerryEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor STAGE = + SynchedEntityData.defineId(JerryEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ATTACK_ANIM_TICKS = + SynchedEntityData.defineId(JerryEntity.class, EntityDataSerializers.INT); + + private static final String STAGE_KEY = "JerryStage"; + private static final String STAGE_AGE_KEY = "JerryStageAge"; + private static final int GROWTH_TICKS = 24000; + private static final int ATTACH_DAMAGE_INTERVAL = 20; + private static final int ATTACK_ANIM_DURATION = 16; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation FLOAT_ANIM = RawAnimation.begin().thenLoop("float"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int stageAgeTicks; + private int attachDamageTicks; + private int attackCooldownTicks; + private int alphaDiveCooldownTicks; + private boolean attachedToTarget; + + public JerryEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 12; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.jerryInfantHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.36D) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.jerryInfantAttackDamage()) + .add(Attributes.FOLLOW_RANGE, 28.0D) + .add(Attributes.FLYING_SPEED, 0.45D); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, net.minecraft.core.BlockPos pos, net.minecraft.util.RandomSource random) { + 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) + && level.getMaxLocalRawBrightness(pos) <= 2; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(STAGE, Stage.INFANT.id()); + this.entityData.define(ATTACK_ANIM_TICKS, 0); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new GammaMeleeGoal()); + this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 12.0F)); + this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + @Nullable + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + if (spawnReason == MobSpawnType.SPAWN_EGG) { + this.setStage(this.random.nextBoolean() ? Stage.ALPHA : Stage.GAMMA); + } + this.applyStageAttributes(this.getStage(), true); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData, dataTag); + } + + @Override + public void tick() { + super.tick(); + + if (this.getStage() == Stage.GAMMA) { + this.setNoGravity(false); + } else { + this.setNoGravity(true); + this.fallDistance = 0.0F; + } + + int attackTicks = this.entityData.get(ATTACK_ANIM_TICKS); + if (attackTicks > 0) { + this.setAttackAnimTicks(attackTicks - 1); + } + + if (this.level().isClientSide) { + return; + } + + this.tickGrowth(); + if (this.attackCooldownTicks > 0) { + this.attackCooldownTicks--; + } + if (this.alphaDiveCooldownTicks > 0) { + this.alphaDiveCooldownTicks--; + } + + Stage stage = this.getStage(); + if (stage == Stage.INFANT || stage == Stage.MATURE) { + this.tickAttachedForm(stage); + } else if (stage == Stage.ALPHA) { + this.tickAlpha(); + } + } + + private void tickGrowth() { + Stage stage = this.getStage(); + if (stage == Stage.GAMMA) { + return; + } + this.stageAgeTicks += this.growthTickAmount(); + if (this.stageAgeTicks < GROWTH_TICKS) { + return; + } + this.stageAgeTicks = 0; + this.setStage(switch (stage) { + case INFANT -> Stage.MATURE; + case MATURE -> Stage.ALPHA; + case ALPHA -> Stage.GAMMA; + case GAMMA -> Stage.GAMMA; + }); + } + + private int growthTickAmount() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return 1; + } + + int hordeLevel = 0; + for (ServerPlayer player : serverLevel.players()) { + if (player.isSpectator() || player.distanceToSqr(this) > 96.0D * 96.0D) { + continue; + } + hordeLevel = Math.max(hordeLevel, CavarynHordeManager.getHordeLevel(player)); + } + + float intensity = Mth.clamp(hordeLevel / (float) CavarynHordeManager.maxHordeLevel(), 0.0F, 1.0F); + return 1 + Math.round(intensity * intensity * 99.0F); + } + + private void tickAttachedForm(Stage stage) { + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + this.attachedToTarget = false; + this.drift(); + return; + } + + Vec3 targetPos = target.getEyePosition().add(0.0D, -0.15D, 0.0D); + Vec3 toTarget = targetPos.subtract(this.position()); + double distance = toTarget.length(); + if (distance > 0.01D) { + Vec3 motion = toTarget.normalize().scale(stage == Stage.INFANT ? 0.16D : 0.19D); + this.setDeltaMovement(this.getDeltaMovement().scale(0.55D).add(motion)); + } + if (distance < 1.15D) { + this.attachedToTarget = true; + this.setPos(targetPos.x, targetPos.y, targetPos.z); + this.setDeltaMovement(Vec3.ZERO); + if (++this.attachDamageTicks >= ATTACH_DAMAGE_INTERVAL) { + this.attachDamageTicks = 0; + Vec3 targetMotion = target.getDeltaMovement(); + this.playSound(this.attackSoundForCurrentStage(), 0.85F, this.voicePitch()); + target.hurt(this.damageSources().mobAttack(this), (float) stage.attackDamage()); + target.setDeltaMovement(targetMotion); + target.hurtMarked = true; + } + } else { + this.attachedToTarget = false; + this.attachDamageTicks = 0; + } + } + + private void tickAlpha() { + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + this.drift(); + return; + } + + Stage stage = this.getStage(); + Vec3 targetPos = target.getEyePosition(); + Vec3 hoverPos = targetPos.add(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(); + 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)); + } else if (hoverDistance > 0.01D) { + Vec3 desiredMotion = toHover.normalize().scale(0.20D); + this.setDeltaMovement(this.getDeltaMovement().scale(0.72D).add(desiredMotion)); + } + + 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))); + } + + if (targetDistance < 2.3D && this.attackCooldownTicks <= 0) { + this.faceTarget(target); + this.attackCooldownTicks = 24; + this.setAttackAnimTicks(ATTACK_ANIM_DURATION); + this.playSound(this.attackSoundForCurrentStage(), 1.0F, this.voicePitch()); + target.hurt(this.damageSources().mobAttack(this), (float) stage.attackDamage()); + } + } + + private void faceTarget(LivingEntity target) { + Vec3 toTarget = target.position().subtract(this.position()); + if (toTarget.horizontalDistanceSqr() <= 0.0001D) { + return; + } + float targetYaw = (float) (Mth.atan2(toTarget.z, toTarget.x) * (180.0F / Math.PI)) - 90.0F; + this.setYRot(Mth.approachDegrees(this.getYRot(), targetYaw, 30.0F)); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + this.getLookControl().setLookAt(target, 30.0F, 30.0F); + } + + private void drift() { + if (this.tickCount % 45 == 0) { + this.setDeltaMovement( + (this.random.nextDouble() - 0.5D) * 0.12D, + (this.random.nextDouble() - 0.5D) * 0.08D, + (this.random.nextDouble() - 0.5D) * 0.12D + ); + } + } + + @Override + public boolean doHurtTarget(Entity target) { + this.setAttackAnimTicks(ATTACK_ANIM_DURATION); + if (target instanceof LivingEntity living) { + this.faceTarget(living); + } + this.playSound(this.attackSoundForCurrentStage(), 1.0F, this.voicePitch()); + return target instanceof LivingEntity living + ? living.hurt(this.damageSources().mobAttack(this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)) + : super.doHurtTarget(target); + } + + @Override + @Nullable + protected SoundEvent getAmbientSound() { + return this.isAdultStage() ? AntarchySoundEvents.JERRY_ADULT_IDLE.get() : AntarchySoundEvents.JERRY_YOUNG_IDLE.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return this.isAdultStage() ? AntarchySoundEvents.JERRY_ADULT_HURT.get() : AntarchySoundEvents.JERRY_YOUNG_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return this.isAdultStage() ? AntarchySoundEvents.JERRY_ADULT_DEATH.get() : AntarchySoundEvents.JERRY_YOUNG_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return this.isAdultStage() ? 1.0F : 0.8F; + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (stack.is(BuiltInRegistries.ITEM.get(new ResourceLocation(com.craisinlord.antarchy.Antarchy.MODID, "jerry_nucleus")))) { + if (!this.level().isClientSide) { + Stage nextStage = this.nextGrowthStage(); + if (nextStage != this.getStage()) { + this.setStage(nextStage); + this.stageAgeTicks = 0; + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + } + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (stack.getItem() instanceof SpawnEggItem spawnEggItem && spawnEggItem.getType(stack.getTag()) == this.getType()) { + if (this.level() instanceof ServerLevel serverLevel && this.getType().create(serverLevel) instanceof JerryEntity infant) { + infant.setStage(this.isAdultStage() ? Stage.INFANT : this.randomAdultStage()); + infant.moveTo(this.getX(), this.getY(), this.getZ(), this.random.nextFloat() * 360.0F, 0.0F); + infant.finalizeSpawn(serverLevel, serverLevel.getCurrentDifficultyAt(infant.blockPosition()), MobSpawnType.MOB_SUMMONED, null, null); + serverLevel.addFreshEntity(infant); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + return super.mobInteract(player, hand); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 3, this::mainAnimController) + .triggerableAnim("attack", ATTACK_ANIM)); + controllers.add(new AnimationController<>(this, "attack_controller", 0, this::attackAnimController) + .triggerableAnim("attack", ATTACK_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + Stage stage = this.getStage(); + if (stage == Stage.GAMMA) { + return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); + } + if (stage == Stage.ALPHA && this.entityData.get(ATTACK_ANIM_TICKS) > 0) { + return state.setAndContinue(ATTACK_ANIM); + } + if (stage == Stage.ALPHA) { + return state.setAndContinue(state.isMoving() ? FLOAT_ANIM : IDLE_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + private PlayState attackAnimController(AnimationState state) { + if (this.getStage() == Stage.GAMMA && this.entityData.get(ATTACK_ANIM_TICKS) > 0) { + return state.setAndContinue(ATTACK_ANIM); + } + return PlayState.STOP; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + public boolean isPushable() { + return !this.isAttachedYoungStage() && super.isPushable(); + } + + @Override + public void push(Entity entity) { + if (this.isAttachedYoungStage()) { + return; + } + super.push(entity); + } + + @Override + public boolean canBeCollidedWith() { + return !this.isAttachedYoungStage() && super.canBeCollidedWith(); + } + + @Override + protected void checkFallDamage(double y, boolean onGround, BlockState state, net.minecraft.core.BlockPos pos) { + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putString(STAGE_KEY, this.getStage().getSerializedName()); + tag.putInt(STAGE_AGE_KEY, this.stageAgeTicks); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.setStage(Stage.byName(tag.getString(STAGE_KEY))); + this.stageAgeTicks = tag.getInt(STAGE_AGE_KEY); + this.applyStageAttributes(this.getStage(), false); + } + + public Stage getStage() { + return Stage.byId(this.entityData.get(STAGE)); + } + + public void setStage(Stage stage) { + Stage previous = this.getStage(); + this.entityData.set(STAGE, stage.id()); + this.applyStageAttributes(stage, true); + if (previous != stage) { + this.stageAgeTicks = 0; + this.refreshDimensions(); + } + } + + private void setAttackAnimTicks(int ticks) { + int clamped = Math.max(0, ticks); + int previous = this.entityData.get(ATTACK_ANIM_TICKS); + this.entityData.set(ATTACK_ANIM_TICKS, clamped); + if (previous <= 0 && clamped > 0) { + this.triggerAnim("main_controller", "attack"); + this.triggerAnim("attack_controller", "attack"); + } + } + + private void applyStageAttributes(Stage stage, boolean fillIfNew) { + double oldMaxHealth = this.getMaxHealth(); + float healthRatio = oldMaxHealth > 0.0D ? this.getHealth() / (float) oldMaxHealth : 1.0F; + Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(stage.maxHealth()); + Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(stage.attackDamage()); + if (fillIfNew && this.getHealth() <= 0.0F) { + this.setHealth(this.getMaxHealth()); + } else { + this.setHealth(Mth.clamp((float) (this.getMaxHealth() * healthRatio), 1.0F, this.getMaxHealth())); + } + } + + private boolean isAdultStage() { + Stage stage = this.getStage(); + return stage == Stage.ALPHA || stage == Stage.GAMMA; + } + + private SoundEvent attackSoundForCurrentStage() { + return this.isAdultStage() ? AntarchySoundEvents.JERRY_ADULT_ATTACK.get() : AntarchySoundEvents.JERRY_YOUNG_ATTACK.get(); + } + + private float voicePitch() { + return this.isAdultStage() ? 0.9F + this.random.nextFloat() * 0.2F : 1.1F + this.random.nextFloat() * 0.25F; + } + + private Stage nextGrowthStage() { + return switch (this.getStage()) { + case INFANT -> Stage.MATURE; + case MATURE -> Stage.ALPHA; + case ALPHA -> Stage.GAMMA; + case GAMMA -> Stage.GAMMA; + }; + } + + private Stage randomAdultStage() { + return this.random.nextBoolean() ? Stage.ALPHA : Stage.GAMMA; + } + + private boolean isAttachedYoungStage() { + Stage stage = this.getStage(); + return this.attachedToTarget && (stage == Stage.INFANT || stage == Stage.MATURE); + } + + private class GammaMeleeGoal extends MeleeAttackGoal { + GammaMeleeGoal() { + super(JerryEntity.this, 1.35D, false); + } + + @Override + public boolean canUse() { + return JerryEntity.this.getStage() == Stage.GAMMA && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + return JerryEntity.this.getStage() == Stage.GAMMA && super.canContinueToUse(); + } + } + + public enum Stage implements StringRepresentable { + INFANT(0, "infant"), + MATURE(1, "mature"), + ALPHA(2, "alpha"), + GAMMA(3, "gamma"); + + private static final IntFunction BY_ID = ByIdMap.continuous(Stage::id, values(), ByIdMap.OutOfBoundsStrategy.ZERO); + private final int id; + private final String name; + + Stage(int id, String name) { + this.id = id; + this.name = name; + } + + public int id() { + return this.id; + } + + public double maxHealth() { + return switch (this) { + case INFANT -> AntarchySettings.jerryInfantHealth(); + case MATURE -> AntarchySettings.jerryMatureHealth(); + case ALPHA -> AntarchySettings.jerryAlphaHealth(); + case GAMMA -> AntarchySettings.jerryGammaHealth(); + }; + } + + public double attackDamage() { + return switch (this) { + case INFANT -> AntarchySettings.jerryInfantAttackDamage(); + case MATURE -> AntarchySettings.jerryMatureAttackDamage(); + case ALPHA -> AntarchySettings.jerryAlphaAttackDamage(); + case GAMMA -> AntarchySettings.jerryGammaAttackDamage(); + }; + } + + public static Stage byId(int id) { + return BY_ID.apply(id); + } + + public static Stage byName(String name) { + for (Stage stage : values()) { + if (stage.name.equals(name.toLowerCase(Locale.ROOT))) { + return stage; + } + } + return INFANT; + } + + @Override + public String getSerializedName() { + return this.name; + } + } +} 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 new file mode 100644 index 00000000..b53c825d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java @@ -0,0 +1,947 @@ +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 new file mode 100644 index 00000000..ede8c015 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java @@ -0,0 +1,197 @@ +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/MantisEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java new file mode 100644 index 00000000..dc152490 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java @@ -0,0 +1,390 @@ +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 net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.damagesource.DamageSource; +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.MeleeAttackGoal; +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.level.block.LeavesBlock; +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.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; +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 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"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("flyattack"); + + 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 double WANDER_SPEED = 0.48D; + private static final double COMBAT_SPEED = 0.75D; + + 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 flyBurstTicks; + protected int flyCooldownTicks; + private int debugLogTicks = 0; + + public MantisEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setNoGravity(false); + this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); + this.setPathfindingMalus(BlockPathTypes.WATER_BORDER, 16.0F); + this.setPathfindingMalus(BlockPathTypes.LEAVES, -1.0F); + this.setPathfindingMalus(BlockPathTypes.FENCE, -1.0F); + this.xpReward = 12; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.mantisHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.mantisAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.mantisMovementSpeed()) + .add(Attributes.FLYING_SPEED, AntarchySettings.mantisFlyingSpeed()) + .add(Attributes.FOLLOW_RANGE, 32.0D) + .add(Attributes.ARMOR, 4.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; + } + + if (level.getDifficulty() == Difficulty.PEACEFUL) { + return false; + } + + if (spawnReason != MobSpawnType.NATURAL) { + return false; + } + + 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) + && !(level.getBlockState(pos.below()).getBlock() instanceof LeavesBlock); + + if (!posOpen || !onSolidGround) { + return false; + } + + if (!hasNearbyMantisCapacity(level, pos)) { + return false; + } + + 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)); + } + + return false; + } + + private static boolean hasNearbyMantisCapacity(ServerLevelAccessor level, BlockPos pos) { + return level.getLevel().getEntitiesOfClass( + MantisEntity.class, + new AABB(pos).inflate(64.0D), + Entity::isAlive + ).size() < 3; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new FloatGoal(this)); + this.goalSelector.addGoal(2, this.createCombatGoal()); + this.goalSelector.addGoal(3, this.createIdleStrollGoal()); + + 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 WaterAvoidingRandomStrollGoal createIdleStrollGoal() { + return new WaterAvoidingRandomStrollGoal(this, WANDER_SPEED); + } + + @Override + protected PathNavigation createNavigation(Level level) { + GroundPathNavigation navigation = new GroundPathNavigation(this, level); + navigation.setCanOpenDoors(false); + navigation.setCanPassDoors(true); + navigation.setCanFloat(true); + return navigation; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .triggerableAnim("attack", ATTACK_ANIM) + .triggerableAnim("flyattack", FLY_ATTACK_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + return switch (this.getAnimationState()) { + 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); + default -> state.setAndContinue(IDLE_ANIM); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + if (!this.level().isClientSide) { + if (this.attackAnimationTicks > 0) { + this.attackAnimationTicks--; + } + + if (this.flyBurstTicks > 0) { + this.flyBurstTicks--; + if (this.flyBurstTicks % 16 == 0) { + this.playSound(AntarchySoundEvents.MANTIS_FLY_LOOP.get(), 0.45F, 0.95F + this.random.nextFloat() * 0.1F); + } + } + + if (this.flyCooldownTicks > 0) { + this.flyCooldownTicks--; + } + + LivingEntity target = this.getTarget(); + if (target != null && target.isAlive()) { + this.onActiveTarget(target); + this.getLookControl().setLookAt(target, 30.0F, 30.0F); + } else if (this.shouldStartFlightBurst()) { + this.startFlightBurst(); + } + + this.setNoGravity(this.isFlyingNow()); + this.updateAnimationState(); + this.tickDebugLog(); + } + + this.updateFlightRotation(); + } + + @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); + } + return hurt; + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.MANTIS_AMBIENT.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.MANTIS_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.MANTIS_HURT.get(); + } + + @Override + protected float getSoundVolume() { + return 1.1F; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource damageSource) { + return false; + } + + @Override + public void setYBodyRot(float yBodyRot) { + if (this.isFlyingNow()) { + this.setYRot(yBodyRot); + } + super.setYBodyRot(yBodyRot); + } + + protected double getCombatSpeed() { + return COMBAT_SPEED; + } + + protected void onActiveTarget(LivingEntity target) { + } + + protected boolean shouldStartFlightBurst() { + return this.flyBurstTicks <= 0 + && this.flyCooldownTicks <= 0 + && this.onGround() + && this.random.nextInt(180) == 0; + } + + protected void stopFlightBurst() { + this.flyBurstTicks = 0; + this.flyCooldownTicks = 0; + this.setNoGravity(false); + } + + private void startFlightBurst() { + this.flyBurstTicks = 40 + this.random.nextInt(30); + this.flyCooldownTicks = 160 + this.random.nextInt(80); + Vec3 lift = Vec3.directionFromRotation(0.0F, this.random.nextFloat() * 360.0F).scale(0.18D); + this.setNoGravity(true); + this.setDeltaMovement(this.getDeltaMovement().add(lift.x, 0.28D, lift.z)); + this.navigation.stop(); + } + + 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); + String trigger = switch (animationState) { + case ANIM_ATTACK -> "attack"; + case ANIM_FLY_ATTACK -> "flyattack"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + } + } + + private void updateAnimationState() { + if (this.attackAnimationTicks > 0) { + this.setAnimationState(this.isFlyingNow() ? ANIM_FLY_ATTACK : ANIM_ATTACK); + return; + } + + Vec3 velocity = this.getDeltaMovement(); + if (this.isFlyingNow() || (!this.onGround() && velocity.lengthSqr() > 1.0E-4D)) { + this.setAnimationState(ANIM_FLY); + } else if (this.onGround()) { + this.setAnimationState(velocity.horizontalDistanceSqr() > 1.0E-4D ? ANIM_WALK : ANIM_IDLE); + } else { + this.setAnimationState(ANIM_IDLE); + } + } + + private void updateFlightRotation() { + if (!this.isFlyingNow()) { + return; + } + + Vec3 motion = this.getDeltaMovement(); + if (motion.lengthSqr() < 1.0E-5D) { + return; + } + + double horizontal = Math.sqrt(motion.x * motion.x + motion.z * motion.z); + this.setYRot((float) (Math.atan2(motion.z, motion.x) * (180.0D / Math.PI)) - 90.0F); + this.setXRot((float) (-(Math.atan2(motion.y, horizontal) * (180.0D / Math.PI)))); + this.yBodyRot = this.getYRot(); + 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() + ); + } + + + + +} + + + 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 new file mode 100644 index 00000000..cea2956a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java @@ -0,0 +1,723 @@ +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 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.sounds.SoundEvent; +import net.minecraft.tags.FluidTags; +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.MoverType; +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.control.SmoothSwimmingMoveControl; +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.PathNavigation; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.ProjectileUtil; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec2; +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.List; +import java.util.UUID; + +public class MissileSquidEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(MissileSquidEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor CAN_FLY = SynchedEntityData.defineId(MissileSquidEntity.class, EntityDataSerializers.BOOLEAN); + + private static final String BITE_COOLDOWN_KEY = "BiteCooldown"; + private static final String CAN_FLY_KEY = "CanFly"; + private static final String LAUNCHED_FROM_SQUIDZOOKA_KEY = "LaunchedFromSquidzooka"; + private static final String LAUNCH_OWNER_KEY = "LaunchOwner"; + private static final String ARMED_AFTER_LANDING_KEY = "ArmedAfterLanding"; + private static final String ACTION_ANIM_TICKS_KEY = "ActionAnimTicks"; + private static final String SPAWNED_BY_KRAKEN_KEY = "SpawnedByKraken"; + private static final double AGGRO_SPEED = 0.5D; + 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 int ANIM_IDLE = 0; + private static final int ANIM_SWIM = 1; + private static final int ANIM_ATTACK = 2; + private static final int ATTACK_ANIM_TICKS = 10; + + 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"); + + @Nullable + private Vec3 patrolTarget; + private int patrolRetargetTicks; + private int strafeRetargetTicks; + private int biteCooldown; + private int actionAnimationTicks; + private float orbitDirection = 1.0F; + private int attachedTargetId = -1; + private boolean launchedFromSquidzooka; + private boolean armedAfterLanding; + private boolean spawnedByKraken; + @Nullable + private UUID launchOwnerUuid; + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public MissileSquidEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new SmoothSwimmingMoveControl(this, 80, 8, 0.06F, 0.12F, true); + this.xpReward = 6; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.missileSquidHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.missileSquidAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.missileSquidMovementSpeed()) + .add(Attributes.FLYING_SPEED, AntarchySettings.missileSquidFlyingSpeed()) + .add(Attributes.FOLLOW_RANGE, 20.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.missileSquidKnockbackResistance()); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + return level.getDifficulty() != Difficulty.PEACEFUL + && pos.getY() <= level.getSeaLevel() - 10 + && level.getFluidState(pos).is(FluidTags.WATER) + && level.getFluidState(pos.above()).is(FluidTags.WATER); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + this.entityData.define(CAN_FLY, false); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 10.0F)); + this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + + HurtByTargetGoal hurtByTargetGoal = new HurtByTargetGoal(this); + hurtByTargetGoal.setAlertOthers(MissileSquidEntity.class); + this.targetSelector.addGoal(1, hurtByTargetGoal); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .triggerableAnim("attack", ATTACK_ANIM)); + } + + 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); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @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 onSyncedDataUpdated(EntityDataAccessor key) { + super.onSyncedDataUpdated(key); + if (CAN_FLY.equals(key)) { + this.moveControl = this.canFly() + ? new FlyingMoveControl(this, 20, true) + : new SmoothSwimmingMoveControl(this, 80, 8, 0.06F, 0.12F, true); + } + } + + @Override + public void tick() { + super.tick(); + LivingEntity attachedTarget = this.getAttachedTarget(); + this.setNoGravity(attachedTarget != null || (!this.launchedFromSquidzooka && (this.isInWater() || this.canFly()))); + + if (attachedTarget != null) { + if (!this.level().isClientSide) { + this.tickAnimationTimers(); + this.tickAttachedTarget(attachedTarget); + this.updateAnimationState(); + } else { + this.positionOnAttachedTarget(attachedTarget); + this.updateAttachedRotation(attachedTarget); + } + return; + } + + if (this.launchedFromSquidzooka) { + if (!this.level().isClientSide) { + this.tickAnimationTimers(); + } + this.tickLaunchedSquid(); + this.updateSwimRotation(); + if (!this.level().isClientSide) { + this.updateAnimationState(); + } + return; + } + + if (this.level().isClientSide) { + this.tickClientParticles(); + this.updateSwimRotation(); + return; + } + + this.tickAnimationTimers(); + + if (this.biteCooldown > 0) { + this.biteCooldown--; + } + + LivingEntity target = this.getTarget(); + if ((target == null || !target.isAlive() || !this.canTargetEntity(target)) && this.tickCount % 10 == 0) { + LivingEntity nearbyTarget = this.findNearestAttackTarget(); + if (nearbyTarget != null) { + this.setTarget(nearbyTarget); + target = nearbyTarget; + } else { + this.setTarget(null); + target = null; + } + } + + if (target != null && target.isAlive()) { + this.tickAggroMovement(target); + } else { + this.tickPatrolMovement(); + } + + this.updateSwimRotation(); + this.updateAnimationState(); + } + + @Override + public void baseTick() { + int airSupply = this.getAirSupply(); + super.baseTick(); + this.handleWaterAnimalAirSupply(airSupply); + } + + @Override + public void travel(Vec3 travelVector) { + if (this.getAttachedTarget() != null) { + this.setDeltaMovement(Vec3.ZERO); + return; + } + + if (this.launchedFromSquidzooka) { + return; + } + + if (this.isEffectiveAi() && (this.isInWater() || this.canFly())) { + this.moveRelative(this.getSpeed(), travelVector); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.setDeltaMovement(this.getDeltaMovement().scale(this.isInWater() ? 0.92D : 0.91D)); + return; + } + + super.travel(travelVector); + } + + @Override + public boolean doHurtTarget(Entity target) { + return target instanceof LivingEntity livingTarget && this.attachToTarget(livingTarget); + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.MISSILE_SQUID_AMBIENT.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.MISSILE_SQUID_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.MISSILE_SQUID_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 0.8F; + } + + @Override + protected boolean shouldDespawnInPeaceful() { + return true; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(BITE_COOLDOWN_KEY, this.biteCooldown); + tag.putBoolean(CAN_FLY_KEY, this.canFly()); + tag.putBoolean(LAUNCHED_FROM_SQUIDZOOKA_KEY, this.launchedFromSquidzooka); + tag.putBoolean(ARMED_AFTER_LANDING_KEY, this.armedAfterLanding); + tag.putInt(ACTION_ANIM_TICKS_KEY, this.actionAnimationTicks); + tag.putBoolean(SPAWNED_BY_KRAKEN_KEY, this.spawnedByKraken); + if (this.launchOwnerUuid != null) { + tag.putUUID(LAUNCH_OWNER_KEY, this.launchOwnerUuid); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.biteCooldown = tag.getInt(BITE_COOLDOWN_KEY); + this.setCanFly(tag.getBoolean(CAN_FLY_KEY)); + this.launchedFromSquidzooka = tag.getBoolean(LAUNCHED_FROM_SQUIDZOOKA_KEY); + this.armedAfterLanding = tag.getBoolean(ARMED_AFTER_LANDING_KEY); + this.actionAnimationTicks = Math.max(0, tag.getInt(ACTION_ANIM_TICKS_KEY)); + this.spawnedByKraken = tag.getBoolean(SPAWNED_BY_KRAKEN_KEY); + this.launchOwnerUuid = tag.hasUUID(LAUNCH_OWNER_KEY) ? tag.getUUID(LAUNCH_OWNER_KEY) : null; + this.updateAnimationState(); + } + + public boolean isSpawnedByKraken() { + return this.spawnedByKraken; + } + + public void setSpawnedByKraken(boolean spawnedByKraken) { + this.spawnedByKraken = spawnedByKraken; + } + + private void tickAggroMovement(LivingEntity target) { + this.patrolTarget = null; + this.getLookControl().setLookAt(target, 30.0F, 30.0F); + + if (!this.isInWater() && !this.canFly()) { + this.tickGroundAggroMovement(target); + return; + } + + if (this.strafeRetargetTicks-- <= 0) { + this.strafeRetargetTicks = 6 + this.random.nextInt(8); + if (this.random.nextFloat() < 0.35F) { + this.orbitDirection *= -1.0F; + } + } + + Vec3 attackPoint = this.createAttachApproachPoint(target); + this.getMoveControl().setWantedPosition(attackPoint.x, attackPoint.y, attackPoint.z, AGGRO_SPEED); + + if (this.biteCooldown <= 0 && this.distanceToSqr(attackPoint) <= ATTACH_RANGE_SQR && this.hasLineOfSight(target)) { + this.doHurtTarget(target); + } + } + + private void tickPatrolMovement() { + this.strafeRetargetTicks = 0; + + if (this.patrolRetargetTicks-- <= 0 || this.patrolTarget == null || this.position().distanceToSqr(this.patrolTarget) < 3.0D) { + this.patrolRetargetTicks = 24 + this.random.nextInt(18); + this.patrolTarget = this.findPatrolTarget(); + } + + if (this.patrolTarget != null) { + this.getMoveControl().setWantedPosition(this.patrolTarget.x, this.patrolTarget.y, this.patrolTarget.z, PATROL_SPEED); + } + } + + private Vec3 createAttachApproachPoint(LivingEntity target) { + return target.position().add(0.0D, target.getBbHeight() * 0.6D, 0.0D); + } + + private Vec3 findPatrolTarget() { + BlockPos origin = this.blockPosition(); + for (int attempt = 0; attempt < 16; attempt++) { + BlockPos candidate = origin.offset(this.random.nextInt(17) - 8, this.random.nextInt(7) - 3, this.random.nextInt(17) - 8); + boolean candidateOpen = this.level().isEmptyBlock(candidate) || this.level().getFluidState(candidate).is(FluidTags.WATER); + boolean aboveOpen = this.level().isEmptyBlock(candidate.above()) || this.level().getFluidState(candidate.above()).is(FluidTags.WATER); + if (this.canFly()) { + if (!candidateOpen || !aboveOpen) { + continue; + } + } else if (!this.level().getFluidState(candidate).is(FluidTags.WATER) || !this.level().getFluidState(candidate.above()).is(FluidTags.WATER)) { + continue; + } + + return Vec3.atCenterOf(candidate); + } + + return this.position(); + } + + public void launchFromSquidzooka(LivingEntity owner, float velocity) { + Vec3 direction = Vec3.directionFromRotation(new Vec2(owner.getXRot(), owner.getYRot())); + this.launchAsProjectile(owner, direction.scale(velocity).add(owner.getDeltaMovement())); + } + + public void launchAsProjectile(@Nullable LivingEntity owner, Vec3 velocity) { + this.attachedTargetId = -1; + this.launchedFromSquidzooka = true; + this.armedAfterLanding = false; + this.launchOwnerUuid = owner != null ? owner.getUUID() : null; + this.setTarget(null); + this.setNoGravity(false); + this.setDeltaMovement(velocity); + this.hasImpulse = true; + this.updateAnimationState(); + } + + private void tickLaunchedSquid() { + if (this.level().isClientSide) { + return; + } + + Vec3 start = this.position(); + Vec3 velocity = this.getDeltaMovement(); + Vec3 end = start.add(velocity); + + EntityHitResult entityHit = ProjectileUtil.getEntityHitResult( + this.level(), + this, + start, + end, + this.getBoundingBox().expandTowards(velocity).inflate(0.35D), + this::canLaunchHit + ); + + if (entityHit != null) { + Vec3 location = entityHit.getLocation(); + this.moveTo(location.x, location.y, location.z, this.getYRot(), this.getXRot()); + if (entityHit.getEntity() instanceof LivingEntity livingEntity) { + this.attachToTarget(livingEntity); + } else { + this.armAfterLanding(null); + } + return; + } + + this.move(MoverType.SELF, velocity); + Vec3 movedVelocity = this.getDeltaMovement(); + if (!this.isNoGravity()) { + movedVelocity = movedVelocity.add(0.0D, -0.08D, 0.0D); + } + + this.setDeltaMovement(movedVelocity.scale(this.isInWater() ? 0.9D : 0.98D)); + this.hasImpulse = true; + + if (this.onGround() || this.horizontalCollision || this.verticalCollision) { + this.armAfterLanding(this.findLandingTarget()); + } + } + + private boolean canLaunchHit(Entity entity) { + if (!(entity instanceof LivingEntity livingEntity) || entity == this) { + return false; + } + + return this.canTargetEntity(livingEntity) && entity.isPickable(); + } + + @Nullable + private LivingEntity findLandingTarget() { + List nearbyTargets = this.level().getEntitiesOfClass( + LivingEntity.class, + new AABB(this.blockPosition()).inflate(2.5D), + this::canLaunchHit + ); + return nearbyTargets.isEmpty() ? null : nearbyTargets.get(0); + } + + private void armAfterLanding(@Nullable LivingEntity target) { + this.attachedTargetId = -1; + this.launchedFromSquidzooka = false; + this.armedAfterLanding = true; + this.fallDistance = 0.0F; + if (target != null && this.canTargetEntity(target)) { + this.setTarget(target); + } + this.updateAnimationState(); + } + + @Nullable + private LivingEntity findNearestAttackTarget() { + double followRange = this.getAttributeValue(Attributes.FOLLOW_RANGE); + Player nearestPlayer = this.level().getNearestPlayer(this, followRange); + return nearestPlayer != null && this.canTargetEntity(nearestPlayer) ? nearestPlayer : null; + } + + private boolean canTargetEntity(LivingEntity entity) { + if (entity == this || !entity.isAlive() || entity.getType() == this.getType() || entity instanceof KrakenEntity) { + return false; + } + + if (this.launchOwnerUuid != null && this.launchOwnerUuid.equals(entity.getUUID())) { + return false; + } + + if (entity instanceof Player player) { + if (player.isCreative() || player.isSpectator()) { + return false; + } + return this.level().getDifficulty() != Difficulty.PEACEFUL; + } + + return true; + } + + private void tickGroundAggroMovement(LivingEntity target) { + Vec3 horizontal = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (horizontal.lengthSqr() > 1.0E-4D && this.onGround()) { + Vec3 lunge = horizontal.normalize().scale(0.16D).add(0.0D, 0.24D, 0.0D); + this.setDeltaMovement(this.getDeltaMovement().add(lunge)); + this.hasImpulse = true; + } + + if (this.biteCooldown <= 0 && this.distanceToSqr(target) <= ATTACH_RANGE_SQR && this.hasLineOfSight(target)) { + this.doHurtTarget(target); + } + } + + private void tickClientParticles() { + if ((this.getTarget() != null || this.biteCooldown > 0 || this.getAttachedTarget() != null) && this.tickCount % 3 == 0) { + this.level().addParticle( + ParticleTypes.BUBBLE, + this.getX() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), + this.getY() + 0.3D + this.random.nextDouble() * 0.4D, + this.getZ() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), + 0.0D, + 0.02D, + 0.0D + ); + } + } + + private void updateSwimRotation() { + 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, 10.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, 8.0F)); + } + } + + private void handleWaterAnimalAirSupply(int previousAirSupply) { + if (!this.isAlive()) { + return; + } + + if (this.isInWaterOrBubble()) { + this.setAirSupply(this.getMaxAirSupply()); + return; + } + + this.setAirSupply(previousAirSupply - 1); + if (this.getAirSupply() == -20) { + this.setAirSupply(0); + this.hurt(this.damageSources().drown(), 2.0F); + } + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + public boolean canAttack(LivingEntity target) { + return this.canTargetEntity(target) && super.canAttack(target); + } + + + @Nullable + private LivingEntity getAttachedTarget() { + if (this.attachedTargetId < 0) { + return null; + } + + Entity entity = this.level().getEntity(this.attachedTargetId); + return entity instanceof LivingEntity livingEntity && this.canTargetEntity(livingEntity) ? livingEntity : null; + } + + private boolean attachToTarget(LivingEntity target) { + if (!this.canTargetEntity(target) || this.hasAttachedSquid(target)) { + return false; + } + + this.attachedTargetId = target.getId(); + this.launchedFromSquidzooka = false; + this.armedAfterLanding = true; + this.setTarget(target); + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + this.biteCooldown = LATCH_DAMAGE_INTERVAL; + this.playActionAnimation(ANIM_ATTACK, ATTACK_ANIM_TICKS); + this.positionOnAttachedTarget(target); + this.updateAttachedRotation(target); + this.playSound(AntarchySoundEvents.MISSILE_SQUID_ATTACK.get(), 0.8F, 1.15F + this.random.nextFloat() * 0.15F); + return true; + } + + private boolean hasAttachedSquid(LivingEntity target) { + return !this.level().getEntitiesOfClass( + MissileSquidEntity.class, + target.getBoundingBox().inflate(1.5D), + squid -> squid != this && squid.attachedTargetId == target.getId() + ).isEmpty(); + } + + private void detachFromTarget() { + this.attachedTargetId = -1; + this.setTarget(null); + } + + private void tickAttachedTarget(LivingEntity target) { + if (!target.isAlive() || !this.canTargetEntity(target)) { + this.detachFromTarget(); + return; + } + + this.getNavigation().stop(); + this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); + this.setDeltaMovement(Vec3.ZERO); + this.positionOnAttachedTarget(target); + this.updateAttachedRotation(target); + + if (this.biteCooldown > 0) { + this.biteCooldown--; + } + + if (this.biteCooldown <= 0) { + Vec3 previousMovement = target.getDeltaMovement(); + boolean hurt = target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugLatchDamage()); + target.setDeltaMovement(previousMovement); + if (hurt) { + this.playActionAnimation(ANIM_ATTACK, ATTACK_ANIM_TICKS); + } + this.biteCooldown = LATCH_DAMAGE_INTERVAL; + } + } + + private void positionOnAttachedTarget(LivingEntity target) { + Vec3 anchor = this.createLatchAnchor(target); + this.moveTo(anchor.x, anchor.y, anchor.z, this.getYRot(), this.getXRot()); + this.resetFallDistance(); + } + + private Vec3 createLatchAnchor(LivingEntity target) { + return target.position().add( + 0.0D, + target.getBbHeight() + 0.15D, + 0.0D + ); + } + + private void updateAttachedRotation(LivingEntity target) { + Vec3 direction = 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); + this.yBodyRot = targetYaw; + this.yHeadRot = targetYaw; + } + this.setXRot(0.0F); + } + + public int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + public boolean canFly() { + return this.entityData.get(CAN_FLY); + } + + public void setCanFly(boolean canFly) { + this.entityData.set(CAN_FLY, canFly); + this.moveControl = canFly + ? new FlyingMoveControl(this, 20, true) + : new SmoothSwimmingMoveControl(this, 80, 8, 0.06F, 0.12F, true); + } + + 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 playActionAnimation(int animationState, int ticks) { + this.setAnimationState(animationState); + this.actionAnimationTicks = ticks; + } + + private void tickAnimationTimers() { + if (this.actionAnimationTicks > 0) { + this.actionAnimationTicks--; + } + } + + private void updateAnimationState() { + if (this.getAttachedTarget() != null || this.actionAnimationTicks > 0) { + this.setAnimationState(ANIM_ATTACK); + return; + } + + Vec3 velocity = this.getDeltaMovement(); + if (this.launchedFromSquidzooka + || this.getTarget() != null + || velocity.lengthSqr() > 1.0E-3D + || (this.isInWater() && velocity.horizontalDistanceSqr() > 1.0E-4D)) { + this.setAnimationState(ANIM_SWIM); + return; + } + + this.setAnimationState(ANIM_IDLE); + } +} 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 new file mode 100644 index 00000000..26666b34 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java @@ -0,0 +1,701 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.Registries; +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.resources.ResourceLocation; +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.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.MobSpawnType; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.SpawnGroupData; +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.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.level.biome.Biome; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.ServerLevelAccessor; +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; +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 MolevoreEntity extends Monster implements GeoEntity { + private static final ResourceKey MOLEWORM_CAVES = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "moleworm_caves") + ); + private static final EntityDataAccessor ACTION_STATE = SynchedEntityData.defineId(MolevoreEntity.class, EntityDataSerializers.INT); + + private static final int ACTION_NONE = 0; + private static final int ACTION_DIG_UP = 1; + private static final int ACTION_CLAW_SWIPE = 2; + private static final int ACTION_SPIN_CHARGE = 3; + private static final int ACTION_HURT = 4; + private static final int ACTION_DEATH = 5; + private static final int ACTION_IDLE_DIG = 6; + + private static final int DIG_UP_TICKS = 60; + private static final int SWIPE_TICKS = 18; + private static final int SWIPE_DAMAGE_TICK = 8; + private static final int SPIN_TOTAL_TICKS = 32; + private static final int SPIN_WINDUP_TICKS = 10; + private static final int HURT_TICKS = 10; + private static final int DEATH_TICKS = 34; + + private static final double CHASE_SPEED = 1.05D; + private static final double WANDER_SPEED = 0.8D; + private static final double SPIN_SPEED = 1.15D; + private static final double SWIPE_RANGE = 3.6D; + private static final double SPIN_RANGE_MIN = 4.0D; + private static final double SPIN_RANGE_MAX = 14.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 DEATH_ANIM = RawAnimation.begin().thenPlay("death"); + private static final RawAnimation HURT_ANIM = RawAnimation.begin().thenPlay("hurt"); + private static final RawAnimation DIG_UP_ANIM = RawAnimation.begin().thenPlay("digging up"); + private static final RawAnimation CLAW_SWIPE_ANIM = RawAnimation.begin().thenPlay("claw swiping"); + private static final RawAnimation SPINNING_ANIM = RawAnimation.begin().thenPlay("spinning"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private final Set spinHitEntities = new HashSet<>(); + + private int actionTicks; + private int attackCooldown; + private int idleDigCooldown; + private boolean swipeDamageApplied; + private Vec3 spinDirection = Vec3.ZERO; + + public MolevoreEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 20; + this.idleDigCooldown = 100; + } + + public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.molevoreHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.27D) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.molevoreAttackDamage()) + .add(Attributes.ARMOR, 6.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.65D) + .add(Attributes.FOLLOW_RANGE, 28.0D); + } + + public static boolean canSpawn(EntityType entityType, LevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + return hasSpawnPocket(level, pos); + } + + private static boolean hasSpawnPocket(LevelAccessor level, BlockPos pos) { + if (!level.getBiome(pos).is(MOLEWORM_CAVES)) { + return false; + } + + for (int dx = -1; dx <= 1; dx++) { + for (int dz = -1; dz <= 1; dz++) { + BlockPos airPos = pos.offset(dx, 0, dz); + if (!level.getBlockState(airPos).isAir() || !level.getBlockState(airPos.above()).isAir()) { + return false; + } + } + } + + return true; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ACTION_STATE, ACTION_NONE); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, WANDER_SPEED)); + 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).setAlertOthers()); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .triggerableAnim("dig_up", DIG_UP_ANIM) + .triggerableAnim("claw_swipe", CLAW_SWIPE_ANIM) + .triggerableAnim("spin_charge", SPINNING_ANIM) + .triggerableAnim("hurt", HURT_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + return switch (this.getActionState()) { + case ACTION_DIG_UP -> state.setAndContinue(DIG_UP_ANIM); + case ACTION_CLAW_SWIPE -> state.setAndContinue(CLAW_SWIPE_ANIM); + case ACTION_SPIN_CHARGE -> state.setAndContinue(SPINNING_ANIM); + case ACTION_HURT -> state.setAndContinue(HURT_ANIM); + case ACTION_DEATH -> state.setAndContinue(DEATH_ANIM); + case ACTION_IDLE_DIG -> state.setAndContinue(CLAW_SWIPE_ANIM); + default -> state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + @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); + if (spawnReason != MobSpawnType.SPAWN_EGG) { + this.startDigUp(); + } + return finalized; + } + + @Override + public void tick() { + super.tick(); + + if (this.level().isClientSide) { + return; + } + + if (this.attackCooldown > 0) { + this.attackCooldown--; + } + if (this.idleDigCooldown > 0) { + this.idleDigCooldown--; + } + + if (this.getActionState() == ACTION_DEATH) { + return; + } + + switch (this.getActionState()) { + case ACTION_DIG_UP -> this.tickDigUp(); + case ACTION_CLAW_SWIPE -> this.tickClawSwipe(); + case ACTION_SPIN_CHARGE -> this.tickSpinCharge(); + case ACTION_HURT -> this.tickHurtAnimation(); + case ACTION_IDLE_DIG -> this.tickIdleDig(); + default -> this.tickCombat(); + } + } + + @Override + public boolean hasLineOfSight(Entity entity) { + Vec3 start = new Vec3(this.getX(), this.getEyeY(), this.getZ()); + Vec3 end = new Vec3(entity.getX(), entity.getEyeY(), entity.getZ()); + Vec3 delta = end.subtract(start); + double distance = delta.length(); + if (distance < 1.0E-6D) { + return true; + } + int steps = Math.max(1, Mth.ceil(distance / 0.5D)); + Vec3 step = delta.scale(1.0D / steps); + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + int lastX = Integer.MIN_VALUE; + int lastY = Integer.MIN_VALUE; + int lastZ = Integer.MIN_VALUE; + + for (int i = 0; i <= steps; i++) { + Vec3 sample = start.add(step.scale(i)); + int bx = Mth.floor(sample.x); + int by = Mth.floor(sample.y); + int bz = Mth.floor(sample.z); + if (bx == lastX && by == lastY && bz == lastZ) { + continue; + } + lastX = bx; + lastY = by; + lastZ = bz; + cursor.set(bx, by, bz); + + BlockState state = this.level().getBlockState(cursor); + if (state.isAir() + || state.is(AntarchyTags.Blocks.MOLEVORE_SEE_THROUGH_BLOCKS) + || state.getCollisionShape(this.level(), cursor).isEmpty()) { + continue; + } + + return false; + } + + return true; + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.isInvulnerableTo(source)) { + return false; + } + + boolean hurt = super.hurt(source, amount); + if (!hurt || this.level().isClientSide) { + return hurt; + } + + if (!this.isDeadOrDying() && this.getActionState() != ACTION_DIG_UP && this.getActionState() != ACTION_DEATH) { + if (this.getActionState() == ACTION_NONE) { + this.setActionState(ACTION_HURT); + this.actionTicks = HURT_TICKS; + } + } + + return true; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return super.removeWhenFarAway(distanceToClosestPlayer); + } + + @Override + public boolean canBeCollidedWith() { + return this.getActionState() != ACTION_DIG_UP && super.canBeCollidedWith(); + } + + @Override + public boolean canAttack(LivingEntity target) { + return target instanceof Player player && !player.isCreative() && !player.isSpectator() && super.canAttack(target); + } + + @Override + protected SoundEvent getAmbientSound() { + return this.getActionState() == ACTION_DIG_UP ? null : AntarchySoundEvents.MOLEVORE_AMBIENT.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.MOLEVORE_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.MOLEVORE_HURT.get(); + } + + @Override + protected void playStepSound(BlockPos pos, BlockState state) { + this.playSound(AntarchySoundEvents.MOLEVORE_DIG.get(), 0.18F, 0.9F); + } + + @Override + protected float getSoundVolume() { + return 0.9F; + } + + @Override + public float getWalkTargetValue(BlockPos pos, net.minecraft.world.level.LevelReader level) { + return level.getBlockState(pos.below()).is(AntarchyTags.Blocks.MOLEVORE_SEE_THROUGH_BLOCKS) + ? 8.0F + : super.getWalkTargetValue(pos, level); + } + + @Override + public float maxUpStep() { + return 1.0F; + } + + @Override + public void travel(Vec3 travelVector) { + if (this.level().isClientSide || this.getActionState() != ACTION_SPIN_CHARGE) { + super.travel(travelVector); + return; + } + + this.move(MoverType.SELF, this.getDeltaMovement()); + this.setDeltaMovement(this.getDeltaMovement().scale(0.96D)); + } + + @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.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + } + super.die(damageSource); + } + + @Override + protected void tickDeath() { + this.deathTime++; + if (this.deathTime == 1) { + this.setActionState(ACTION_DEATH); + } + if (this.deathTime >= DEATH_TICKS) { + this.remove(RemovalReason.KILLED); + } + } + + private void tickCombat() { + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + this.setDeltaMovement(this.getDeltaMovement().scale(0.8D)); + if (this.idleDigCooldown <= 0 && this.random.nextFloat() < 0.01F) { + this.startIdleDig(); + } + return; + } + + this.getLookControl().setLookAt(target, 30.0F, 20.0F); + double distanceToTarget = this.distanceToSqr(target); + + if (this.attackCooldown <= 0) { + if (distanceToTarget <= SWIPE_RANGE * SWIPE_RANGE) { + this.startClawSwipe(); + return; + } + + if (distanceToTarget >= SPIN_RANGE_MIN * SPIN_RANGE_MIN + && distanceToTarget <= SPIN_RANGE_MAX * SPIN_RANGE_MAX + && this.random.nextFloat() < 0.05F) { + this.startSpinCharge(target); + return; + } + } + + this.getNavigation().moveTo(target, CHASE_SPEED); + + if (this.horizontalCollision && this.canBreakBlocks()) { + this.breakTaggedBlocksInFront(1.7D, 2.0D, 1.0D); + } + } + + private void startDigUp() { + this.setActionState(ACTION_DIG_UP); + this.actionTicks = DIG_UP_TICKS; + this.attackCooldown = 30; + this.setDeltaMovement(Vec3.ZERO); + } + + private void tickDigUp() { + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + if (this.actionTicks == DIG_UP_TICKS) { + this.playSound(AntarchySoundEvents.MOLEVORE_DIG.get(), 0.9F, 0.75F); + } + if (this.tickCount % 4 == 0 && this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles( + net.minecraft.core.particles.ParticleTypes.POOF, + this.getX(), + this.getY() + 0.3D, + this.getZ(), + 8, + this.getBbWidth() * 0.25D, + 0.12D, + this.getBbWidth() * 0.25D, + 0.02D + ); + } + if (--this.actionTicks <= 0) { + this.setActionState(ACTION_NONE); + } + } + + private void startClawSwipe() { + this.setActionState(ACTION_CLAW_SWIPE); + this.actionTicks = SWIPE_TICKS; + this.swipeDamageApplied = false; + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.35D)); + this.playSound(AntarchySoundEvents.MOLEVORE_ATTACK.get(), 0.9F, 0.65F); + } + + private void tickClawSwipe() { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.6D)); + LivingEntity target = this.getTarget(); + if (target != null) { + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + } + + int elapsed = SWIPE_TICKS - this.actionTicks; + if (!this.swipeDamageApplied && elapsed >= SWIPE_DAMAGE_TICK) { + this.performClawSwipe(); + this.swipeDamageApplied = true; + } + + if (--this.actionTicks <= 0) { + this.setActionState(ACTION_NONE); + this.attackCooldown = 20; + } + } + + private void performClawSwipe() { + AABB hitBox = this.getBoundingBox().inflate(3.0D, 1.3D, 3.0D); + for (LivingEntity entity : this.level().getEntitiesOfClass(LivingEntity.class, hitBox, this::isValidSwipeTarget)) { + if (!this.isInFront(entity.position(), 0.05D)) { + continue; + } + + 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); + if (push.lengthSqr() < 1.0E-4D) { + push = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); + } + push = push.normalize().scale(0.8D); + entity.push(push.x, 0.25D, push.z); + entity.hurtMarked = true; + } + } + + if (this.canBreakBlocks()) { + this.breakTaggedBlocksInFront(2.8D, 2.2D, 1.15D); + } + + this.playSound(AntarchySoundEvents.MOLEVORE_ATTACK.get(), 1.0F, 0.85F); + } + + private void startSpinCharge(LivingEntity target) { + Vec3 horizontal = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (horizontal.lengthSqr() < 1.0E-4D) { + return; + } + + this.spinDirection = horizontal.normalize(); + this.spinHitEntities.clear(); + this.setActionState(ACTION_SPIN_CHARGE); + this.actionTicks = SPIN_TOTAL_TICKS; + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + this.playSound(AntarchySoundEvents.MOLEVORE_ATTACK.get(), 1.2F, 0.75F); + } + + private void tickSpinCharge() { + this.getNavigation().stop(); + LivingEntity target = this.getTarget(); + boolean inWindup = this.actionTicks > SPIN_TOTAL_TICKS - SPIN_WINDUP_TICKS; + + 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); + if (horizontal.lengthSqr() > 1.0E-4D) { + this.spinDirection = 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.setDeltaMovement(motion); + this.hasImpulse = true; + this.performSpinChargeHit(); + } + if (this.horizontalCollision && !inWindup) { + boolean brokeDirt = this.canBreakBlocks() + && this.breakTaggedBlocksInDirection(this.spinDirection, 1.8D, 2.2D, 1.1D); + if (!brokeDirt) { + this.actionTicks = Math.min(this.actionTicks, 3); + } + } else if (this.horizontalCollision) { + this.actionTicks = Math.min(this.actionTicks, 3); + } + + if (--this.actionTicks <= 0) { + this.spinHitEntities.clear(); + this.setActionState(ACTION_NONE); + this.setDeltaMovement(this.getDeltaMovement().scale(0.25D)); + this.attackCooldown = 60; + } + } + + private void performSpinChargeHit() { + AABB hitBox = this.getBoundingBox().inflate(0.55D, 0.35D, 0.55D); + for (LivingEntity entity : this.level().getEntitiesOfClass(LivingEntity.class, hitBox, this::isValidSwipeTarget)) { + if (!this.spinHitEntities.add(entity.getUUID())) { + continue; + } + + 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); + entity.hurtMarked = true; + this.playSound(AntarchySoundEvents.MOLEVORE_ATTACK.get(), 1.0F, 0.65F + this.random.nextFloat() * 0.1F); + } + } + } + + private void startIdleDig() { + this.setActionState(ACTION_IDLE_DIG); + this.actionTicks = SWIPE_TICKS; + this.swipeDamageApplied = false; + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.35D)); + this.playSound(AntarchySoundEvents.MOLEVORE_DIG.get(), 0.9F, 0.55F); + } + + private void tickIdleDig() { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.6D)); + + int elapsed = SWIPE_TICKS - this.actionTicks; + if (!this.swipeDamageApplied && elapsed >= SWIPE_DAMAGE_TICK) { + this.performIdleDig(); + this.swipeDamageApplied = true; + } + + if (--this.actionTicks <= 0) { + this.setActionState(ACTION_NONE); + this.idleDigCooldown = 120 + this.random.nextInt(80); + } + } + + + private void performIdleDig() { + if (!this.canBreakBlocks()) return; + + Vec3 forward = this.getViewVector(1.0F).normalize(); + Vec3 digCenter = this.position() + .add(forward.scale(1.0D)) + .add(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); + 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); + if (toBlock.lengthSqr() > 1.0E-4D && hForward.normalize().dot(toBlock.normalize()) < -0.2D) { + continue; + } + } + this.level().destroyBlock(pos, false, this); + } + + this.playSound(AntarchySoundEvents.MOLEVORE_ATTACK.get(), 1.0F, 0.8F + this.random.nextFloat() * 0.1F); + } + + private void tickHurtAnimation() { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.5D)); + if (--this.actionTicks <= 0) { + this.setActionState(ACTION_NONE); + } + } + + private boolean isValidSwipeTarget(LivingEntity entity) { + return entity.isAlive() && entity != this && this.canAttack(entity); + } + + + private boolean breakTaggedBlocksInFront(double range, double verticalRange, double halfWidth) { + return this.breakTaggedBlocksInDirection(this.getViewVector(1.0F).normalize(), range, verticalRange, halfWidth); + } + + + private boolean breakTaggedBlocksInDirection(Vec3 direction, double range, double verticalRange, double halfWidth) { + if (!canMobGrief(this.level())) { + return false; + } + + Vec3 forward = direction.normalize(); + Vec3 center = this.position().add(forward.scale(range * 0.5D)).add(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); + for (BlockPos pos : BlockPos.betweenClosed(min, max)) { + BlockState state = this.level().getBlockState(pos); + if (!state.is(AntarchyTags.Blocks.MOLEVORE_BREAKABLE_BLOCKS) || state.isAir()) { + continue; + } + + Vec3 blockCenter = Vec3.atCenterOf(pos); + Vec3 toBlock = blockCenter.subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (hForward.lengthSqr() > 1.0E-4D && toBlock.lengthSqr() > 1.0E-4D + && hForward.normalize().dot(toBlock.normalize()) < -0.15D) { + continue; + } + + this.level().destroyBlock(pos, false, this); + broke = true; + } + return broke; + } + + 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); + if (forward.lengthSqr() < 1.0E-4D || toTarget.lengthSqr() < 1.0E-4D) { + return true; + } + return forward.normalize().dot(toTarget.normalize()) >= minimumDot; + } + + private int getActionState() { + return this.entityData.get(ACTION_STATE); + } + + private void setActionState(int actionState) { + if (this.entityData.get(ACTION_STATE) != actionState) { + this.entityData.set(ACTION_STATE, actionState); + String trigger = switch (actionState) { + case ACTION_DIG_UP -> "dig_up"; + case ACTION_CLAW_SWIPE, ACTION_IDLE_DIG -> "claw_swipe"; + case ACTION_SPIN_CHARGE -> "spin_charge"; + case ACTION_HURT -> "hurt"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + } + } + + private boolean canBreakBlocks() { + return canMobGrief(this.level()); + } + + private static boolean canMobGrief(Level level) { + return level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MolewormEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MolewormEntity.java new file mode 100644 index 00000000..8be8c8d3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/MolewormEntity.java @@ -0,0 +1,498 @@ +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 java.util.EnumSet; +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.sounds.SoundEvent; +import net.minecraft.tags.DamageTypeTags; +import net.minecraft.util.RandomSource; +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.LivingEntity; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.ClimbOnTopOfPowderSnowGoal; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +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.monster.Silverfish; +import net.minecraft.world.entity.player.Player; +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.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; +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 MolewormEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(MolewormEntity.class, EntityDataSerializers.INT); + + private static final int ANIM_IDLE = 0; + private static final int ANIM_WALK = 1; + private static final int ANIM_DIG = 2; + private static final int ANIM_DEATH = 3; + private static final int DIG_ANIMATION_TICKS = 20; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation DIG_ANIM = RawAnimation.begin().thenPlay("Dig"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("Death"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + @Nullable + private WakeUpFriendsGoal friendsGoal; + @Nullable + private BlockPos mergeTargetPos; + private int mergeTicks; + + public MolewormEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.molewormHealth()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.molewormMovementSpeed()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.molewormAttackDamage()); + } + + @SuppressWarnings("unchecked") + public static boolean canSpawn(EntityType entityType, LevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + return Silverfish.checkSilverfishSpawnRules((EntityType) (EntityType) entityType, level, spawnReason, pos, random); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + } + + @Override + protected void registerGoals() { + this.friendsGoal = new WakeUpFriendsGoal(this); + this.goalSelector.addGoal(1, new FloatGoal(this)); + this.goalSelector.addGoal(1, new ClimbOnTopOfPowderSnowGoal(this, this.level())); + this.goalSelector.addGoal(3, this.friendsGoal); + this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, false)); + this.goalSelector.addGoal(5, new MergeWithDirtGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .triggerableAnim("dig", DIG_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + return switch (this.getAnimationState()) { + case ANIM_WALK -> state.setAndContinue(WALK_ANIM); + case ANIM_DIG -> state.setAndContinue(DIG_ANIM); + case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); + default -> state.setAndContinue(IDLE_ANIM); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + protected Entity.MovementEmission getMovementEmission() { + return Entity.MovementEmission.EVENTS; + } + + @Override + public EntityDimensions getDimensions(Pose pose) { + return EntityDimensions.scalable(0.4F, 0.3F); + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.MOLEWORM_AMBIENT.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.MOLEWORM_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.MOLEWORM_HURT.get(); + } + + @Override + protected void playStepSound(BlockPos pos, BlockState state) { + this.playSound(AntarchySoundEvents.MOLEWORM_DIG.get(), 0.15F, 1.0F); + } + + @Override + public boolean doHurtTarget(Entity target) { + boolean hurt = super.doHurtTarget(target); + if (hurt && target instanceof LivingEntity) { + this.playSound(AntarchySoundEvents.MOLEWORM_ATTACK.get(), 0.35F, 0.95F + this.random.nextFloat() * 0.1F); + } + return hurt; + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.isInvulnerableTo(source)) { + return false; + } + + if ((source.getEntity() != null || source.is(DamageTypeTags.ALWAYS_TRIGGERS_SILVERFISH)) && this.friendsGoal != null) { + this.friendsGoal.notifyHurt(); + } + + boolean hurt = super.hurt(source, amount); + if (hurt && this.isMerging()) { + this.cancelMerge(); + } + return hurt; + } + + @Override + public void tick() { + this.yBodyRot = this.getYRot(); + super.tick(); + + if (!this.level().isClientSide && this.isMerging()) { + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + this.mergeTicks--; + if (this.mergeTicks <= 0) { + this.completeMerge(); + } + } + + if (!this.level().isClientSide) { + this.updateAnimationState(); + } + } + + @Override + public void setYBodyRot(float yBodyRot) { + this.setYRot(yBodyRot); + super.setYBodyRot(yBodyRot); + } + + @Override + public float getWalkTargetValue(BlockPos pos, LevelReader level) { + return isMergeHost(level.getBlockState(pos.below())) ? 10.0F : super.getWalkTargetValue(pos, level); + } + + public boolean isMerging() { + return this.mergeTicks > 0 && this.mergeTargetPos != null; + } + + 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_DIG) { + this.triggerAnim("main_controller", "dig"); + } + } + } + + private void startMerge(BlockPos targetPos) { + this.mergeTargetPos = targetPos.immutable(); + this.mergeTicks = DIG_ANIMATION_TICKS; + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + this.setAnimationState(ANIM_DIG); + } + + private void cancelMerge() { + this.mergeTargetPos = null; + this.mergeTicks = 0; + } + + private void completeMerge() { + BlockPos targetPos = this.mergeTargetPos; + this.cancelMerge(); + if (targetPos == null || !canMobGrief(this.level())) { + return; + } + + BlockState targetState = this.level().getBlockState(targetPos); + BlockState infestedState = infestedStateByHost(targetState); + if (infestedState == null) { + return; + } + + this.level().setBlock(targetPos, infestedState, 3); + this.spawnAnim(); + this.discard(); + } + + private void updateAnimationState() { + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + + if (this.isMerging()) { + this.setAnimationState(ANIM_DIG); + return; + } + + Vec3 velocity = this.getDeltaMovement(); + if (velocity.horizontalDistanceSqr() > 1.0E-4D || this.walkAnimation.speed() > 0.02F) { + this.setAnimationState(ANIM_WALK); + return; + } + + this.setAnimationState(ANIM_IDLE); + } + + private static boolean isMergeHost(BlockState state) { + return state.is(Blocks.COARSE_DIRT) || state.is(Blocks.ROOTED_DIRT); + } + + private static boolean canMobGrief(Level level) { + return level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); + } + + private static boolean isInfestedDirt(BlockState state) { + return state.is(AntarchyObjects.INFESTED_COARSE_DIRT.get()) || state.is(AntarchyObjects.INFESTED_ROOTED_DIRT.get()); + } + + @Nullable + private static BlockState infestedStateByHost(BlockState state) { + if (state.is(Blocks.COARSE_DIRT)) { + return AntarchyObjects.INFESTED_COARSE_DIRT.get().defaultBlockState(); + } + if (state.is(Blocks.ROOTED_DIRT)) { + return AntarchyObjects.INFESTED_ROOTED_DIRT.get().defaultBlockState(); + } + return null; + } + + @Nullable + private static BlockState hostStateByInfested(BlockState state) { + if (state.is(AntarchyObjects.INFESTED_COARSE_DIRT.get())) { + return Blocks.COARSE_DIRT.defaultBlockState(); + } + if (state.is(AntarchyObjects.INFESTED_ROOTED_DIRT.get())) { + return Blocks.ROOTED_DIRT.defaultBlockState(); + } + return null; + } + + @Nullable + private static BlockPos findEmergencePos(Level level, BlockPos origin) { + BlockPos[] candidates = new BlockPos[] { + origin.above(), + origin.north(), + origin.south(), + origin.east(), + origin.west(), + origin.north().above(), + origin.south().above(), + origin.east().above(), + origin.west().above() + }; + + for (BlockPos candidate : candidates) { + BlockState state = level.getBlockState(candidate); + BlockState above = level.getBlockState(candidate.above()); + BlockState below = level.getBlockState(candidate.below()); + if (state.isAir() && above.isAir() && below.isFaceSturdy(level, candidate.below(), Direction.UP)) { + return candidate; + } + } + + return null; + } + + private static final class MergeWithDirtGoal extends RandomStrollGoal { + private final MolewormEntity moleworm; + @Nullable + private BlockPos mergePos; + private boolean doMerge; + + private MergeWithDirtGoal(MolewormEntity moleworm) { + super(moleworm, 1.0D, 10); + this.moleworm = moleworm; + this.setFlags(EnumSet.of(Goal.Flag.MOVE)); + } + + @Override + public boolean canUse() { + if (this.moleworm.isMerging() || this.mob.getTarget() != null || !this.mob.getNavigation().isDone()) { + return false; + } + + RandomSource random = this.mob.getRandom(); + if (canMobGrief(this.mob.level()) && random.nextInt(reducedTickDelay(10)) == 0) { + BlockPos candidate = this.mob.blockPosition().below(); + if (isMergeHost(this.mob.level().getBlockState(candidate))) { + this.mergePos = candidate; + this.doMerge = true; + return true; + } + } + + this.doMerge = false; + this.mergePos = null; + return super.canUse(); + } + + @Override + public boolean canContinueToUse() { + return this.doMerge ? this.moleworm.isMerging() : super.canContinueToUse(); + } + + @Override + public void start() { + if (!this.doMerge || this.mergePos == null) { + super.start(); + return; + } + + if (isMergeHost(this.moleworm.level().getBlockState(this.mergePos))) { + this.moleworm.startMerge(this.mergePos); + } else { + this.doMerge = false; + this.mergePos = null; + } + } + + @Override + public void stop() { + super.stop(); + this.doMerge = false; + this.mergePos = null; + } + } + + private static final class WakeUpFriendsGoal extends Goal { + private final MolewormEntity moleworm; + private int lookForFriends; + + private WakeUpFriendsGoal(MolewormEntity moleworm) { + this.moleworm = moleworm; + } + + public void notifyHurt() { + if (this.lookForFriends == 0) { + this.lookForFriends = this.adjustedTickDelay(20); + } + } + + @Override + public boolean canUse() { + return this.lookForFriends > 0; + } + + @Override + public void tick() { + this.lookForFriends--; + if (this.lookForFriends > 0) { + return; + } + + Level level = this.moleworm.level(); + RandomSource random = this.moleworm.getRandom(); + BlockPos origin = this.moleworm.blockPosition(); + + for (BlockPos friendPos : BlockPos.betweenClosed(origin.offset(-5, -3, -5), origin.offset(5, 3, 5))) { + BlockState friendState = level.getBlockState(friendPos); + if (!isInfestedDirt(friendState)) { + continue; + } + + if (canMobGrief(level)) { + releaseFriend(level, friendPos.immutable(), friendState, this.moleworm); + } else { + BlockState hostState = hostStateByInfested(friendState); + if (hostState != null) { + level.setBlock(friendPos, hostState, 3); + } + } + + if (random.nextBoolean()) { + return; + } + } + } + + private static void releaseFriend(Level level, BlockPos infestedPos, BlockState infestedState, MolewormEntity source) { + BlockState hostState = hostStateByInfested(infestedState); + if (hostState == null) { + return; + } + + BlockPos emergencePos = findEmergencePos(level, infestedPos); + if (!(source.getType().create(level) instanceof MolewormEntity friend)) { + level.setBlock(infestedPos, hostState, 3); + return; + } + + if (emergencePos == null) { + friend.discard(); + level.setBlock(infestedPos, hostState, 3); + return; + } + + friend.moveTo( + emergencePos.getX() + 0.5D, + emergencePos.getY() + 0.05D, + emergencePos.getZ() + 0.5D, + level.random.nextFloat() * 360.0F, + 0.0F + ); + + if (!level.noCollision(friend)) { + friend.discard(); + level.setBlock(infestedPos, hostState, 3); + return; + } + + level.setBlock(infestedPos, hostState, 3); + level.addFreshEntity(friend); + level.playSound(null, emergencePos, AntarchySoundEvents.MOLEWORM_DIG.get(), net.minecraft.sounds.SoundSource.BLOCKS, 0.45F, 0.8F + level.random.nextFloat() * 0.25F); + level.addParticle( + net.minecraft.core.particles.ParticleTypes.POOF, + infestedPos.getX() + 0.5D, + infestedPos.getY() + 0.45D, + infestedPos.getZ() + 0.5D, + 0.0D, + 0.0D, + 0.0D + ); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirBoatEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirBoatEntity.java new file mode 100644 index 00000000..a0992b6c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirBoatEntity.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; + +public class NadirBoatEntity extends Boat { + public NadirBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(new ResourceLocation(Antarchy.MODID, "nadir_boat")); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirChestBoatEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirChestBoatEntity.java new file mode 100644 index 00000000..8352fb67 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirChestBoatEntity.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.entity.vehicle.ChestBoat; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; + +public class NadirChestBoatEntity extends ChestBoat { + public NadirChestBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(new ResourceLocation(Antarchy.MODID, "nadir_chest_boat")); + } +} 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 new file mode 100644 index 00000000..b43cc09e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java @@ -0,0 +1,692 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import net.minecraft.core.particles.DustParticleOptions; +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.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.*; +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.control.SmoothSwimmingMoveControl; +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.PathNavigation; +import net.minecraft.world.entity.ai.navigation.WaterBoundPathNavigation; +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.joml.Vector3f; +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.*; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.core.animation.AnimationState; +import com.craisinlord.antarchy.compat.geckolib.AutoPlayingSoundKeyframeHandlerCompat; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.List; +import java.util.Objects; + +public class OctopusBombEntity extends Monster implements GeoEntity { + private static final DustParticleOptions OCTOPUS_BOMB_INK_PARTICLE = + new DustParticleOptions(new Vector3f(0.02F, 0.02F, 0.02F), 1.2F); + + private static final EntityDataAccessor ATTACK_STATE = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor CAN_FLY = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.BOOLEAN); + + private static final int ATTACK_NONE = 0; + private static final int ATTACK_GRAB = 1; + private static final int ATTACK_SWIPE = 2; + + private static final int ANIM_IDLE = 0; + private static final int ANIM_SWIM = 2; + private static final int ANIM_SWIPE = 3; + private static final int ANIM_GRAB = 4; + private static final int ANIM_DEATH = 5; + + private static final int DEATH_ANIM_TICKS = 60; + private static final int INK_SPRAY_RANGE = 8; + private static final int INK_SPRAY_COOLDOWN = 80; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); + private static final RawAnimation SWIPE_ANIM = RawAnimation.begin().thenPlay("Swipe"); + private static final RawAnimation GRAB_ANIM = RawAnimation.begin().thenPlay("Grab"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("Death"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + // Squid-style wander + private float wanderDx, wanderDy, wanderDz; + private int wanderRetargetTicks; + + // Combat + private int attackCooldown; + private int actionTicks; + private int lastAttackState; + private int grabbedTargetId = -1; + private int strafeRetargetTicks; + private float orbitDirection = 1.0F; + private int inkSprayCooldown; + + // Kraken spawn flag + private boolean spawnedByKraken; + + // Explosive impact (fired from the R.P.O. Launcher) + private boolean explosiveImpact; + private java.util.UUID explosiveLauncherId; + private int explosiveArmTicks; + + public OctopusBombEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new SmoothSwimmingMoveControl(this, 80, 8, 0.06F, 0.12F, true); + this.xpReward = 15; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 100.0D) + .add(Attributes.ATTACK_DAMAGE, 16.0D) + .add(Attributes.MOVEMENT_SPEED, 0.28D) + .add(Attributes.FLYING_SPEED, 0.28D) + .add(Attributes.FOLLOW_RANGE, 32.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.4D); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, net.minecraft.core.BlockPos pos, RandomSource random) { + return level.getFluidState(pos).is(net.minecraft.tags.FluidTags.WATER) + && level.getFluidState(pos.above()).is(net.minecraft.tags.FluidTags.WATER); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ATTACK_STATE, ATTACK_NONE); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + this.entityData.define(CAN_FLY, false); + } + + @Override + public void onSyncedDataUpdated(EntityDataAccessor key) { + super.onSyncedDataUpdated(key); + if (CAN_FLY.equals(key)) { + this.moveControl = this.canFly() + ? new FlyingMoveControl(this, 20, true) + : new SmoothSwimmingMoveControl(this, 80, 8, 0.06F, 0.12F, true); + this.navigation = this.canFly() + ? new FlyingPathNavigation(this, this.level()) + : new WaterBoundPathNavigation(this, this.level()); + } + } + + @Override + protected void registerGoals() { + 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)); + } + + @Override + protected PathNavigation createNavigation(Level level) { + return new WaterBoundPathNavigation(this, level); + } + + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.octopusBombHealth()); + this.setHealth((float) com.craisinlord.antarchy.config.AntarchySettings.octopusBombHealth()); + Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.octopusBombAttackDamage()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .setSoundKeyframeHandler(AutoPlayingSoundKeyframeHandlerCompat.create()) + .triggerableAnim("Grab", GRAB_ANIM) + .triggerableAnim("Swipe", SWIPE_ANIM) + .triggerableAnim("Death", DEATH_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + return switch (this.getAnimationState()) { + case ANIM_GRAB -> state.setAndContinue(GRAB_ANIM); + case ANIM_SWIPE -> state.setAndContinue(SWIPE_ANIM); + case ANIM_SWIM -> state.setAndContinue(SWIM_ANIM); + case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); + default -> state.setAndContinue(IDLE_ANIM); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void baseTick() { + int airSupply = this.getAirSupply(); + super.baseTick(); + if (!this.canFly()) { + this.handleAirSupply(airSupply); + } else { + this.setAirSupply(this.getMaxAirSupply()); + } + } + + @Override + public void tick() { + super.tick(); + this.setNoGravity(this.isInWater() || this.canFly()); + + if (this.explosiveImpact && !this.level().isClientSide) { + this.explosiveArmTicks++; + if (this.explosiveArmTicks > 3 && (this.horizontalCollision || this.verticalCollision || this.isInWater() || this.hasHitExplosiveTarget())) { + this.detonateInkExplosion(); + return; + } + } + + if (this.level().isClientSide) { + this.updateSwimRotation(); + return; + } + + 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(); + + if (target == null || !target.isAlive()) { + this.resetCombatState(); + if (this.isInWater()) this.tickWanderMovement(); + this.updateSwimRotation(); + this.updateAnimationState(); + return; + } + + this.getLookControl().setLookAt(target, 25.0F, 20.0F); + + if (this.getAttackState() != ATTACK_NONE) { + this.tickCurrentAttack(target); + } else { + this.tickPursuitMovement(target); + if (this.attackCooldown <= 0) { + int nextAttack = this.chooseNextAttack(target); + if (nextAttack != ATTACK_NONE) { + this.startAttack(nextAttack); + } + } + } + + this.updateSwimRotation(); + this.updateAnimationState(); + } + + @Override + public void travel(Vec3 travelVector) { + if (this.isEffectiveAi() && (this.isInWater() || this.canFly())) { + this.moveRelative(this.getSpeed(), travelVector); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.setDeltaMovement(this.getDeltaMovement().scale(this.isInWater() ? 0.92D : 0.91D)); + return; + } + super.travel(travelVector); + } + + @Override + protected boolean shouldDespawnInPeaceful() { + return false; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + @Nullable + protected SoundEvent getAmbientSound() { + return null; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.KRAKEN_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.KRAKEN_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 1.2F; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt("AttackCooldown", this.attackCooldown); + tag.putInt("ActionTicks", this.actionTicks); + tag.putInt("LastAttackState", this.lastAttackState); + tag.putBoolean("CanFly", this.canFly()); + tag.putBoolean("SpawnedByKraken", this.spawnedByKraken); + if (this.grabbedTargetId >= 0) tag.putInt("GrabTarget", this.grabbedTargetId); + tag.putInt("AttackState", this.getAttackState()); + tag.putInt("AnimationState", this.getAnimationState()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.attackCooldown = tag.getInt("AttackCooldown"); + this.actionTicks = tag.getInt("ActionTicks"); + this.lastAttackState = tag.contains("LastAttackState") ? tag.getInt("LastAttackState") : ATTACK_NONE; + this.setCanFly(tag.getBoolean("CanFly")); + this.spawnedByKraken = tag.getBoolean("SpawnedByKraken"); + this.grabbedTargetId = tag.contains("GrabTarget") ? tag.getInt("GrabTarget") : -1; + this.entityData.set(ATTACK_STATE, tag.getInt("AttackState")); + this.entityData.set(ANIMATION_STATE, tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_IDLE); + } + + public boolean canFly() { + return this.entityData.get(CAN_FLY); + } + + public void setCanFly(boolean canFly) { + this.entityData.set(CAN_FLY, canFly); + } + + public int getAttackState() { + return this.entityData.get(ATTACK_STATE); + } + + public int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setAttackState(int state) { + this.entityData.set(ATTACK_STATE, state); + } + + private void setAnimationState(int state) { + if (this.entityData.get(ANIMATION_STATE) != state) { + this.entityData.set(ANIMATION_STATE, state); + String trigger = switch (state) { + case ANIM_GRAB -> "Grab"; + case ANIM_SWIPE -> "Swipe"; + case ANIM_DEATH -> "Death"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + } + } + + public void launchAsProjectile(net.minecraft.world.entity.Entity owner, Vec3 velocity) { + this.spawnedByKraken = true; + this.setCanFly(true); + this.setDeltaMovement(velocity); + } + + public void launchAsExplosiveProjectile(net.minecraft.world.entity.Entity launcher, Vec3 velocity) { + this.explosiveImpact = true; + this.explosiveLauncherId = launcher != null ? launcher.getUUID() : null; + this.setDeltaMovement(velocity); + this.hasImpulse = true; + } + + // ------------------------------------------------------------------------- + // Squid-style wander + // ------------------------------------------------------------------------- + + private void tickWanderMovement() { + if (--this.wanderRetargetTicks <= 0) { + this.wanderRetargetTicks = 40 + this.random.nextInt(40); + 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 + } + + // 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; + } + + this.setDeltaMovement(this.getDeltaMovement().add(this.wanderDx, dy, this.wanderDz)); + } + + // ------------------------------------------------------------------------- + // Ink spray + // ------------------------------------------------------------------------- + + private boolean hasHitExplosiveTarget() { + AABB box = this.getBoundingBox(); + return !this.level().getEntitiesOfClass(LivingEntity.class, box, + e -> e.isAlive() && e != this && !(e instanceof OctopusBombEntity) && !e.getUUID().equals(this.explosiveLauncherId)).isEmpty(); + } + + private void detonateInkExplosion() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + double radius = com.craisinlord.antarchy.config.AntarchySettings.rpoLauncherExplosionRadius(); + float damage = (float) com.craisinlord.antarchy.config.AntarchySettings.rpoLauncherExplosionDamage(); + AABB blastArea = this.getBoundingBox().inflate(radius); + for (LivingEntity victim : serverLevel.getEntitiesOfClass(LivingEntity.class, blastArea, + e -> e.isAlive() && !e.isSpectator())) { + double distance = Math.sqrt(victim.distanceToSqr(this)); + float falloff = (float) Mth.clamp(1.0D - distance / radius, 0.0D, 1.0D); + if (falloff <= 0.0F) { + continue; + } + + victim.hurt(AntarchyDamageSources.rpoLauncherBlast(serverLevel, this), damage * falloff); + Vec3 knockback = victim.position().subtract(this.position()); + if (knockback.lengthSqr() > 1.0E-4D) { + Vec3 normalized = knockback.normalize().scale(0.6D * falloff); + victim.push(normalized.x, 0.4D * falloff, normalized.z); + } + victim.hurtMarked = true; + } + + serverLevel.playSound(null, this.getX(), this.getY(), this.getZ(), + net.minecraft.sounds.SoundEvents.GENERIC_EXPLODE, net.minecraft.sounds.SoundSource.HOSTILE, 2.0F, 0.9F); + serverLevel.sendParticles(OCTOPUS_BOMB_INK_PARTICLE, this.getX(), this.getY(), this.getZ(), 125, radius * 0.5D, radius * 0.5D, radius * 0.5D, 0.1D); + serverLevel.sendParticles(OCTOPUS_BOMB_INK_PARTICLE, this.getX(), this.getY(), this.getZ(), 75, radius * 0.2D, radius * 0.2D, radius * 0.2D, 0.2D); + serverLevel.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY(), this.getZ(), 4, 0.5D, 0.5D, 0.5D, 0.0D); + this.discard(); + } + + private void tickInkSpray() { + if (this.inkSprayCooldown > 0 || !(this.level() instanceof ServerLevel serverLevel)) return; + + Player nearbyPlayer = this.level().getNearestPlayer(this, INK_SPRAY_RANGE); + if (nearbyPlayer == null || nearbyPlayer.isCreative() || nearbyPlayer.isSpectator()) return; + + this.inkSprayCooldown = INK_SPRAY_COOLDOWN; + this.playSound(AntarchySoundEvents.KRAKEN_HURT.get(), 1.0F, 1.49F); + + double cx = this.getX(); + double cy = this.getY() + this.getBbHeight() * 0.5D; + double cz = this.getZ(); + serverLevel.sendParticles(OCTOPUS_BOMB_INK_PARTICLE, cx, cy, cz, 60, 2.0D, 1.2D, 2.0D, 0.04D); + serverLevel.sendParticles(OCTOPUS_BOMB_INK_PARTICLE, cx, cy, cz, 30, 3.5D, 1.8D, 3.5D, 0.02D); + } + + // ------------------------------------------------------------------------- + // Combat + // ------------------------------------------------------------------------- + + private void tickPursuitMovement(LivingEntity target) { + if (this.strafeRetargetTicks-- <= 0) { + this.strafeRetargetTicks = 10 + this.random.nextInt(12); + if (this.random.nextFloat() < 0.4F) this.orbitDirection *= -1.0F; + } + Vec3 attackPoint = this.createCombatTarget(target); + this.getMoveControl().setWantedPosition(attackPoint.x, attackPoint.y, attackPoint.z, 1.1D); + } + + private Vec3 createCombatTarget(LivingEntity target) { + double radius = 9.0D; + double angle = this.tickCount * 0.16D * this.orbitDirection + this.getId() * 0.11D; + double x = target.getX() + Math.cos(angle) * radius; + double z = target.getZ() + Math.sin(angle) * radius; + double y = Mth.clamp( + target.getY() + 1.0D + Math.sin((this.tickCount + this.getId()) * 0.18D), + target.getY() - 3.0D, + target.getY() + 4.0D + ); + return new Vec3(x, y, z); + } + + private void tickCurrentAttack(LivingEntity target) { + this.getNavigation().stop(); + this.getLookControl().setLookAt(target, 30.0F, 25.0F); + this.setDeltaMovement(this.getDeltaMovement().scale(0.8D)); + + switch (this.getAttackState()) { + case ATTACK_GRAB -> this.tickGrabAttack(target); + case ATTACK_SWIPE -> this.tickSwipeAttack(); + default -> this.finishAttack(); + } + } + + private void startAttack(int attackState) { + this.setAttackState(attackState); + this.grabbedTargetId = -1; + if (attackState == ATTACK_GRAB) { + this.actionTicks = 55; + this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.2F, 1.07F); + } else if (attackState == ATTACK_SWIPE) { + this.actionTicks = 40; + this.playSound(AntarchySoundEvents.KRAKEN_SPIN.get(), 1.1F, 1.13F); + } + } + + private void tickGrabAttack(LivingEntity target) { + if (this.actionTicks == 48 && this.distanceToSqr(target) <= 42.25D) { + this.grabbedTargetId = target.getId(); + } + + LivingEntity grabbed = this.getGrabbedTarget(); + if (grabbed != null && grabbed.isAlive()) { + this.holdGrabbedTarget(grabbed); + if (this.actionTicks <= 45 && this.actionTicks > 10 && this.actionTicks % 10 == 0) { + if (this.level() instanceof ServerLevel serverLevel) { + grabbed.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), 4.0F); + } + } + } + + if (--this.actionTicks <= 0) { + if (grabbed != null && grabbed.isAlive()) this.pullDown(grabbed, 2.5D); + this.grabbedTargetId = -1; + this.finishAttack(); + } + } + + private void tickSwipeAttack() { + if (this.actionTicks == 10) this.performSwipe(); + if (--this.actionTicks <= 0) this.finishAttack(); + } + + private void finishAttack() { + int finished = this.getAttackState(); + this.setAttackState(ATTACK_NONE); + this.actionTicks = 0; + this.attackCooldown = 18; + this.grabbedTargetId = -1; + this.lastAttackState = finished; + } + + private int chooseNextAttack(LivingEntity target) { + double distSqr = this.distanceToSqr(target); + boolean canGrab = distSqr <= 42.25D; + boolean canSwipe = distSqr <= 81.0D && this.isTargetInFront(target, -0.15D); + if (!canGrab && !canSwipe) return ATTACK_NONE; + + int grabWeight = canGrab ? (this.lastAttackState == ATTACK_GRAB ? 1 : 4) : 0; + int swipeWeight = canSwipe ? (this.lastAttackState == ATTACK_SWIPE ? 1 : 5) : 0; + int total = grabWeight + swipeWeight; + if (total == 0) return ATTACK_NONE; + + int roll = this.random.nextInt(total); + return roll < grabWeight ? ATTACK_GRAB : ATTACK_SWIPE; + } + + private void performSwipe() { + AABB hitBox = this.getBoundingBox().inflate(7.0D, 3.0D, 7.0D); + List players = this.level().getEntitiesOfClass(Player.class, hitBox, + p -> p.isAlive() && this.isTargetInFront(p, -0.15D)); + float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE); + for (Player player : players) { + if (this.level() instanceof ServerLevel serverLevel) { + player.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), damage); + Vec3 dir = player.position().subtract(this.position()); + Vec3 horizontal = new Vec3(dir.x, 0.0D, dir.z).normalize().scale(1.75D); + player.push(horizontal.x, 0.3D, horizontal.z); + player.hurtMarked = true; + } + } + } + + private void holdGrabbedTarget(LivingEntity target) { + Vec3 anchor = this.position().add(0.0D, -this.getBbHeight() * 0.4D, 0.0D); + target.setDeltaMovement(anchor.subtract(target.position()).scale(0.35D)); + target.resetFallDistance(); + if (target instanceof ServerPlayer sp) { + sp.connection.teleport(anchor.x, anchor.y, anchor.z, target.getYRot(), target.getXRot()); + } else { + target.moveTo(anchor.x, anchor.y, anchor.z, target.getYRot(), target.getXRot()); + } + target.hurtMarked = true; + } + + private void pullDown(LivingEntity target, double strength) { + target.push(0.0D, -strength, 0.0D); + target.hurtMarked = true; + } + + @Nullable + private LivingEntity getGrabbedTarget() { + if (this.grabbedTargetId < 0) return null; + net.minecraft.world.entity.Entity e = this.level().getEntity(this.grabbedTargetId); + return e instanceof LivingEntity le ? le : null; + } + + private boolean isTargetInFront(LivingEntity target, double minDot) { + Vec3 forward = this.getViewVector(1.0F); + Vec3 toTarget = target.position().subtract(this.position()).normalize(); + return forward.dot(toTarget) >= minDot; + } + + private void resetCombatState() { + this.setAttackState(ATTACK_NONE); + this.setTarget(null); + this.actionTicks = 0; + this.grabbedTargetId = -1; + } + + private void handleAirSupply(int previousAirSupply) { + if (this.isInWaterOrBubble()) { + this.setAirSupply(this.getMaxAirSupply()); + return; + } + this.setAirSupply(previousAirSupply - 1); + if (this.getAirSupply() <= -20) { + this.setAirSupply(0); + this.hurt(this.damageSources().drown(), 2.0F); + } + } + + private void updateSwimRotation() { + 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, 6.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, 4.0F)); + } + } + + private void updateAnimationState() { + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + switch (this.getAttackState()) { + case ATTACK_GRAB -> { this.setAnimationState(ANIM_GRAB); return; } + case ATTACK_SWIPE -> { this.setAnimationState(ANIM_SWIPE); return; } + default -> {} + } + if (!this.isInWater()) { + this.setAnimationState(ANIM_SWIM); + return; + } + Vec3 vel = this.getDeltaMovement(); + double hSqr = vel.horizontalDistanceSqr(); + double vSqr = vel.y * vel.y; + if (hSqr > 0.03D && hSqr > vSqr * 2.5D) { + this.setAnimationState(ANIM_SWIM); + return; + } + this.setAnimationState(ANIM_IDLE); + } + + @Override + public void die(DamageSource damageSource) { + if (!this.level().isClientSide) { + this.setAnimationState(ANIM_DEATH); + this.setAttackState(ATTACK_NONE); + this.setDeltaMovement(Vec3.ZERO); + this.getNavigation().stop(); + } + super.die(damageSource); + } + + @Override + protected void tickDeath() { + this.deathTime++; + if (this.deathTime == 1) this.setAnimationState(ANIM_DEATH); + if (this.deathTime >= DEATH_ANIM_TICKS) { + this.remove(RemovalReason.KILLED); + this.dropExperience(); + } + } + + // ------------------------------------------------------------------------- + // Inner goal: only target players when spawned by Kraken in fly mode + // ------------------------------------------------------------------------- + + private static final class KrakenSummonTargetGoal extends NearestAttackableTargetGoal { + private final OctopusBombEntity octopus; + + KrakenSummonTargetGoal(OctopusBombEntity octopus) { + super(octopus, Player.class, true); + this.octopus = octopus; + } + + @Override + public boolean canUse() { + return this.octopus.spawnedByKraken && this.octopus.canFly() && super.canUse(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodBoatEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodBoatEntity.java new file mode 100644 index 00000000..365d3688 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodBoatEntity.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; + +public class OuranwoodBoatEntity extends Boat { + public OuranwoodBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(new ResourceLocation(Antarchy.MODID, "ouranwood_boat")); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodChestBoatEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodChestBoatEntity.java new file mode 100644 index 00000000..3d5d2fb5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodChestBoatEntity.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.entity.vehicle.ChestBoat; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; + +public class OuranwoodChestBoatEntity extends ChestBoat { + public OuranwoodChestBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(new ResourceLocation(Antarchy.MODID, "ouranwood_chest_boat")); + } +} 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 new file mode 100644 index 00000000..4c10a41e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java @@ -0,0 +1,305 @@ +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 java.util.EnumSet; +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.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +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.FollowParentGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.PanicGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.TemptGoal; +import net.minecraft.world.entity.ai.util.DefaultRandomPos; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.phys.Vec3; +import net.minecraft.server.level.ServerLevel; +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 OuranwoodDeerEntity extends Animal implements GeoEntity { + public enum Variant { BUCK, DOE } + + private static final EntityDataAccessor VARIANT = + SynchedEntityData.defineId(OuranwoodDeerEntity.class, EntityDataSerializers.INT); + private static final String VARIANT_KEY = "Variant"; + + private static final float ADULT_HITBOX_WIDTH = 1.0F; + private static final float ADULT_HITBOX_HEIGHT = 2.0F; + private static final float BABY_HITBOX_WIDTH = 0.5F; + private static final float BABY_HITBOX_HEIGHT = 1.0F; + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation RUN_ANIM = RawAnimation.begin().thenLoop("run"); + private static final String QUIRK_CONTROLLER = "quirk_controller"; + private static final String QUIRK_TRIGGER = "quirk"; + + private static final double WALK_SPEED_THRESHOLD_SQR = 0.0009D; + private static final double RUN_SPEED_THRESHOLD_SQR = 0.0035D; + private static final double WALK_STROLL_SPEED = 1.0D; + private static final double RUN_STROLL_SPEED = 1.45D; + + private static final int MIN_QUIRK_COOLDOWN = 20 * 8; + private static final int MAX_QUIRK_COOLDOWN = 20 * 25; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int quirkCooldown = createQuirkCooldown(); + + public OuranwoodDeerEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public static AttributeSupplier.Builder createAttributes() { + return net.minecraft.world.entity.Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.ouranwoodDeerHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.3D) + .add(Attributes.FOLLOW_RANGE, 24.0D); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(VARIANT, Variant.DOE.ordinal()); + } + + public Variant getVariant() { + return Variant.values()[Mth.clamp(this.entityData.get(VARIANT), 0, Variant.values().length - 1)]; + } + + public void setVariant(Variant variant) { + this.entityData.set(VARIANT, variant.ordinal()); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new PanicGoal(this, 1.8D)); + this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); + this.goalSelector.addGoal(3, new TemptGoal(this, 1.1D, Ingredient.of(AntarchyTags.Items.OURANWOOD_DEER_FOOD), false)); + this.goalSelector.addGoal(4, new net.minecraft.world.entity.ai.goal.AvoidEntityGoal<>(this, Monster.class, 8.0F, 1.1D, 1.5D)); + this.goalSelector.addGoal(5, new FollowParentGoal(this, 1.25D)); + this.goalSelector.addGoal(6, new OuranwoodDeerStrollGoal()); + this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(AntarchyTags.Items.OURANWOOD_DEER_FOOD); + } + + @Override + public OuranwoodDeerEntity getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return AntarchyObjects.OURANWOOD_DEER.get().create(level); + } + + @Override + public void tick() { + super.tick(); + + if (this.quirkCooldown > 0) { + this.quirkCooldown--; + } + + if (this.level().isClientSide) { + return; + } + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putString(VARIANT_KEY, this.getVariant().name()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.contains(VARIANT_KEY)) { + try { + this.setVariant(Variant.valueOf(tag.getString(VARIANT_KEY))); + } catch (IllegalArgumentException ignored) { + this.setVariant(Variant.DOE); + } + } + } + + @Override + @Nullable + 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); + + if (spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION || spawnReason == MobSpawnType.SPAWN_EGG) { + this.setVariant(Variant.values()[this.random.nextInt(Variant.values().length)]); + } + + if ((spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION)) { + if (deerSpawnData.adultSpawned) { + this.setAge(-24000); + } else { + deerSpawnData.adultSpawned = true; + } + } + + return result != null ? result : deerSpawnData; + } + + @Override + public net.minecraft.world.entity.EntityDimensions getDimensions(net.minecraft.world.entity.Pose pose) { + if (this.isBaby()) { + return net.minecraft.world.entity.EntityDimensions.scalable(BABY_HITBOX_WIDTH, BABY_HITBOX_HEIGHT); + } + return net.minecraft.world.entity.EntityDimensions.scalable( + ADULT_HITBOX_WIDTH, + ADULT_HITBOX_HEIGHT + ); + } + + @Override + protected void ageBoundaryReached() { + super.ageBoundaryReached(); + this.refreshDimensions(); + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.FOX_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.FOX_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.FOX_DEATH; + } + + @Override + protected float getSoundVolume() { + return 0.8F; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, QUIRK_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(QUIRK_TRIGGER, RawAnimation.begin().thenPlay("quirk"))); + } + + private PlayState mainAnimController(AnimationState state) { + double speedSqr = this.getDeltaMovement().horizontalDistanceSqr(); + if (this.hurtTime > 0 || speedSqr > RUN_SPEED_THRESHOLD_SQR) { + return state.setAndContinue(RUN_ANIM); + } + if (speedSqr > WALK_SPEED_THRESHOLD_SQR) { + return state.setAndContinue(WALK_ANIM); + } + + if (this.quirkCooldown <= 0) { + this.quirkCooldown = this.createQuirkCooldown(); + this.triggerAnim(QUIRK_CONTROLLER, QUIRK_TRIGGER); + } + + return state.setAndContinue(IDLE_ANIM); + } + + private int createQuirkCooldown() { + return MIN_QUIRK_COOLDOWN + this.random.nextInt(MAX_QUIRK_COOLDOWN - MIN_QUIRK_COOLDOWN + 1); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + private static final class DeerSpawnData implements SpawnGroupData { + private boolean adultSpawned; + } + + private final class OuranwoodDeerStrollGoal extends Goal { + private static final int RUN_CHANCE = 5; + @Nullable + private Vec3 targetPos; + private double speedModifier; + + private OuranwoodDeerStrollGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + if (OuranwoodDeerEntity.this.isVehicle() || !OuranwoodDeerEntity.this.getNavigation().isDone()) { + return false; + } + if (OuranwoodDeerEntity.this.getRandom().nextInt(reducedTickDelay(60)) != 0) { + return false; + } + + this.targetPos = DefaultRandomPos.getPos(OuranwoodDeerEntity.this, 10, 7); + if (this.targetPos == null) { + return false; + } + + this.speedModifier = this.pickSpeed(); + return true; + } + + @Override + public boolean canContinueToUse() { + return this.targetPos != null && !OuranwoodDeerEntity.this.getNavigation().isDone(); + } + + @Override + public void start() { + if (this.targetPos != null) { + OuranwoodDeerEntity.this.getNavigation().moveTo(this.targetPos.x, this.targetPos.y, this.targetPos.z, this.speedModifier); + } + } + + @Override + public void stop() { + this.targetPos = null; + } + + private double pickSpeed() { + if (OuranwoodDeerEntity.this.hurtTime > 0) { + return RUN_STROLL_SPEED; + } + return OuranwoodDeerEntity.this.random.nextInt(RUN_CHANCE) == 0 ? RUN_STROLL_SPEED : WALK_STROLL_SPEED; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/PeachBoatEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/PeachBoatEntity.java new file mode 100644 index 00000000..734fa8db --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/PeachBoatEntity.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; + +public class PeachBoatEntity extends Boat { + public PeachBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(new ResourceLocation(Antarchy.MODID, "peach_boat")); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/PeachChestBoatEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/PeachChestBoatEntity.java new file mode 100644 index 00000000..f1f5e848 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/PeachChestBoatEntity.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.entity.vehicle.ChestBoat; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; + +public class PeachChestBoatEntity extends ChestBoat { + public PeachChestBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(new ResourceLocation(Antarchy.MODID, "peach_chest_boat")); + } +} 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 new file mode 100644 index 00000000..ae691805 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java @@ -0,0 +1,1238 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchySettings; +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 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 java.util.EnumSet; +import java.util.List; +import java.util.UUID; +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; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +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.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.tags.DamageTypeTags; +import net.minecraft.world.damagesource.DamageTypes; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.PathfinderMob; +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.Goal; +import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.animal.FlyingAnimal; +import net.minecraft.world.entity.monster.Enemy; +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.world.level.LevelReader; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.pathfinder.BlockPathTypes; +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 ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEntity { + private static final EntityDataAccessor MOOD = + SynchedEntityData.defineId(ReverieEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ANIMATION_STATE = + SynchedEntityData.defineId(ReverieEntity.class, EntityDataSerializers.INT); + private static final ResourceKey THORAXIS_DIMENSION = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "thoraxis") + ); + + private static final String FOCUS_PLAYER_KEY = "FocusPlayer"; + private static final String NOTICE_PLAYER_KEY = "NoticePlayer"; + private static final String MOOD_KEY = "Mood"; + private static final String NOTICE_TICKS_KEY = "NoticeTicks"; + private static final String INTEREST_TICKS_KEY = "InterestTicks"; + private static final String DAMAGE_REACTION_TICKS_KEY = "DamageReactionTicks"; + private static final String DUPLICATION_COOLDOWN_KEY = "DuplicationCooldownTicks"; + private static final String REBIND_COOLDOWN_TICKS_KEY = "RebindCooldownTicks"; + private static final ResourceLocation HEY_LISTEN_ADVANCEMENT = + new ResourceLocation(Antarchy.MODID, "hey_listen"); + private static final ResourceKey POISON_DAMAGE_TYPE = ResourceKey.create( + Registries.DAMAGE_TYPE, + new ResourceLocation("minecraft", "poison") + ); + + private static final int ANIM_IDLE = 0; + private static final int ANIM_FLY = 1; + private static final int PURPLE_SUPPORT_SCAN_RANGE = 7; + private static final int INVERSION_REACTION_TICKS = 200; + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + @Nullable private UUID focusPlayerUuid; + @Nullable private Player cachedFocusPlayer; + @Nullable private UUID noticedPlayerUuid; + @Nullable private Player cachedNoticedPlayer; + @Nullable private Vec3 ambientTarget; + + private int noticeTicks; + private int interestTicks; + private int damageReactionTicks; + private int duplicationCooldownTicks; + private int movementPulseCooldown; + private int ambientTargetAge; + private int warningCycleTicks; + private int rebindCooldownTicks; + private int inversionReactionTicks; + private boolean pendingJoinSound; + private Mood pendingMoodSound; + private int pendingMoodSoundTicks; + private boolean trackedFocusInverted; + private boolean trackedFocusInvertedInitialized; + + private int nextNoticeScanTick; + private int nextDuplicationScanTick; + private int nextThreatScanTick; + private int nextFallCheckTick; + private boolean cachedIsFallingDangerously; + @Nullable private LivingEntity cachedWarningThreat; + + private final double cfgInterestRadius; + private final double cfgAbandonDistance; + private final int cfgNoticeDuration; + private final int cfgInterestDuration; + private final int cfgRebindCooldown; + private final int cfgDuplicationCooldown; + private final double cfgDangerousFallSpeed; + private final double cfgDangerousFallDistance; + private final double cfgWarningThreatRadius; + private final double cfgWarningThreatVerticalRange; + private final int cfgWarningApproachTicks; + private final int cfgWarningHoverTicks; + private final int cfgWarningReturnTicks; + private final int cfgWarningPlayerHoverTicks; + private final double cfgCatchUpDistance; + private final double cfgFollowMinDistance; + private final double cfgFollowMaxDistance; + private final double cfgAmbientMinRadius; + private final double cfgAmbientMaxRadius; + private final double cfgAmbientVerticalRange; + private final int cfgAmbientMaxAgeTicks; + private final int cfgAmbientPulseMinTicks; + private final int cfgAmbientPulseMaxTicks; + + public ReverieEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new FlyingMoveControl(this, 20, true); + this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, -1.0F); + this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); + this.setPathfindingMalus(BlockPathTypes.WATER_BORDER, 16.0F); + this.setPathfindingMalus(BlockPathTypes.LEAVES, -1.0F); + this.setPathfindingMalus(BlockPathTypes.FENCE, -1.0F); + this.xpReward = 0; + this.setNoGravity(true); + this.noPhysics = true; + this.cfgInterestRadius = AntarchySettings.reverieInterestRadius(); + this.cfgAbandonDistance = AntarchySettings.reverieAbandonPlayerDistance(); + this.cfgNoticeDuration = AntarchySettings.reverieNoticeDurationTicks(); + this.cfgInterestDuration = AntarchySettings.reverieInterestDurationTicks(); + this.cfgRebindCooldown = AntarchySettings.reverieRebindCooldownTicks(); + this.cfgDuplicationCooldown = AntarchySettings.reverieDuplicationCooldownTicks(); + this.cfgDangerousFallSpeed = AntarchySettings.reverieDangerousFallSpeed(); + this.cfgDangerousFallDistance = AntarchySettings.reverieDangerousFallDistance(); + this.cfgWarningThreatRadius = AntarchySettings.reverieWarningThreatRadius(); + this.cfgWarningThreatVerticalRange = AntarchySettings.reverieWarningThreatVerticalRange(); + this.cfgWarningApproachTicks = AntarchySettings.reverieWarningApproachTicks(); + this.cfgWarningHoverTicks = AntarchySettings.reverieWarningHoverTicks(); + this.cfgWarningReturnTicks = AntarchySettings.reverieWarningReturnTicks(); + this.cfgWarningPlayerHoverTicks = AntarchySettings.reverieWarningPlayerHoverTicks(); + this.cfgCatchUpDistance = AntarchySettings.reverieCatchUpDistance(); + this.cfgFollowMinDistance = AntarchySettings.reveriePreferredFollowMinDistance(); + this.cfgFollowMaxDistance = AntarchySettings.reveriePreferredFollowMaxDistance(); + this.cfgAmbientMinRadius = AntarchySettings.reverieAmbientTargetMinRadius(); + this.cfgAmbientMaxRadius = AntarchySettings.reverieAmbientTargetMaxRadius(); + this.cfgAmbientVerticalRange = AntarchySettings.reverieAmbientTargetVerticalRange(); + this.cfgAmbientMaxAgeTicks = AntarchySettings.reverieAmbientTargetMaxAgeTicks(); + this.cfgAmbientPulseMinTicks = AntarchySettings.reverieAmbientPulseIntervalMinTicks(); + this.cfgAmbientPulseMaxTicks = AntarchySettings.reverieAmbientPulseIntervalMaxTicks(); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.reverieHealth()) + .add(Attributes.FLYING_SPEED, 0.45D) + .add(Attributes.MOVEMENT_SPEED, 0.2D) + .add(Attributes.FOLLOW_RANGE, 32.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; + } + + return level.getLevel().dimension().equals(THORAXIS_DIMENSION) + && level.getBlockState(pos).isAir() + && level.getFluidState(pos).isEmpty() + && Mob.checkMobSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new ReverieBoundGoal()); + this.goalSelector.addGoal(2, new ReverieAmbientGoal()); + } + + @Override + protected PathNavigation createNavigation(Level level) { + FlyingPathNavigation navigation = new FlyingPathNavigation(this, level) { + @Override + public boolean isStableDestination(BlockPos pos) { + return this.level.getBlockState(pos).isAir(); + } + }; + navigation.setCanOpenDoors(false); + navigation.setCanFloat(false); + navigation.setCanPassDoors(true); + return navigation; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(MOOD, Mood.WHITE.ordinal()); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + return this.getAnimationState() == ANIM_IDLE + ? state.setAndContinue(IDLE_ANIM) + : state.setAndContinue(FLY_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + + if (this.level().isClientSide) { + this.tickClientEffects(); + return; + } + + if (this.duplicationCooldownTicks > 0) { + this.duplicationCooldownTicks--; + } + if (this.rebindCooldownTicks > 0) { + this.rebindCooldownTicks--; + } + if (this.damageReactionTicks > 0) { + this.damageReactionTicks--; + } + if (this.noticeTicks > 0) { + this.noticeTicks--; + } + if (this.movementPulseCooldown > 0) { + this.movementPulseCooldown--; + } + if (this.inversionReactionTicks > 0) { + this.inversionReactionTicks--; + } + this.tickPendingMoodSound(); + + this.tickNoticeAndFocus(); + this.tickInterestTimer(); + Player focus = this.getFocusPlayer(); + if (focus != null) { + this.syncFocusInversionState(focus); + } + this.tickMoodAndSupport(); + this.tickLookTarget(); + this.applyPassiveDriftDamping(); + this.updateAnimationState(); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.isImmuneToSource(source)) { + return false; + } + + boolean hurt = super.hurt(source, amount); + if (hurt && !this.level().isClientSide) { + this.releaseFocus(); + this.clearNoticePlayer(); + this.ambientTarget = null; + this.damageReactionTicks = 0; + this.inversionReactionTicks = 0; + this.transitionToMood(Mood.WHITE); + } + return hurt; + } + + private boolean isImmuneToSource(DamageSource source) { + return source.is(DamageTypeTags.IS_FIRE) + || source.is(DamageTypes.IN_WALL) + || source.is(DamageTypes.WITHER) + || source.is(POISON_DAMAGE_TYPE); + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (stack.is(Items.GLASS_BOTTLE)) { + return this.captureIntoBottle(player, hand); + } + + if (!stack.is(AntarchyTags.Items.REVERIE_DUPLICATION_ITEMS)) { + return super.mobInteract(player, hand); + } + + if (this.level().isClientSide) { + return InteractionResult.SUCCESS; + } + + if (!(this.level() instanceof ServerLevel serverLevel)) { + return InteractionResult.PASS; + } + + if (this.duplicationCooldownTicks > 0) { + return InteractionResult.CONSUME; + } + + ReverieEntity duplicate = AntarchyObjects.REVERIE.get().create(serverLevel); + if (duplicate == null) { + return InteractionResult.PASS; + } + + duplicate.moveTo( + this.getX() + (this.random.nextDouble() - 0.5D) * 1.5D, + this.getY() + 0.25D, + this.getZ() + (this.random.nextDouble() - 0.5D) * 1.5D, + this.getYRot(), + this.getXRot() + ); + duplicate.setDeltaMovement(this.getDeltaMovement().scale(0.25D).add(0.0D, 0.08D, 0.0D)); + serverLevel.addFreshEntity(duplicate); + this.duplicationCooldownTicks = this.cfgDuplicationCooldown; + duplicate.duplicationCooldownTicks = this.cfgDuplicationCooldown; + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + return InteractionResult.CONSUME; + } + + private InteractionResult captureIntoBottle(Player player, InteractionHand hand) { + if (this.level().isClientSide) { + return InteractionResult.SUCCESS; + } + + if (!(this.level() instanceof ServerLevel serverLevel)) { + return InteractionResult.PASS; + } + + ItemStack reverieBottle = new ItemStack(AntarchyObjects.REVERIE_BOTTLE.get()); + CompoundTag tag = new CompoundTag(); + this.saveWithoutId(tag); + tag.remove("UUID"); + tag.remove("Pos"); + tag.remove("Motion"); + tag.remove("Rotation"); + tag.remove("FallDistance"); + tag.remove("OnGround"); + tag.remove("Dimension"); + tag.remove("Passengers"); + tag.remove("PortalCooldown"); + + reverieBottle.getOrCreateTag().put("StoredReverie", tag); + if (this.hasCustomName()) { + reverieBottle.setHoverName(this.getCustomName()); + } + + ItemStack heldStack = player.getItemInHand(hand); + if (player.getAbilities().instabuild || heldStack.getCount() <= 1) { + player.setItemInHand(hand, reverieBottle); + } else { + heldStack.shrink(1); + if (!player.getInventory().add(reverieBottle)) { + player.drop(reverieBottle, false); + } + } + + serverLevel.playSound(null, this.blockPosition(), net.minecraft.sounds.SoundEvents.BOTTLE_FILL, net.minecraft.sounds.SoundSource.PLAYERS, 1.0F, 1.0F); + this.discard(); + return InteractionResult.CONSUME; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + protected void checkFallDamage(double distance, boolean onGround, BlockState state, BlockPos pos) { + } + + @Override + protected void jumpInLiquid(net.minecraft.tags.TagKey fluidTag) { + this.setDeltaMovement(this.getDeltaMovement().add(0.0D, 0.01D, 0.0D)); + } + + @Override + public boolean isFlying() { + return !this.onGround(); + } + + @Override + public boolean isPushable() { + return false; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return this.getFocusPlayer() == null && super.removeWhenFarAway(distanceToClosestPlayer); + } + + public Mood getMood() { + return Mood.byOrdinal(this.entityData.get(MOOD)); + } + + public boolean isPurpleMood() { + return this.getMood() == Mood.PURPLE; + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.REVERIE_IDLE.get(); + } + + @Override + public int getAmbientSoundInterval() { + return super.getAmbientSoundInterval() * 4; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.REVERIE_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return null; + } + + @Override + public float getWalkTargetValue(BlockPos pos, LevelReader level) { + return level.getBlockState(pos).isAir() ? 10.0F : 0.0F; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(MOOD_KEY, this.getMood().ordinal()); + tag.putInt(NOTICE_TICKS_KEY, this.noticeTicks); + tag.putInt(INTEREST_TICKS_KEY, this.interestTicks); + tag.putInt(DAMAGE_REACTION_TICKS_KEY, this.damageReactionTicks); + tag.putInt(DUPLICATION_COOLDOWN_KEY, this.duplicationCooldownTicks); + tag.putInt(REBIND_COOLDOWN_TICKS_KEY, this.rebindCooldownTicks); + if (this.focusPlayerUuid != null) { + tag.putUUID(FOCUS_PLAYER_KEY, this.focusPlayerUuid); + } + if (this.noticedPlayerUuid != null) { + tag.putUUID(NOTICE_PLAYER_KEY, this.noticedPlayerUuid); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.setMoodRaw(Mood.byOrdinal(tag.getInt(MOOD_KEY))); + this.noticeTicks = tag.getInt(NOTICE_TICKS_KEY); + this.interestTicks = tag.getInt(INTEREST_TICKS_KEY); + this.damageReactionTicks = tag.getInt(DAMAGE_REACTION_TICKS_KEY); + this.duplicationCooldownTicks = tag.getInt(DUPLICATION_COOLDOWN_KEY); + this.rebindCooldownTicks = tag.getInt(REBIND_COOLDOWN_TICKS_KEY); + this.focusPlayerUuid = tag.hasUUID(FOCUS_PLAYER_KEY) ? tag.getUUID(FOCUS_PLAYER_KEY) : null; + this.noticedPlayerUuid = tag.hasUUID(NOTICE_PLAYER_KEY) ? tag.getUUID(NOTICE_PLAYER_KEY) : null; + this.cachedFocusPlayer = null; + this.cachedNoticedPlayer = null; + } + + private void tickNoticeAndFocus() { + Player shardHolder = this.findDuplicationItemHolder(); + if (shardHolder != null) { + boolean wasDifferentFocus = this.getFocusPlayer() == null || !shardHolder.getUUID().equals(this.focusPlayerUuid); + this.setFocusPlayer(shardHolder); + this.clearNoticePlayer(); + this.warningCycleTicks = 0; + this.interestTicks = this.cfgInterestDuration; + this.pendingJoinSound = wasDifferentFocus; + if (wasDifferentFocus) { + this.awardJoinAdvancement(shardHolder); + } + this.transitionToMood(Mood.YELLOW); + return; + } + + Player focus = this.getFocusPlayer(); + if (focus != null && !this.isValidBoundPlayer(focus)) { + this.releaseFocus(); + focus = null; + } + + if (focus != null) { + this.clearNoticePlayer(); + return; + } + + Player noticed = this.getNoticedPlayer(); + if (!this.isValidNoticePlayer(noticed)) { + this.clearNoticePlayer(); + noticed = null; + } + + if (noticed == null) { + if (this.rebindCooldownTicks > 0) { + this.clearNoticePlayer(); + return; + } + Player nearby = this.findNoticeCandidate(); + if (nearby != null) { + this.setNoticedPlayer(nearby); + this.noticeTicks = this.cfgNoticeDuration; + } + return; + } + + if (this.noticeTicks <= 0) { + boolean wasUnbound = this.getFocusPlayer() == null; + this.setFocusPlayer(noticed); + this.clearNoticePlayer(); + this.warningCycleTicks = 0; + this.pendingJoinSound = wasUnbound; + if (wasUnbound) { + this.awardJoinAdvancement(noticed); + } + this.transitionToMood(Mood.YELLOW); + } + } + + private void tickInterestTimer() { + if (this.getFocusPlayer() == null) { + this.interestTicks = 0; + return; + } + + if (this.interestTicks > 0) { + this.interestTicks--; + } + + if (this.interestTicks <= 0) { + this.releaseFocus(); + this.transitionToMood(Mood.WHITE); + } + } + + private void tickMoodAndSupport() { + Player focus = this.getFocusPlayer(); + Mood desiredMood = this.getDesiredMood(focus); + this.transitionToMood(desiredMood); + + if (desiredMood == Mood.RED) { + this.warningCycleTicks++; + } else { + this.warningCycleTicks = 0; + } + + if (desiredMood == Mood.PURPLE && focus != null && !this.shouldSuppressSlowFalling(focus)) { + focus.addEffect(new MobEffectInstance(MobEffects.SLOW_FALLING, 100, 0, false, true, true)); + } + } + + private Mood getDesiredMood(@Nullable Player focus) { + if (focus == null) { + return Mood.WHITE; + } + if (this.shouldSuppressSlowFalling(focus)) { + if (this.isPlayerTakingDamage(focus)) { + return Mood.BLUE; + } + if (this.damageReactionTicks > 0 || this.findWarningThreat(focus) != null) { + return Mood.RED; + } + return Mood.YELLOW; + } + if (this.inversionReactionTicks > 0) { + return Mood.PURPLE; + } + if (this.isPlayerInDangerousFall(focus)) { + return Mood.PURPLE; + } + if (this.isPlayerTakingDamage(focus)) { + return Mood.BLUE; + } + if (this.damageReactionTicks > 0 || this.findWarningThreat(focus) != null) { + return Mood.RED; + } + return Mood.YELLOW; + } + + private boolean isPlayerTakingDamage(Player focus) { + return focus.hurtTime > 0 || focus.invulnerableTime > 0; + } + + private boolean shouldSuppressSlowFalling(Player focus) { + return focus.isFallFlying() + || focus.getAbilities().flying + || focus.getItemBySlot(EquipmentSlot.CHEST).is(Items.ELYTRA); + } + + private boolean isPlayerCurrentlyFallingDangerously(Player focus) { + if (this.tickCount < this.nextFallCheckTick) { + return this.cachedIsFallingDangerously; + } + this.nextFallCheckTick = this.tickCount + 5; + this.cachedIsFallingDangerously = this.checkIsFallingDangerously(focus); + return this.cachedIsFallingDangerously; + } + + private boolean checkIsFallingDangerously(Player focus) { + if (focus.onGround() || focus.onClimbable() || focus.isFallFlying() || focus.isPassenger()) { + return false; + } + 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); + double descentThreshold = Math.max(0.02D, this.cfgDangerousFallSpeed); + boolean invertedGravity = gravityDirection.isInverted(); + if (invertedGravity ? localMotion.y < descentThreshold : localMotion.y > -descentThreshold) { + return false; + } + + return this.getDangerousFallSupportDistance(focus) >= this.cfgDangerousFallDistance; + } + + private void tickLookTarget() { + Player focus = this.getFocusPlayer(); + if (focus != null) { + this.getLookControl().setLookAt(focus, 30.0F, 30.0F); + return; + } + + Player noticed = this.getNoticedPlayer(); + if (noticed != null) { + this.getLookControl().setLookAt(noticed, 30.0F, 30.0F); + } + } + + private void applyPassiveDriftDamping() { + Vec3 motion = this.getDeltaMovement(); + double damping = this.getMood() == Mood.RED ? 0.88D : 0.82D; + if (motion.lengthSqr() < 1.0E-4D) { + this.setDeltaMovement(Vec3.ZERO); + return; + } + this.setDeltaMovement(motion.scale(damping)); + } + + private void updateAnimationState() { + Vec3 delta = this.getDeltaMovement(); + this.setAnimationState(delta.lengthSqr() > 0.01D ? ANIM_FLY : ANIM_IDLE); + } + + private int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setAnimationState(int state) { + if (this.getAnimationState() != state) { + this.entityData.set(ANIMATION_STATE, state); + } + } + + private void transitionToMood(Mood mood) { + Mood current = this.getMood(); + if (current == mood) { + return; + } + + this.setMoodRaw(mood); + if (mood == Mood.BLUE || mood == Mood.PURPLE || mood == Mood.RED) { + this.queueMoodSound(mood); + } else if (mood != Mood.YELLOW || this.pendingJoinSound) { + this.playMoodSound(mood); + } + if (mood == Mood.YELLOW) { + this.pendingJoinSound = false; + } + if (this.getFocusPlayer() != null && mood != Mood.WHITE) { + this.interestTicks = this.cfgInterestDuration; + } + } + + public void syncFocusInversionState() { + Player focus = this.getFocusPlayer(); + if (focus == null) { + this.trackedFocusInvertedInitialized = false; + return; + } + + this.syncFocusInversionState(focus); + } + + private void syncFocusInversionState(Player focus) { + boolean inverted = focus.hasEffect(AntarchyObjects.INVERTED_EFFECT.get()); + if (!this.trackedFocusInvertedInitialized) { + this.trackedFocusInverted = inverted; + this.trackedFocusInvertedInitialized = true; + return; + } + + if (!this.trackedFocusInverted && inverted) { + this.trackedFocusInverted = inverted; + this.triggerInversionReaction(focus); + return; + } + + this.trackedFocusInverted = inverted; + } + + private void triggerInversionReaction(Player focus) { + if (this.shouldSuppressSlowFalling(focus)) { + return; + } + this.inversionReactionTicks = INVERSION_REACTION_TICKS; + this.transitionToMood(Mood.PURPLE); + focus.addEffect(new MobEffectInstance(MobEffects.SLOW_FALLING, INVERSION_REACTION_TICKS, 0, false, true, true)); + } + + private void playMoodSound(Mood mood) { + SoundEvent sound = switch (mood) { + case WHITE -> null; + case YELLOW -> AntarchySoundEvents.REVERIE_JOIN_PLAYER.get(); + case BLUE -> AntarchySoundEvents.REVERIE_WORRY.get(); + case PURPLE -> AntarchySoundEvents.REVERIE_SAVE.get(); + case RED -> AntarchySoundEvents.REVERIE_ALERT.get(); + }; + if (sound != null) { + this.playSound(sound, 0.9F, 0.95F + this.random.nextFloat() * 0.1F); + } + } + + private void queueMoodSound(Mood mood) { + this.pendingMoodSound = mood; + this.pendingMoodSoundTicks = 2 + this.random.nextInt(7); + } + + private void tickPendingMoodSound() { + if (this.pendingMoodSound == null) { + return; + } + + if (this.pendingMoodSoundTicks > 0) { + this.pendingMoodSoundTicks--; + return; + } + + this.playMoodSound(this.pendingMoodSound); + this.pendingMoodSound = null; + } + + private void setMoodRaw(Mood mood) { + this.entityData.set(MOOD, mood.ordinal()); + } + + private void tickClientEffects() { + } + + @Nullable + private Player getFocusPlayer() { + if (this.cachedFocusPlayer != null && this.cachedFocusPlayer.isAlive() && this.cachedFocusPlayer.getUUID().equals(this.focusPlayerUuid)) { + return this.cachedFocusPlayer; + } + if (this.focusPlayerUuid == null) { + this.cachedFocusPlayer = null; + return null; + } + if (this.level() instanceof ServerLevel serverLevel) { + this.cachedFocusPlayer = serverLevel.getPlayerByUUID(this.focusPlayerUuid); + return this.cachedFocusPlayer; + } + return null; + } + + private void setFocusPlayer(@Nullable Player player) { + this.cachedFocusPlayer = player; + this.focusPlayerUuid = player != null ? player.getUUID() : null; + this.trackedFocusInvertedInitialized = false; + } + + private void clearFocusState() { + this.setFocusPlayer(null); + this.interestTicks = 0; + this.warningCycleTicks = 0; + this.inversionReactionTicks = 0; + this.pendingJoinSound = false; + this.pendingMoodSound = null; + this.pendingMoodSoundTicks = 0; + this.trackedFocusInvertedInitialized = false; + } + + private void awardJoinAdvancement(Player player) { + if (player instanceof ServerPlayer serverPlayer) { + AntarchyAdvancements.award(serverPlayer, HEY_LISTEN_ADVANCEMENT); + } + } + + private void releaseFocus() { + this.clearFocusState(); + this.rebindCooldownTicks = this.cfgRebindCooldown; + } + + @Nullable + private Player getNoticedPlayer() { + if (this.cachedNoticedPlayer != null && this.cachedNoticedPlayer.isAlive() && this.cachedNoticedPlayer.getUUID().equals(this.noticedPlayerUuid)) { + return this.cachedNoticedPlayer; + } + if (this.noticedPlayerUuid == null) { + this.cachedNoticedPlayer = null; + return null; + } + if (this.level() instanceof ServerLevel serverLevel) { + this.cachedNoticedPlayer = serverLevel.getPlayerByUUID(this.noticedPlayerUuid); + return this.cachedNoticedPlayer; + } + return null; + } + + private void setNoticedPlayer(@Nullable Player player) { + this.cachedNoticedPlayer = player; + this.noticedPlayerUuid = player != null ? player.getUUID() : null; + } + + private void clearNoticePlayer() { + this.setNoticedPlayer(null); + this.noticeTicks = 0; + } + + @Nullable + private Player findNoticeCandidate() { + if (this.tickCount < this.nextNoticeScanTick) { + return null; + } + this.nextNoticeScanTick = this.tickCount + 20; + List nearbyPlayers = this.level().getEntitiesOfClass( + Player.class, + this.getBoundingBox().inflate(this.cfgInterestRadius) + ); + + Player nearest = null; + double nearestDistanceSqr = Double.MAX_VALUE; + for (Player player : nearbyPlayers) { + if (!this.isValidNoticePlayer(player)) { + continue; + } + double distanceSqr = this.distanceToSqr(player); + if (distanceSqr < nearestDistanceSqr) { + nearest = player; + nearestDistanceSqr = distanceSqr; + } + } + return nearest; + } + + @Nullable + private Player findDuplicationItemHolder() { + if (this.tickCount < this.nextDuplicationScanTick) { + return null; + } + this.nextDuplicationScanTick = this.tickCount + 20; + List nearbyPlayers = this.level().getEntitiesOfClass( + Player.class, + this.getBoundingBox().inflate(this.cfgInterestRadius) + ); + + Player nearest = null; + double nearestDistanceSqr = Double.MAX_VALUE; + for (Player player : nearbyPlayers) { + if (!this.isValidBoundPlayer(player) || !this.isHoldingDuplicationItem(player)) { + continue; + } + + double distanceSqr = this.distanceToSqr(player); + if (distanceSqr < nearestDistanceSqr) { + nearest = player; + nearestDistanceSqr = distanceSqr; + } + } + return nearest; + } + + private boolean isValidNoticePlayer(@Nullable Player player) { + double maxDistance = this.cfgInterestRadius; + return player != null + && player.isAlive() + && !player.isSpectator() + && !player.isCreative() + && this.distanceToSqr(player) <= maxDistance * maxDistance; + } + + private boolean isHoldingDuplicationItem(Player player) { + return player.getMainHandItem().is(AntarchyTags.Items.REVERIE_DUPLICATION_ITEMS) + || player.getOffhandItem().is(AntarchyTags.Items.REVERIE_DUPLICATION_ITEMS); + } + + private boolean isValidBoundPlayer(@Nullable Player player) { + double maxDistance = this.cfgAbandonDistance; + return player != null + && player.isAlive() + && !player.isSpectator() + && !player.isCreative() + && this.distanceToSqr(player) <= maxDistance * maxDistance; + } + + @Nullable + private LivingEntity findWarningThreat(Player focus) { + LivingEntity lastAttacker = this.getLastHurtByMob(); + if (this.damageReactionTicks > 0 && this.isValidThreat(lastAttacker, focus)) { + this.cachedWarningThreat = lastAttacker; + return this.cachedWarningThreat; + } + + if (this.tickCount < this.nextThreatScanTick) { + return this.cachedWarningThreat != null && this.cachedWarningThreat.isAlive() ? this.cachedWarningThreat : null; + } + + this.nextThreatScanTick = this.tickCount + 10; + AABB threatArea = focus.getBoundingBox().inflate(this.cfgWarningThreatRadius, this.cfgWarningThreatVerticalRange, this.cfgWarningThreatRadius); + List threats = this.level().getEntitiesOfClass(LivingEntity.class, threatArea, entity -> this.isValidThreat(entity, focus)); + + LivingEntity prioritized = null; + double prioritizedDistance = Double.MAX_VALUE; + LivingEntity fallback = null; + double fallbackDistance = Double.MAX_VALUE; + for (LivingEntity threat : threats) { + double distance = focus.distanceToSqr(threat); + if (threat.getLastHurtMob() == focus || (threat instanceof Mob mob && mob.getTarget() == focus)) { + if (distance < prioritizedDistance) { + prioritized = threat; + prioritizedDistance = distance; + } + } + if (distance < fallbackDistance) { + fallback = threat; + fallbackDistance = distance; + } + } + this.cachedWarningThreat = prioritized != null ? prioritized : fallback; + return this.cachedWarningThreat; + } + + private boolean isValidThreat(@Nullable LivingEntity entity, Player focus) { + return entity != null + && entity.isAlive() + && entity != this + && entity != focus + && entity instanceof Enemy; + } + + private boolean isPlayerInDangerousFall(Player focus) { + return this.isPlayerCurrentlyFallingDangerously(focus); + } + + private int getDangerousFallSupportDistance(Player focus) { + int scanRange = Math.max(PURPLE_SUPPORT_SCAN_RANGE, Mth.ceil(this.cfgDangerousFallDistance) + 2); + return this.getGravitySupportDistance(focus, scanRange); + } + + private int getGravitySupportDistance(Player focus, int maxDistanceBlocks) { + Direction gravityDown = AntarchyGravityRotationUtil.getGravityDownDirection(focus); + Direction supportFace = gravityDown.getOpposite(); + BlockPos cursor = focus.blockPosition(); + for (int distance = 1; distance <= maxDistanceBlocks; distance++) { + cursor = cursor.relative(gravityDown); + BlockState supportState = this.level().getBlockState(cursor); + if (supportState.isFaceSturdy(this.level(), cursor, supportFace)) { + return distance; + } + } + return -1; + } + + private boolean isPlayerInsideAntiwater(Player focus) { + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + BlockPos min = focus.blockPosition().offset(-1, 0, -1); + BlockPos max = focus.blockPosition().offset(1, 2, 1); + 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); + if (AntarchyFluidChecks.isAntiwater(this.level().getFluidState(cursor))) { + return true; + } + } + } + } + return false; + } + + private Vec3 getOrbitTarget(Player focus) { + double desiredMin = Math.min(this.cfgFollowMinDistance, this.cfgFollowMaxDistance); + double desiredMax = Math.max(this.cfgFollowMinDistance, this.cfgFollowMaxDistance); + double orbitTime = (this.tickCount * 0.08D) + (this.getId() * 0.53D); + double distance = this.distanceTo(focus); + double orbitBlend = Mth.clamp((distance - desiredMin) / Math.max(0.001D, desiredMax - desiredMin), 0.0D, 1.0D); + 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 y = tetherAnchor.y + verticalOffset + Math.sin(orbitTime * 0.8D) * 0.2D; + return new Vec3( + tetherAnchor.x + Math.cos(angle) * radius, + Mth.clamp(y, this.level().getMinBuildHeight() + 2.0D, this.level().getMaxBuildHeight() - 2.0D), + tetherAnchor.z + Math.sin(angle) * radius + ); + } + + private Vec3 getPurpleProtectTarget(Player focus) { + double verticalOffset = AntarchyGravityApi.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( + tetherAnchor.x + sideOffset.x, + Mth.clamp(tetherAnchor.y + verticalOffset, this.level().getMinBuildHeight() + 2.0D, this.level().getMaxBuildHeight() - 2.0D), + tetherAnchor.z + sideOffset.z + ); + } + + private Vec3 getWarningTarget(Player focus, LivingEntity threat) { + int approachTicks = this.cfgWarningApproachTicks; + int hoverTicks = this.cfgWarningHoverTicks; + int returnTicks = this.cfgWarningReturnTicks; + int playerHoverTicks = this.cfgWarningPlayerHoverTicks; + int phaseLength = approachTicks + hoverTicks + returnTicks + playerHoverTicks; + int phase = this.warningCycleTicks % Math.max(1, phaseLength); + if (phase < approachTicks) { + return threat.position().add(0.0D, threat.getBbHeight() * 0.65D, 0.0D); + } + if (phase < approachTicks + hoverTicks) { + return threat.position().add(0.0D, threat.getBbHeight() * 1.05D, 0.0D); + } + if (phase < approachTicks + hoverTicks + returnTicks) { + return this.getOrbitTarget(focus); + } + return focus.position().add(0.0D, 1.8D, 0.0D); + } + + private double getWarningSpeed(Player focus) { + return this.distanceTo(focus) > this.cfgCatchUpDistance ? 0.42D : 0.34D; + } + + private void pulseToward(Vec3 target, double impulse, double maxSpeed, int pulseInterval) { + Vec3 toTarget = target.subtract(this.position()); + double distance = toTarget.length(); + if (distance < 0.08D) { + return; + } + + if (this.movementPulseCooldown > 0 && distance < 1.25D && maxSpeed < 0.5D) { + return; + } + + Vec3 direction = toTarget.scale(1.0D / distance); + Vec3 nextMotion = this.getDeltaMovement().scale(0.55D).add(direction.scale(Math.min(impulse, 0.1D + distance * 0.08D))); + if (nextMotion.lengthSqr() > maxSpeed * maxSpeed) { + nextMotion = nextMotion.normalize().scale(maxSpeed); + } + + this.setDeltaMovement(nextMotion); + this.hasImpulse = true; + this.movementPulseCooldown = pulseInterval; + } + + private Vec3 pickAmbientTarget() { + double angle = this.random.nextDouble() * (Math.PI * 2.0D); + double maxRadius = Math.max(this.cfgAmbientMinRadius, this.cfgAmbientMaxRadius); + double radius = this.cfgAmbientMinRadius + this.random.nextDouble() * Math.max(0.0D, maxRadius - this.cfgAmbientMinRadius); + double vertical = (this.random.nextDouble() - 0.5D) * this.cfgAmbientVerticalRange; + return new Vec3( + this.getX() + Math.cos(angle) * radius, + Mth.clamp(this.getY() + vertical, this.level().getMinBuildHeight() + 2.0D, this.level().getMaxBuildHeight() - 2.0D), + this.getZ() + Math.sin(angle) * radius + ); + } + + public enum Mood { + YELLOW, + BLUE, + PURPLE, + RED, + WHITE; + + private static final Mood[] VALUES = values(); + + private static Mood byOrdinal(int ordinal) { + if (ordinal < 0 || ordinal >= VALUES.length) { + return WHITE; + } + return VALUES[ordinal]; + } + } + + private final class ReverieBoundGoal extends Goal { + private ReverieBoundGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + return ReverieEntity.this.getFocusPlayer() != null; + } + + @Override + public boolean canContinueToUse() { + return ReverieEntity.this.getFocusPlayer() != null; + } + + @Override + public boolean requiresUpdateEveryTick() { + return true; + } + + @Override + public void tick() { + Player focus = ReverieEntity.this.getFocusPlayer(); + if (focus == null) { + return; + } + + Mood mood = ReverieEntity.this.getMood(); + double distance = ReverieEntity.this.distanceTo(focus); + double catchUpDistance = ReverieEntity.this.cfgCatchUpDistance; + boolean urgentCatchUp = distance > catchUpDistance; + if (mood == Mood.PURPLE) { + Vec3 target = ReverieEntity.this.getPurpleProtectTarget(focus); + ReverieEntity.this.pulseToward(target, urgentCatchUp ? 0.72D : 0.48D, urgentCatchUp ? 1.20D : 0.85D, 1); + return; + } + + if (mood == Mood.RED) { + LivingEntity threat = ReverieEntity.this.findWarningThreat(focus); + Vec3 target = threat != null + ? ReverieEntity.this.getWarningTarget(focus, threat) + : ReverieEntity.this.getOrbitTarget(focus); + ReverieEntity.this.pulseToward(target, urgentCatchUp ? 0.45D : 0.24D, urgentCatchUp ? 1.05D : ReverieEntity.this.getWarningSpeed(focus), urgentCatchUp ? 1 : 5); + return; + } + + Vec3 orbitTarget = ReverieEntity.this.getOrbitTarget(focus); + double desiredMax = Math.max(ReverieEntity.this.cfgFollowMinDistance, ReverieEntity.this.cfgFollowMaxDistance); + boolean worried = mood == Mood.BLUE; + if (worried && distance <= desiredMax && !focus.hasEffect(MobEffects.DAMAGE_RESISTANCE)) { + focus.addEffect(new MobEffectInstance(MobEffects.DAMAGE_RESISTANCE, 60, 0, false, true, true)); + } + double impulse = urgentCatchUp ? 0.56D : (worried ? 0.32D : (distance > desiredMax ? 0.24D : 0.18D)); + double maxSpeed = urgentCatchUp ? 1.05D : (worried ? 0.68D : (distance > desiredMax ? 0.50D : 0.32D)); + int pulseInterval = urgentCatchUp ? 1 : (worried ? 2 : (distance > desiredMax ? 3 : 5)); + ReverieEntity.this.pulseToward(orbitTarget, impulse, maxSpeed, pulseInterval); + } + } + + private final class ReverieAmbientGoal extends Goal { + private ReverieAmbientGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + return ReverieEntity.this.getFocusPlayer() == null; + } + + @Override + public boolean canContinueToUse() { + return ReverieEntity.this.getFocusPlayer() == null; + } + + @Override + public boolean requiresUpdateEveryTick() { + return true; + } + + @Override + public void tick() { + if (ReverieEntity.this.getNoticedPlayer() != null) { + ReverieEntity.this.ambientTarget = null; + ReverieEntity.this.ambientTargetAge = 0; + return; + } + + if (ReverieEntity.this.ambientTarget == null + || ReverieEntity.this.ambientTarget.distanceTo(ReverieEntity.this.position()) < 0.8D + || ReverieEntity.this.ambientTargetAge++ > ReverieEntity.this.cfgAmbientMaxAgeTicks) { + ReverieEntity.this.ambientTarget = ReverieEntity.this.pickAmbientTarget(); + ReverieEntity.this.ambientTargetAge = 0; + } + + int minInterval = ReverieEntity.this.cfgAmbientPulseMinTicks; + int maxInterval = Math.max(minInterval, ReverieEntity.this.cfgAmbientPulseMaxTicks); + ReverieEntity.this.pulseToward( + ReverieEntity.this.ambientTarget, + 0.14D, + 0.18D, + minInterval + ReverieEntity.this.random.nextInt(Math.max(1, maxInterval - minInterval + 1)) + ); + } + } +} 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 new file mode 100644 index 00000000..f440655c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java @@ -0,0 +1,847 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.AntarchySoundEvents; + +import java.util.EnumSet; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ItemParticleOption; +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.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.DamageTypeTags; +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.damagesource.DamageSource; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.entity.TamableAnimal; +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.FloatGoal; +import net.minecraft.world.entity.ai.goal.FollowOwnerGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.MoveToBlockGoal; +import net.minecraft.world.entity.ai.goal.PanicGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.TemptGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.OwnerHurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.OwnerHurtTargetGoal; +import net.minecraft.world.entity.ai.util.DefaultRandomPos; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.BedBlock; +import net.minecraft.world.level.block.ComposterBlock; +import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.LevelEvent; +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; +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 RollyPollyEntity extends TamableAnimal 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 ROLL_UP_ANIM = RawAnimation.begin().thenPlayAndHold("wheel_mode"); + private static final RawAnimation ROLLING_ANIM = RawAnimation.begin().thenLoop("roll"); + private static final RawAnimation UNROLL_ANIM = RawAnimation.begin().thenPlay("normal_mode"); + + private static final int ANIM_NONE = 0; + 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; + private static final int ROLL_SOUND_INTERVAL_TICKS = 25; + private static final java.util.UUID ROLLED_ARMOR_MODIFIER_ID = + java.util.UUID.nameUUIDFromBytes((Antarchy.MODID + ":rolly_polly_rolled_armor").getBytes(java.nio.charset.StandardCharsets.UTF_8)); + + private static final EntityDataAccessor ANIMATION_STATE = + SynchedEntityData.defineId(RollyPollyEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ROLLED = + SynchedEntityData.defineId(RollyPollyEntity.class, EntityDataSerializers.BOOLEAN); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int rollTransitionTicks; + private boolean unrolling; + private int defensiveCurlTicks; + private boolean hasCompost; + private int rollSoundCooldown; + + public RollyPollyEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public static boolean canSpawn(EntityType entityType, net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.entity.MobSpawnType spawnReason, BlockPos pos, net.minecraft.util.RandomSource random) { + if (spawnReason == net.minecraft.world.entity.MobSpawnType.SPAWN_EGG || spawnReason == net.minecraft.world.entity.MobSpawnType.SPAWNER || spawnReason == net.minecraft.world.entity.MobSpawnType.COMMAND) { + return true; + } + + return Mob.checkMobSpawnRules(entityType, level, spawnReason, pos, random); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.rollyPollyHealth()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.rollyPollyMovementSpeed()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.rollyPollyBowlingDamage()) + .add(Attributes.ARMOR, AntarchySettings.rollyPollyArmor()) + .add(Attributes.FOLLOW_RANGE, 16.0D); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_NONE); + this.entityData.define(ROLLED, false); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + 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) { + @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) { + @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.targetSelector.addGoal(1, new OwnerHurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(AntarchyTags.Items.ROLLY_POLLY_FOOD); + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + + if (this.isFood(stack) && (!this.isTame() || this.getHealth() < this.getMaxHealth())) { + if (!this.level().isClientSide) { + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + if (!this.isTame()) { + if (this.random.nextInt(AntarchySettings.rollyPollyTameChance()) == 0) { + this.setTame(true); + this.setOwnerUUID(player.getUUID()); + if (player instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.TAME_ANIMAL.trigger(serverPlayer, this); + } + this.stopDefensiveCurl(); + this.setTarget(null); + this.level().broadcastEntityEvent(this, (byte) 7); + } else { + this.level().broadcastEntityEvent(this, (byte) 6); + } + } else { + this.heal(4.0F); + this.level().broadcastEntityEvent(this, (byte) 7); + } + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (!this.hasCompost && isCompostable(stack)) { + if (!this.level().isClientSide) { + ItemStack eaten = stack.copyWithCount(1); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + this.eatCompost(eaten); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (this.isFood(stack)) { + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + return super.mobInteract(player, hand); + } + + @Override + @Nullable + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return null; + } + + private static boolean isCompostable(ItemStack stack) { + return !stack.isEmpty() && ComposterBlock.COMPOSTABLES.containsKey(stack.getItem()); + } + + private void eatCompost(ItemStack eaten) { + this.hasCompost = true; + this.playSound(this.getEatingSound(eaten), 0.9F, 1.2F); + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(new ItemParticleOption(ParticleTypes.ITEM, eaten), + this.getX(), this.getY(0.6D), this.getZ(), 6, 0.1D, 0.1D, 0.1D, 0.05D); + } + } + + public boolean isRolled() { + return this.entityData.get(ROLLED); + } + + private void setRolled(boolean rolled) { + this.entityData.set(ROLLED, rolled); + } + + private void startRollUp() { + this.setRolled(true); + this.unrolling = false; + this.rollTransitionTicks = ROLL_UP_TICKS; + this.setAnimationState(ANIM_ROLL_UP); + this.playSound(AntarchySoundEvents.ROLLY_POLLY_WHEEL_MODE.get(), 0.8F, 1.0F); + this.applyRolledArmorBonus(); + } + + private void startUnroll() { + this.unrolling = true; + this.rollTransitionTicks = UNROLL_TICKS; + this.setAnimationState(ANIM_UNROLL); + this.playSound(AntarchySoundEvents.ROLLY_POLLY_NORMAL_MODE.get(), 0.8F, 1.0F); + this.removeRolledArmorBonus(); + } + + private void applyRolledArmorBonus() { + AttributeInstance armor = this.getAttribute(Attributes.ARMOR); + if (armor != null && armor.getModifier(ROLLED_ARMOR_MODIFIER_ID) == null) { + armor.addTransientModifier(new AttributeModifier( + ROLLED_ARMOR_MODIFIER_ID, "rolly_polly_rolled_armor", AntarchySettings.rollyPollyRolledArmorBonus(), AttributeModifier.Operation.ADDITION)); + } + } + + private void removeRolledArmorBonus() { + AttributeInstance armor = this.getAttribute(Attributes.ARMOR); + if (armor != null) { + armor.removeModifier(ROLLED_ARMOR_MODIFIER_ID); + } + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.ROLLY_POLLY_IDLE.get(); + } + + private void stopDefensiveCurl() { + this.defensiveCurlTicks = 0; + if (this.isRolled()) { + this.startUnroll(); + } + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.isRolled() && source.is(DamageTypeTags.IS_PROJECTILE)) { + 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; + this.startRollUp(); + } + return hurt; + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + + if (this.rollTransitionTicks > 0) { + this.rollTransitionTicks--; + if (this.rollTransitionTicks <= 0) { + if (this.unrolling) { + this.setRolled(false); + this.unrolling = false; + } + this.setAnimationState(ANIM_NONE); + } + } + + if (this.defensiveCurlTicks > 0) { + this.defensiveCurlTicks--; + this.getNavigation().stop(); + if (this.defensiveCurlTicks <= 0 && this.isRolled()) { + this.startUnroll(); + } + } + + this.tickRollSound(); + } + + private void tickRollSound() { + if (!this.isRolled() || this.rollTransitionTicks > 0 || this.getDeltaMovement().horizontalDistanceSqr() <= 0.003D) { + this.rollSoundCooldown = 0; + return; + } + + if (this.rollSoundCooldown > 0) { + this.rollSoundCooldown--; + return; + } + + this.rollSoundCooldown = ROLL_SOUND_INTERVAL_TICKS; + this.playSound(AntarchySoundEvents.ROLLY_POLLY_ROLL.get(), 0.7F, 0.9F + this.random.nextFloat() * 0.2F); + } + + private int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setAnimationState(int state) { + if (this.entityData.get(ANIMATION_STATE) != state) { + this.entityData.set(ANIMATION_STATE, state); + String trigger = switch (state) { + case ANIM_ROLL_UP -> "wheel_mode"; + case ANIM_UNROLL -> "normal_mode"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + } + } + + @Override + public void travel(Vec3 travelVector) { + if (this.defensiveCurlTicks > 0) { + super.travel(Vec3.ZERO); + return; + } + super.travel(travelVector); + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource damageSource) { + if (this.isRolled()) { + return false; + } + return super.causeFallDamage(fallDistance, multiplier, damageSource); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean("HasCompost", this.hasCompost); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.hasCompost = tag.getBoolean("HasCompost"); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController) + .triggerableAnim("wheel_mode", ROLL_UP_ANIM) + .triggerableAnim("normal_mode", UNROLL_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + AnimationController controller = state.getController(); + int transition = this.getAnimationState(); + + if (transition == ANIM_ROLL_UP) { + controller.setAnimationSpeed(1.0D); + return state.setAndContinue(ROLL_UP_ANIM); + } + if (transition == ANIM_UNROLL) { + controller.setAnimationSpeed(1.0D); + return state.setAndContinue(UNROLL_ANIM); + } + + if (this.isRolled()) { + if (state.isMoving()) { + controller.setAnimationSpeed(1.0D); + return state.setAndContinue(ROLLING_ANIM); + } + if (controller.getCurrentAnimation() == null) { + controller.setAnimationSpeed(1.0D); + return state.setAndContinue(ROLL_UP_ANIM); + } + controller.setAnimationSpeed(0.0D); + return PlayState.CONTINUE; + } + + controller.setAnimationSpeed(1.0D); + return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + private class EatCompostItemGoal extends Goal { + @Nullable + private ItemEntity targetItem; + private int scanCooldown; + + EatCompostItemGoal() { + this.setFlags(EnumSet.of(Goal.Flag.MOVE)); + } + + @Override + public boolean canUse() { + if (RollyPollyEntity.this.hasCompost + || RollyPollyEntity.this.isRolled() + || RollyPollyEntity.this.defensiveCurlTicks > 0) { + return false; + } + if (this.scanCooldown > 0) { + this.scanCooldown--; + return false; + } + this.scanCooldown = 20; + this.targetItem = this.findNearestCompostItem(); + return this.targetItem != null; + } + + @Override + public boolean canContinueToUse() { + return !RollyPollyEntity.this.hasCompost + && !RollyPollyEntity.this.isRolled() + && this.targetItem != null + && this.targetItem.isAlive() + && isCompostable(this.targetItem.getItem()); + } + + @Override + public void start() { + if (this.targetItem != null) { + RollyPollyEntity.this.getNavigation().moveTo(this.targetItem, 1.1D); + } + } + + @Override + public void stop() { + this.targetItem = null; + RollyPollyEntity.this.getNavigation().stop(); + } + + @Override + public void tick() { + if (this.targetItem == null) { + return; + } + RollyPollyEntity.this.getLookControl().setLookAt(this.targetItem); + if (RollyPollyEntity.this.tickCount % 10 == 0) { + RollyPollyEntity.this.getNavigation().moveTo(this.targetItem, 1.1D); + } + if (RollyPollyEntity.this.distanceToSqr(this.targetItem) < 2.0D) { + ItemStack stack = this.targetItem.getItem(); + ItemStack eaten = stack.copyWithCount(1); + stack.shrink(1); + if (stack.isEmpty()) { + this.targetItem.discard(); + } else { + this.targetItem.setItem(stack.copy()); + } + RollyPollyEntity.this.eatCompost(eaten); + } + } + + @Nullable + private ItemEntity findNearestCompostItem() { + ItemEntity nearest = null; + double nearestDist = Double.MAX_VALUE; + for (ItemEntity item : RollyPollyEntity.this.level().getEntitiesOfClass(ItemEntity.class, + RollyPollyEntity.this.getBoundingBox().inflate(8.0D, 4.0D, 8.0D), + item -> item.isAlive() && isCompostable(item.getItem()))) { + double dist = RollyPollyEntity.this.distanceToSqr(item); + if (dist < nearestDist) { + nearest = item; + nearestDist = dist; + } + } + return nearest; + } + } + + private class FertilizeCropGoal extends MoveToBlockGoal { + private static final int ROLL_ON_CROP_TICKS = 20; + + private int rollTicks; + + FertilizeCropGoal() { + super(RollyPollyEntity.this, 1.1D, 8, 2); + } + + @Override + public boolean canUse() { + return RollyPollyEntity.this.hasCompost + && !RollyPollyEntity.this.isRolled() + && RollyPollyEntity.this.defensiveCurlTicks <= 0 + && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + return RollyPollyEntity.this.hasCompost + && super.canContinueToUse(); + } + + @Override + protected int nextStartTick(PathfinderMob mob) { + return reducedTickDelay(40 + mob.getRandom().nextInt(40)); + } + + @Override + protected boolean isValidTarget(LevelReader level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.getBlock() instanceof CropBlock crop && !crop.isMaxAge(state); + } + + @Override + protected BlockPos getMoveToTarget() { + return this.blockPos; + } + + @Override + public double acceptedDistance() { + return 1.75D; + } + + @Override + public void start() { + this.rollTicks = 0; + super.start(); + } + + @Override + public void stop() { + super.stop(); + if (RollyPollyEntity.this.isRolled() && RollyPollyEntity.this.rollTransitionTicks <= 0) { + RollyPollyEntity.this.startUnroll(); + } + } + + @Override + public void tick() { + super.tick(); + if (!this.isReachedTarget()) { + this.rollTicks = 0; + return; + } + RollyPollyEntity.this.getNavigation().stop(); + if (!RollyPollyEntity.this.isRolled()) { + if (RollyPollyEntity.this.rollTransitionTicks <= 0) { + RollyPollyEntity.this.startRollUp(); + } + return; + } + if (RollyPollyEntity.this.rollTransitionTicks > 0) { + return; + } + if (++this.rollTicks >= ROLL_ON_CROP_TICKS) { + this.fertilize(); + } + } + + private void fertilize() { + if (RollyPollyEntity.this.level() instanceof ServerLevel serverLevel) { + BlockState state = serverLevel.getBlockState(this.blockPos); + if (state.getBlock() instanceof CropBlock crop && !crop.isMaxAge(state)) { + crop.performBonemeal(serverLevel, RollyPollyEntity.this.random, this.blockPos, state); + serverLevel.levelEvent(LevelEvent.PARTICLES_AND_SOUND_PLANT_GROWTH, this.blockPos, 15); + } + } + RollyPollyEntity.this.hasCompost = false; + RollyPollyEntity.this.startUnroll(); + } + } + + private class BowlingAttackGoal extends Goal { + private static final double CHARGE_SPEED = 1.3D; + private static final double HIT_RANGE_SQR = 1.75D * 1.75D; + private static final int ATTACK_COOLDOWN_TICKS = 20; + + private int attackCooldown; + + BowlingAttackGoal() { + this.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = RollyPollyEntity.this.getTarget(); + return RollyPollyEntity.this.isTame() + && target != null + && target.isAlive(); + } + + @Override + public boolean canContinueToUse() { + return this.canUse(); + } + + @Override + public void start() { + this.attackCooldown = 0; + if (!RollyPollyEntity.this.isRolled() && RollyPollyEntity.this.rollTransitionTicks <= 0) { + RollyPollyEntity.this.startRollUp(); + } + } + + @Override + public void stop() { + RollyPollyEntity.this.getNavigation().stop(); + if (RollyPollyEntity.this.isRolled() && RollyPollyEntity.this.rollTransitionTicks <= 0) { + RollyPollyEntity.this.startUnroll(); + } + } + + @Override + public void tick() { + LivingEntity target = RollyPollyEntity.this.getTarget(); + if (target == null) { + return; + } + + RollyPollyEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + + if (this.attackCooldown > 0) { + this.attackCooldown--; + } + + if (!RollyPollyEntity.this.isRolled() || RollyPollyEntity.this.rollTransitionTicks > 0) { + return; + } + + RollyPollyEntity.this.getNavigation().moveTo(target, CHARGE_SPEED); + + if (this.attackCooldown <= 0 && RollyPollyEntity.this.distanceToSqr(target) <= HIT_RANGE_SQR) { + this.attackCooldown = ATTACK_COOLDOWN_TICKS; + this.performBowlingHit(target); + } + } + + private void performBowlingHit(LivingEntity target) { + boolean hurt = target.hurt(RollyPollyEntity.this.damageSources().mobAttack(RollyPollyEntity.this), (float) RollyPollyEntity.this.getAttributeValue(Attributes.ATTACK_DAMAGE)); + if (!hurt) { + return; + } + + double dx = RollyPollyEntity.this.getX() - target.getX(); + double dz = RollyPollyEntity.this.getZ() - target.getZ(); + target.knockback(AntarchySettings.rollyPollyBowlingKnockback(), dx, dz); + RollyPollyEntity.this.playSound(AntarchySoundEvents.ROLLY_POLLY_ROLL.get(), 1.0F, 0.8F + RollyPollyEntity.this.random.nextFloat() * 0.2F); + } + } + + private class RollingStrollGoal extends Goal { + @Nullable + private Vec3 targetPos; + private int rollingTicks; + private int maxRollingTicks; + private boolean startedMoving; + private boolean finished; + + RollingStrollGoal() { + this.setFlags(EnumSet.of(Goal.Flag.MOVE)); + } + + @Override + public boolean canUse() { + if (RollyPollyEntity.this.isRolled() + || RollyPollyEntity.this.defensiveCurlTicks > 0 + || RollyPollyEntity.this.hasCompost + || RollyPollyEntity.this.rollTransitionTicks > 0) { + return false; + } + if (RollyPollyEntity.this.getRandom().nextInt(reducedTickDelay(240)) != 0) { + return false; + } + this.targetPos = DefaultRandomPos.getPos(RollyPollyEntity.this, 16, 4); + return this.targetPos != null; + } + + @Override + public boolean canContinueToUse() { + return !this.finished + && this.rollingTicks < this.maxRollingTicks + && !RollyPollyEntity.this.hasCompost; + } + + @Override + public void start() { + this.rollingTicks = 0; + this.maxRollingTicks = this.adjustedTickDelay(140 + RollyPollyEntity.this.getRandom().nextInt(100)); + this.startedMoving = false; + this.finished = false; + RollyPollyEntity.this.startRollUp(); + } + + @Override + public void stop() { + this.targetPos = null; + RollyPollyEntity.this.getNavigation().stop(); + if (RollyPollyEntity.this.isRolled() && RollyPollyEntity.this.rollTransitionTicks <= 0) { + RollyPollyEntity.this.startUnroll(); + } + } + + @Override + public void tick() { + if (RollyPollyEntity.this.rollTransitionTicks > 0 || this.targetPos == null) { + return; + } + this.rollingTicks++; + if (RollyPollyEntity.this.getNavigation().isDone()) { + if (this.startedMoving) { + this.finished = true; + } else { + RollyPollyEntity.this.getNavigation().moveTo( + this.targetPos.x, this.targetPos.y, this.targetPos.z, + AntarchySettings.rollyPollyRollSpeedMultiplier()); + this.startedMoving = true; + } + } + } + } + + private class SnuggleOnBedGoal extends Goal { + @Nullable + private Player ownerPlayer; + @Nullable + private BlockPos bedPos; + private int onBedTicks; + + SnuggleOnBedGoal() { + this.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK, Goal.Flag.JUMP)); + } + + @Override + public boolean canUse() { + if (!RollyPollyEntity.this.isTame()) { + return false; + } + if (!(RollyPollyEntity.this.getOwner() instanceof Player player) || !player.isSleeping()) { + return false; + } + if (RollyPollyEntity.this.distanceToSqr(player) > 100.0D) { + return false; + } + BlockPos pos = player.blockPosition(); + BlockState stateAt = RollyPollyEntity.this.level().getBlockState(pos); + if (!stateAt.is(BlockTags.BEDS)) { + return false; + } + this.ownerPlayer = player; + this.bedPos = stateAt.getOptionalValue(BedBlock.FACING) + .map(direction -> pos.relative(direction.getOpposite())) + .orElse(pos); + return true; + } + + @Override + public boolean canContinueToUse() { + return RollyPollyEntity.this.isTame() + && this.ownerPlayer != null + && this.ownerPlayer.isSleeping() + && this.bedPos != null; + } + + @Override + public void start() { + this.onBedTicks = 0; + } + + @Override + public void stop() { + this.ownerPlayer = null; + this.bedPos = null; + this.onBedTicks = 0; + RollyPollyEntity.this.getNavigation().stop(); + if (RollyPollyEntity.this.isRolled() && RollyPollyEntity.this.rollTransitionTicks <= 0) { + RollyPollyEntity.this.startUnroll(); + } + } + + @Override + public void tick() { + if (this.ownerPlayer == null || this.bedPos == null) { + return; + } + if (RollyPollyEntity.this.distanceToSqr(this.ownerPlayer) > 2.5D) { + this.onBedTicks = 0; + if (RollyPollyEntity.this.isRolled()) { + if (RollyPollyEntity.this.rollTransitionTicks <= 0) { + 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); + } + return; + } + RollyPollyEntity.this.getNavigation().stop(); + if (++this.onBedTicks > this.adjustedTickDelay(16) + && !RollyPollyEntity.this.isRolled() + && RollyPollyEntity.this.rollTransitionTicks <= 0) { + RollyPollyEntity.this.startRollUp(); + } + } + } +} 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 new file mode 100644 index 00000000..5b72140d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java @@ -0,0 +1,317 @@ +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.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.RandomSource; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.Difficulty; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +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.phys.Vec3; +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.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 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 org.jetbrains.annotations.Nullable; + +public class ScorpionEntity extends Monster implements GeoEntity { + 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"; + public static final int BLUE_VARIANT = 0; + public static final int GREEN_VARIANT = 1; + + private static final int ATTACK_ANIM_TICKS = 12; + private static final int ATTACK_HIT_TICK = 6; + private static final int ATTACK_COOLDOWN_TICKS = 16; + private static final int POISON_DURATION_TICKS = 80; + + 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().thenPlay("attack"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int attackAnimTicks = 0; + private int attackCooldownTicks = 0; + private boolean attackDamageApplied = false; + @Nullable private LivingEntity attackTarget; + + public ScorpionEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 5; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.scorpionHealth()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.scorpionMovementSpeed()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.scorpionAttackDamage()) + .add(Attributes.FOLLOW_RANGE, 24.0D) + .add(Attributes.ARMOR, AntarchySettings.scorpionArmor()) + .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.scorpionKnockbackResistance()); + } + + 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(TEXTURE_VARIANT, BLUE_VARIANT); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new ScorpionMeleeAttackGoal()); + this.goalSelector.addGoal(5, new RandomStrollGoal(this, 0.8D)); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 8.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)); + } + + @Nullable + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + this.assignRandomTextureVariant(); + return super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData, dataTag); + } + + @Override + public void tick() { + super.tick(); + if (this.attackCooldownTicks > 0) { + this.attackCooldownTicks--; + } + if (this.attackAnimTicks > 0) { + if (!this.level().isClientSide) { + this.tickAttackWindup(); + } + this.attackAnimTicks--; + if (this.attackAnimTicks <= 0) { + this.resetAttackState(); + } + } + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + boolean hurt = super.doHurtTarget(target); + if (hurt && target instanceof LivingEntity living) { + int duration = this.level().getDifficulty() == Difficulty.HARD + ? POISON_DURATION_TICKS * 2 + : POISON_DURATION_TICKS; + living.addEffect(new MobEffectInstance(MobEffects.POISON, duration, 0)); + this.playSound(AntarchySoundEvents.SCORPION_ATTACK.get(), 0.65F, 0.95F + this.random.nextFloat() * 0.1F); + } + return hurt; + } + + private void beginAttack(LivingEntity target) { + this.attackTarget = target; + this.attackAnimTicks = ATTACK_ANIM_TICKS; + this.attackCooldownTicks = ATTACK_COOLDOWN_TICKS; + this.attackDamageApplied = false; + this.getNavigation().stop(); + this.level().broadcastEntityEvent(this, ATTACK_ANIM_EVENT); + this.triggerAnim("main", "attack"); + this.commitLunge(target, 0.48D, 0.12D); + } + + private void tickAttackWindup() { + if (this.attackTarget == null || !this.attackTarget.isAlive()) { + this.resetAttackState(); + return; + } + + this.getLookControl().setLookAt(this.attackTarget, 30.0F, 30.0F); + if (!this.attackDamageApplied + && this.attackAnimTicks == ATTACK_HIT_TICK + && this.distanceToSqr(this.attackTarget) <= this.getAttackReachSqr(this.attackTarget)) { + this.attackDamageApplied = true; + this.doHurtTarget(this.attackTarget); + } + + if (this.attackAnimTicks <= 0) { + this.resetAttackState(); + } + } + + private double getAttackReachSqr(LivingEntity target) { + double reach = this.getBbWidth() * 1.7D + target.getBbWidth(); + return reach * reach + 1.0D; + } + + private void resetAttackState() { + this.attackAnimTicks = 0; + this.attackDamageApplied = false; + this.attackTarget = null; + } + + 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); + if (horizontal.lengthSqr() < 1.0E-4D) { + return; + } + horizontal = horizontal.normalize().scale(horizontalSpeed); + this.setDeltaMovement(this.getDeltaMovement().add(horizontal.x, verticalSpeed, horizontal.z)); + this.hasImpulse = true; + } + + private boolean isAttackLocked() { + return this.attackAnimTicks > 0; + } + + @Override + public void handleEntityEvent(byte id) { + if (id == ATTACK_ANIM_EVENT) { + this.attackAnimTicks = ATTACK_ANIM_TICKS; + this.attackDamageApplied = false; + return; + } + super.handleEntityEvent(id); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main", 3, this::mainController) + .triggerableAnim("attack", ATTACK_ANIM)); + } + + private PlayState mainController(AnimationState state) { + if (this.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 this.geoCache; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.contains(TEXTURE_VARIANT_KEY)) { + this.setTextureVariant(tag.getInt(TEXTURE_VARIANT_KEY)); + } else { + this.assignRandomTextureVariant(); + } + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.SCORPION_AMBIENT.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource source) { + return AntarchySoundEvents.SCORPION_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.SCORPION_HURT.get(); + } + + @Override + protected float getSoundVolume() { + return 0.6F; + } + + public int getTextureVariant() { + return this.entityData.get(TEXTURE_VARIANT); + } + + public void setTextureVariant(int variant) { + this.entityData.set(TEXTURE_VARIANT, variant == GREEN_VARIANT ? GREEN_VARIANT : BLUE_VARIANT); + } + + private void assignRandomTextureVariant() { + this.setTextureVariant(this.random.nextBoolean() ? BLUE_VARIANT : GREEN_VARIANT); + } + + private final class ScorpionMeleeAttackGoal extends MeleeAttackGoal { + private ScorpionMeleeAttackGoal() { + super(ScorpionEntity.this, 1.15D, true); + } + + @Override + public void tick() { + if (ScorpionEntity.this.attackTarget != null) { + ScorpionEntity.this.getLookControl().setLookAt(ScorpionEntity.this.attackTarget, 30.0F, 30.0F); + } + super.tick(); + } + + @Override + public boolean canContinueToUse() { + return ScorpionEntity.this.isAttackLocked() || super.canContinueToUse(); + } + + @Override + protected void checkAndPerformAttack(LivingEntity enemy, double distToEnemySqr) { + if (ScorpionEntity.this.isAttackLocked()) { + return; + } + if (distToEnemySqr <= this.getAttackReachSqr(enemy) && this.isTimeToAttack() && ScorpionEntity.this.attackCooldownTicks <= 0) { + this.resetAttackCooldown(); + ScorpionEntity.this.beginAttack(enemy); + return; + } + super.checkAndPerformAttack(enemy, distToEnemySqr); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SizeRayProjectileEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SizeRayProjectileEntity.java new file mode 100644 index 00000000..e77b39d5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SizeRayProjectileEntity.java @@ -0,0 +1,179 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.advancement.AntarchyAdvancements; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; + +public class SizeRayProjectileEntity extends AbstractArrow { + + private static final String CHARGE_LEVEL_KEY = "ChargeLevel"; + private static final int MAX_LIFETIME_TICKS = 20; + private static final ResourceLocation VERY_HUNGRY_CATERPILLAR_ADVANCEMENT = + new ResourceLocation(Antarchy.MODID, "very_hungry_caterpillar"); + private static final EntityDataAccessor CHARGE_LEVEL = + SynchedEntityData.defineId(SizeRayProjectileEntity.class, EntityDataSerializers.INT); + + private final SizeRayType sizeRayType; + + public SizeRayProjectileEntity( + EntityType entityType, + Level level, + SizeRayType sizeRayType + ) { + super(entityType, level); + this.sizeRayType = sizeRayType; + this.configureAsRay(); + this.setChargeLevel(1); + } + + public SizeRayProjectileEntity( + EntityType entityType, + LivingEntity shooter, + Level level, + ItemStack firedFromWeapon, + SizeRayType sizeRayType + ) { + super(entityType, shooter, level); + this.sizeRayType = sizeRayType; + this.configureAsRay(); + this.setChargeLevel(1); + } + + public static SizeRayProjectileEntity createShrink( + EntityType entityType, Level level + ) { + return new SizeRayProjectileEntity(entityType, level, SizeRayType.SHRINK); + } + + public static SizeRayProjectileEntity createGrowth( + EntityType entityType, Level level + ) { + return new SizeRayProjectileEntity(entityType, level, SizeRayType.GROWTH); + } + + public SizeRayType getSizeRayType() { + return this.sizeRayType; + } + + public int getChargeLevel() { + return this.entityData.get(CHARGE_LEVEL); + } + + public int getEffectiveChargeLevel() { + return Math.max(1, Math.min(this.getChargeLevel(), this.getMaximumUsefulChargeLevel())); + } + + public void setChargeLevel(int chargeLevel) { + this.entityData.set(CHARGE_LEVEL, Math.max(1, chargeLevel)); + } + + @Override + protected ItemStack getPickupItem() { + return ItemStack.EMPTY; + } + + @Override + protected void onHitEntity(EntityHitResult result) { + if (!this.level().isClientSide() + && AntarchySettings.sizeChangingRaysEnabled() + && result.getEntity() instanceof LivingEntity livingEntity + && !livingEntity.getType().is(AntarchyTags.Entities.SIZE_CHANGING_IMMUNE)) { + applyScaleChange(livingEntity); + if (this.sizeRayType == SizeRayType.GROWTH + && livingEntity instanceof CaterpillarEntity + && this.getOwner() instanceof ServerPlayer serverPlayer) { + AntarchyAdvancements.award(serverPlayer, VERY_HUNGRY_CATERPILLAR_ADVANCEMENT); + } + } + this.discard(); + } + + @Override + protected void onHitBlock(BlockHitResult result) { + this.discard(); + } + + @Override + public void tick() { + if (!this.level().isClientSide() && this.tickCount > MAX_LIFETIME_TICKS) { + this.discard(); + return; + } + + super.tick(); + + if (!this.level().isClientSide() && this.tickCount > MAX_LIFETIME_TICKS) { + this.discard(); + } + } + + private void configureAsRay() { + this.pickup = Pickup.DISALLOWED; + this.setNoGravity(true); + this.setBaseDamage(0.0D); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(CHARGE_LEVEL, 1); + } + + + private void applyScaleChange(LivingEntity livingEntity) { + this.applyScaleChange(livingEntity, this.getEffectiveChargeLevel()); + } + + private void applyScaleChange(LivingEntity livingEntity, int chargeLevel) { + virtuoel.pehkui.api.ScaleData scaleData = virtuoel.pehkui.api.ScaleTypes.BASE.getScaleData(livingEntity); + double current = scaleData.getTargetScale(); + double delta = AntarchySettings.sizeRayDeltaPerHit() * chargeLevel; + double next = this.sizeRayType == SizeRayType.SHRINK ? current - delta : current + delta; + next = Mth.clamp(next, AntarchySettings.sizeRayMinScale(), AntarchySettings.sizeRayMaxScale()); + scaleData.setTargetScale((float) next); + } + + public int getMaximumUsefulChargeLevel() { + double delta = AntarchySettings.sizeRayDeltaPerHit(); + double availableOffset = this.sizeRayType == SizeRayType.SHRINK + ? 1.0D - AntarchySettings.sizeRayMinScale() + : AntarchySettings.sizeRayMaxScale() - 1.0D; + return Math.max(1, (int) Math.ceil(availableOffset / delta)); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(CHARGE_LEVEL_KEY, this.getChargeLevel()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.setChargeLevel(Math.max(1, tag.getInt(CHARGE_LEVEL_KEY))); + } + + public static void resetScale(LivingEntity livingEntity) { + virtuoel.pehkui.api.ScaleTypes.BASE.getScaleData(livingEntity).setTargetScale(1.0F); + } + + public enum SizeRayType { + SHRINK, + GROWTH + } +} 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 new file mode 100644 index 00000000..71ce6756 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java @@ -0,0 +1,277 @@ +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 net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +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.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.damagesource.DamageSource; +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.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; +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.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; + +import java.util.EnumSet; + +public class SpitBugEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor SPIT_ANIM_TICKS = + SynchedEntityData.defineId(SpitBugEntity.class, EntityDataSerializers.INT); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation SPIT_ANIM = RawAnimation.begin().thenPlay("spit"); + + private static final double MAX_HEALTH = 50.0D; + private static final double MOVEMENT_SPEED = 0.23D; + 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; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int spitCooldownTicks; + private int spitAnimationTicks; + private int spitReleaseTicks; + + public SpitBugEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 10; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, MAX_HEALTH) + .add(Attributes.MOVEMENT_SPEED, MOVEMENT_SPEED) + .add(Attributes.ATTACK_DAMAGE, ATTACK_DAMAGE) + .add(Attributes.FOLLOW_RANGE, FOLLOW_RANGE) + .add(Attributes.ARMOR, 4.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.2D); + } + + 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.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(SPIT_ANIM_TICKS, 0); + } + + @Override + 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.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("spit", SPIT_ANIM)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + CavarynBurrowingMobBehavior.moveOutOfBlocks(this); + super.tick(); + CavarynBurrowingMobBehavior.moveOutOfBlocks(this); + if (this.level().isClientSide) { + return; + } + + if (this.spitCooldownTicks > 0) { + this.spitCooldownTicks--; + } + + if (this.spitAnimationTicks > 0) { + this.spitAnimationTicks--; + this.entityData.set(SPIT_ANIM_TICKS, this.spitAnimationTicks); + if (this.spitReleaseTicks > 0 && --this.spitReleaseTicks == 0) { + this.fireSpitProjectile(); + } + } + } + + @Override + public boolean isInWall() { + return false; + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + boolean hurt = target instanceof LivingEntity livingTarget && this.level() instanceof ServerLevel serverLevel + ? livingTarget.hurt(AntarchyDamageSources.spitBugDisrespect(serverLevel, this, this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)) + : super.doHurtTarget(target); + if (hurt) { + this.playSound(SoundEvents.SPIDER_HURT, 0.7F, 0.8F + this.random.nextFloat() * 0.2F); + } + return hurt; + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.SPIT_BUG_IDLE.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.SPIT_BUG_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.SPIT_BUG_HURT.get(); + } + + @Override + protected void playStepSound(BlockPos pos, BlockState blockState) { + this.playSound(SoundEvents.SPIDER_STEP, 0.18F, 0.95F); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.entityData.get(SPIT_ANIM_TICKS) > 0) { + return state.setAndContinue(SPIT_ANIM); + } + return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); + } + + private boolean canSpitAt(LivingEntity target) { + return this.spitCooldownTicks <= 0 + && this.spitAnimationTicks <= 0 + && this.hasLineOfSight(target) + && this.distanceToSqr(target) <= SPIT_RANGE_SQR + && this.distanceToSqr(target) > MELEE_RANGE_SQR; + } + + private void startSpitAttack() { + this.spitCooldownTicks = SPIT_COOLDOWN_TICKS; + this.spitAnimationTicks = SPIT_ANIMATION_TICKS; + this.spitReleaseTicks = SPIT_RELEASE_TICKS; + this.entityData.set(SPIT_ANIM_TICKS, this.spitAnimationTicks); + this.triggerAnim("main_controller", "spit"); + } + + @SuppressWarnings("unchecked") + private void fireSpitProjectile() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + return; + } + + EntityType projectileType = (EntityType) BuiltInRegistries.ENTITY_TYPE.getOptional( + new ResourceLocation(Antarchy.MODID, "spit_bug_projectile") + ).orElse(null); + if (projectileType == null) { + return; + } + + SpitBugProjectileEntity projectile = new SpitBugProjectileEntity(projectileType, this, serverLevel); + Vec3 origin = this.position() + .add(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(); + + projectile.setPos(origin.x, origin.y, origin.z); + projectile.shoot(direction.x, direction.y, direction.z, 1.05F, 0.0F); + serverLevel.addFreshEntity(projectile); + this.playSound(AntarchySoundEvents.SPIT_BUG_SPIT.get(), 1.0F, 0.85F + this.random.nextFloat() * 0.15F); + } + + private final class SpitAttackGoal extends Goal { + SpitAttackGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = SpitBugEntity.this.getTarget(); + return target != null && target.isAlive(); + } + + @Override + public boolean canContinueToUse() { + return this.canUse(); + } + + @Override + public void tick() { + LivingEntity target = SpitBugEntity.this.getTarget(); + if (target == null) { + return; + } + + SpitBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + + if (SpitBugEntity.this.canSpitAt(target)) { + SpitBugEntity.this.getNavigation().stop(); + SpitBugEntity.this.startSpitAttack(); + return; + } + + if (SpitBugEntity.this.distanceToSqr(target) > 36.0D || !SpitBugEntity.this.hasLineOfSight(target)) { + SpitBugEntity.this.getNavigation().moveTo(target, 1.0D); + } else { + SpitBugEntity.this.getNavigation().stop(); + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugProjectileEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugProjectileEntity.java new file mode 100644 index 00000000..ca8d70ce --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugProjectileEntity.java @@ -0,0 +1,184 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.content.effect.GoopedEffectHooks; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import net.minecraft.core.Holder; +import net.minecraft.core.particles.ParticleTypes; +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.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.ThrowableItemProjectile; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; + +public class SpitBugProjectileEntity extends ThrowableItemProjectile { + private static final EntityDataAccessor LINGERING = + SynchedEntityData.defineId(SpitBugProjectileEntity.class, EntityDataSerializers.BOOLEAN); + private static final int MAX_FLIGHT_TICKS = 100; + private static final int LINGER_DURATION_TICKS = 300; + private static final int DIRECT_HIT_DAMAGE = 8; + private static final float LINGER_RADIUS = 1.65F; + + private boolean lingering; + private int lingeringTicks; + + public SpitBugProjectileEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public SpitBugProjectileEntity(EntityType entityType, LivingEntity owner, Level level) { + super(entityType, owner, level); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(LINGERING, false); + } + + @Override + protected Item getDefaultItem() { + return Items.SLIME_BALL; + } + + @Override + protected float getGravity() { + return (float) (0.03D); + } + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + public boolean isAttackable() { + return false; + } + + public boolean isLingering() { + return this.entityData.get(LINGERING); + } + + public float getRenderScale(float partialTick) { + if (!this.isLingering()) { + return 0.65F; + } + float progress = Math.min(1.0F, (this.lingeringTicks + partialTick) / 8.0F); + return 0.6F + progress * 0.5F; + } + + @Override + public void tick() { + if (this.isLingering()) { + this.tickLingering(); + return; + } + + super.tick(); + if (this.tickCount > MAX_FLIGHT_TICKS) { + this.discard(); + return; + } + + if (this.level().isClientSide) { + this.level().addParticle(ParticleTypes.ITEM_SLIME, this.getX(), this.getY(), this.getZ(), 0.0D, 0.0D, 0.0D); + } + } + + private void tickLingering() { + this.lingeringTicks++; + this.setDeltaMovement(Vec3.ZERO); + + if (this.level().isClientSide) { + double radius = 0.4D + this.random.nextDouble() * 0.45D; + this.level().addParticle( + ParticleTypes.ITEM_SLIME, + this.getX() + (this.random.nextDouble() - 0.5D) * radius, + this.getY() + 0.04D, + this.getZ() + (this.random.nextDouble() - 0.5D) * radius, + 0.0D, + 0.0D, + 0.0D + ); + return; + } + + if (this.lingeringTicks % 4 == 0) { + this.applyLingeringSpit(); + } + + if (this.lingeringTicks >= LINGER_DURATION_TICKS) { + this.discard(); + } + } + + private void applyLingeringSpit() { + for (LivingEntity target : this.level().getEntitiesOfClass( + LivingEntity.class, + this.getBoundingBox().inflate(LINGER_RADIUS, 0.6D, LINGER_RADIUS), + entity -> entity.isAlive() && entity != this.getOwner() + )) { + applyGooped(target, 30); + target.makeStuckInBlock(Blocks.HONEY_BLOCK.defaultBlockState(), new Vec3(0.2D, 0.0D, 0.2D)); + } + + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.ITEM_SLIME, this.getX(), this.getY() + 0.05D, this.getZ(), 3, 0.45D, 0.02D, 0.45D, 0.0D); + } + } + + @Override + protected void onHitEntity(EntityHitResult result) { + if (!this.level().isClientSide && result.getEntity() instanceof LivingEntity livingTarget) { + Entity owner = this.getOwner(); + if (owner instanceof SpitBugEntity && this.level() instanceof ServerLevel serverLevel) { + livingTarget.hurt(AntarchyDamageSources.spitBugDisrespect(serverLevel, this, owner), DIRECT_HIT_DAMAGE); + } else if (owner instanceof LivingEntity livingOwner) { + livingTarget.hurt(this.damageSources().mobProjectile(this, livingOwner), DIRECT_HIT_DAMAGE); + } else { + livingTarget.hurt(this.damageSources().magic(), DIRECT_HIT_DAMAGE); + } + applyGooped(livingTarget, GoopedEffectHooks.PROJECTILE_DURATION_TICKS); + livingTarget.makeStuckInBlock(Blocks.HONEY_BLOCK.defaultBlockState(), new Vec3(0.25D, 0.0D, 0.25D)); + } + + this.beginLingering(result.getLocation()); + } + + @Override + protected void onHitBlock(BlockHitResult result) { + this.beginLingering(result.getLocation()); + } + + private void beginLingering(Vec3 location) { + if (this.isLingering()) { + return; + } + + this.lingering = true; + this.entityData.set(LINGERING, true); + this.lingeringTicks = 0; + this.noPhysics = true; + this.setPos(location.x, location.y + 0.05D, location.z); + this.setDeltaMovement(Vec3.ZERO); + } + + private static void applyGooped(LivingEntity target, int durationTicks) { + Holder gooped = GoopedEffectHooks.holder(); + if (gooped != null) { + target.addEffect(new MobEffectInstance(gooped.value(), durationTicks, 0, false, true, true)); + } + } +} 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 new file mode 100644 index 00000000..33db0795 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java @@ -0,0 +1,148 @@ +package com.craisinlord.antarchy.content.entity; + +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.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; +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.PanicGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +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 StinkBugEntity extends Animal implements GeoEntity { + private static final String MAIN_CONTROLLER = "main_controller"; + private static final String FART_CONTROLLER = "fart_controller"; + private static final String FART_TRIGGER = "fart"; + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation FART_ANIM = RawAnimation.begin().thenPlay("fart"); + private static final int FART_ANIMATION_TICKS = 30; + private static final int FART_RELEASE_TICKS = 6; + private static final int STINK_BURST_PARTICLES = 32; + private static final double STINK_BURST_RADIUS = 8.0D; + private static final int STINK_BURST_DURATION_TICKS = 1200; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int fartAnimationTicks; + private boolean pendingFartBurst; + + public StinkBugEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 2; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 6.0D) + .add(Attributes.MOVEMENT_SPEED, 0.24D) + .add(Attributes.FOLLOW_RANGE, 8.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; + } + return level.getDifficulty() != Difficulty.PEACEFUL + && Mob.checkMobSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new PanicGoal(this, 1.4D)); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.9D)); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 6.0F)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); + } + + @Override + public void tick() { + super.tick(); + + if (this.fartAnimationTicks > 0) { + this.fartAnimationTicks--; + if (this.fartAnimationTicks == FART_RELEASE_TICKS && this.pendingFartBurst && !this.level().isClientSide()) { + this.playSound(AntarchySoundEvents.STINK_BUG_FART.get(), 1.7F, 0.9F + this.random.nextFloat() * 0.1F); + StinkyBehavior.emitBurst(this, STINK_BURST_PARTICLES); + StinkyBehavior.applyBurstStinkyEffect(this, STINK_BURST_RADIUS, STINK_BURST_DURATION_TICKS); + this.pendingFartBurst = false; + } + } + } + + @Override + public boolean hurt(DamageSource source, float amount) { + boolean hurt = super.hurt(source, amount); + if (hurt && !this.pendingFartBurst) { + this.triggerFartAnimation(); + this.pendingFartBurst = true; + } + return hurt; + } + + @Override + public boolean isFood(ItemStack stack) { + return false; + } + + @Override + @Nullable + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return AntarchyObjects.STINK_BUG.get().create(level); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, MAIN_CONTROLLER, 2, this::mainAnimController)); + controllers.add(new AnimationController<>(this, FART_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(FART_TRIGGER, FART_ANIM)); + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.STINK_BUG_IDLE.get(); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + private PlayState mainAnimController(AnimationState animationState) { + animationState.setAnimation(animationState.isMoving() ? WALK_ANIM : IDLE_ANIM); + return PlayState.CONTINUE; + } + + private void triggerFartAnimation() { + this.fartAnimationTicks = FART_ANIMATION_TICKS; + if (!this.level().isClientSide()) { + this.triggerAnim(FART_CONTROLLER, FART_TRIGGER); + } + } +} 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 new file mode 100644 index 00000000..87c872d4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java @@ -0,0 +1,982 @@ +package com.craisinlord.antarchy.content.entity; + +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.antarchy.content.damage.AntarchyDamageSources; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.server.level.ServerBossEvent; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.BossEvent; +import net.minecraft.world.Difficulty; +import net.minecraft.tags.DamageTypeTags; +import net.minecraft.world.damagesource.DamageSource; +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.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.MoveTowardsTargetGoal; +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.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.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class ToreterrorEntity extends Monster implements GeoEntity { + + private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(ToreterrorEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor PHASE_2 = SynchedEntityData.defineId(ToreterrorEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor JUMP_SHAKING = SynchedEntityData.defineId(ToreterrorEntity.class, EntityDataSerializers.BOOLEAN); + + private static final int ANIM_IDLE = 0; + private static final int ANIM_WALK = 1; + private static final int ANIM_SHOOT = 2; + private static final int ANIM_JUMP_ATTACK = 3; + private static final int ANIM_SPIN_START = 4; + private static final int ANIM_SPIN_LOOP = 5; + private static final int ANIM_SPIN_END = 6; + private static final int ANIM_DEATH = 7; + private static final int ANIM_RAPID_SHOOT = 8; + + private static final int ATTACK_RAPID_FIRE = 0; + private static final int ATTACK_BOMBERS = 1; + + private static final int DEATH_TICKS = 60; + private static final int SHOOT_TOTAL_TICKS = 75; + private static final int RAPID_FIRE_INTERVAL = 4; + private static final int RAPID_FIRE_END_TICK = 60; + private static final int SHOOT_BOMBER_TICK = 12; + private static final int SHOOT_BOMBER_SECOND_TICK = 32; + private static final int JUMP_TOTAL_TICKS = 40; + private static final int JUMP_LAUNCH_TICK = 10; + private static final int JUMP_SHAKE_TICKS = 12; + private static final int SPIN_START_TOTAL_TICKS = 5; + private static final int SPIN_LOOP_MIN_TICKS = 200; + private static final int SPIN_LOOP_MAX_TICKS = 300; + private static final int SPIN_END_TOTAL_TICKS = 10; + private static final int SPIN_HIT_INTERVAL = 5; + private static final int SPIN_STUCK_FAIL_LIMIT = 10; + + private static final double CLOSE_RANGE_SQR = 64.0D; + private static final double JUMP_RANGE_SQR = 400.0D; + private static final double RANGED_MAX_RANGE_SQR = 625.0D; + private static final double SPIN_TRIGGER_RANGE_SQR = 225.0D; + private static final double SPIN_LEASH_RANGE_SQR = 400.0D; + private static final double SPIN_RADIUS = 2.5D; + private static final double SPIN_MOVE_SPEED = 0.65D; + private static final double SPIN_ANIMATION_SPEED = 0.49D; + private static final double JUMP_SHOCKWAVE_RADIUS = 6.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 SHOOT_ANIM = RawAnimation.begin().thenPlay("shoot").thenLoop("Idle"); + private static final RawAnimation RAPID_SHOOT_ANIM = RawAnimation.begin().thenLoop("shoot"); + private static final RawAnimation JUMP_ANIM = RawAnimation.begin().thenPlay("jump_attack").thenLoop("Idle"); + private static final RawAnimation SPIN_START_ANIM = RawAnimation.begin().thenPlay("spin_attack_start"); + private static final RawAnimation SPIN_LOOP_ANIM = RawAnimation.begin().thenLoop("spin_attack"); + private static final RawAnimation SPIN_END_ANIM = RawAnimation.begin().thenPlay("spin_attack_end"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private final ServerBossEvent bossEvent = new com.craisinlord.antarchy.content.boss.EntityLinkedServerBossEvent(this.getUUID(), Component.translatable("entity.antarchy.toreterror"), BossEvent.BossBarColor.GREEN, BossEvent.BossBarOverlay.PROGRESS); + + private int shootAnimTicks; + private int jumpAnimTicks; + private int spinStartTicks; + private int spinLoopTicks; + private int spinEndTicks; + private int spinLoopTotalTicks; + private int shootCooldown; + private int jumpCooldown; + private int spinCooldown; + private int spinRicochetCooldown; + private boolean jumpLaunched; + private boolean jumpAirborne; + private boolean shockwaveApplied; + private int jumpShakeTicks; + private int shootAttackType; + private boolean shootBomberFired; + private boolean shootBomberFiredSecond; + private int rapidFireNextTick; + private Vec3 spinDirection = Vec3.ZERO; + private int spinStrafeSign = 1; + private int spinStuckTicks; + private Vec3 spinProgressAnchor = Vec3.ZERO; + private int spinProgressTicks; + private final Map spinHitCooldowns = new HashMap<>(); + + public ToreterrorEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 50; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.toreterrorHealth()) + .add(Attributes.ATTACK_DAMAGE, 8.0D) + .add(Attributes.MOVEMENT_SPEED, 0.325D) + .add(Attributes.FOLLOW_RANGE, 48.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.85D) + .add(Attributes.ARMOR, 16.0D) + .add(Attributes.ARMOR_TOUGHNESS, 4.0D); + } + + 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; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + this.entityData.define(PHASE_2, false); + this.entityData.define(JUMP_SHAKING, false); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new ToreterrorFloatGoal()); + this.goalSelector.addGoal(1, new ToreterrorRangedGoal()); + this.goalSelector.addGoal(2, new ToreterrorJumpGoal()); + this.goalSelector.addGoal(3, new ToreterrorSpinGoal()); + this.goalSelector.addGoal(4, new MoveTowardsTargetGoal(this, 1.0D, 64.0F)); + this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 16.0F)); + this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 0.5D)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::canTargetEntity)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .triggerableAnim("jump_attack", JUMP_ANIM) + .triggerableAnim("spin_attack_start", SPIN_START_ANIM) + .triggerableAnim("spin_attack", SPIN_LOOP_ANIM) + .triggerableAnim("spin_attack_end", SPIN_END_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + int animState = this.getAnimationState(); + state.getController().setAnimationSpeed(1.0D); + return switch (animState) { + case ANIM_WALK -> state.setAndContinue(WALK_ANIM); + case ANIM_SHOOT -> state.setAndContinue(SHOOT_ANIM); + case ANIM_RAPID_SHOOT -> state.setAndContinue(RAPID_SHOOT_ANIM); + case ANIM_JUMP_ATTACK -> state.setAndContinue(JUMP_ANIM); + case ANIM_SPIN_START -> state.setAndContinue(SPIN_START_ANIM); + case ANIM_SPIN_LOOP -> { + state.getController().setAnimationSpeed(SPIN_ANIMATION_SPEED); + yield state.setAndContinue(SPIN_LOOP_ANIM); + } + case ANIM_SPIN_END -> state.setAndContinue(SPIN_END_ANIM); + case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); + default -> state.setAndContinue(IDLE_ANIM); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + if (this.isJumpShaking()) { + com.craisinlord.antarchy.content.client.CameraShakeClientState.register( + this, + com.craisinlord.antarchy.content.client.CameraShakeClientState.TORETERROR_RANGE, + com.craisinlord.antarchy.content.client.CameraShakeClientState.TORETERROR_STRENGTH, + this::isJumpShaking + ); + } + return; + } + + if (this.shootCooldown > 0) this.shootCooldown--; + if (this.jumpCooldown > 0) this.jumpCooldown--; + if (this.spinCooldown > 0) this.spinCooldown--; + if (this.spinRicochetCooldown > 0) this.spinRicochetCooldown--; + if (this.jumpShakeTicks > 0) { + this.jumpShakeTicks--; + if (this.jumpShakeTicks <= 0) { + this.entityData.set(JUMP_SHAKING, false); + } + } + + this.spinHitCooldowns.replaceAll((uuid, cd) -> cd - 1); + this.spinHitCooldowns.entrySet().removeIf(e -> e.getValue() <= 0); + + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + + if (this.shootAnimTicks > 0) { + this.tickShootAnimation(); + } else if (this.jumpAnimTicks > 0) { + this.tickJumpAnimation(); + } else if (this.isSpinSequenceActive()) { + this.tickSpinSequence(); + } else { + this.updateIdleAnimation(); + } + + this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (source.is(net.minecraft.world.damagesource.DamageTypes.DROWN)) return false; + if (source.is(DamageTypeTags.IS_PROJECTILE)) { + amount *= (float) AntarchySettings.toreterrorProjectileDamageMultiplier(); + } + if (!this.isPhase2()) { + float halfHealth = this.getMaxHealth() * 0.5F; + if (this.getHealth() - amount <= halfHealth) { + float capDamage = this.getHealth() - halfHealth; + if (capDamage <= 0.0F) { + this.enterPhase2(); + return false; + } + boolean result = super.hurt(source, capDamage); + if (result) this.enterPhase2(); + return result; + } + } + return super.hurt(source, amount); + } + + @Override + public boolean isInvulnerableTo(DamageSource source) { + if (super.isInvulnerableTo(source)) { + return true; + } + return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.toreterrorDamageRange()); + } + + private void enterPhase2() { + this.entityData.set(PHASE_2, true); + } + + public boolean isPhase2() { + return this.entityData.get(PHASE_2); + } + + public boolean isJumpShaking() { + return this.entityData.get(JUMP_SHAKING); + } + + @Override + protected net.minecraft.sounds.SoundEvent getAmbientSound() { + return AntarchySoundEvents.TORETERROR_IDLE.get(); + } + + @Override + protected net.minecraft.sounds.SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.TORETERROR_HURT.get(); + } + + @Override + protected net.minecraft.sounds.SoundEvent getDeathSound() { + return AntarchySoundEvents.TORETERROR_DEATH.get(); + } + + @Override + public void startSeenByPlayer(ServerPlayer player) { + super.startSeenByPlayer(player); + this.bossEvent.addPlayer(player); + } + + @Override + public void stopSeenByPlayer(ServerPlayer player) { + super.stopSeenByPlayer(player); + this.bossEvent.removePlayer(player); + } + + @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 + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt("AnimationState", this.getAnimationState()); + tag.putInt("ShootCooldown", this.shootCooldown); + tag.putInt("JumpCooldown", this.jumpCooldown); + tag.putInt("SpinCooldown", this.spinCooldown); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.entityData.set(ANIMATION_STATE, tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_IDLE); + this.shootCooldown = tag.getInt("ShootCooldown"); + this.jumpCooldown = tag.getInt("JumpCooldown"); + this.spinCooldown = tag.getInt("SpinCooldown"); + } + + @Override + public void die(DamageSource damageSource) { + if (!this.level().isClientSide) { + this.setAnimationState(ANIM_DEATH); + this.shootAnimTicks = 0; + this.jumpAnimTicks = 0; + this.stopSpinSequence(); + this.setDeltaMovement(Vec3.ZERO); + this.getNavigation().stop(); + } + super.die(damageSource); + } + + @Override + protected void tickDeath() { + this.deathTime++; + if (this.deathTime == 1) { + this.setAnimationState(ANIM_DEATH); + } + if (this.deathTime >= DEATH_TICKS) { + this.remove(RemovalReason.KILLED); + this.dropExperience(); + } + } + + public int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setAnimationState(int state) { + if (this.entityData.get(ANIMATION_STATE) != state) { + this.entityData.set(ANIMATION_STATE, state); + String trigger = switch (state) { + case ANIM_JUMP_ATTACK -> "jump_attack"; + case ANIM_SPIN_START -> "spin_attack_start"; + case ANIM_SPIN_LOOP -> "spin_attack"; + case ANIM_SPIN_END -> "spin_attack_end"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + } + } + + private void updateIdleAnimation() { + Vec3 vel = this.getDeltaMovement(); + boolean moving = (vel.x * vel.x + vel.z * vel.z) > 0.0004D; + this.setAnimationState(moving ? ANIM_WALK : ANIM_IDLE); + } + + private boolean isInAttackAnimation() { + return this.shootAnimTicks > 0 || this.jumpAnimTicks > 0 || this.isSpinSequenceActive(); + } + + private boolean isSpinSequenceActive() { + return this.spinStartTicks > 0 || this.spinLoopTicks > 0 || this.spinEndTicks > 0; + } + + private void tickShootAnimation() { + int elapsed = SHOOT_TOTAL_TICKS - this.shootAnimTicks; + switch (this.shootAttackType) { + case ATTACK_RAPID_FIRE -> { + this.setAnimationState(ANIM_RAPID_SHOOT); + if (elapsed >= this.rapidFireNextTick && elapsed < RAPID_FIRE_END_TICK) { + this.rapidFireNextTick += RAPID_FIRE_INTERVAL; + this.fireRapidBomb(); + } + } + default -> { + this.setAnimationState(ANIM_SHOOT); + if (!this.shootBomberFired && elapsed >= SHOOT_BOMBER_TICK) { + this.shootBomberFired = true; + this.fireBomberBurst(); + } + if (this.isPhase2() && !this.shootBomberFiredSecond && elapsed >= SHOOT_BOMBER_SECOND_TICK) { + this.shootBomberFiredSecond = true; + this.fireBomberBurst(); + } + } + } + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.85D)); + if (this.getTarget() != null) { + Vec3 toTarget = this.getTarget().position().subtract(this.position()); + float yaw = (float) (net.minecraft.util.Mth.atan2(toTarget.z, toTarget.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(yaw); + this.yBodyRot = yaw; + this.yHeadRot = yaw; + this.setYHeadRot(yaw); + } + this.shootAnimTicks--; + if (this.shootAnimTicks <= 0) { + this.shootCooldown = (int) (AntarchySettings.waterCannonCooldownSeconds() * 20.0D) + this.random.nextInt(60); + } + } + + private void tickJumpAnimation() { + this.setAnimationState(ANIM_JUMP_ATTACK); + int elapsed = JUMP_TOTAL_TICKS - this.jumpAnimTicks; + if (!this.jumpLaunched && elapsed >= JUMP_LAUNCH_TICK) { + this.jumpLaunched = true; + LivingEntity target = this.getTarget(); + if (target != null) { + Vec3 toTarget = target.position().subtract(this.position()).normalize(); + this.setDeltaMovement(toTarget.x * 0.6D, 1.15D, toTarget.z * 0.6D); + this.hasImpulse = true; + } + } + if (this.jumpLaunched && !this.onGround()) { + this.jumpAirborne = true; + } + if (this.jumpLaunched && this.jumpAirborne && !this.shockwaveApplied) { + if (this.onGround()) { + this.shockwaveApplied = true; + this.playSound(AntarchySoundEvents.TORETERROR_JUMP_LAND.get(), 1.2F, 0.9F + this.random.nextFloat() * 0.15F); + this.applyJumpShockwave(); + this.jumpShakeTicks = JUMP_SHAKE_TICKS; + this.entityData.set(JUMP_SHAKING, true); + } else if (this.jumpAnimTicks <= 10) { + Vec3 vel = this.getDeltaMovement(); + this.setDeltaMovement(vel.x * 0.5D, Math.min(vel.y, -1.5D), vel.z * 0.5D); + this.hasImpulse = true; + if (this.jumpAnimTicks <= 2) { + this.jumpAnimTicks = 2; + } + } + } + this.jumpAnimTicks--; + if (this.jumpAnimTicks <= 0) { + this.jumpCooldown = 140 + this.random.nextInt(80); + } + } + + private void tickSpinSequence() { + this.getNavigation().stop(); + if (this.spinStartTicks > 0) { + this.tickSpinStart(); + return; + } + if (this.spinLoopTicks > 0) { + this.tickSpinLoop(); + return; + } + this.tickSpinEnd(); + } + + private void tickSpinStart() { + this.setAnimationState(ANIM_SPIN_START); + this.setDeltaMovement(this.getDeltaMovement().scale(0.75D)); + LivingEntity target = this.getTarget(); + if (target != null) { + Vec3 towardTarget = horizontalDirectionTo(target.position()); + if (towardTarget.lengthSqr() > 1.0E-4D) { + this.spinDirection = towardTarget; + this.lookInDirection(towardTarget); + } + } + this.spinStartTicks--; + } + + private void tickSpinLoop() { + this.setAnimationState(ANIM_SPIN_LOOP); + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + this.beginSpinEnd(); + return; + } + + this.updateSpinDirection(target); + if (!this.moveDuringSpin(target)) { + this.spinStuckTicks++; + if (this.spinStuckTicks >= SPIN_STUCK_FAIL_LIMIT) { + this.beginSpinEnd(); + return; + } + } else { + this.spinStuckTicks = 0; + } + + this.spinProgressTicks++; + if (this.spinProgressTicks >= 20) { + if (this.position().distanceToSqr(this.spinProgressAnchor) < 4.0D) { + this.beginSpinEnd(); + return; + } + this.spinProgressAnchor = this.position(); + this.spinProgressTicks = 0; + } + + int elapsed = this.spinLoopTotalTicks - this.spinLoopTicks; + if (elapsed % SPIN_HIT_INTERVAL == 0) { + this.applySpinDamage(); + } + + this.lookInDirection(this.spinDirection); + this.spinLoopTicks--; + if (this.spinLoopTicks <= 0) { + this.beginSpinEnd(); + } + } + + private void tickSpinEnd() { + this.setAnimationState(ANIM_SPIN_END); + this.setDeltaMovement(this.getDeltaMovement().multiply(0.7D, 1.0D, 0.7D)); + this.spinEndTicks--; + if (this.spinEndTicks <= 0) { + this.stopSpinSequence(); + this.spinCooldown = 340 + this.random.nextInt(80); + this.spinHitCooldowns.clear(); + } + } + + private void updateSpinDirection(LivingEntity target) { + Vec3 towardTarget = horizontalDirectionTo(target.position()); + if (towardTarget.lengthSqr() <= 1.0E-4D) { + return; + } + if (this.distanceToSqr(target) > SPIN_LEASH_RANGE_SQR) { + this.spinDirection = towardTarget; + return; + } + Vec3 forward = this.spinDirection.lengthSqr() > 1.0E-4D ? this.spinDirection.normalize() : towardTarget; + Vec3 combined = forward.scale(0.99D).add(towardTarget.scale(0.01D)); + this.spinDirection = combined.lengthSqr() > 1.0E-4D ? combined.normalize() : towardTarget; + } + + private boolean moveDuringSpin(LivingEntity target) { + Vec3 direction = this.spinDirection.lengthSqr() > 1.0E-4D ? this.spinDirection.normalize() : Vec3.ZERO; + if (direction == Vec3.ZERO) { + return false; + } + + if (this.trySpinMoves(direction, false)) { + return true; + } + + this.playSpinRicochetSound(); + return this.trySpinRicochetTowardTarget(target, direction); + } + + private void playSpinRicochetSound() { + if (this.spinRicochetCooldown > 0) { + return; + } + this.spinRicochetCooldown = 6; + this.playSound(AntarchySoundEvents.TORETERROR_RICOCHET.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); + } + + private boolean trySpinRicochetTowardTarget(LivingEntity target, Vec3 fallbackDirection) { + this.spinStrafeSign *= -1; + Vec3 towardTarget = horizontalDirectionTo(target.position()); + if (towardTarget.lengthSqr() <= 1.0E-4D) { + towardTarget = fallbackDirection; + } + + if (this.trySpinMoves(towardTarget, true)) { + this.spinDirection = towardTarget.normalize(); + return true; + } + + Vec3 slightRight = rotateHorizontal(towardTarget, 18.0D); + if (this.trySpinMoves(slightRight, true)) { + this.spinDirection = towardTarget.normalize(); + return true; + } + + Vec3 slightLeft = rotateHorizontal(towardTarget, -18.0D); + if (this.trySpinMoves(slightLeft, true)) { + this.spinDirection = towardTarget.normalize(); + return true; + } + + return false; + } + + private boolean trySpinMoves(Vec3 baseDirection, boolean bounced) { + Vec3[] attempts = new Vec3[]{ + baseDirection, + rotateHorizontal(baseDirection, 28.0D * this.spinStrafeSign), + rotateHorizontal(baseDirection, -28.0D * this.spinStrafeSign), + rotateHorizontal(baseDirection, 52.0D * this.spinStrafeSign), + rotateHorizontal(baseDirection, -52.0D * this.spinStrafeSign) + }; + for (Vec3 attempt : attempts) { + if (this.trySpinMove(attempt, 0.0D, 0.0D) || this.trySpinMove(attempt, 1.0D, 0.42D) || this.trySpinMove(attempt, -1.0D, -0.28D)) { + this.spinDirection = attempt.normalize(); + if (bounced) { + this.spinStrafeSign *= -1; + } + return true; + } + } + return false; + } + + private boolean trySpinMove(Vec3 direction, double yOffset, double verticalVelocity) { + Vec3 horizontalMove = new Vec3(direction.x * SPIN_MOVE_SPEED, 0.0D, direction.z * SPIN_MOVE_SPEED); + AABB movedBox = this.getBoundingBox().move(horizontalMove.x, yOffset, horizontalMove.z); + if (!this.level().noCollision(this, movedBox)) { + return false; + } + if (!this.hasSpinSupport(movedBox)) { + return false; + } + + this.setDeltaMovement(horizontalMove.x, verticalVelocity, horizontalMove.z); + this.hasImpulse = true; + return true; + } + + private boolean hasSpinSupport(AABB box) { + double probeY = box.minY - 0.2D; + double[][] probes = new double[][]{ + {box.getCenter().x, box.getCenter().z}, + {box.minX + 0.25D, box.minZ + 0.25D}, + {box.minX + 0.25D, box.maxZ - 0.25D}, + {box.maxX - 0.25D, box.minZ + 0.25D}, + {box.maxX - 0.25D, box.maxZ - 0.25D} + }; + + for (double[] probe : probes) { + BlockPos supportPos = BlockPos.containing(probe[0], probeY, probe[1]); + if (this.level().loadedAndEntityCanStandOnFace(supportPos, this, Direction.UP)) { + return true; + } + BlockPos lowerSupportPos = supportPos.below(); + if (this.level().loadedAndEntityCanStandOnFace(lowerSupportPos, this, Direction.UP)) { + return true; + } + } + return false; + } + + private Vec3 horizontalDirectionTo(Vec3 targetPos) { + Vec3 diff = targetPos.subtract(this.position()); + Vec3 horizontal = new Vec3(diff.x, 0.0D, diff.z); + return horizontal.lengthSqr() > 1.0E-4D ? horizontal.normalize() : Vec3.ZERO; + } + + private void lookInDirection(Vec3 direction) { + if (direction.lengthSqr() <= 1.0E-4D) { + return; + } + float yaw = (float) (net.minecraft.util.Mth.atan2(direction.z, direction.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(yaw); + this.yBodyRot = yaw; + this.yHeadRot = yaw; + this.setYHeadRot(yaw); + } + + private static Vec3 rotateHorizontal(Vec3 direction, double degrees) { + if (direction.lengthSqr() <= 1.0E-4D) { + return Vec3.ZERO; + } + double radians = Math.toRadians(degrees); + double cos = Math.cos(radians); + double sin = Math.sin(radians); + double x = direction.x * cos - direction.z * sin; + double z = direction.x * sin + direction.z * cos; + return new Vec3(x, 0.0D, z).normalize(); + } + + private void beginSpinEnd() { + this.spinStartTicks = 0; + this.spinLoopTicks = 0; + if (this.spinEndTicks <= 0) { + this.spinEndTicks = SPIN_END_TOTAL_TICKS; + } + } + + private void stopSpinSequence() { + this.spinStartTicks = 0; + this.spinLoopTicks = 0; + this.spinEndTicks = 0; + this.spinLoopTotalTicks = 0; + this.spinDirection = Vec3.ZERO; + this.spinStrafeSign = 1; + this.spinStuckTicks = 0; + this.spinProgressAnchor = Vec3.ZERO; + this.spinProgressTicks = 0; + } + + private void startSpinSequence(LivingEntity target) { + this.spinStartTicks = SPIN_START_TOTAL_TICKS; + this.spinLoopTotalTicks = SPIN_LOOP_MIN_TICKS + this.random.nextInt(SPIN_LOOP_MAX_TICKS - SPIN_LOOP_MIN_TICKS + 1); + this.spinLoopTicks = this.spinLoopTotalTicks; + this.spinEndTicks = 0; + this.spinStuckTicks = 0; + this.spinProgressAnchor = this.position(); + this.spinProgressTicks = 0; + this.spinStrafeSign = this.random.nextBoolean() ? 1 : -1; + this.spinHitCooldowns.clear(); + this.spinDirection = target == null ? Vec3.ZERO : this.horizontalDirectionTo(target.position()); + this.playSound(AntarchySoundEvents.TORETERROR_SPIN.get(), 0.66F, 0.95F + this.random.nextFloat() * 0.1F); + } + + private Vec3 calcLaunchVelocity(Vec3 from, Vec3 to, double minSpeed) { + Vec3 diff = to.subtract(from); + 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); + } + + private void fireRapidBomb() { + if (!(this.level() instanceof ServerLevel serverLevel)) return; + LivingEntity target = this.getTarget(); + if (target == null) return; + this.playSound(AntarchySoundEvents.WATER_CANNON_FIRE.get(), 0.8F, 0.9F + this.random.nextFloat() * 0.2F); + Vec3 from = new Vec3(this.getX(), this.getEyeY(), this.getZ()); + Vec3 to = new Vec3(target.getX(), target.getEyeY(), target.getZ()); + Vec3 baseVel = calcLaunchVelocity(from, to, 1.5); + int count = this.isPhase2() ? 2 : 1; + for (int i = 0; i < count; i++) { + double spread = count > 1 ? (i - 0.5) * 0.15 : 0.0; + Vec3 vel = new Vec3(baseVel.x + spread, baseVel.y, baseVel.z - spread); + WaterBombEntity bomb = new WaterBombEntity(this.level(), this); + bomb.setPos(from.x, from.y, from.z); + bomb.setDeltaMovement(vel); + bomb.hasImpulse = true; + serverLevel.addFreshEntity(bomb); + } + } + + private void fireBomberBurst() { + if (!(this.level() instanceof ServerLevel serverLevel)) return; + LivingEntity target = this.getTarget(); + if (target == null) return; + this.playSound(AntarchySoundEvents.TORETERROR_BOMBER_FIRE.get(), 1.1F, 0.9F + this.random.nextFloat() * 0.15F); + int count = 3; + for (int i = 0; i < count; i++) { + BomberEntity bomber = AntarchyObjects.BOMBER.get().create(this.level()); + if (bomber == null) continue; + double spreadAngle = (i - count / 2.0D) * 20.0D; + double yaw = Math.toRadians(this.getYRot() + spreadAngle); + double vx = -Math.sin(yaw) * 1.2D; + double vy = 0.4D; + double vz = Math.cos(yaw) * 1.2D; + bomber.moveTo(this.getX() + vx * 0.5D, this.getEyeY(), this.getZ() + vz * 0.5D, this.getYRot(), 0); + bomber.setDeltaMovement(vx, vy, vz); + bomber.setTarget(target); + serverLevel.addFreshEntity(bomber); + bomber.primeFuse(); + } + } + + private void applyJumpShockwave() { + if (!(this.level() instanceof ServerLevel serverLevel)) return; + AABB shockArea = this.getBoundingBox().inflate(JUMP_SHOCKWAVE_RADIUS, 2.0D, JUMP_SHOCKWAVE_RADIUS); + List victims = this.level().getEntitiesOfClass(LivingEntity.class, shockArea, this::canTargetEntity); + float damage = (float) AntarchySettings.toreterrorJumpAttackDamage(); + for (LivingEntity victim : victims) { + victim.hurt(AntarchyDamageSources.toreterrorJump(serverLevel, this), damage); + Vec3 knockDir = victim.position().subtract(this.position()).normalize().add(0, 0.4D, 0); + double knockback = AntarchySettings.toreterrorJumpAttackKnockback(); + victim.push(knockDir.x * knockback, 0.5D, knockDir.z * knockback); + victim.hurtMarked = true; + } + this.playSound(SoundEvents.GENERIC_EXPLODE, 1.5F, 0.75F); + serverLevel.sendParticles(net.minecraft.core.particles.ParticleTypes.EXPLOSION, this.getX(), this.getY() + 0.5D, this.getZ(), 3, 1.0D, 0.3D, 1.0D, 0.0D); + serverLevel.sendParticles(net.minecraft.core.particles.ParticleTypes.SPLASH, this.getX(), this.getY() + 0.5D, this.getZ(), 40, 2.0D, 0.5D, 2.0D, 0.2D); + } + + private void applySpinDamage() { + if (!(this.level() instanceof ServerLevel)) return; + AABB spinArea = this.getBoundingBox().inflate(SPIN_RADIUS, SPIN_RADIUS, SPIN_RADIUS); + List victims = this.level().getEntitiesOfClass(LivingEntity.class, spinArea, this::canTargetEntity); + float damage = (float) AntarchySettings.toreterrorSpinDamage(); + double knockback = AntarchySettings.toreterrorSpinKnockback(); + for (LivingEntity victim : victims) { + UUID id = victim.getUUID(); + if (this.spinHitCooldowns.getOrDefault(id, 0) > 0) continue; + if (victim.hurt(AntarchyDamageSources.toreterrorSpin((ServerLevel) this.level(), this), damage)) { + this.spinHitCooldowns.put(id, 20); + Vec3 knockDir = victim.position().subtract(this.position()).normalize(); + victim.push(knockDir.x * knockback, 0.35D, knockDir.z * knockback); + victim.hurtMarked = true; + } + } + } + + private boolean canTargetEntity(@Nullable LivingEntity entity) { + if (entity == null || !entity.isAlive() || entity == this || entity.getType() == this.getType()) return false; + if (entity instanceof Player player) { + return !player.isCreative() && !player.isSpectator() && this.level().getDifficulty() != Difficulty.PEACEFUL; + } + return entity instanceof Mob && entity.isAttackable(); + } + + private final class ToreterrorRangedGoal extends Goal { + ToreterrorRangedGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = ToreterrorEntity.this.getTarget(); + if (target == null || ToreterrorEntity.this.isInAttackAnimation()) return false; + if (ToreterrorEntity.this.shootCooldown > 0) return false; + double distSqr = ToreterrorEntity.this.distanceToSqr(target); + return distSqr > CLOSE_RANGE_SQR && distSqr <= RANGED_MAX_RANGE_SQR + && ToreterrorEntity.this.hasLineOfSight(target); + } + + @Override + public void start() { + ToreterrorEntity.this.shootAnimTicks = SHOOT_TOTAL_TICKS; + ToreterrorEntity.this.shootBomberFired = false; + 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; + else ToreterrorEntity.this.shootAttackType = ATTACK_BOMBERS; + } + + @Override + public boolean canContinueToUse() { + return ToreterrorEntity.this.shootAnimTicks > 0; + } + + @Override + public void stop() { + ToreterrorEntity.this.shootAnimTicks = 0; + } + } + + private final class ToreterrorJumpGoal extends Goal { + ToreterrorJumpGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.JUMP)); + } + + @Override + public boolean canUse() { + LivingEntity target = ToreterrorEntity.this.getTarget(); + if (target == null || ToreterrorEntity.this.isInAttackAnimation()) return false; + if (ToreterrorEntity.this.jumpCooldown > 0) return false; + double distSqr = ToreterrorEntity.this.distanceToSqr(target); + return distSqr <= JUMP_RANGE_SQR && ToreterrorEntity.this.onGround(); + } + + @Override + public void start() { + ToreterrorEntity.this.jumpAnimTicks = JUMP_TOTAL_TICKS; + ToreterrorEntity.this.jumpLaunched = false; + ToreterrorEntity.this.jumpAirborne = false; + ToreterrorEntity.this.shockwaveApplied = false; + ToreterrorEntity.this.playSound(AntarchySoundEvents.TORETERROR_JUMP_UP.get(), 1.2F, 0.9F + ToreterrorEntity.this.random.nextFloat() * 0.15F); + } + + @Override + public boolean canContinueToUse() { + return ToreterrorEntity.this.jumpAnimTicks > 0; + } + + @Override + public void stop() { + ToreterrorEntity.this.jumpAnimTicks = 0; + } + } + + private final class ToreterrorFloatGoal extends Goal { + ToreterrorFloatGoal() { + this.setFlags(EnumSet.of(Flag.JUMP)); + } + + @Override + public boolean canUse() { + return ToreterrorEntity.this.isInWater() && !ToreterrorEntity.this.onGround(); + } + + @Override + public boolean canContinueToUse() { + return canUse(); + } + + @Override + public void tick() { + Vec3 vel = ToreterrorEntity.this.getDeltaMovement(); + ToreterrorEntity.this.setDeltaMovement(vel.x, Math.min(vel.y + 0.08D, 0.2D), vel.z); + } + } + + private final class ToreterrorSpinGoal extends Goal { + ToreterrorSpinGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + LivingEntity target = ToreterrorEntity.this.getTarget(); + if (target == null || ToreterrorEntity.this.isInAttackAnimation()) return false; + if (ToreterrorEntity.this.spinCooldown > 0) return false; + return ToreterrorEntity.this.distanceToSqr(target) <= SPIN_TRIGGER_RANGE_SQR && ToreterrorEntity.this.onGround(); + } + + @Override + public void start() { + ToreterrorEntity.this.startSpinSequence(ToreterrorEntity.this.getTarget()); + } + + @Override + public boolean canContinueToUse() { + return ToreterrorEntity.this.isSpinSequenceActive(); + } + + @Override + public void stop() { + ToreterrorEntity.this.stopSpinSequence(); + } + } +} 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 new file mode 100644 index 00000000..718058fe --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java @@ -0,0 +1,549 @@ +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 new file mode 100644 index 00000000..f31a9977 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java @@ -0,0 +1,168 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.tags.BlockTags; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.PointedDripstoneBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; + +import java.util.function.Supplier; + +public class UpwardFallingBlockEntity extends Entity { + + public static Supplier> TYPE; + + private static final EntityDataAccessor DATA_BLOCK_STATE = + SynchedEntityData.defineId(UpwardFallingBlockEntity.class, EntityDataSerializers.BLOCK_STATE); + + private static final double RISE_SPEED = 0.5; + private static final int MAX_TICKS = 200; + + public int time = 0; + + public UpwardFallingBlockEntity(EntityType type, Level level) { + super(type, level); + this.noPhysics = true; + } + + @Override + protected void defineSynchedData() { + this.entityData.define(DATA_BLOCK_STATE, Blocks.AIR.defaultBlockState()); + } + + public BlockState getBlockState() { + 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; + + level.removeBlock(pos, false); + UpwardFallingBlockEntity entity = new UpwardFallingBlockEntity(TYPE.get(), level); + entity.entityData.set(DATA_BLOCK_STATE, state); + entity.setPos(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); + level.addFreshEntity(entity); + } + + @Override + public void tick() { + super.tick(); + this.setOldPosAndRot(); + + BlockState blockState = getBlockState(); + if (blockState.isAir()) { + if (!level().isClientSide) { + discard(); + } + return; + } + + // Move upward directly — noPhysics=true means move() just calls setPos(). + // Runs on both sides so the client simulates the same deterministic rise + // instead of relying on interpolated network updates, matching vanilla FallingBlockEntity. + setPos(getX(), getY() + RISE_SPEED, getZ()); + + if (level().isClientSide) return; + + time++; + if (time > MAX_TICKS || getY() >= level().getMaxBuildHeight()) { + dropAndRemove(blockState); + return; + } + + damageEntitiesAlongPath(blockState); + + BlockPos headPos = BlockPos.containing(getX(), getY() + getBbHeight(), getZ()); + BlockState above = level().getBlockState(headPos); + + // Leaves block the entity but can't hold scaffolding — drop as item + if (above.is(BlockTags.LEAVES)) { + dropAndRemove(blockState); + return; + } + + boolean hitCeiling = above.isFaceSturdy(level(), headPos, Direction.DOWN); + boolean hitScaffolding = above.getBlock() instanceof AntimetalScaffoldingBlock; + + if (hitCeiling || hitScaffolding) { + dropAndRemove(blockState); + return; + } + } + + private void damageEntitiesAlongPath(BlockState state) { + float damage = getImpactDamage(state); + if (damage <= 0.0F) { + return; + } + + AABB hitBox = getBoundingBox().inflate(0.15D); + for (LivingEntity living : level().getEntitiesOfClass(LivingEntity.class, hitBox, LivingEntity::isAlive)) { + living.hurt(level().damageSources().fallingBlock(this), damage); + } + } + + private float getImpactDamage(BlockState state) { + float travelDistance = (float) this.time * (float) RISE_SPEED; + float baseDamage = Math.max(0.0F, travelDistance - 1.5F); + if (baseDamage <= 0.0F) { + return 0.0F; + } + + float thicknessMultiplier = 1.0F; + if (state.hasProperty(PointedDripstoneBlock.THICKNESS)) { + thicknessMultiplier = switch (state.getValue(PointedDripstoneBlock.THICKNESS)) { + case TIP, TIP_MERGE -> 2.0F; + case FRUSTUM -> 1.5F; + case MIDDLE -> 1.25F; + case BASE -> 1.0F; + }; + } + + return Math.min(baseDamage * thicknessMultiplier, 40.0F); + } + + private void dropAndRemove(BlockState state) { + if (!level().isClientSide && !state.isAir()) { + ItemStack drop = new ItemStack(state.getBlock().asItem()); + if (!drop.isEmpty()) spawnAtLocation(drop); + } + discard(); + } + + @Override + protected void readAdditionalSaveData(CompoundTag tag) { + if (tag.contains("BlockState")) { + BlockState state = NbtUtils.readBlockState( + level().holderLookup(net.minecraft.core.registries.Registries.BLOCK), + tag.getCompound("BlockState") + ); + entityData.set(DATA_BLOCK_STATE, state); + } + time = tag.getInt("Time"); + } + + @Override + protected void addAdditionalSaveData(CompoundTag tag) { + tag.put("BlockState", NbtUtils.writeBlockState(getBlockState())); + tag.putInt("Time", time); + } + + @Override public boolean isPickable() { return false; } + @Override public boolean isPushable() { return false; } +} 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 new file mode 100644 index 00000000..4fb56416 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WaspEntity.java @@ -0,0 +1,483 @@ +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 java.util.EnumSet; +import java.util.Objects; +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.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.DifficultyInstance; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +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.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.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.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.ai.util.AirAndWaterRandomPos; +import net.minecraft.world.entity.ai.util.HoverRandomPos; +import net.minecraft.world.entity.animal.FlyingAnimal; +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.entity.BlockEntity; +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 WaspEntity extends Monster implements GeoEntity, FlyingAnimal { + private static final EntityDataAccessor TEXTURE_VARIANT = + SynchedEntityData.defineId(WaspEntity.class, EntityDataSerializers.INT); + private static final byte ATTACK_ANIM_EVENT = 4; + private static final int ATTACK_ANIM_TICKS = 10; + private static final int POISON_DURATION_TICKS = 100; + private static final double CHASE_SPEED = 0.36D; + private static final double WANDER_SPEED = 0.34D; + private static final String TEXTURE_VARIANT_KEY = "TextureVariant"; + private static final int TEXTURE_VARIANT_DEFAULT = 0; + private static final int TEXTURE_VARIANT_PANDA = 1; + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int attackAnimTicks; + private boolean configuredAttributesSynced; + @Nullable private BlockPos hivePos; + + public WaspEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new FlyingMoveControl(this, 30, true); + this.setNoGravity(true); + this.xpReward = 5; + } + + public static AttributeSupplier.Builder createAttributes() { + return net.minecraft.world.entity.Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.waspHealth()) + .add(Attributes.FLYING_SPEED, AntarchySettings.waspMovementSpeed()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.waspMovementSpeed()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.waspAttackDamage()) + .add(Attributes.ARMOR, 1.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; + } + + return level.getDifficulty() != Difficulty.PEACEFUL + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(TEXTURE_VARIANT, TEXTURE_VARIANT_DEFAULT); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new FloatGoal(this)); + this.goalSelector.addGoal(2, new MeleeAttackGoal(this, CHASE_SPEED, true)); + this.goalSelector.addGoal(3, new WaspGoToNestGoal()); + this.goalSelector.addGoal(4, new WaspWanderGoal()); + this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + protected PathNavigation createNavigation(Level level) { + FlyingPathNavigation nav = new FlyingPathNavigation(this, level); + nav.setCanOpenDoors(false); + nav.setCanFloat(true); + return nav; + } + + @Override + public void travel(Vec3 travelVector) { + if (this.isEffectiveAi() || this.isControlledByLocalInstance()) { + if (this.isInWater()) { + this.moveRelative(0.02F, travelVector); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.setDeltaMovement(this.getDeltaMovement().scale(0.8D)); + } else if (this.isInLava()) { + this.moveRelative(0.02F, travelVector); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.setDeltaMovement(this.getDeltaMovement().scale(0.5D)); + } else { + this.moveRelative(this.getSpeed(), travelVector); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); + } + } + this.calculateEntityAnimation(false); + } + + public void setHivePos(@Nullable BlockPos pos) { + this.hivePos = pos; + } + + @Nullable + public BlockPos getHivePos() { + return this.hivePos; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + if (this.hivePos != null) { + tag.put("HivePos", NbtUtils.writeBlockPos(this.hivePos)); + } + tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.hivePos = tag.contains("HivePos") + ? NbtUtils.readBlockPos(tag.getCompound("HivePos")) + : null; + if (tag.contains(TEXTURE_VARIANT_KEY)) { + this.setTextureVariant(tag.getInt(TEXTURE_VARIANT_KEY)); + } + } + + @Override + public void tick() { + super.tick(); + this.realignHitbox(); + if (!this.level().isClientSide && !this.configuredAttributesSynced) { + this.syncConfiguredAttributes(); + this.configuredAttributesSynced = true; + } + this.setNoGravity(true); + this.setOnGround(false); + + if (this.attackAnimTicks > 0) { + this.attackAnimTicks--; + } + } + + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + this.syncConfiguredAttributes(); + this.configuredAttributesSynced = true; + this.setHealth((float) AntarchySettings.waspHealth()); + if (spawnReason == MobSpawnType.SPAWN_EGG && this.random.nextInt(20) == 0) { + this.setPandaVariant(true); + } + return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData, dataTag); + } + + @Override + public void refreshDimensions() { + super.refreshDimensions(); + this.realignHitbox(); + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + if (!(target instanceof LivingEntity livingTarget)) { + return super.doHurtTarget(target); + } + + this.beginAttackAnimation(); + boolean hurt = livingTarget.hurt(this.damageSources().mobAttack(this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)); + if (hurt) { + int poisonDuration = this.level().getDifficulty() == Difficulty.HARD + ? POISON_DURATION_TICKS * 2 + : POISON_DURATION_TICKS; + livingTarget.addEffect(new MobEffectInstance(MobEffects.POISON, poisonDuration, 0)); + this.playSound(AntarchySoundEvents.WASP_ATTACK.get(), 0.9F, 0.9F + this.random.nextFloat() * 0.2F); + } + + return hurt; + } + + private void beginAttackAnimation() { + this.attackAnimTicks = ATTACK_ANIM_TICKS; + this.swing(InteractionHand.MAIN_HAND); + if (!this.level().isClientSide) { + this.level().broadcastEntityEvent(this, ATTACK_ANIM_EVENT); + this.triggerAnim("main_controller", "attack"); + } + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.WASP_IDLE.get(); + } + + @Override + public int getAmbientSoundInterval() { + return 20; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.WASP_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.WASP_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 0.7F; + } + + @Override + public float getVoicePitch() { + return 1.15F + this.random.nextFloat() * 0.15F; + } + + @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 PlayState mainAnimController(AnimationState state) { + if (this.attackAnimTicks > 0) { + return state.setAndContinue(ATTACK_ANIM); + } + + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public void handleEntityEvent(byte id) { + if (id == ATTACK_ANIM_EVENT) { + this.attackAnimTicks = ATTACK_ANIM_TICKS; + return; + } + super.handleEntityEvent(id); + } + + @Override + public Vec3 getLeashOffset() { + return new Vec3(0.0D, 0.2D, 0.0D); + } + + public boolean isPandaVariant() { + return this.getTextureVariant() == TEXTURE_VARIANT_PANDA; + } + + public int getTextureVariant() { + return this.entityData.get(TEXTURE_VARIANT); + } + + public void setTextureVariant(int variant) { + this.entityData.set(TEXTURE_VARIANT, Mth.clamp(variant, TEXTURE_VARIANT_DEFAULT, TEXTURE_VARIANT_PANDA)); + } + + public void setPandaVariant(boolean pandaVariant) { + this.setTextureVariant(pandaVariant ? TEXTURE_VARIANT_PANDA : TEXTURE_VARIANT_DEFAULT); + } + + @Override + public boolean isFlying() { + return !this.onGround(); + } + + private void realignHitbox() { + double halfWidth = this.getBbWidth() * 0.5D; + double height = this.getBbHeight(); + this.setBoundingBox(new AABB( + this.getX() - halfWidth, + this.getY(), + this.getZ() - halfWidth, + this.getX() + halfWidth, + this.getY() + height, + this.getZ() + halfWidth + )); + } + + private void syncConfiguredAttributes() { + Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(AntarchySettings.waspHealth()); + Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(AntarchySettings.waspAttackDamage()); + Objects.requireNonNull(this.getAttribute(Attributes.FLYING_SPEED)).setBaseValue(AntarchySettings.waspMovementSpeed()); + Objects.requireNonNull(this.getAttribute(Attributes.MOVEMENT_SPEED)).setBaseValue(AntarchySettings.waspMovementSpeed()); + } + + private boolean hasValidHive() { + if (this.hivePos == null || !this.level().isLoaded(this.hivePos)) { + return false; + } + + BlockEntity blockEntity = this.level().getBlockEntity(this.hivePos); + return blockEntity instanceof WaspNestBlockEntity; + } + + private boolean closerThan(BlockPos pos, int distance) { + return pos.closerThan(this.blockPosition(), distance); + } + + private final class WaspWanderGoal extends Goal { + private static final int WANDER_THRESHOLD = 22; + + private WaspWanderGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + boolean hasHive = WaspEntity.this.hasValidHive(); + return WaspEntity.this.getTarget() == null + && (!hasHive || (!WaspEntity.this.level().isNight() && !WaspEntity.this.level().isRaining())) + && WaspEntity.this.navigation.isDone() + && WaspEntity.this.random.nextInt(10) == 0; + } + + @Override + public boolean canContinueToUse() { + return WaspEntity.this.navigation.isInProgress(); + } + + @Override + public void start() { + Vec3 targetPos = this.findPos(); + if (targetPos != null) { + WaspEntity.this.navigation.moveTo( + WaspEntity.this.navigation.createPath(BlockPos.containing(targetPos), 1), + WANDER_SPEED + ); + } + } + + @Nullable + private Vec3 findPos() { + Vec3 bias; + if (WaspEntity.this.hasValidHive() && !WaspEntity.this.closerThan(WaspEntity.this.hivePos, WANDER_THRESHOLD)) { + bias = Vec3.atCenterOf(WaspEntity.this.hivePos).subtract(WaspEntity.this.position()).normalize(); + } else { + bias = WaspEntity.this.getViewVector(0.0F); + } + + Vec3 hover = HoverRandomPos.getPos( + WaspEntity.this, + 8, + 7, + bias.x, + bias.z, + (float) Math.PI / 2.0F, + 3, + 1 + ); + if (hover != null) { + return hover; + } + + return AirAndWaterRandomPos.getPos( + WaspEntity.this, + 8, + 4, + -2, + bias.x, + bias.z, + (double) ((float) Math.PI / 2.0F) + ); + } + } + + private class WaspGoToNestGoal extends Goal { + private static final int TIMEOUT_TICKS = 600; + private static final double NEST_REACH_DISTANCE_SQ = 4.0; + private static final double MAX_HIVE_DISTANCE_SQ = 2048; + private int travelTicks; + + WaspGoToNestGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + BlockPos hive = WaspEntity.this.hivePos; + return hive != null + && WaspEntity.this.getTarget() == null + && (WaspEntity.this.level().isNight() || WaspEntity.this.level().isRaining()) + && hive.distSqr(WaspEntity.this.blockPosition()) <= MAX_HIVE_DISTANCE_SQ; + } + + @Override + public boolean canContinueToUse() { + return this.canUse() && this.travelTicks < TIMEOUT_TICKS; + } + + @Override + public void start() { + this.travelTicks = 0; + BlockPos hive = WaspEntity.this.hivePos; + WaspEntity.this.navigation.moveTo(hive.getX() + 0.5, hive.getY() + 0.5, hive.getZ() + 0.5, WANDER_SPEED); + } + + @Override + public void tick() { + this.travelTicks++; + BlockPos hive = WaspEntity.this.hivePos; + if (hive == null) { + return; + } + + if (WaspEntity.this.position().distanceToSqr(Vec3.atCenterOf(hive)) <= NEST_REACH_DISTANCE_SQ) { + Level level = WaspEntity.this.level(); + if (level instanceof ServerLevel serverLevel) { + BlockEntity be = serverLevel.getBlockEntity(hive); + if (be instanceof WaspNestBlockEntity nest) { + nest.tryStoreWasp(WaspEntity.this); + } else { + WaspEntity.this.hivePos = null; + } + } + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java new file mode 100644 index 00000000..58f6c5c8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java @@ -0,0 +1,189 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.ThrowableProjectile; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.CampfireBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; + +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +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.animation.RawAnimation; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class WaterBombEntity extends ThrowableProjectile implements GeoEntity { + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + + private static final EntityDataAccessor HUGE = SynchedEntityData.defineId(WaterBombEntity.class, EntityDataSerializers.BOOLEAN); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int lifetimeTicks; + private final Map hitCooldowns = new HashMap<>(); + + public WaterBombEntity(EntityType entityType, Level level) { + super(entityType, level); + this.lifetimeTicks = AntarchySettings.waterBombLifetimeTicks(); + this.configureProjectile(); + } + + public WaterBombEntity(Level level, LivingEntity owner) { + super(AntarchyObjects.WATER_BOMB.get(), owner, level); + this.lifetimeTicks = AntarchySettings.waterBombLifetimeTicks(); + this.configureProjectile(); + } + + public WaterBombEntity(Level level, LivingEntity owner, boolean huge) { + this(level, owner); + this.entityData.set(HUGE, huge); + } + + private void configureProjectile() { + this.noCulling = true; + } + + @Override + protected void defineSynchedData() { + this.entityData.define(HUGE, false); + } + + public boolean isHuge() { + return this.entityData.get(HUGE); + } + + @Override + protected float getGravity() { + return (float) (AntarchySettings.waterBombGravity()); + } + + @Override + public void tick() { + super.tick(); + this.realignToMotion(); + + this.hitCooldowns.replaceAll((uuid, cd) -> cd - 1); + this.hitCooldowns.entrySet().removeIf(e -> e.getValue() <= 0); + + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.DRIPPING_WATER, this.getX(), this.getY(), this.getZ(), 3, 0.15D, 0.15D, 0.15D, 0.0D); + serverLevel.sendParticles(ParticleTypes.SPLASH, this.getX(), this.getY(), this.getZ(), 2, 0.1D, 0.1D, 0.1D, 0.01D); + } + + this.lifetimeTicks--; + if (this.lifetimeTicks <= 0) { + this.discard(); + } + } + + @Override + protected void onHitEntity(EntityHitResult result) { + Entity entity = result.getEntity(); + if (entity == this.getOwner()) return; + if (!(entity instanceof LivingEntity living)) return; + + UUID id = entity.getUUID(); + if (this.hitCooldowns.getOrDefault(id, 0) > 0) return; + + float damage = (float) AntarchySettings.waterBombDamage() * (this.isHuge() ? 3.0F : 1.0F); + if (living.hurt(AntarchyDamageSources.waterSoaked(this.level(), this, this.getOwner()), damage)) { + this.hitCooldowns.put(id, 15); + Vec3 knockDir = living.position().subtract(this.position()).normalize(); + double knockback = AntarchySettings.waterBombKnockback(); + living.push(knockDir.x * knockback, 0.3D, knockDir.z * knockback); + living.hurtMarked = true; + } + living.clearFire(); + } + + @Override + protected void onHitBlock(BlockHitResult result) { + BlockPos blockPos = result.getBlockPos(); + BlockPos hitPos = blockPos.relative(result.getDirection()); + Level level = this.level(); + if (level.getBlockState(blockPos).getBlock() instanceof CampfireBlock campfire && level.getBlockState(blockPos).getValue(CampfireBlock.LIT)) { + level.setBlock(blockPos, level.getBlockState(blockPos).setValue(CampfireBlock.LIT, false), 3); + this.discard(); + return; + } + if (this.isHuge()) { + for (BlockPos pos : BlockPos.betweenClosed(hitPos.offset(-1, 0, -1), hitPos.offset(1, 0, 1))) { + if (level.getBlockState(pos).getBlock() instanceof BaseFireBlock) { + level.removeBlock(pos, false); + } + } + } else { + if (level.getBlockState(hitPos).getBlock() instanceof BaseFireBlock) { + level.removeBlock(hitPos, false); + } else if (level.isEmptyBlock(hitPos) && level.getBlockState(hitPos.below()).isSolid()) { + level.setBlock(hitPos, Blocks.WATER.defaultBlockState().setValue(LiquidBlock.LEVEL, 1), 3); + level.scheduleTick(hitPos, Fluids.FLOWING_WATER, 2); + } + } + this.discard(); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt("LifetimeTicks", this.lifetimeTicks); + tag.putBoolean("Huge", this.isHuge()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.lifetimeTicks = tag.contains("LifetimeTicks") ? tag.getInt("LifetimeTicks") : AntarchySettings.waterBombLifetimeTicks(); + if (tag.contains("Huge")) this.entityData.set(HUGE, tag.getBoolean("Huge")); + } + + private void realignToMotion() { + Vec3 motion = this.getDeltaMovement(); + if (motion.lengthSqr() < 1.0E-6D) { + return; + } + + 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)))); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "water_bomb_controller", 0, this::waterBombController)); + } + + private PlayState waterBombController(AnimationState state) { + 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/entity/ant/AntMarchManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntMarchManager.java new file mode 100644 index 00000000..be4a658e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntMarchManager.java @@ -0,0 +1,106 @@ +package com.craisinlord.antarchy.content.entity.ant; + +import net.minecraft.server.level.ServerLevel; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.UUID; +import java.util.WeakHashMap; + +final class AntMarchManager { + private static final Object INSTANCES_LOCK = new Object(); + private static final WeakHashMap INSTANCES = new WeakHashMap<>(); + + + private final Map> marches = new HashMap<>(); + + private AntMarchManager() {} + + static AntMarchManager get(ServerLevel level) { + synchronized (INSTANCES_LOCK) { + return INSTANCES.computeIfAbsent(level, l -> new AntMarchManager()); + } + } + + + synchronized void register(UUID leaderUuid, int marchOrder, BaseAntEntity ant) { + marches.computeIfAbsent(leaderUuid, k -> new TreeMap<>()).put(marchOrder, ant); + } + + + synchronized void unregister(UUID leaderUuid, int marchOrder) { + TreeMap march = marches.get(leaderUuid); + if (march == null) return; + march.remove(marchOrder); + if (march.isEmpty()) marches.remove(leaderUuid); + } + + + @Nullable + synchronized BaseAntEntity getLeader(UUID leaderUuid) { + return getByOrder(leaderUuid, 0); + } + + + @Nullable + synchronized BaseAntEntity getPredecessor(UUID leaderUuid, int order) { + return order > 0 ? getByOrder(leaderUuid, order - 1) : null; + } + + + synchronized int getNextOrder(UUID leaderUuid) { + TreeMap march = marches.get(leaderUuid); + if (march == null || march.isEmpty()) return 1; + return march.lastKey() + 1; + } + + + synchronized List getParticipantsNear(BaseAntEntity seeker, double radius, double verticalRange) { + double radiusSqr = radius * radius; + List result = new ArrayList<>(); + for (TreeMap march : marches.values()) { + for (BaseAntEntity ant : march.values()) { + if (ant == seeker || !ant.isAlive()) continue; + double dy = Math.abs(ant.getY() - seeker.getY()); + if (dy > verticalRange) continue; + double dx = ant.getX() - seeker.getX(); + double dz = ant.getZ() - seeker.getZ(); + if (dx * dx + dz * dz <= radiusSqr) { + result.add(ant); + } + } + } + return result; + } + + + synchronized void cleanup() { + Iterator>> marchIter = marches.entrySet().iterator(); + while (marchIter.hasNext()) { + Map.Entry> entry = marchIter.next(); + entry.getValue().entrySet().removeIf(e -> !e.getValue().isAlive()); + if (entry.getValue().isEmpty()) { + marchIter.remove(); + } + } + } + + @Nullable + private BaseAntEntity getByOrder(UUID leaderUuid, int order) { + TreeMap march = marches.get(leaderUuid); + if (march == null) return null; + BaseAntEntity ant = march.get(order); + if (ant == null) return null; + if (!ant.isAlive()) { + march.remove(order); + if (march.isEmpty()) marches.remove(leaderUuid); + return null; + } + return ant; + } +} 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 new file mode 100644 index 00000000..61a55906 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java @@ -0,0 +1,382 @@ +package com.craisinlord.antarchy.content.entity.ant; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.ArrayList; +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.nbt.CompoundTag; +import net.minecraft.resources.ResourceKey; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.PlayerRespawnLogic; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.OwnableEntity; +import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.entity.animal.horse.AbstractHorse; +import net.minecraft.world.entity.player.Player; +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.Blocks; +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 AntTeleportHelper() { + } + + public static void teleportPlayerWithCompanions(ServerPlayer player, ServerLevel destination, Vec3 destinationPos) { + Mob vehicle = player.getVehicle() instanceof Mob mob ? mob : null; + List companions = collectCompanions(player); + player.teleportTo(destination, destinationPos.x, destinationPos.y, destinationPos.z, player.getYRot(), player.getXRot()); + Mob movedVehicle = null; + for (Mob companion : companions) { + Mob moved = moveCompanion(companion, destination, destinationPos); + if (companion == vehicle) { + movedVehicle = moved; + } + } + + if (movedVehicle != null) { + player.startRiding(movedVehicle, true); + } + } + + private static List collectCompanions(ServerPlayer player) { + List companions = new ArrayList<>(); + if (player.getVehicle() instanceof Mob vehicle) { + companions.add(vehicle); + } + + for (Mob mob : player.serverLevel().getEntitiesOfClass(Mob.class, player.getBoundingBox().inflate(COMPANION_FOLLOW_RADIUS), mob -> isFollowingPet(mob, player))) { + if (!companions.contains(mob)) { + companions.add(mob); + } + } + + return companions; + } + + private static boolean isFollowingPet(Mob mob, ServerPlayer player) { + if (!mob.isAlive()) { + return false; + } + + if (mob instanceof TamableAnimal tamable) { + return tamable.isTame() && player.getUUID().equals(tamable.getOwnerUUID()) && !tamable.isOrderedToSit(); + } + + if (mob instanceof AbstractHorse horse) { + return horse.isTamed() && player.getUUID().equals(horse.getOwnerUUID()); + } + + return mob instanceof OwnableEntity ownable && player.getUUID().equals(ownable.getOwnerUUID()); + } + + @Nullable + private static Mob moveCompanion(Mob companion, ServerLevel destination, Vec3 destinationPos) { + companion.stopRiding(); + companion.ejectPassengers(); + companion.getNavigation().stop(); + if (companion.level() == destination) { + companion.teleportTo(destinationPos.x, destinationPos.y, destinationPos.z); + return companion; + } + + companion.unRide(); + Entity moved = companion.getType().create(destination); + if (moved == null) { + return null; + } + + moved.restoreFrom(companion); + moved.moveTo(destinationPos.x, destinationPos.y, destinationPos.z, companion.getYRot(), companion.getXRot()); + moved.setDeltaMovement(Vec3.ZERO); + companion.discard(); + destination.addDuringTeleport(moved); + return moved instanceof Mob mob ? mob : null; + } + + public static InteractionResult teleportPlayerToDimension(ServerPlayer player, ResourceKey destinationKey) { + ServerLevel destination = player.server.getLevel(destinationKey); + if (destination == null) { + return InteractionResult.PASS; + } + + Vec3 destinationPos = getDestinationPosition(player, destination); + teleportPlayerWithCompanions(player, destination, destinationPos); + player.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + 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); + return InteractionResult.CONSUME; + } + + public static InteractionResult handleCagedAntTeleport(ServerPlayer player, @Nullable ResourceLocation entityTypeId, @Nullable CompoundTag entityData) { + if (entityTypeId == null) { + return InteractionResult.PASS; + } + + if (!isRightClickDimensionEnabled(entityTypeId)) { + return InteractionResult.PASS; + } + + if (entityTypeId.equals(new ResourceLocation("antarchy", "brown_ant"))) { + return teleportToOrFromConfiguredDimension(player, AntarchySettings.brownAntDestinationDimension()); + } + if (entityTypeId.equals(new ResourceLocation("antarchy", "red_ant"))) { + return teleportToOrFromConfiguredDimension(player, AntarchySettings.redAntDestinationDimension()); + } + if (entityTypeId.equals(new ResourceLocation("antarchy", "termite"))) { + return teleportToOrFromConfiguredDimension(player, AntarchySettings.termiteDestinationDimension()); + } + if (entityTypeId.equals(new ResourceLocation("antarchy", "rainbow_ant"))) { + return RainbowAntEntity.teleportPlayerFromStoredData(player, entityData); + } + + return InteractionResult.PASS; + } + + private static InteractionResult teleportToOrFromConfiguredDimension(ServerPlayer player, ResourceKey configuredDimensionKey) { + ServerLevel destination = player.serverLevel().dimension() == configuredDimensionKey + ? resolveReturnDestinationLevel(player) + : player.server.getLevel(configuredDimensionKey); + if (destination == null) { + return InteractionResult.PASS; + } + + Vec3 destinationPos = getDestinationPosition(player, destination); + teleportPlayerWithCompanions(player, destination, destinationPos); + player.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + return InteractionResult.CONSUME; + } + + static InteractionResult handleInteraction(BaseAntEntity ant, Player player, ItemStack itemStack) { + if (!isRightClickDimensionEnabled(ant)) { + return InteractionResult.PASS; + } + + if (ant.requiresActivationReagent() && !ant.isTeleportActivatedState()) { + if (!(player instanceof ServerPlayer serverPlayer)) { + return InteractionResult.SUCCESS; + } + + if (itemStack.is(ant.activationItemsTag())) { + return activateTeleport(ant, serverPlayer, itemStack); + } + + if (!itemStack.isEmpty()) { + return InteractionResult.PASS; + } + + serverPlayer.displayClientMessage(Component.translatable(ant.needsReagentMessageKey()), true); + return InteractionResult.CONSUME; + } + + if (!itemStack.isEmpty()) { + return InteractionResult.PASS; + } + + if (!(player instanceof ServerPlayer serverPlayer)) { + return InteractionResult.SUCCESS; + } + + return teleportToOrFromConfiguredDimension(serverPlayer, ant.destinationDimension()); + } + + static boolean isRightClickDimensionEnabled(BaseAntEntity ant) { + return ant instanceof BrownAntEntity + ? AntarchySettings.brownAntRightClickDimension() + : ant instanceof RedAntEntity + ? AntarchySettings.redAntRightClickDimension() + : ant instanceof RainbowAntEntity + ? AntarchySettings.rainbowAntRightClickDimension() + : ant instanceof TermiteEntity && AntarchySettings.termiteRightClickDimension(); + } + + static boolean isRightClickDimensionEnabled(ResourceLocation entityTypeId) { + if (entityTypeId.equals(new ResourceLocation("antarchy", "brown_ant"))) { + return AntarchySettings.brownAntRightClickDimension(); + } + if (entityTypeId.equals(new ResourceLocation("antarchy", "red_ant"))) { + return AntarchySettings.redAntRightClickDimension(); + } + if (entityTypeId.equals(new ResourceLocation("antarchy", "rainbow_ant"))) { + return AntarchySettings.rainbowAntRightClickDimension(); + } + if (entityTypeId.equals(new ResourceLocation("antarchy", "termite"))) { + return AntarchySettings.termiteRightClickDimension(); + } + return true; + } + + private static InteractionResult activateTeleport(BaseAntEntity ant, ServerPlayer player, ItemStack stack) { + ant.setTeleportActivatedState(true); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + + player.displayClientMessage(Component.translatable(ant.activationMessageKey()), true); + ant.playSound(SoundEvents.END_PORTAL_SPAWN, 0.8F, 1.1F); + return InteractionResult.CONSUME; + } + + public static ServerLevel resolveReturnDestinationLevel(ServerPlayer player) { + ResourceKey respawnDimension = player.getRespawnDimension(); + ServerLevel destination = player.server.getLevel(respawnDimension); + if (destination != null && respawnDimension == Level.OVERWORLD) { + return destination; + } + + return player.server.overworld(); + } + + public static Vec3 getDestinationPosition(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(); + } + + Vec3 safeArrivalPos = findSafeArrivalPosition(player, destination, preferredPos); + if (safeArrivalPos != null) { + return safeArrivalPos; + } + + BlockPos fallbackPos = preferredPos; + return Vec3.atBottomCenterOf(fallbackPos); + } + + @Nullable + private static Vec3 findSafeArrivalPosition(ServerPlayer player, ServerLevel destination, BlockPos preferredPos) { + int[] yRange = getDimensionYRange(destination); + if (yRange != null) { + return findSafeArrivalPositionInYRange(player, destination, preferredPos, yRange[0], yRange[1]); + } + + Set candidates = new LinkedHashSet<>(); + BlockPos adjustedPreferredPos = preferredPos; + addArrivalCandidate(candidates, preferredPos); + addArrivalCandidate(candidates, preferredPos.above()); + addArrivalCandidate(candidates, adjustedPreferredPos); + + if (destination.dimensionType().hasSkyLight()) { + addArrivalCandidate(candidates, PlayerRespawnLogic.getSpawnPosInChunk(destination, new ChunkPos(preferredPos))); + addArrivalCandidate(candidates, PlayerRespawnLogic.getSpawnPosInChunk(destination, new ChunkPos(adjustedPreferredPos))); + } + + for (int radius = 0; radius <= 4; 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) { + continue; + } + + BlockPos searchPos = preferredPos.offset(xOffset, 0, zOffset); + addArrivalCandidate(candidates, destination.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, searchPos)); + addArrivalCandidate(candidates, destination.getHeightmapPos(Heightmap.Types.WORLD_SURFACE, searchPos)); + } + } + } + + for (BlockPos candidate : candidates) { + Vec3 safePos = tryFindSafeDismount(player, destination, candidate); + if (safePos != null) { + return safePos; + } + } + + return null; + } + + @Nullable + private static int[] getDimensionYRange(ServerLevel destination) { + ResourceKey dim = destination.dimension(); + if (dim == AntarchySettings.termiteDestinationDimension()) { + return new int[]{100, 200}; + } + if (dim == AntarchySettings.brownAntDestinationDimension()) { + return new int[]{75, 120}; + } + return null; + } + + @Nullable + private static Vec3 findSafeArrivalPositionInYRange(ServerPlayer player, ServerLevel destination, BlockPos preferredPos, int minY, int maxY) { + for (int radius = 0; radius <= 8; 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 = maxY; y >= minY + 1; y--) { + Vec3 safePos = tryFindSafeDismount(player, destination, new BlockPos(x, y, z)); + if (safePos != null && safePos.y >= minY && safePos.y <= maxY) { + return safePos; + } + } + } + } + } + return null; + } + + private static void addArrivalCandidate(Set candidates, @Nullable BlockPos pos) { + if (pos == null) { + return; + } + + candidates.add(pos); + candidates.add(pos.above()); + if (pos.getY() > Integer.MIN_VALUE) { + candidates.add(pos.below()); + } + } + + @Nullable + private static Vec3 tryFindSafeDismount(ServerPlayer player, ServerLevel destination, BlockPos candidate) { + Vec3 safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate, true); + if (safePos != null && isValidArrivalPosition(destination, safePos)) { + return safePos; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate.relative(direction), true); + if (safePos != null && isValidArrivalPosition(destination, safePos)) { + return safePos; + } + } + + return null; + } + + private static boolean isValidArrivalPosition(ServerLevel destination, Vec3 safePos) { + if (destination.dimension() != AntarchySettings.termiteDestinationDimension()) { + return true; + } + + BlockPos standPos = BlockPos.containing(safePos); + return !destination.getBlockState(standPos.below()).is(Blocks.BEDROCK); + } +} 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 new file mode 100644 index 00000000..b175f9b8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java @@ -0,0 +1,1714 @@ +package com.craisinlord.antarchy.content.entity.ant; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyGameRules; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import java.util.Comparator; +import java.util.EnumSet; +import java.util.List; +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.resources.ResourceKey; +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.tags.TagKey; +import net.minecraft.util.Mth; +import net.minecraft.world.Container; +import net.minecraft.world.InteractionHand; +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.EntityType; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.AvoidEntityGoal; +import net.minecraft.world.entity.ai.goal.BreedGoal; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.PanicGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.TemptGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.ChestBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.material.FluidState; +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 abstract class BaseAntEntity extends Animal implements GeoEntity { + private static final double ATTRIBUTE_EPSILON = 1.0E-4D; + private static final double MAX_NEST_WANDER_DISTANCE_SQR = 576.0D; + private static final EntityDataAccessor CARRIED_FOOD = SynchedEntityData.defineId(BaseAntEntity.class, EntityDataSerializers.ITEM_STACK); + private static final EntityDataAccessor DANCING = SynchedEntityData.defineId(BaseAntEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor BITE_ANIM_TICKS = SynchedEntityData.defineId(BaseAntEntity.class, EntityDataSerializers.INT); + private static final String HAS_FOOD = "HasFood"; + private static final String CARRIED_FOOD_TAG = "CarriedFood"; + private static final String OUTSIDE_NEST_TICKS_KEY = "OutsideNestTicks"; + private static final String NEST_X = "NestX"; + private static final String NEST_Y = "NestY"; + private static final String NEST_Z = "NestZ"; + private static final String TELEPORT_ACTIVATED = "TeleportActivated"; + private static final String MARCH_LEADER_UUID = "MarchLeaderUuid"; + private static final String MARCH_ORDER_KEY = "MarchOrder"; + private static final int MIN_OUTSIDE_NEST_TICKS = 20 * 30; + private static final int EXTRA_OUTSIDE_NEST_TICKS = 20 * 30; + private static final double MARCH_SEARCH_RADIUS = 12.0D; + private static final double MARCH_LEADER_LOST_DISTANCE_SQR = 400.0D; + private static final int MARCH_FOLLOW_REPATH_TICKS = 6; + private static final int ATTRIBUTE_SYNC_INTERVAL_TICKS = 200; + private static final int NEST_SEARCH_RADIUS_HORIZONTAL = 16; + private static final int NEST_SEARCH_RADIUS_VERTICAL = 4; + 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 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; + private static final int NEST_CACHE_INTERVAL_TICKS = 20; + private static final int STUCK_WARN_TICKS = 60; + private static final int STUCK_REPEAT_TICKS = 100; + private static final int RETURN_NAV_FAILURE_STREAK = 20; + private static final int RETURN_NAV_FAILURE_COOLDOWN = 200; + private static final int JUKEBOX_SCAN_INTERVAL_TICKS = 40; + private static final int CHEST_REPATH_TICKS = 12; + private static final double GROUND_FOOD_MOVE_SPEED = 1.12D; + private static final double CHEST_MOVE_SPEED = 1.02D; + private static final double SHARED_CHEST_MOVE_SPEED = 1.04D; + private static final double SHARED_GROUND_FOOD_MOVE_SPEED = 1.08D; + private static final double MARCH_FOLLOW_SPEED = 0.98D; + private static final double MARCH_FOLLOW_CATCHUP_SPEED = 1.14D; + private static final double STROLL_SPEED = 1.0D; + private static final double ESCAPE_MOVE_SPEED = 1.18D; + private static final double NEST_RETURN_MOVE_SPEED = 1.02D; + private static final double FOOD_RETURN_MOVE_SPEED = 1.08D; + 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 RawAnimation DANCE_ANIM = RawAnimation.begin().thenLoop("dance"); + + + @Nullable + private BlockPos nestPos; + @Nullable + private BlockPos jukeboxPos; + private int outsideNestTicks; + private boolean teleportActivated; + @Nullable + private UUID marchLeaderUuid; + private int marchOrder = -1; + private int nextMarchFollowRepathTick; + private int nextNestSearchTick; + @Nullable + private BlockPos targetFoodChestPos; + private int nextFoodChestSearchTick; + @Nullable + private BlockPos recentFoodChestPos; + private int recentFoodChestExpireTick; + @Nullable + private BlockPos recentGroundFoodPos; + private int recentGroundFoodExpireTick; + @Nullable + private ItemEntity cachedNearestGroundFood; + private int nextGroundFoodCacheTick; + private int stuckDetectorTicks; + private int returnToNestFailureCooldownTick; + private boolean cachedHasUsableNest; + private boolean nestCacheDirty = true; + private int nextNestCacheTick; + private int nextJukeboxScanTick; + private double cachedDanceRadius = 1.0D; + private int nextIdleSoundTick; + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + protected BaseAntEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(CARRIED_FOOD, ItemStack.EMPTY); + this.entityData.define(DANCING, false); + this.entityData.define(BITE_ANIM_TICKS, 0); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController) + .triggerableAnim("dance", DANCE_ANIM) + .triggerableAnim("attack", ATTACK_ANIM)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new AntDanceGoal()); + this.goalSelector.addGoal(2, new PanicGoal(this, 1.4D)); + this.goalSelector.addGoal(4, new TemptGoal(this, 1.0D, Ingredient.of(this.breedingFoodsTag()), false)); + this.goalSelector.addGoal(5, new BreedGoal(this, 1.0D)); + this.goalSelector.addGoal(6, new AntSharedMarchForageGoal()); + this.goalSelector.addGoal(7, new AntMarchFollowGoal()); + this.goalSelector.addGoal(8, new AntReturnToNestGoal()); + this.goalSelector.addGoal(9, new AntForageGoal()); + this.goalSelector.addGoal(10, new AntFoodEscapeGoal()); + this.goalSelector.addGoal(11, new AntRandomStrollGoal(STROLL_SPEED)); + this.goalSelector.addGoal(12, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + } + + @Override + public void tick() { + super.tick(); + + if (!this.isAlive() || this.isRemoved()) { + return; + } + + this.tickJukeboxDanceState(); + + if (!this.level().isClientSide && (this.tickCount <= 1 || this.tickCount % ATTRIBUTE_SYNC_INTERVAL_TICKS == 0)) { + this.syncConfiguredAttributes(); + if (this.level() instanceof ServerLevel serverLevel) { + AntMarchManager.get(serverLevel).cleanup(); + } + } + + if (this.level().isClientSide) { + return; + } + + if (this.getBiteAnimationTicks() > 0) { + this.setBiteAnimationTicks(this.getBiteAnimationTicks() - 1); + } + + if (this.isDancing()) { + this.setTarget(null); + this.leaveMarch(); + this.getNavigation().stop(); + return; + } + + if (this.shouldSearchForNest()) { + this.findNearestNestIfNeeded(); + } + + if (this.outsideNestTicks > 0) { + this.outsideNestTicks--; + } + + if (this.getTarget() != null) { + this.leaveMarch(); + return; + } + + if (!this.canMarch()) { + this.leaveMarch(); + } else if (this.tickCount % 20 == 0) { + this.refreshMarch(); + } + + if (this.tryEnterNest()) { + return; + } + + if (this.handlePriorityForaging()) { + return; + } + + this.tickLeaderStuckDetector(); + this.tickIdleSound(); + } + + @Override + public void setRecordPlayingNearby(BlockPos songPosition, boolean isPlaying) { + this.jukeboxPos = songPosition == null ? null : songPosition.immutable(); + this.setDancing(isPlaying && this.jukeboxPos != null); + this.nextJukeboxScanTick = 0; + } + + + private void tickLeaderStuckDetector() { + if (this.level().isClientSide || !this.isMarchLeader()) { + return; + } + + boolean anyMoveGoalRunning = false; + for (var wrapped : this.goalSelector.getAvailableGoals()) { + if (wrapped.isRunning() && wrapped.getGoal().getFlags().contains(Goal.Flag.MOVE)) { + anyMoveGoalRunning = true; + break; + } + } + + if (!anyMoveGoalRunning && this.getNavigation().isDone()) { + this.stuckDetectorTicks++; + } else { + this.stuckDetectorTicks = 0; + } + } + + private static void logDebug(String message, Object... args) { + } + + private static void logWarn(String message, Object... args) { + } + + @Override + public void remove(Entity.RemovalReason reason) { + if (!this.level().isClientSide && this.isInMarch() && this.level() instanceof ServerLevel serverLevel) { + AntMarchManager.get(serverLevel).unregister(this.marchLeaderUuid, this.marchOrder); + } + super.remove(reason); + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack itemStack = player.getItemInHand(hand); + if (this.isFood(itemStack)) { + return super.mobInteract(player, hand); + } + + return AntTeleportHelper.handleInteraction(this, player, itemStack); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.isDancing() && (source == this.damageSources().inWall() || source == this.damageSources().cramming())) { + return false; + } + + return super.hurt(source, amount); + } + + @Override + public boolean doHurtTarget(Entity target) { + boolean attacked = super.doHurtTarget(target); + if (attacked) { + if (this instanceof RedAntEntity) { + this.setBiteAnimationTicks(8); + } + this.playSound(AntarchySoundEvents.ANT_BITE.get(), 0.35F, 0.95F + this.random.nextFloat() * 0.1F); + } + return attacked; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean(HAS_FOOD, this.isCarryingFood()); + if (this.isCarryingFood()) { + tag.put(CARRIED_FOOD_TAG, this.getCarriedFood().save(new CompoundTag())); + } + tag.putInt(OUTSIDE_NEST_TICKS_KEY, this.outsideNestTicks); + tag.putBoolean(TELEPORT_ACTIVATED, this.teleportActivated); + if (this.marchLeaderUuid != null) { + tag.putUUID(MARCH_LEADER_UUID, this.marchLeaderUuid); + tag.putInt(MARCH_ORDER_KEY, this.marchOrder); + } + if (this.nestPos != null) { + tag.putInt(NEST_X, this.nestPos.getX()); + tag.putInt(NEST_Y, this.nestPos.getY()); + tag.putInt(NEST_Z, this.nestPos.getZ()); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.contains(CARRIED_FOOD_TAG)) { + this.setCarriedFood(ItemStack.of(tag.getCompound(CARRIED_FOOD_TAG))); + } else if (tag.getBoolean(HAS_FOOD)) { + this.setCarriedFood(new ItemStack(Items.APPLE)); + } else { + this.clearCarriedFood(); + } + this.outsideNestTicks = tag.getInt(OUTSIDE_NEST_TICKS_KEY); + this.teleportActivated = tag.getBoolean(TELEPORT_ACTIVATED); + if (tag.hasUUID(MARCH_LEADER_UUID)) { + this.marchLeaderUuid = tag.getUUID(MARCH_LEADER_UUID); + this.marchOrder = Math.max(0, tag.getInt(MARCH_ORDER_KEY)); + } else { + this.marchLeaderUuid = null; + this.marchOrder = -1; + } + if (tag.contains(NEST_X) && tag.contains(NEST_Y) && tag.contains(NEST_Z)) { + this.nestPos = new BlockPos(tag.getInt(NEST_X), tag.getInt(NEST_Y), tag.getInt(NEST_Z)); + } else { + this.nestPos = null; + } + this.nextMarchFollowRepathTick = 0; + this.nextJukeboxScanTick = 0; + this.clearFoodChestTarget(); + this.clearRecentFoodChest(); + this.clearRecentGroundFood(); + this.nextNestSearchTick = 0; + this.markNestCacheDirty(); + this.invalidateGroundFoodCache(); + } + + public void setNestPos(BlockPos nestPos) { + this.nestPos = nestPos; + this.markNestCacheDirty(); + } + + public void onEnterNest() { + this.clearCarriedFood(); + this.outsideNestTicks = 0; + this.clearFoodChestTarget(); + this.clearRecentFoodChest(); + this.clearRecentGroundFood(); + this.leaveMarch(); + this.markNestCacheDirty(); + this.playSound(AntarchySoundEvents.ANT_NEST.get(), 0.3F, 1.0F + this.getRandom().nextFloat() * 0.1F); + } + + public void onExitNest() { + this.outsideNestTicks = MIN_OUTSIDE_NEST_TICKS + this.random.nextInt(EXTRA_OUTSIDE_NEST_TICKS); + this.clearFoodChestTarget(); + this.clearRecentFoodChest(); + this.clearRecentGroundFood(); + this.leaveMarch(); + this.markNestCacheDirty(); + this.playSound(AntarchySoundEvents.ANT_NEST.get(), 0.3F, 1.0F + this.getRandom().nextFloat() * 0.1F); + } + + @Override + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + BaseAntEntity child = this.getType().create(level) instanceof BaseAntEntity antChild ? antChild : null; + if (child != null) { + child.setNestPos(this.nestPos); + } + return child; + } + + @Override + protected void dropCustomDeathLoot(net.minecraft.world.damagesource.DamageSource damageSource, int lootingLevel, boolean recentlyHit) { + super.dropCustomDeathLoot(damageSource, lootingLevel, recentlyHit); + if (this.isCarryingFood()) { + ItemStack droppedFood = this.getCarriedFood().copy(); + this.clearCarriedFood(); + ItemEntity itemEntity = this.spawnAtLocation(droppedFood, 0.1F); + if (itemEntity != null) { + itemEntity.setPickUpDelay(40); + } + } + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(this.breedingFoodsTag()); + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.ANT_AMBIENT.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.ANT_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.ANT_HURT.get(); + } + + @Override + public void playAmbientSound() { + SoundEvent ambientSound = this.getAmbientSound(); + if (ambientSound != null) { + this.playSound(ambientSound, 0.1F, this.getVoicePitch()); + } + } + + @Override + protected void playStepSound(BlockPos pos, BlockState state) { + } + + protected abstract ResourceKey destinationDimension(); + protected abstract TagKey activationItemsTag(); + protected abstract TagKey breedingFoodsTag(); + protected abstract String activationMessageKey(); + protected abstract String needsReagentMessageKey(); + protected abstract double configuredMaxHealth(); + + protected boolean requiresActivationReagent() { return false; } + protected double configuredAttackDamage() { return 1.0D; } + protected boolean canForageGroundFood() { return true; } + protected boolean canGroupWithNestmates() { return true; } + protected boolean canMarch() { return true; } + protected boolean canTraverseFluidFloor(FluidState fluidState) { return false; } + protected boolean isAntGriefingEnabled() { + return this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) + && this.level().getGameRules().getBoolean(AntarchyGameRules.RULE_DO_ANT_GREIFING); + } + + + protected boolean handlePriorityForaging() { return false; } + + private boolean shouldUseSharedMarchForageGoal() { + return this.canRunAntMovementGoals() + && this.canMarch() + && this.isMarchFollower() + && !this.isCarryingFood() + && !this.isInLove() + && (this.getSharedMarchFoodChestPos() != null || this.getSharedMarchGroundFoodPos() != null); + } + + private void tickSharedMarchForageGoal() { + if (!this.handleSharedMarchChestForaging()) { + this.handleSharedMarchGroundFoodForaging(); + } + } + + private boolean shouldUseMarchFollowGoal() { + return this.canRunAntMovementGoals() + && this.canMarch() + && this.isMarchFollower() + && !this.shouldUseSharedMarchForageGoal(); + } + + private void tickMarchFollowGoal() { + this.handleMarchFollowing(); + } + + private boolean shouldUseReturnToNestGoal() { + if (this.tickCount < this.returnToNestFailureCooldownTick) { + return false; + } + return this.canRunAntMovementGoals() && this.shouldReturnToNest(this.getReturnToNestReason()); + } + + private void tickReturnToNestGoal() { + this.navigateToNest(1.15D); + } + + private boolean shouldUseForageGoal() { + return this.canRunAntMovementGoals() + && this.canForageGroundFood() + && !this.isCarryingFood() + && !this.isInLove() + && this.hasForageTarget(); + } + + private void tickForageGoal() { + this.handleGroundFoodForaging(); + } + + private void findNearestNestIfNeeded() { + this.nextNestSearchTick = this.tickCount + (this.isCarryingFood() ? FOOD_NEST_SEARCH_INTERVAL_TICKS : NEST_SEARCH_INTERVAL_TICKS); + if (this.hasUsableNest()) { + return; + } + this.nestPos = this.findNearestNestInLoadedChunks(); + this.markNestCacheDirty(); + } + + @Nullable + private BlockPos findNearestNestInLoadedChunks() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return this.findNearestNestInArea(); + } + + BlockPos origin = this.blockPosition(); + BlockPos bestPos = null; + int bestDistance = Integer.MAX_VALUE; + int minChunkX = (origin.getX() - NEST_SEARCH_RADIUS_HORIZONTAL) >> 4; + int maxChunkX = (origin.getX() + NEST_SEARCH_RADIUS_HORIZONTAL) >> 4; + int minChunkZ = (origin.getZ() - NEST_SEARCH_RADIUS_HORIZONTAL) >> 4; + int maxChunkZ = (origin.getZ() + NEST_SEARCH_RADIUS_HORIZONTAL) >> 4; + + for (int chunkX = minChunkX; chunkX <= maxChunkX; chunkX++) { + for (int chunkZ = minChunkZ; chunkZ <= maxChunkZ; chunkZ++) { + if (!serverLevel.hasChunk(chunkX, chunkZ)) { + continue; + } + + LevelChunk chunk = serverLevel.getChunk(chunkX, chunkZ); + for (BlockEntity blockEntity : chunk.getBlockEntities().values()) { + if (!(blockEntity instanceof AntNestBlockEntity nestBlockEntity) || !nestBlockEntity.canAccept(this.getType())) { + continue; + } + + BlockPos pos = blockEntity.getBlockPos(); + if (Math.abs(pos.getX() - origin.getX()) > NEST_SEARCH_RADIUS_HORIZONTAL + || Math.abs(pos.getY() - origin.getY()) > NEST_SEARCH_RADIUS_VERTICAL + || Math.abs(pos.getZ() - origin.getZ()) > NEST_SEARCH_RADIUS_HORIZONTAL) { + continue; + } + + int distance = pos.distManhattan(origin); + if (distance < bestDistance) { + bestDistance = distance; + bestPos = pos.immutable(); + } + } + } + } + + return bestPos; + } + + @Nullable + private BlockPos findNearestNestInArea() { + BlockPos origin = this.blockPosition(); + BlockPos bestPos = null; + int bestDistance = Integer.MAX_VALUE; + + for (BlockPos pos : BlockPos.betweenClosed( + origin.offset(-NEST_SEARCH_RADIUS_HORIZONTAL, -NEST_SEARCH_RADIUS_VERTICAL, -NEST_SEARCH_RADIUS_HORIZONTAL), + origin.offset(NEST_SEARCH_RADIUS_HORIZONTAL, NEST_SEARCH_RADIUS_VERTICAL, NEST_SEARCH_RADIUS_HORIZONTAL))) { + BlockEntity blockEntity = this.level().getBlockEntity(pos); + if (!(blockEntity instanceof AntNestBlockEntity nestBlockEntity) || !nestBlockEntity.canAccept(this.getType())) { + continue; + } + + int distance = pos.distManhattan(origin); + if (distance < bestDistance) { + bestDistance = distance; + bestPos = pos.immutable(); + } + } + + return bestPos; + } + + private boolean handleGroundFoodForaging() { + if (!this.isAntGriefingEnabled() || !this.canForageGroundFood() || this.isCarryingFood() || this.isInLove()) { + return false; + } + + ItemEntity nearestFood = this.nearestGroundFood(); + + if (nearestFood == null) { + return this.handleChestFoodForaging(); + } + + if (this.distanceToSqr(nearestFood) <= 2.25D) { + this.collectGroundFood(nearestFood); + return true; + } + + this.getNavigation().moveTo(nearestFood, GROUND_FOOD_MOVE_SPEED); + return true; + } + + private boolean handleChestFoodForaging() { + if (!this.isAntGriefingEnabled() || !AntarchySettings.antsStealFromChests()) { + return false; + } + + BlockPos chestPos = this.getCurrentFoodChestPos(); + if (chestPos == null) { + return false; + } + + Vec3 chestCenter = Vec3.atBottomCenterOf(chestPos); + if (this.distanceToSqr(chestCenter) <= 4.0D) { + return this.stealFoodFromChest(chestPos); + } + + if (this.getNavigation().isDone() || this.tickCount % CHEST_REPATH_TICKS == 0) { + this.getNavigation().moveTo(chestCenter.x, chestCenter.y, chestCenter.z, CHEST_MOVE_SPEED); + } + return true; + } + + private boolean handleSharedMarchChestForaging() { + if (!this.isAntGriefingEnabled() || this.isCarryingFood() || this.isInLove() || !AntarchySettings.antsStealFromChests()) { + return false; + } + + BlockPos chestPos = this.getSharedMarchFoodChestPos(); + if (chestPos == null) { + return false; + } + + this.targetFoodChestPos = chestPos; + Vec3 chestCenter = Vec3.atBottomCenterOf(chestPos); + if (this.distanceToSqr(chestCenter) <= 4.0D) { + return this.stealFoodFromChest(chestPos); + } + + if (this.getNavigation().isDone() || this.tickCount % CHEST_REPATH_TICKS == 0) { + this.getNavigation().moveTo(chestCenter.x, chestCenter.y, chestCenter.z, SHARED_CHEST_MOVE_SPEED); + } + return true; + } + + private boolean handleSharedMarchGroundFoodForaging() { + if (!this.isAntGriefingEnabled() || this.isCarryingFood() || this.isInLove()) { + return false; + } + + BlockPos groundFoodPos = this.getSharedMarchGroundFoodPos(); + if (groundFoodPos == null) { + return false; + } + + ItemEntity nearestFood = this.findNearestGroundFoodAt(groundFoodPos); + if (nearestFood == null) { + return false; + } + + if (this.distanceToSqr(nearestFood) <= 2.25D) { + this.collectGroundFood(nearestFood); + return true; + } + + this.getNavigation().moveTo(nearestFood, SHARED_GROUND_FOOD_MOVE_SPEED); + return true; + } + + @Nullable + private BlockPos getCurrentFoodChestPos() { + if (this.targetFoodChestPos != null && this.isValidFoodChest(this.targetFoodChestPos)) { + return this.targetFoodChestPos; + } + + this.targetFoodChestPos = null; + BlockPos sharedMarchChestPos = this.getSharedMarchFoodChestPos(); + if (sharedMarchChestPos != null) { + this.targetFoodChestPos = sharedMarchChestPos; + return this.targetFoodChestPos; + } + if (this.tickCount < this.nextFoodChestSearchTick) { + return null; + } + + this.nextFoodChestSearchTick = this.tickCount + CHEST_SEARCH_INTERVAL_TICKS; + this.targetFoodChestPos = this.findClosestFoodChest(); + return this.targetFoodChestPos; + } + + @Nullable + private BlockPos findClosestFoodChest() { + BlockPos origin = this.blockPosition(); + BlockPos bestPos = null; + double bestDistance = Double.MAX_VALUE; + + for (BlockPos pos : BlockPos.betweenClosed( + origin.offset(-(int) FOOD_CHEST_SEARCH_RADIUS, -2, -(int) FOOD_CHEST_SEARCH_RADIUS), + origin.offset((int) FOOD_CHEST_SEARCH_RADIUS, 2, (int) FOOD_CHEST_SEARCH_RADIUS))) { + BlockEntity blockEntity = this.level().getBlockEntity(pos); + if (!(blockEntity instanceof ChestBlockEntity chestBlockEntity) || this.findStealableFoodSlot(chestBlockEntity) < 0) { + continue; + } + + double distance = pos.distSqr(origin); + if (distance < bestDistance) { + bestDistance = distance; + bestPos = pos.immutable(); + } + } + + return bestPos; + } + + private boolean isValidFoodChest(BlockPos chestPos) { + BlockEntity blockEntity = this.level().getBlockEntity(chestPos); + return blockEntity instanceof ChestBlockEntity chestBlockEntity && this.findStealableFoodSlot(chestBlockEntity) >= 0; + } + + private void clearFoodChestTarget() { + this.targetFoodChestPos = null; + this.nextFoodChestSearchTick = 0; + } + + private boolean stealFoodFromChest(BlockPos chestPos) { + BlockEntity blockEntity = this.level().getBlockEntity(chestPos); + if (!(blockEntity instanceof ChestBlockEntity chestBlockEntity)) { + this.clearFoodChestTarget(); + return false; + } + + int foodSlot = this.findStealableFoodSlot(chestBlockEntity); + if (foodSlot < 0) { + this.clearFoodChestTarget(); + return false; + } + + ItemStack stolenStack = chestBlockEntity.removeItem(foodSlot, 1); + if (stolenStack.isEmpty()) { + this.clearFoodChestTarget(); + return false; + } + + this.playSound(AntarchySoundEvents.ANT_GATHER.get(), 0.3F, 1.0F + this.getRandom().nextFloat() * 0.1F); + this.startReturningToNestWithFood(stolenStack, chestPos); + return true; + } + + private int findStealableFoodSlot(Container container) { + for (int slot = 0; slot < container.getContainerSize(); slot++) { + ItemStack itemStack = container.getItem(slot); + if (!itemStack.isEmpty() && this.isGroundFood(itemStack)) { + return slot; + } + } + + return -1; + } + + private void refreshMarch() { + this.validateMarchState(); + if (this.isInMarch()) { + return; + } + + if (this.tryJoinNearbyMarch()) { + return; + } + + this.startOwnMarch(); + } + + private void validateMarchState() { + if (!this.isInMarch()) { + return; + } + + if (this.isMarchLeader()) { + return; + } + + if (!(this.level() instanceof ServerLevel serverLevel)) { + this.leaveMarch(); + return; + } + + BaseAntEntity leader = AntMarchManager.get(serverLevel).getLeader(this.marchLeaderUuid); + if (leader == null || !leader.isAlive() || !this.canShareMarchWith(leader)) { + this.leaveMarch(); + return; + } + + if (this.distanceToSqr(leader) > MARCH_LEADER_LOST_DISTANCE_SQR) { + this.leaveMarch(); + } + } + + private boolean tryJoinNearbyMarch() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return false; + } + + AntMarchManager manager = AntMarchManager.get(serverLevel); + List candidates = manager.getParticipantsNear(this, MARCH_SEARCH_RADIUS, 3.0D); + + BaseAntEntity targetMarchAnt = candidates.stream() + .filter(ant -> ant.isInMarch() && ant.canAcceptMarchFollower(this) && this.canShareMarchWith(ant)) + .min(Comparator.comparingDouble(this::distanceToSqr)) + .orElse(null); + + if (targetMarchAnt == null) { + return false; + } + + BaseAntEntity leader = targetMarchAnt.isMarchLeader() + ? targetMarchAnt + : manager.getLeader(targetMarchAnt.marchLeaderUuid); + + if (leader == null || leader == this) { + return false; + } + + this.joinMarch(leader, manager.getNextOrder(leader.getUUID())); + return true; + } + + private void startOwnMarch() { + if (this.isInMarch()) { + return; + } + + this.marchLeaderUuid = this.getUUID(); + this.marchOrder = 0; + if (this.level() instanceof ServerLevel serverLevel) { + AntMarchManager.get(serverLevel).register(this.marchLeaderUuid, this.marchOrder, this); + } + } + + private void joinMarch(BaseAntEntity leader, int order) { + if (this.isInMarch()) { + this.leaveMarch(); + } + this.marchLeaderUuid = leader.getUUID(); + this.marchOrder = order; + this.nextMarchFollowRepathTick = 0; + if (this.level() instanceof ServerLevel serverLevel) { + AntMarchManager.get(serverLevel).register(this.marchLeaderUuid, this.marchOrder, this); + } + } + + private void leaveMarch() { + if (!this.isInMarch()) { + return; + } + + if (this.level() instanceof ServerLevel serverLevel) { + AntMarchManager.get(serverLevel).unregister(this.marchLeaderUuid, this.marchOrder); + } + this.marchLeaderUuid = null; + this.marchOrder = -1; + this.nextMarchFollowRepathTick = 0; + } + + private boolean handleMarchFollowing() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return false; + } + + AntMarchManager manager = AntMarchManager.get(serverLevel); + BaseAntEntity leader = manager.getLeader(this.marchLeaderUuid); + if (leader == null) { + this.leaveMarch(); + return false; + } + + BaseAntEntity predecessor = manager.getPredecessor(this.marchLeaderUuid, this.marchOrder); + if (predecessor == null) { + predecessor = leader; + } + + Vec3 followTarget = this.getMarchFollowTarget(predecessor); + double distanceToTarget = this.distanceToSqr(followTarget.x, followTarget.y, followTarget.z); + if (distanceToTarget > 0.04D + && (this.getNavigation().isDone() + || distanceToTarget > 4.0D + || this.tickCount >= this.nextMarchFollowRepathTick)) { + double followSpeed = distanceToTarget > 4.0D ? MARCH_FOLLOW_CATCHUP_SPEED : MARCH_FOLLOW_SPEED; + this.getNavigation().moveTo(followTarget.x, followTarget.y, followTarget.z, followSpeed); + this.nextMarchFollowRepathTick = this.tickCount + MARCH_FOLLOW_REPATH_TICKS; + } + return true; + } + + private Vec3 getMarchFollowTarget(BaseAntEntity predecessor) { + Vec3 direction = predecessor.getDeltaMovement(); + Vec3 horizontal = new Vec3(direction.x, 0.0D, direction.z); + if (horizontal.lengthSqr() < 1.0E-4D) { + float yawRadians = predecessor.getYRot() * ((float) Math.PI / 180.0F); + horizontal = new Vec3(-Mth.sin(yawRadians), 0.0D, Mth.cos(yawRadians)); + } + if (horizontal.lengthSqr() < 1.0E-4D) { + horizontal = new Vec3(0.0D, 0.0D, 1.0D); + } + + return predecessor.position().subtract(horizontal.normalize().scale(0.85D)).add(0.0D, 0.05D, 0.0D); + } + + boolean isInMarch() { + return this.marchLeaderUuid != null && this.marchOrder >= 0; + } + + boolean isMarchLeader() { + return this.isInMarch() && this.marchOrder == 0 && this.getUUID().equals(this.marchLeaderUuid); + } + + private boolean isMarchFollower() { + return this.isInMarch() && !this.isMarchLeader(); + } + + boolean canAcceptMarchFollower(BaseAntEntity otherAnt) { + return this.isInMarch() && this.canShareMarchWith(otherAnt); + } + + private boolean canShareMarchWith(BaseAntEntity otherAnt) { + if (otherAnt.getType() == this.getType()) { + return true; + } + + return this.canGroupWithNestmates() + && otherAnt.canGroupWithNestmates() + && this.sharesNestWith(otherAnt); + } + + private boolean tryEnterNest() { + if (this.nestPos == null + || this.tickCount % 5 != 0 + || !this.canEnterNest() + || !this.isNearNestEntrance()) { + return false; + } + + BlockEntity blockEntity = this.level().getBlockEntity(this.nestPos); + return blockEntity instanceof AntNestBlockEntity nestBlockEntity && nestBlockEntity.tryStoreAnt(this); + } + + private boolean shouldReturnToNest(@Nullable String returnReason) { + return returnReason != null && this.canEnterNest(); + } + + private boolean canEnterNest() { + return this.isCarryingFood() || this.outsideNestTicks <= 0; + } + + private void navigateToNest(double speed) { + if (this.nestPos == null) { + return; + } + + BlockPos entrancePos = this.nestPos.above(); + Vec3 entrance = Vec3.atBottomCenterOf(entrancePos); + double horizontalDistanceSqr = Mth.lengthSquared(this.getX() - entrance.x, this.getZ() - entrance.z); + if (horizontalDistanceSqr <= 4.0D && Math.abs(this.getY() - entrance.y) <= 1.5D) { + this.getNavigation().stop(); + this.getMoveControl().setWantedPosition(entrance.x, entrance.y, entrance.z, Math.min(speed, NEST_RETURN_MOVE_SPEED)); + return; + } + + if (this.tickCount % 10 == 0 || this.getNavigation().isDone()) { + this.getNavigation().moveTo(entrance.x, entrance.y, entrance.z, Math.min(speed, NEST_RETURN_MOVE_SPEED)); + } + } + + private boolean isNearNestEntrance() { + if (this.nestPos == null) { + return false; + } + + BlockPos entrancePos = this.nestPos.above(); + if (!this.blockPosition().equals(entrancePos)) { + return false; + } + + Vec3 entrance = Vec3.atBottomCenterOf(entrancePos); + return Math.abs(this.getX() - entrance.x) <= 0.35D + && Math.abs(this.getZ() - entrance.z) <= 0.35D + && Math.abs(this.getY() - entrance.y) <= 0.8D; + } + + private boolean shouldSearchForNest() { + return !this.hasUsableNest() && this.tickCount >= this.nextNestSearchTick; + } + + private void markNestCacheDirty() { + this.nestCacheDirty = true; + this.nextNestCacheTick = 0; + } + + private boolean hasUsableNest() { + if (this.nestCacheDirty || this.tickCount >= this.nextNestCacheTick) { + this.cachedHasUsableNest = this.nestPos != null + && this.level().getBlockEntity(this.nestPos) instanceof AntNestBlockEntity nestBlockEntity + && nestBlockEntity.canAccept(this.getType()); + this.nestCacheDirty = false; + this.nextNestCacheTick = this.tickCount + NEST_CACHE_INTERVAL_TICKS; + } + return this.cachedHasUsableNest; + } + + @Nullable + private ItemEntity nearestGroundFood() { + if (this.tickCount >= this.nextGroundFoodCacheTick + || (this.cachedNearestGroundFood != null && !this.cachedNearestGroundFood.isAlive())) { + this.cachedNearestGroundFood = this.findNearestGroundFoodRaw(); + this.nextGroundFoodCacheTick = this.tickCount + GROUND_FOOD_CACHE_INTERVAL_TICKS; + } + return this.cachedNearestGroundFood; + } + + private void invalidateGroundFoodCache() { + this.cachedNearestGroundFood = null; + this.nextGroundFoodCacheTick = 0; + } + + private boolean canRunAntMovementGoals() { + return !this.level().isClientSide && this.isAlive() && !this.isRemoved() && this.getTarget() == null; + } + + private boolean hasForageTarget() { + return this.isAntGriefingEnabled() + && (this.nearestGroundFood() != null || this.getCurrentFoodChestPos() != null); + } + + private boolean sharesNestWith(BaseAntEntity otherAnt) { + return this.nestPos != null && this.nestPos.equals(otherAnt.nestPos); + } + + private boolean isGroundFood(ItemStack stack) { + return stack.getItem().isEdible(); + } + + private void collectGroundFood(ItemEntity itemEntity) { + this.rememberRecentGroundFood(itemEntity.blockPosition()); + this.invalidateGroundFoodCache(); + ItemStack itemStack = itemEntity.getItem(); + ItemStack carriedStack = itemStack.copyWithCount(1); + itemStack.shrink(1); + if (itemStack.isEmpty()) { + itemEntity.discard(); + } else { + itemEntity.setItem(itemStack); + } + + this.playSound(AntarchySoundEvents.ANT_GATHER.get(), 0.4F, 1.0F + this.getRandom().nextFloat() * 0.1F); + this.startReturningToNestWithFood(carriedStack); + } + + private void tickIdleSound() { + if (this.tickCount < this.nextIdleSoundTick) { + return; + } + + if (!this.onGround() || this.getTarget() != null || this.isCarryingFood() || this.isDancing()) { + return; + } + + if (this.getDeltaMovement().horizontalDistanceSqr() > 0.0025D) { + return; + } + + this.nextIdleSoundTick = this.tickCount + 60 + this.random.nextInt(120); + this.playSound(AntarchySoundEvents.ANT_IDLE.get(), 0.1F, 0.9F + this.random.nextFloat() * 0.15F); + } + + @Nullable + private String getReturnToNestReason() { + if (!this.hasUsableNest()) { + return null; + } + + if (this.isCarryingFood()) { + return "has_food"; + } + + if (this.level().isNight()) { + return "night"; + } + + if (this.level().isRaining()) { + return "raining"; + } + + if (this.distanceToSqr(Vec3.atCenterOf(this.nestPos.above())) > MAX_NEST_WANDER_DISTANCE_SQR) { + return "too_far_from_nest"; + } + + return null; + } + + private void syncConfiguredAttributes() { + this.syncAttribute(this.getAttribute(Attributes.MAX_HEALTH), this.configuredMaxHealth(), true); + this.syncAttribute(this.getAttribute(Attributes.ATTACK_DAMAGE), this.configuredAttackDamage(), false); + } + + public boolean isDancing() { + return this.entityData.get(DANCING); + } + + private void setDancing(boolean dancing) { + if (this.isDancing() != dancing) { + this.entityData.set(DANCING, dancing); + if (dancing) { + this.triggerAnim("main_controller", "dance"); + } else { + this.stopTriggeredAnimation("main_controller", "dance"); + } + } + } + + private void tickJukeboxDanceState() { + if (this.jukeboxPos != null) { + if (this.tickCount % 20 == 0 && !this.isJukeboxActivelyPlayingAt(this.jukeboxPos, this.cachedDanceRadius)) { + this.jukeboxPos = null; + if (this.isDancing()) { + this.setDancing(false); + } + } + if (this.jukeboxPos != null) { + return; + } + } + + if (this.tickCount < this.nextJukeboxScanTick) { + if (this.isDancing()) { + this.setDancing(false); + } + return; + } + + this.cachedDanceRadius = Math.max(1.0D, AntarchySettings.antDanceRadius()); + this.nextJukeboxScanTick = this.tickCount + JUKEBOX_SCAN_INTERVAL_TICKS; + BlockPos nearbyJukebox = this.findNearestPlayingJukebox(this.cachedDanceRadius); + this.jukeboxPos = nearbyJukebox; + this.setDancing(nearbyJukebox != null); + } + + private boolean isJukeboxActivelyPlayingAt(BlockPos jukeboxPos, double danceRadius) { + if (!jukeboxPos.closerToCenterThan(this.position(), danceRadius)) { + return false; + } + + return this.isJukeboxPlayingFromState(jukeboxPos); + } + + @Nullable + private BlockPos findNearestPlayingJukebox(double danceRadius) { + int radius = Mth.ceil(danceRadius); + BlockPos center = this.blockPosition(); + BlockPos closest = null; + double closestDistanceSqr = Double.MAX_VALUE; + + for (BlockPos pos : BlockPos.betweenClosed( + center.getX() - radius, center.getY() - radius, center.getZ() - radius, + center.getX() + radius, center.getY() + radius, center.getZ() + radius)) { + if (!pos.closerToCenterThan(this.position(), danceRadius)) { + continue; + } + + if (!this.level().getBlockState(pos).is(Blocks.JUKEBOX)) { + continue; + } + + if (!this.isJukeboxPlayingFromState(pos)) { + continue; + } + + double distanceSqr = this.distanceToSqr(Vec3.atCenterOf(pos)); + if (distanceSqr < closestDistanceSqr) { + closestDistanceSqr = distanceSqr; + closest = pos.immutable(); + } + } + + return closest; + } + + private boolean isJukeboxPlayingFromState(BlockPos pos) { + BlockState state = this.level().getBlockState(pos); + if (!state.is(Blocks.JUKEBOX)) { + return false; + } + + return state.hasProperty(BlockStateProperties.HAS_RECORD) && state.getValue(BlockStateProperties.HAS_RECORD); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.isDancing()) { + state.getController().setAnimationSpeed(1.0D); + return state.setAndContinue(DANCE_ANIM); + } + + if (this.shouldPlayAttackAnimation()) { + state.getController().setAnimationSpeed(1.0D); + return state.setAndContinue(ATTACK_ANIM); + } + + if (this.walkAnimation.isMoving() || this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D) { + state.getController().setAnimationSpeed(1.0D); + return state.setAndContinue(WALK_ANIM); + } + + state.getController().setAnimationSpeed(1.0D); + return state.setAndContinue(IDLE_ANIM); + } + + private boolean shouldPlayAttackAnimation() { + return this.shouldUseBiteAnimation() && this.getBiteAnimationTicks() > 0; + } + + protected boolean shouldUseBiteAnimation() { + return this instanceof RedAntEntity; + } + + private int getBiteAnimationTicks() { + return this.entityData.get(BITE_ANIM_TICKS); + } + + private void setBiteAnimationTicks(int ticks) { + int clamped = Math.max(0, ticks); + int previous = this.getBiteAnimationTicks(); + this.entityData.set(BITE_ANIM_TICKS, clamped); + if (previous <= 0 && clamped > 0) { + this.triggerAnim("main_controller", "attack"); + } else if (previous > 0 && clamped <= 0) { + this.stopTriggeredAnimation("main_controller", "attack"); + } + } + + protected final void triggerBiteAnimation(int ticks) { + this.setBiteAnimationTicks(ticks); + } + + private void syncAttribute(@Nullable AttributeInstance attributeInstance, double desiredValue, boolean rescaleCurrentHealth) { + if (attributeInstance == null || Math.abs(attributeInstance.getBaseValue() - desiredValue) < ATTRIBUTE_EPSILON) { + return; + } + + if (rescaleCurrentHealth) { + double previousMaxHealth = attributeInstance.getBaseValue(); + float healthRatio = previousMaxHealth > 0.0D ? this.getHealth() / (float) previousMaxHealth : 1.0F; + attributeInstance.setBaseValue(desiredValue); + this.setHealth((float) Mth.clamp(healthRatio * desiredValue, 0.0D, desiredValue)); + return; + } + + attributeInstance.setBaseValue(desiredValue); + } + + protected ServerLevel resolveReturnDestinationLevel(ServerPlayer player) { + return AntTeleportHelper.resolveReturnDestinationLevel(player); + } + + protected Vec3 getDestinationPosition(ServerLevel destination, ServerPlayer player) { + return AntTeleportHelper.getDestinationPosition(player, destination); + } + + public boolean isCarryingFood() { + return !this.getCarriedFood().isEmpty(); + } + + public ItemStack getCarriedFood() { + return this.entityData.get(CARRIED_FOOD); + } + + boolean isTeleportActivatedState() { + return this.teleportActivated; + } + + void setTeleportActivatedState(boolean teleportActivated) { + this.teleportActivated = teleportActivated; + } + + private void setCarriedFood(ItemStack stack) { + this.entityData.set(CARRIED_FOOD, stack.isEmpty() ? ItemStack.EMPTY : stack.copyWithCount(1)); + } + + private void clearCarriedFood() { + this.entityData.set(CARRIED_FOOD, ItemStack.EMPTY); + } + + private void startReturningToNestWithFood(ItemStack carriedFood, @Nullable BlockPos sourceChestPos) { + this.setCarriedFood(carriedFood); + this.outsideNestTicks = 0; + if (sourceChestPos != null) { + this.rememberRecentFoodChest(sourceChestPos); + } + this.clearFoodChestTarget(); + if (!this.hasUsableNest()) { + this.findNearestNestIfNeeded(); + } + if (this.nestPos != null) { + if (this.isMarchLeader()) { + logDebug( + "[Antarchy] March leader {} picked up {} and is heading to nest at {}.", + this.getUUID(), carriedFood.getItem(), this.nestPos); + } + Vec3 entrance = Vec3.atBottomCenterOf(this.nestPos.above()); + this.getNavigation().moveTo(entrance.x, entrance.y, entrance.z, FOOD_RETURN_MOVE_SPEED); + } else { + if (this.isMarchLeader()) { + logWarn( + "[Antarchy] March leader {} picked up {} but has no nest — stroll fallback. pos={}", + this.getUUID(), carriedFood.getItem(), this.blockPosition()); + } + this.getNavigation().stop(); + } + } + + private void startReturningToNestWithFood(ItemStack carriedFood) { + this.startReturningToNestWithFood(carriedFood, null); + } + + private void rememberRecentFoodChest(BlockPos chestPos) { + this.recentFoodChestPos = chestPos.immutable(); + this.recentFoodChestExpireTick = this.tickCount + SHARED_CHEST_MEMORY_TICKS; + } + + private void clearRecentFoodChest() { + this.recentFoodChestPos = null; + this.recentFoodChestExpireTick = 0; + } + + private void rememberRecentGroundFood(BlockPos foodPos) { + this.recentGroundFoodPos = foodPos.immutable(); + this.recentGroundFoodExpireTick = this.tickCount + SHARED_CHEST_MEMORY_TICKS; + } + + private void clearRecentGroundFood() { + this.recentGroundFoodPos = null; + this.recentGroundFoodExpireTick = 0; + } + + @Nullable + private BlockPos getSharedMarchFoodChestPos() { + if (!this.isMarchFollower() || !(this.level() instanceof ServerLevel serverLevel)) { + return null; + } + + BaseAntEntity leader = AntMarchManager.get(serverLevel).getLeader(this.marchLeaderUuid); + if (leader == null || leader == this) { + return null; + } + + if (leader.targetFoodChestPos != null && this.isValidFoodChest(leader.targetFoodChestPos)) { + return leader.targetFoodChestPos; + } + + if (leader.recentFoodChestPos != null + && leader.tickCount <= leader.recentFoodChestExpireTick + && this.isValidFoodChest(leader.recentFoodChestPos)) { + return leader.recentFoodChestPos; + } + + return null; + } + + @Nullable + private BlockPos getSharedMarchGroundFoodPos() { + if (!this.isMarchFollower() || !(this.level() instanceof ServerLevel serverLevel)) { + return null; + } + + BaseAntEntity leader = AntMarchManager.get(serverLevel).getLeader(this.marchLeaderUuid); + if (leader == null || leader == this) { + return null; + } + + if (leader.recentGroundFoodPos != null + && leader.tickCount <= leader.recentGroundFoodExpireTick + && this.findNearestGroundFoodAt(leader.recentGroundFoodPos) != null) { + return leader.recentGroundFoodPos; + } + + return null; + } + + @Nullable + private ItemEntity findNearestGroundFoodAt(BlockPos foodPos) { + return this.level().getEntitiesOfClass( + ItemEntity.class, + new AABB(foodPos).inflate(2.0D, 1.5D, 2.0D), + itemEntity -> itemEntity.isAlive() + && !itemEntity.getItem().isEmpty() + && this.isGroundFood(itemEntity.getItem())) + .stream() + .min(Comparator.comparingDouble(this::distanceToSqr)) + .orElse(null); + } + + @Nullable + private ItemEntity findNearestGroundFoodRaw() { + return this.level().getEntitiesOfClass( + ItemEntity.class, + this.getBoundingBox().inflate(10.0D, 2.0D, 10.0D), + itemEntity -> itemEntity.isAlive() + && !itemEntity.getItem().isEmpty() + && this.isGroundFood(itemEntity.getItem())) + .stream() + .min(Comparator.comparingDouble(this::distanceToSqr)) + .orElse(null); + } + + private abstract class AbstractAntMoveGoal extends Goal { + protected AbstractAntMoveGoal() { + this.setFlags(EnumSet.of(Goal.Flag.MOVE)); + } + } + + private final class AntDanceGoal extends Goal { + private AntDanceGoal() { + this.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK, Goal.Flag.TARGET)); + } + + @Override + public boolean canUse() { + return isDancing(); + } + + @Override + public boolean canContinueToUse() { + return isDancing(); + } + + @Override + public void start() { + setTarget(null); + leaveMarch(); + getNavigation().stop(); + } + + @Override + public void tick() { + setTarget(null); + getNavigation().stop(); + getLookControl().setLookAt(getX(), getEyeY(), getZ(), 10.0F, 10.0F); + } + + @Override + public void stop() { + getNavigation().stop(); + } + } + + private final class AntSharedMarchForageGoal extends AbstractAntMoveGoal { + @Override + public boolean canUse() { + return shouldUseSharedMarchForageGoal(); + } + + @Override + public boolean canContinueToUse() { + return shouldUseSharedMarchForageGoal(); + } + + @Override + public void tick() { + tickSharedMarchForageGoal(); + } + } + + private final class AntMarchFollowGoal extends AbstractAntMoveGoal { + @Override + public boolean canUse() { + return shouldUseMarchFollowGoal(); + } + + @Override + public boolean canContinueToUse() { + return shouldUseMarchFollowGoal(); + } + + @Override + public void tick() { + tickMarchFollowGoal(); + } + } + + private final class AntReturnToNestGoal extends AbstractAntMoveGoal { + + private int navDoneStreak; + + @Override + public boolean canUse() { + return shouldUseReturnToNestGoal(); + } + + @Override + public boolean canContinueToUse() { + if (navDoneStreak >= RETURN_NAV_FAILURE_STREAK) { + returnToNestFailureCooldownTick = tickCount + RETURN_NAV_FAILURE_COOLDOWN; + logDebug( + "[Antarchy] AntReturnToNestGoal giving up — nav failed for {} ticks. " + + "leader={} pos={} nestPos={} reason={} cooldown={}t", + navDoneStreak, getUUID(), blockPosition(), nestPos, + getReturnToNestReason(), RETURN_NAV_FAILURE_COOLDOWN); + return false; + } + return shouldUseReturnToNestGoal(); + } + + @Override + public void start() { + navDoneStreak = 0; + if (isMarchLeader()) { + logDebug( + "[Antarchy] AntReturnToNestGoal START — leader={} nestPos={} carrying={} reason={}", + getUUID(), nestPos, isCarryingFood(), getReturnToNestReason()); + } + } + + @Override + public void stop() { + if (isMarchLeader()) { + logDebug( + "[Antarchy] AntReturnToNestGoal STOP — leader={} nestPos={} carrying={} navDone={}", + getUUID(), nestPos, isCarryingFood(), getNavigation().isDone()); + } + navDoneStreak = 0; + } + + @Override + public void tick() { + tickReturnToNestGoal(); + if (getNavigation().isDone()) { + navDoneStreak++; + if (isMarchLeader() && navDoneStreak == RETURN_NAV_FAILURE_STREAK) { + logDebug( + "[Antarchy] AntReturnToNestGoal nav stalled for {} ticks — will give up next canContinueToUse. " + + "leader={} pos={} nestPos={} carrying={} reason={}", + navDoneStreak, getUUID(), blockPosition(), nestPos, + isCarryingFood(), getReturnToNestReason()); + } + } else { + navDoneStreak = 0; + } + } + } + + private final class AntForageGoal extends AbstractAntMoveGoal { + @Override + public boolean canUse() { + return shouldUseForageGoal(); + } + + @Override + public boolean canContinueToUse() { + return shouldUseForageGoal(); + } + + @Override + public void start() { + if (isMarchLeader()) { + logDebug( + "[Antarchy] AntForageGoal START — leader={} pos={} groundFood={} chest={}", + getUUID(), blockPosition(), + nearestGroundFood() != null ? nearestGroundFood().blockPosition() : "null", + getCurrentFoodChestPos()); + } + } + + @Override + public void stop() { + if (isMarchLeader()) { + logDebug( + "[Antarchy] AntForageGoal STOP — leader={} pos={} carrying={}", + getUUID(), blockPosition(), isCarryingFood()); + } + } + + @Override + public void tick() { + tickForageGoal(); + } + } + + + private final class AntFoodEscapeGoal extends AvoidEntityGoal { + AntFoodEscapeGoal() { + super(BaseAntEntity.this, Player.class, 12.0F, ESCAPE_MOVE_SPEED, ESCAPE_MOVE_SPEED); + } + + @Override + public boolean canUse() { + return isCarryingFood() && !hasUsableNest() && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + return isCarryingFood() && !hasUsableNest() && super.canContinueToUse(); + } + } + + + private final class AntRandomStrollGoal extends WaterAvoidingRandomStrollGoal { + private static final double FORWARD_BIAS_DISTANCE = 8.0D; + private static final int FORWARD_SEARCH_RADIUS = 8; + private static final int WIDE_SEARCH_RADIUS = 16; + private static final int MIN_DISTANCE_SQR = 4; + + AntRandomStrollGoal(double speedModifier) { + super(BaseAntEntity.this, speedModifier, 5); + } + @Override + public boolean canUse() { + if (isMarchLeader() || (isCarryingFood() && !hasUsableNest())) { + Vec3 pos = getPosition(); + if (pos != null) { + wantedX = pos.x; + wantedY = pos.y; + wantedZ = pos.z; + return true; + } + return false; + } + return super.canUse(); + } + + @Override + @Nullable + protected Vec3 getPosition() { + Vec3 heading = getStrollHeading(); + Vec3 forwardBias = position().add(heading.scale(FORWARD_BIAS_DISTANCE)); + Vec3 forward = findStrollTarget(BlockPos.containing(forwardBias), FORWARD_SEARCH_RADIUS); + if (forward != null) return forward; + return findStrollTarget(blockPosition(), WIDE_SEARCH_RADIUS); + } + + @Nullable + private Vec3 findStrollTarget(BlockPos center, int radius) { + for (int attempt = 0; attempt < 16; attempt++) { + int x = center.getX() + random.nextInt(radius * 2 + 1) - radius; + int z = center.getZ() + random.nextInt(radius * 2 + 1) - radius; + + BlockPos candidate = null; + for (int dy = 2; dy >= -4; dy--) { + BlockPos pos = new BlockPos(x, center.getY() + dy, z); + if (isValidStrollPos(pos)) { + candidate = pos; + break; + } + } + + if (candidate == null) continue; + if (candidate.distSqr(blockPosition()) < MIN_DISTANCE_SQR) continue; + if (nestPos != null && candidate.distSqr(nestPos) > MAX_NEST_WANDER_DISTANCE_SQR) continue; + + return new Vec3(candidate.getX() + 0.5D, candidate.getY(), candidate.getZ() + 0.5D); + } + return null; + } + + private Vec3 getStrollHeading() { + Vec3 movement = getDeltaMovement(); + Vec3 horizontal = new Vec3(movement.x, 0.0D, movement.z); + if (horizontal.lengthSqr() > 1.0E-4D) return horizontal.normalize(); + float yawRad = getYRot() * ((float) Math.PI / 180.0F); + return new Vec3(-Mth.sin(yawRad), 0.0D, Mth.cos(yawRad)); + } + + private boolean isValidStrollPos(BlockPos pos) { + BlockState floor = level().getBlockState(pos.below()); + FluidState fluidBelow = level().getFluidState(pos.below()); + if (!level().getBlockState(pos).isAir()) return false; + if (!fluidBelow.isEmpty() && !BaseAntEntity.this.canTraverseFluidFloor(fluidBelow)) return false; + if (!floor.isFaceSturdy(level(), pos.below(), Direction.UP)) return false; + AABB box = getBoundingBox().move( + pos.getX() + 0.5D - getX(), + pos.getY() - getY(), + pos.getZ() + 0.5D - getZ()); + return level().noCollision(BaseAntEntity.this, box); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BrownAntEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BrownAntEntity.java new file mode 100644 index 00000000..3cad8fd5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BrownAntEntity.java @@ -0,0 +1,51 @@ +package com.craisinlord.antarchy.content.entity.ant; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.resources.ResourceKey; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; +import software.bernie.geckolib.animatable.GeoEntity; + +public class BrownAntEntity extends BaseAntEntity implements GeoEntity { + public BrownAntEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + @Override + protected ResourceKey destinationDimension() { + return AntarchySettings.brownAntDestinationDimension(); + } + + @Override + protected TagKey activationItemsTag() { + return AntarchyTags.Items.BROWN_ANT_ACTIVATION_ITEMS; + } + + @Override + protected TagKey breedingFoodsTag() { + return AntarchyTags.Items.BROWN_ANT_BREEDING_FOODS; + } + + @Override + protected boolean requiresActivationReagent() { + return AntarchySettings.brownAntRequiresReagent(); + } + + @Override + protected String activationMessageKey() { + return "message.antarchy.brown_ant_activated"; + } + + @Override + protected String needsReagentMessageKey() { + return "message.antarchy.brown_ant_needs_reagent"; + } + + @Override + protected double configuredMaxHealth() { + return AntarchySettings.brownAntHealth(); + } +} 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 new file mode 100644 index 00000000..f1fdfd58 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java @@ -0,0 +1,395 @@ +package com.craisinlord.antarchy.content.entity.ant; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.portal.RainbowPortalIgniter; +import net.minecraft.core.registries.Registries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +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.sounds.SoundEvents; +import net.minecraft.tags.TagKey; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +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.level.storage.LevelResource; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Comparator; + +public class RainbowAntEntity extends BaseAntEntity implements GeoEntity { + private static final String DIMENSION_ID_TAG = "InfinityDimensionId"; + private static final String ACTIVATED_TAG = "InfinityActivated"; + private static final String INHERITED_TAG = "InfinityInherited"; + private static final String REROLL_ON_NEXT_REAGENT_TAG = "InfinityRerollOnNextReagent"; + private static final String INFINITY_NAMESPACE = "infinity"; + private String infinityDimensionId = ""; + private boolean infinityActivated; + private boolean infinityInherited; + private boolean infinityRerollOnNextReagent; + + public RainbowAntEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public static InteractionResult teleportPlayerFromStoredData(ServerPlayer player, @Nullable CompoundTag entityData) { + if (!AntarchySettings.rainbowAntsLeadToInfinityDimensions() || !InfinityCompat.get().isAvailable()) { + return AntTeleportHelper.teleportPlayerToDimension(player, AntarchySettings.rainbowAntNonInfinityFallbackDimension()); + } + + if (INFINITY_NAMESPACE.equals(player.serverLevel().dimension().location().getNamespace())) { + return AntTeleportHelper.teleportPlayerToReturnDestination(player); + } + + ResourceLocation dimensionId = parseStoredDimensionId(entityData); + if (dimensionId == null) { + return AntTeleportHelper.teleportPlayerToDimension(player, AntarchySettings.rainbowAntNonInfinityFallbackDimension()); + } + + if (!InfinityCompat.get().requestWarp(player, dimensionId)) { + player.displayClientMessage(Component.translatable("message.antarchy.rainbow_ant_failed_dimension_create"), true); + return InteractionResult.CONSUME; + } + + player.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + return InteractionResult.CONSUME; + } + + @Override + public boolean requiresCustomPersistence() { + 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; + } + if (!AntarchySettings.permanentPortalsEnabled() || !AntarchySettings.rainbowAntsLeadToInfinityDimensions() + || !InfinityCompat.get().isAvailable()) { + return false; + } + if (!(this.level() instanceof ServerLevel serverLevel)) { + return false; + } + + ResourceLocation dimensionId = this.resolveDimensionId(); + if (dimensionId == null) { + return false; + } + + return RainbowPortalIgniter.tryIgnite(serverLevel, this.getBoundingBox(), dimensionId); + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + if (!AntTeleportHelper.isRightClickDimensionEnabled(this)) { + ItemStack heldItem = player.getItemInHand(hand); + return this.isFood(heldItem) ? super.mobInteract(player, hand) : InteractionResult.PASS; + } + + if (!AntarchySettings.rainbowAntsLeadToInfinityDimensions() || !InfinityCompat.get().isAvailable()) { + return super.mobInteract(player, hand); + } + + if (!(player instanceof ServerPlayer serverPlayer)) { + return InteractionResult.SUCCESS; + } + + ItemStack heldItem = player.getItemInHand(hand); + + 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); + return InteractionResult.CONSUME; + } + + if (!this.infinityActivated) { + if (!AntarchySettings.rainbowAntRequiresReagent()) { + if (this.isFood(heldItem)) { + return super.mobInteract(player, hand); + } + + if (!heldItem.isEmpty() && !heldItem.is(AntarchyTags.Items.RAINBOW_ANT_ACTIVATION_ITEMS)) { + return InteractionResult.PASS; + } + + return this.activateInfinityDestination(serverPlayer, heldItem); + } + + if (heldItem.is(AntarchyTags.Items.RAINBOW_ANT_ACTIVATION_ITEMS)) { + return this.activateInfinityDestination(serverPlayer, heldItem); + } + + if (!heldItem.isEmpty()) { + return InteractionResult.PASS; + } + + serverPlayer.displayClientMessage(Component.translatable("message.antarchy.rainbow_ant_needs_reagent"), true); + return InteractionResult.CONSUME; + } + + if (this.isFood(heldItem)) { + return super.mobInteract(player, hand); + } + + if (!heldItem.isEmpty()) { + return InteractionResult.PASS; + } + + ResourceLocation dimensionId = this.resolveDimensionId(); + if (dimensionId == null) { + serverPlayer.displayClientMessage(Component.translatable("message.antarchy.rainbow_ant_infinity_missing"), true); + return InteractionResult.CONSUME; + } + + if (!this.teleportToInfinity(serverPlayer, dimensionId)) { + return InteractionResult.CONSUME; + } + + serverPlayer.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + return InteractionResult.CONSUME; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putString(DIMENSION_ID_TAG, this.infinityDimensionId); + tag.putBoolean(ACTIVATED_TAG, this.infinityActivated); + tag.putBoolean(INHERITED_TAG, this.infinityInherited); + tag.putBoolean(REROLL_ON_NEXT_REAGENT_TAG, this.infinityRerollOnNextReagent); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.infinityDimensionId = tag.getString(DIMENSION_ID_TAG); + this.infinityActivated = tag.getBoolean(ACTIVATED_TAG); + this.infinityInherited = tag.getBoolean(INHERITED_TAG); + this.infinityRerollOnNextReagent = tag.getBoolean(REROLL_ON_NEXT_REAGENT_TAG); + } + + @Override + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + RainbowAntEntity child = this.getType().create(level) instanceof RainbowAntEntity rainbowAnt ? rainbowAnt : null; + if (child == null) { + return null; + } + + child.setNestPos(this.blockPosition()); + if (!(otherParent instanceof RainbowAntEntity otherRainbowAnt)) { + child.assignDimensionId(this.getStoredDimensionId(), false, true); + return child; + } + + double roll = level.random.nextDouble(); + if (roll < 0.45D) { + child.assignDimensionId(this.getStoredDimensionId(), false, true); + } else if (roll < 0.90D) { + child.assignDimensionId(otherRainbowAnt.getStoredDimensionId(), false, true); + } else { + child.assignDimensionId(child.createRandomDimensionId(), false, false); + } + return child; + } + + @Override + protected ResourceKey destinationDimension() { + return AntarchySettings.rainbowAntNonInfinityFallbackDimension(); + } + + @Override + protected TagKey activationItemsTag() { + return AntarchyTags.Items.RAINBOW_ANT_ACTIVATION_ITEMS; + } + + @Override + protected TagKey breedingFoodsTag() { + return AntarchyTags.Items.RAINBOW_ANT_BREEDING_FOODS; + } + + @Override + protected String activationMessageKey() { + return "message.antarchy.rainbow_ant_activated"; + } + + @Override + protected String needsReagentMessageKey() { + return "message.antarchy.rainbow_ant_needs_reagent"; + } + + @Override + protected double configuredMaxHealth() { + return AntarchySettings.rainbowAntHealth(); + } + + private InteractionResult activateInfinityDestination(ServerPlayer player, ItemStack stack) { + if (this.infinityRerollOnNextReagent) { + this.rerollDimensionIdForNextActivation(); + } + + ResourceLocation dimensionId = this.resolveDimensionId(); + if (dimensionId == null) { + player.displayClientMessage(Component.translatable("message.antarchy.rainbow_ant_infinity_missing"), true); + return InteractionResult.CONSUME; + } + + boolean existedBefore = this.infinityDimensionExists(player.server, dimensionId); + this.infinityActivated = true; + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + + if (this.infinityInherited && existedBefore) { + player.displayClientMessage(Component.translatable("message.antarchy.rainbow_ant_activated_inherited_existing"), true); + } else if (this.infinityInherited) { + player.displayClientMessage(Component.translatable("message.antarchy.rainbow_ant_activated_inherited"), true); + } else { + player.displayClientMessage(Component.translatable("message.antarchy.rainbow_ant_activated"), true); + } + this.playSound(SoundEvents.END_PORTAL_SPAWN, 0.8F, 1.1F); + return InteractionResult.CONSUME; + } + + private void ensureInfinityIdentity() { + if (this.infinityDimensionId.isEmpty()) { + this.infinityDimensionId = this.createRandomDimensionId(); + this.infinityInherited = false; + this.infinityRerollOnNextReagent = false; + } + } + + private boolean hasActiveInfinityDestination() { + return this.infinityActivated && !this.infinityDimensionId.isEmpty(); + } + + private ResourceLocation resolveDimensionId() { + this.ensureInfinityIdentity(); + return this.parseDimensionId(this.infinityDimensionId); + } + + private String getStoredDimensionId() { + this.ensureInfinityIdentity(); + return this.infinityDimensionId; + } + + private void assignDimensionId(String dimensionId, boolean activated, boolean inherited) { + this.infinityDimensionId = dimensionId; + this.infinityActivated = activated; + this.infinityInherited = inherited; + this.infinityRerollOnNextReagent = false; + } + + private void markForRerollOnNextReagent() { + this.infinityActivated = false; + this.infinityRerollOnNextReagent = true; + } + + private void rerollDimensionIdForNextActivation() { + this.assignDimensionId(this.createRandomDimensionId(), false, false); + } + + private boolean infinityDimensionExists(MinecraftServer server, ResourceLocation dimensionId) { + ResourceKey key = ResourceKey.create(Registries.DIMENSION, dimensionId); + return server.getLevel(key) != null || server.levelKeys().contains(key); + } + + private String createRandomDimensionId() { + ResourceLocation dimensionId = InfinityCompat.get().getRandomDimensionId(this.random, AntarchySettings.rainbowAntInfinityEasterEggChance()); + if (dimensionId == null) { + return ""; + } + return dimensionId.toString(); + } + + private boolean isInInfinityDimension(ServerLevel level) { + return INFINITY_NAMESPACE.equals(level.dimension().location().getNamespace()); + } + + private ResourceLocation parseDimensionId(String storedDimensionId) { + try { + return new ResourceLocation(storedDimensionId); + } catch (Throwable throwable) { + return null; + } + } + + @Nullable + private static ResourceLocation parseStoredDimensionId(@Nullable CompoundTag entityData) { + if (entityData == null || !entityData.contains(DIMENSION_ID_TAG)) { + return null; + } + + try { + String storedDimensionId = entityData.getString(DIMENSION_ID_TAG); + return storedDimensionId.isEmpty() ? null : new ResourceLocation(storedDimensionId); + } catch (Throwable throwable) { + return null; + } + } + + private boolean teleportToInfinity(ServerPlayer player, ResourceLocation dimensionId) { + if (!InfinityCompat.get().requestWarp(player, dimensionId)) { + this.deleteGeneratedArtifacts(player.server, dimensionId); + this.markForRerollOnNextReagent(); + player.displayClientMessage(Component.translatable("message.antarchy.rainbow_ant_failed_dimension_create"), true); + return false; + } + return true; + } + + private void deleteGeneratedArtifacts(MinecraftServer server, ResourceLocation dimensionId) { + if (!INFINITY_NAMESPACE.equals(dimensionId.getNamespace())) { + return; + } + + Path datapackPath = server.getWorldPath(LevelResource.DATAPACK_DIR).resolve(dimensionId.getPath()); + Path dimensionPath = server.getWorldPath(LevelResource.ROOT) + .resolve("dimensions") + .resolve(dimensionId.getNamespace()) + .resolve(dimensionId.getPath()); + + this.deletePathRecursively(datapackPath); + if (dimensionPath != null) { + this.deletePathRecursively(dimensionPath); + } + } + + private void deletePathRecursively(Path path) { + if (!Files.exists(path)) { + return; + } + try (var paths = Files.walk(path)) { + paths.sorted(Comparator.reverseOrder()).forEach(currentPath -> { + try { + Files.deleteIfExists(currentPath); + } catch (IOException exception) { + throw new RuntimeException(exception); + } + }); + } catch (IOException | RuntimeException ignored) { + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RedAntEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RedAntEntity.java new file mode 100644 index 00000000..1745df7f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RedAntEntity.java @@ -0,0 +1,92 @@ +package com.craisinlord.antarchy.content.entity.ant; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.resources.ResourceKey; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import software.bernie.geckolib.animatable.GeoEntity; + +public class RedAntEntity extends BaseAntEntity implements GeoEntity { + public RedAntEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + @Override + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(2, new MeleeAttackGoal(this, 1.2D, false)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + protected ResourceKey destinationDimension() { + return AntarchySettings.redAntDestinationDimension(); + } + + @Override + protected TagKey activationItemsTag() { + return AntarchyTags.Items.RED_ANT_ACTIVATION_ITEMS; + } + + @Override + protected TagKey breedingFoodsTag() { + return AntarchyTags.Items.RED_ANT_BREEDING_FOODS; + } + + @Override + protected boolean requiresActivationReagent() { + return AntarchySettings.redAntRequiresReagent(); + } + + @Override + protected String activationMessageKey() { + return "message.antarchy.red_ant_activated"; + } + + @Override + protected String needsReagentMessageKey() { + return "message.antarchy.red_ant_needs_reagent"; + } + + @Override + protected double configuredMaxHealth() { + return AntarchySettings.redAntHealth(); + } + + @Override + protected double configuredAttackDamage() { + return AntarchySettings.redAntAttackDamage(); + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return !this.isLeashed() && !this.hasCustomName(); + } + + @Override + public boolean fireImmune() { + return true; + } + + @Override + public void lavaHurt() { + } + + @Override + public boolean canStandOnFluid(FluidState fluidState) { + return fluidState.is(Fluids.LAVA) || super.canStandOnFluid(fluidState); + } + + @Override + protected boolean canTraverseFluidFloor(FluidState fluidState) { + return fluidState.is(Fluids.LAVA); + } +} 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 new file mode 100644 index 00000000..304d521d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java @@ -0,0 +1,353 @@ +package com.craisinlord.antarchy.content.entity.ant; + +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.AntarchyGameRules; +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.TagKey; +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.block.Block; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.pathfinder.Path; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; + +public class TermiteEntity extends BaseAntEntity implements GeoEntity { + private static final int WOOD_BITE_ANIMATION_TICKS = 8; + private static final int WOOD_BITE_COOLDOWN_TICKS = 20 * 3; + private static final int WOOD_SEARCH_INTERVAL_TICKS = 20; + 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 Vec3i[] IMMEDIATE_WOOD_OFFSETS = { + new Vec3i(0, 1, 0), + new Vec3i(0, 0, -1), + new Vec3i(0, 0, 1), + new Vec3i(1, 0, 0), + new Vec3i(-1, 0, 0), + new Vec3i(0, 1, -1), + new Vec3i(0, 1, 1), + new Vec3i(1, 1, 0), + new Vec3i(-1, 1, 0), + }; + @Nullable + private BlockPos targetWoodPos; + private int nextWoodBiteTick; + private int nextWoodSearchTick; + private int nextWoodRepathTick; + + public TermiteEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + @Override + public void tick() { + super.tick(); + if (!this.level().isClientSide && this.targetWoodPos != null && !this.isValidWoodTarget(this.targetWoodPos)) { + this.targetWoodPos = null; + } + } + + @Override + protected ResourceKey destinationDimension() { + return AntarchySettings.termiteDestinationDimension(); + } + + @Override + protected TagKey activationItemsTag() { + return AntarchyTags.Items.TERMITE_ACTIVATION_ITEMS; + } + + @Override + protected TagKey breedingFoodsTag() { + return AntarchyTags.Items.TERMITE_BREEDING_FOODS; + } + + @Override + protected boolean requiresActivationReagent() { + return AntarchySettings.termiteRequiresReagent(); + } + + @Override + protected String activationMessageKey() { + return "message.antarchy.termite_activated"; + } + + @Override + protected String needsReagentMessageKey() { + return "message.antarchy.termite_needs_reagent"; + } + + @Override + protected double configuredMaxHealth() { + return AntarchySettings.termiteHealth(); + } + + @Override + protected boolean canForageGroundFood() { + return false; + } + + @Override + protected boolean canMarch() { + return false; + } + + @Override + protected boolean shouldUseBiteAnimation() { + return true; + } + + @Override + protected boolean handlePriorityForaging() { + if (!this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) + || !this.level().getGameRules().getBoolean(AntarchyGameRules.RULE_DO_TERMITE_GREIFING)) { + this.targetWoodPos = null; + return false; + } + + if (this.tryEatNearbyWood()) { + this.targetWoodPos = null; + return true; + } + + BlockPos targetPos = this.getCurrentWoodTarget(); + if (targetPos == null) { + return false; + } + + Vec3 moveTarget = this.getWoodApproachTarget(targetPos); + if (moveTarget == null) { + this.targetWoodPos = null; + return false; + } + + if (this.getNavigation().isDone() || this.tickCount >= this.nextWoodRepathTick) { + this.getNavigation().moveTo(moveTarget.x, moveTarget.y, moveTarget.z, 1.22D); + this.nextWoodRepathTick = this.tickCount + WOOD_REPATH_INTERVAL_TICKS; + } + return true; + } + + private boolean tryEatNearbyWood() { + if (this.tickCount < this.nextWoodBiteTick) { + return false; + } + + BlockPos basePos = this.blockPosition(); + for (Vec3i offset : IMMEDIATE_WOOD_OFFSETS) { + BlockPos targetPos = basePos.offset(offset); + BlockState targetState = this.level().getBlockState(targetPos); + if (!this.isTermiteEdible(targetState)) { + continue; + } + + if (this.tryStripWood(targetPos, targetState)) { + return true; + } + + if (targetState.is(AntarchyTags.Blocks.TERMITE_FOODS) || this.isStrippedWoodState(targetState)) { + SoundType soundType = targetState.getSoundType(); + this.triggerBiteAnimation(WOOD_BITE_ANIMATION_TICKS); + this.nextWoodBiteTick = this.tickCount + WOOD_BITE_COOLDOWN_TICKS; + this.level().destroyBlock(targetPos, false, this); + this.level().playSound(null, targetPos, soundType.getBreakSound(), this.getSoundSource(), 0.7F, 1.1F); + this.playSound(AntarchySoundEvents.ANT_BITE.get(), 0.35F, 0.95F + this.random.nextFloat() * 0.1F); + return true; + } + } + + return false; + } + + @Nullable + private BlockPos getCurrentWoodTarget() { + if (this.targetWoodPos != null && this.isValidWoodTarget(this.targetWoodPos) && this.canReachWoodTarget(this.targetWoodPos)) { + return this.targetWoodPos; + } + + if (this.tickCount < this.nextWoodSearchTick) { + return null; + } + + this.nextWoodSearchTick = this.tickCount + WOOD_SEARCH_INTERVAL_TICKS; + this.targetWoodPos = this.findClosestWoodTarget(); + return this.targetWoodPos; + } + + @Nullable + private BlockPos findClosestWoodTarget() { + BlockPos origin = this.blockPosition(); + int ox = origin.getX(); + int oy = origin.getY(); + int oz = origin.getZ(); + BlockPos bestPos = null; + double bestDistSq = Double.MAX_VALUE; + BlockPos.MutableBlockPos candidate = new BlockPos.MutableBlockPos(); + + for (int r = 0; r <= WOOD_SEARCH_RADIUS_HORIZONTAL; r++) { + if (bestPos != null && bestDistSq <= (double)(r * r)) { + break; + } + for (int dy = -WOOD_SEARCH_RADIUS_VERTICAL; dy <= WOOD_SEARCH_RADIUS_VERTICAL + 2; dy++) { + if (r == 0) { + candidate.set(ox, oy + dy, oz); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + 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)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + candidate.set(ox + dx, oy + dy, oz + r); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + 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)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + candidate.set(ox + r, oy + dy, oz + dz); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + } + } + } + + return bestPos; + } + + private boolean isValidWoodTarget(BlockPos targetPos) { + return this.isTermiteEdible(this.level().getBlockState(targetPos)); + } + + private boolean isTermiteEdible(BlockState state) { + return state.is(AntarchyTags.Blocks.TERMITE_FOODS) || this.isStrippedWoodState(state); + } + + private boolean tryStripWood(BlockPos targetPos, BlockState targetState) { + BlockState strippedState = this.getStrippedState(targetState); + if (strippedState == null) { + return false; + } + + SoundType soundType = targetState.getSoundType(); + this.triggerBiteAnimation(WOOD_BITE_ANIMATION_TICKS); + this.nextWoodBiteTick = this.tickCount + WOOD_BITE_COOLDOWN_TICKS; + this.level().setBlock(targetPos, strippedState, Block.UPDATE_ALL_IMMEDIATE); + this.level().playSound(null, targetPos, soundType.getBreakSound(), this.getSoundSource(), 0.6F, 1.2F); + this.playSound(AntarchySoundEvents.ANT_BITE.get(), 0.35F, 0.95F + this.random.nextFloat() * 0.1F); + return true; + } + + @Nullable + private BlockState getStrippedState(BlockState state) { + ResourceLocation blockId = BuiltInRegistries.BLOCK.getKey(state.getBlock()); + if (blockId == null || this.isStrippedWoodState(state) || !this.isStripTargetState(state, blockId.getPath())) { + return null; + } + + String path = blockId.getPath(); + if (path.startsWith("mossy_")) { + path = path.substring("mossy_".length()); + } + + ResourceLocation strippedId = new ResourceLocation(blockId.getNamespace(), "stripped_" + path); + Block strippedBlock = BuiltInRegistries.BLOCK.getOptional(strippedId).orElse(null); + if (strippedBlock == null) { + return null; + } + + BlockState strippedState = strippedBlock.defaultBlockState(); + if (state.hasProperty(RotatedPillarBlock.AXIS) && strippedState.hasProperty(RotatedPillarBlock.AXIS)) { + strippedState = strippedState.setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS)); + } + return strippedState; + } + + private boolean isStripTargetState(BlockState state, String path) { + return state.is(BlockTags.LOGS) || path.endsWith("_wood"); + } + + private boolean isStrippedWoodState(BlockState state) { + ResourceLocation blockId = BuiltInRegistries.BLOCK.getKey(state.getBlock()); + if (blockId == null) { + return false; + } + + String path = blockId.getPath(); + return path.startsWith("stripped_") && (path.endsWith("_log") || path.endsWith("_wood") || path.endsWith("_stem") || path.endsWith("_hyphae")); + } + + private boolean canReachWoodTarget(BlockPos targetPos) { + BlockPos approachPos = this.getWoodApproachBlockPos(targetPos); + if (approachPos == null) { + return false; + } + + Path path = this.getNavigation().createPath(approachPos, 0); + return path != null && path.canReach(); + } + + @Nullable + private BlockPos getWoodApproachBlockPos(BlockPos targetPos) { + BlockPos belowTarget = targetPos.below(); + if (this.isWalkableStandPos(belowTarget)) { + return belowTarget; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos sidePos = targetPos.relative(direction); + if (this.isWalkableStandPos(sidePos)) { + return sidePos; + } + + BlockPos belowSidePos = sidePos.below(); + if (this.isWalkableStandPos(belowSidePos)) { + return belowSidePos; + } + } + + return null; + } + + @Nullable + private Vec3 getWoodApproachTarget(BlockPos targetPos) { + BlockPos approachPos = this.getWoodApproachBlockPos(targetPos); + return approachPos == null ? null : Vec3.atBottomCenterOf(approachPos); + } + + private boolean isWalkableStandPos(BlockPos pos) { + BlockPos floor = pos.below(); + BlockState floorState = this.level().getBlockState(floor); + return this.level().getBlockState(pos).isAir() + && this.level().getBlockState(pos.above()).isAir() + && floorState.isFaceSturdy(this.level(), floor, Direction.UP); + } +} 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 new file mode 100644 index 00000000..b8f5ed8b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java @@ -0,0 +1,667 @@ +package com.craisinlord.antarchy.content.entity.basilisk; + +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.damage.AntarchyDamageSources; + +import net.minecraft.core.BlockPos; +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.core.Holder; +import net.minecraft.world.effect.MobEffect; +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.EquipmentSlot; +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.MoveControl; +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.item.Items; +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; +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 com.craisinlord.antarchy.compat.geckolib.AutoPlayingSoundKeyframeHandlerCompat; +import software.bernie.geckolib.util.GeckoLibUtil; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; + +import java.util.List; +import java.util.UUID; +import java.util.function.Predicate; + +public class BasiliskEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor ANIMATION_STATE = + SynchedEntityData.defineId(BasiliskEntity.class, EntityDataSerializers.INT); + private static final byte ATTACK_ENTITY_EVENT = 4; + private static final int DEATH_TICKS = 25; + + private static final int ANIM_IDLE = 0; + private static final int ANIM_WALK = 1; + private static final int ANIM_ATTACK = 2; + private static final int ANIM_DEATH = 3; + + 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().thenPlay("attack"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); + + private static final float TURN_RATE_DEG_PER_TICK = 10.0F; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int attackAnimTicks = 0; + private boolean attackDamagePending = false; + private int attackCooldown = 0; + + private int hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); + private int hissChargeTimer = 0; + @Nullable private UUID pendingTargetId; + + private int preyPetrifyCooldown = AntarchySettings.basiliskPreyPetrifyCooldownTicks(); + + public BasiliskEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = AntarchySettings.basiliskXpReward(); + this.moveControl = new BasiliskMoveControl(this); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + } + + public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.basiliskHealth()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.basiliskMovementSpeed()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.basiliskAttackDamage()) + .add(Attributes.ARMOR, AntarchySettings.basiliskArmor()) + .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.basiliskKnockbackResistance()) + .add(Attributes.FOLLOW_RANGE, AntarchySettings.basiliskFollowRange()); + } + + 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 + && pos.getY() >= 60 && pos.getY() <= 90 + && level.getMaxLocalRawBrightness(pos) <= AntarchySettings.basiliskSpawnMaxLightLevel() + && level.getEntitiesOfClass(BasiliskEntity.class, new AABB(pos).inflate(40.0D), Entity::isAlive).isEmpty() + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new BasiliskMeleeAttackGoal()); + this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(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 PersistentNearestAttackableTargetGoal<>(Player.class, 5, + entity -> entity instanceof Player player && this.canTargetPlayer(player))); + this.targetSelector.addGoal(3, new PersistentNearestAttackableTargetGoal<>(LivingEntity.class, 5, + entity -> entity != this && entity.getType().is(AntarchyTags.Entities.BASILISK_PREY))); + } + + @Override + public boolean doHurtTarget(Entity target) { + boolean hurt; + if (this.level() instanceof ServerLevel serverLevel) { + hurt = target.hurt( + AntarchyDamageSources.basiliskBite(serverLevel, this), + (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE) + ); + } else { + hurt = super.doHurtTarget(target); + } + + if (hurt) { + this.level().broadcastEntityEvent(this, ATTACK_ENTITY_EVENT); + } + + return hurt; + } + + private void performAoeAttack() { + if (this.level().isClientSide) return; + // Start the animation; damage fires later in tick() when attackAnimTicks reaches the damage threshold + this.attackAnimTicks = AntarchySettings.basiliskAttackAnimTicks(); + this.attackDamagePending = true; + this.level().broadcastEntityEvent(this, ATTACK_ENTITY_EVENT); + } + + private void tickAoeDamage() { + if (!this.attackDamagePending) return; + if (this.attackAnimTicks > AntarchySettings.basiliskAttackDamageTick()) return; + if (!(this.level() instanceof ServerLevel serverLevel)) return; + + this.attackDamagePending = false; + + Vec3 forward = Vec3.directionFromRotation(0, this.yBodyRot); + Vec3 right = new Vec3(-forward.z, 0, forward.x); + Vec3 origin = this.position(); + double attackReach = AntarchySettings.basiliskAttackReach(); + + List candidates = this.level().getEntitiesOfClass( + LivingEntity.class, + this.getBoundingBox().inflate(Math.max(8.0D, attackReach + 3.5D)), + e -> e != this && e.isAlive() + ); + + boolean hitAnything = false; + for (LivingEntity entity : candidates) { + Vec3 toEntity = entity.position().subtract(origin); + 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; + } + } + } + + if (hitAnything) { + this.playSound(AntarchySoundEvents.BASILISK_BITE.get(), 1.1F, 0.95F + this.random.nextFloat() * 0.08F); + } + } + + @Override + public void tick() { + super.tick(); + + if (this.attackAnimTicks > 0) { + this.attackAnimTicks--; + } + + if (this.isDeadOrDying()) { + this.updateAnimationState(); + return; + } + + if (this.level().isClientSide) { + return; + } + + if (this.attackCooldown > 0) this.attackCooldown--; + this.tickPlayerPetrification(); + this.tickPreyPetrification(); + this.tickAoeDamage(); + this.updateAnimationState(); + } + + private void tickPlayerPetrification() { + if (this.hissChargeTimer > 0) { + Player target = this.getPendingPlayerTarget(); + if (!this.canMaintainGazeOn(target)) { + this.pendingTargetId = null; + this.hissChargeTimer = 0; + return; + } + + this.getNavigation().stop(); + this.getLookControl().setLookAt(target, 30.0F, 30.0F); + this.hissChargeTimer--; + if (this.hissChargeTimer == 0) { + this.pendingTargetId = null; + target.addEffect(new MobEffectInstance( + AntarchyObjects.PARALYZED_EFFECT.get(), + AntarchySettings.basiliskPlayerParalyzeTicks(), + 0, + false, + true, + true + )); + } + return; + } + + if (this.hissCooldown > 0) { + this.hissCooldown--; + return; + } + + if (!AntarchySettings.basiliskPetrifyingGazeEnabled()) { + this.hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); + return; + } + + Player target = this.findGazingPlayer(); + if (target == null) { + this.hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); + return; + } + + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), + AntarchySoundEvents.BASILISK_HISS.get(), this.getSoundSource(), 1.4F, 0.92F); + this.pendingTargetId = target.getUUID(); + this.hissChargeTimer = AntarchySettings.basiliskHissChargeTicks(); + this.hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); + this.getNavigation().stop(); + this.getLookControl().setLookAt(target, 30.0F, 30.0F); + } + + private void tickPreyPetrification() { + if (this.preyPetrifyCooldown > 0) { + this.preyPetrifyCooldown--; + return; + } + + if (this.getTarget() != null || this.hissChargeTimer > 0) { + return; + } + + this.preyPetrifyCooldown = AntarchySettings.basiliskPreyPetrifyCooldownTicks(); + LivingEntity prey = this.findNearestPrey(); + if (prey == null) { + return; + } + + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), + AntarchySoundEvents.BASILISK_HISS.get(), this.getSoundSource(), 1.35F, 0.95F); + this.getLookControl().setLookAt(prey, 30.0F, 30.0F); + prey.addEffect(new MobEffectInstance( + AntarchyObjects.PARALYZED_EFFECT.get(), + AntarchySettings.basiliskPreyPetrifyTicks(), + 0, + false, + true, + true + )); + } + + @Nullable + private Player getPendingPlayerTarget() { + if (!(this.level() instanceof ServerLevel serverLevel) || this.pendingTargetId == null) { + return null; + } + + return serverLevel.getPlayerByUUID(this.pendingTargetId); + } + + @Nullable + private Player findGazingPlayer() { + LivingEntity currentTarget = this.getTarget(); + if (currentTarget instanceof Player player && this.canMaintainGazeOn(player)) { + return player; + } + + Player nearest = null; + double nearestDistance = Double.MAX_VALUE; + for (Player player : this.level().getEntitiesOfClass(Player.class, this.getBoundingBox().inflate(AntarchySettings.basiliskGazeRange()))) { + if (!this.canMaintainGazeOn(player)) { + continue; + } + + double distance = player.distanceToSqr(this); + if (distance < nearestDistance) { + nearestDistance = distance; + nearest = player; + } + } + + return nearest; + } + + private boolean canMaintainGazeOn(@Nullable Player player) { + if (!this.canTargetPlayer(player)) { + return false; + } + if (player.getItemBySlot(EquipmentSlot.HEAD).is(Items.CARVED_PUMPKIN)) { + return false; + } + if (player.distanceToSqr(this) > AntarchySettings.basiliskGazeRange() * AntarchySettings.basiliskGazeRange()) { + return false; + } + if (!this.hasLineOfSight(player)) { + return false; + } + + return this.isPlayerGazingAtMe(player) && this.isFacingPlayerForGaze(player); + } + + private boolean isPlayerGazingAtMe(Player player) { + Vec3 eye = player.getEyePosition(); + Vec3 toMe = this.getEyePosition().subtract(eye).normalize(); + return player.getLookAngle().dot(toMe) >= AntarchySettings.basiliskGazeDotThreshold(); + } + + private boolean isFacingPlayerForGaze(Player player) { + Vec3 toPlayer = player.getEyePosition().subtract(this.getEyePosition()); + if (toPlayer.lengthSqr() < 1.0E-6D) { + return true; + } + + return this.getViewVector(1.0F).normalize().dot(toPlayer.normalize()) >= AntarchySettings.basiliskGazeFacingThreshold(); + } + + private boolean canTargetPlayer(@Nullable Player player) { + return player != null + && player.isAlive() + && !player.isDeadOrDying() + && !player.isSpectator() + && !player.isCreative(); + } + + @Nullable + private LivingEntity findNearestPrey() { + LivingEntity nearest = null; + double nearestDistance = Double.MAX_VALUE; + for (LivingEntity entity : this.level().getEntitiesOfClass(LivingEntity.class, + this.getBoundingBox().inflate(AntarchySettings.basiliskPreyPetrifyRange()))) { + if (entity == this || entity instanceof Player || entity.isDeadOrDying()) { + continue; + } + if (!entity.getType().is(AntarchyTags.Entities.BASILISK_PREY)) { + continue; + } + if (entity.getType().is(AntarchyTags.Entities.PARALYSIS_IMMUNE)) { + continue; + } + if (!this.hasLineOfSight(entity)) { + continue; + } + + double distance = entity.distanceToSqr(this); + if (distance < nearestDistance) { + nearestDistance = distance; + nearest = entity; + } + } + + return nearest; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main", 3, this::mainController) + .setSoundKeyframeHandler(AutoPlayingSoundKeyframeHandlerCompat.create()) + .triggerableAnim("attack", ATTACK_ANIM)); + } + + private PlayState mainController(AnimationState state) { + if (this.isDeadOrDying()) { + return state.setAndContinue(DEATH_ANIM); + } + if (this.attackAnimTicks > 0) { + return state.setAndContinue(ATTACK_ANIM); + } + if (this.getAnimationState() == ANIM_WALK || state.isMoving()) { + return state.setAndContinue(WALK_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void handleEntityEvent(byte id) { + if (id == ATTACK_ENTITY_EVENT) { + this.attackAnimTicks = AntarchySettings.basiliskAttackAnimTicks(); + this.setAnimationState(ANIM_ATTACK); + return; + } + super.handleEntityEvent(id); + } + + @Override + 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.setDeltaMovement(Vec3.ZERO); + } + super.die(damageSource); + } + + @Override + protected void tickDeath() { + this.deathTime++; + if (this.deathTime == 1) { + this.setAnimationState(ANIM_DEATH); + } + if (this.deathTime >= DEATH_TICKS) { + this.remove(RemovalReason.KILLED); + } + } + + private void updateAnimationState() { + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + if (this.attackAnimTicks > 0) { + this.setAnimationState(ANIM_ATTACK); + return; + } + if (this.getTarget() != null || this.hissChargeTimer > 0 || this.pendingTargetId != null) { + this.setAnimationState(ANIM_WALK); + return; + } + if (this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D) { + this.setAnimationState(ANIM_WALK); + return; + } + this.setAnimationState(ANIM_IDLE); + } + + private int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setAnimationState(int state) { + if (this.entityData.get(ANIMATION_STATE) != state) { + this.entityData.set(ANIMATION_STATE, state); + if (state == ANIM_ATTACK) { + this.triggerAnim("main", "attack"); + } + } + } + + @Override + public int getMaxHeadYRot() { + return 20; + } + + @Override + public boolean canAttack(LivingEntity target) { + if (target instanceof Player player) { + return this.canTargetPlayer(player) && super.canAttack(target); + } + return super.canAttack(target); + } + + @Override + public float maxUpStep() { + return 1.5F; + } + + @Override + public boolean canBeAffected(MobEffectInstance effectInstance) { + MobEffect effect = effectInstance.getEffect(); + if (effect == MobEffects.POISON) return false; + if (effect == AntarchyObjects.PARALYZED_EFFECT.get()) return false; + return super.canBeAffected(effectInstance); + } + + @Override + public boolean isWithinMeleeAttackRange(LivingEntity target) { + double reach = AntarchySettings.basiliskAttackReach() + 4.0; + return this.distanceToSqr(target) <= reach * reach; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + @Nullable + protected SoundEvent getAmbientSound() { + return null; + } + + @Override + protected SoundEvent getHurtSound(DamageSource source) { + return AntarchySoundEvents.BASILISK_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.BASILISK_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 0.7F; + } + + /** Limits body rotation to TURN_RATE_DEG_PER_TICK so the long snake turns gradually. */ + 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 (this.operation == MoveControl.Operation.MOVE_TO) { + this.operation = MoveControl.Operation.WAIT; + double dx = this.wantedX - this.mob.getX(); + double dz = this.wantedZ - this.mob.getZ(); + double dy = this.wantedY - this.mob.getY(); + if (dx * dx + dy * dy + dz * dz < 2.5E-7) { + this.mob.setZza(0.0F); + return; + } + 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.setSpeed((float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED))); + this.mob.setZza(1.0F); + } + } + } + + private final class PersistentNearestAttackableTargetGoal extends NearestAttackableTargetGoal { + PersistentNearestAttackableTargetGoal(Class targetType, int randomInterval, Predicate predicate) { + super(BasiliskEntity.this, targetType, randomInterval, true, false, predicate); + this.unseenMemoryTicks = 200; + } + } + + private final class BasiliskMeleeAttackGoal extends MeleeAttackGoal { + private BasiliskMeleeAttackGoal() { + super(BasiliskEntity.this, 1.2D, true); + } + + @Override + public void tick() { + 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)); + } + } + + private void stopMovement() { + BasiliskEntity.this.getNavigation().stop(); + ((BasiliskMoveControl) BasiliskEntity.this.getMoveControl()).halt(); + BasiliskEntity.this.setSpeed(0.0F); + BasiliskEntity.this.setZza(0.0F); + } + + @Override + public boolean canUse() { + LivingEntity target = BasiliskEntity.this.getTarget(); + if (target == null || !target.isAlive()) return false; + if (target instanceof Player p && (p.isCreative() || p.isSpectator())) return false; + return true; + } + + @Override + public void start() { + LivingEntity target = BasiliskEntity.this.getTarget(); + if (target != null) { + BasiliskEntity.this.getNavigation().moveTo(target, 1.2D); + } + BasiliskEntity.this.setAggressive(true); + } + + @Override + public boolean canContinueToUse() { + return BasiliskEntity.this.attackAnimTicks > 0 || super.canContinueToUse(); + } + + @Override + protected void checkAndPerformAttack(LivingEntity target, double distToEnemySqr) { + if (BasiliskEntity.this.attackAnimTicks > 0) return; + if (BasiliskEntity.this.attackCooldown > 0) return; + if (!BasiliskEntity.this.isWithinMeleeAttackRange(target)) return; + if (!BasiliskEntity.this.getSensing().hasLineOfSight(target)) return; + + BasiliskEntity.this.attackCooldown = 20; + BasiliskEntity.this.performAoeAttack(); + } + } +} 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 new file mode 100644 index 00000000..92895960 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskMultipartLayout.java @@ -0,0 +1,156 @@ +package com.craisinlord.antarchy.content.entity.basilisk; + +import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; +import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.Vec3; + +public final class BasiliskMultipartLayout implements MultipartLayout { + public static final BasiliskMultipartLayout INSTANCE = new BasiliskMultipartLayout(); + + public static final MultipartPartDefinition HEAD = new MultipartPartDefinition( + "head", + 1.58F, + 1.50F, + 1.0F, + 3.15D, + 1.62D, + 0.00D, + false + ); + + public static final MultipartPartDefinition NECK = new MultipartPartDefinition( + "neck", + 1.43F, + 1.35F, + 1.15F, + 2.15D, + 1.25D, + 0.06D, + false + ); + + public static final MultipartPartDefinition BODY_1 = new MultipartPartDefinition( + "body_1", + 1.43F, + 1.20F, + 1.0F, + 0.95D, + 0.82D, + -0.03D, + false + ); + + public static final MultipartPartDefinition BODY_2 = new MultipartPartDefinition( + "body_2", + 1.35F, + 1.13F, + 1.0F, + -0.10D, + 0.70D, + 0.06D, + false + ); + + public static final MultipartPartDefinition BODY_3 = new MultipartPartDefinition( + "body_3", + 1.28F, + 1.09F, + 1.0F, + -1.35D, + 0.56D, + -0.05D, + false + ); + + public static final MultipartPartDefinition BODY_4 = new MultipartPartDefinition( + "body_4", + 1.20F, + 1.01F, + 1.0F, + -2.55D, + 0.44D, + 0.04D, + false + ); + + public static final MultipartPartDefinition TAIL = new MultipartPartDefinition( + "tail", + 1.05F, + 0.86F, + 1.0F, + -4.15D, + 0.34D, + 0.00D, + false + ); + + private static final MultipartPartDefinition[] PARTS = { + HEAD, + NECK, + BODY_1, + BODY_2, + BODY_3, + BODY_4, + TAIL + }; + + private static final double[] IDLE_ARC_ANGLE_DEG = { 20.0D, 50.0D, 90.0D, 130.0D, 170.0D, 220.0D, 260.0D }; + private static final double[] IDLE_ARC_RADIUS = { 2.6D, 2.2D, 1.8D, 1.5D, 1.3D, 1.2D, 1.1D }; + private static final double[] IDLE_Y_OFFSET = { 1.40D, 1.10D, 0.70D, 0.50D, 0.40D, 0.30D, 0.20D }; + + private BasiliskMultipartLayout() { + } + + @Override + public MultipartPartDefinition[] parts() { + return PARTS; + } + + @Override + public Vec3 getPartPosition(Entity parent, MultipartPartDefinition spec) { + boolean idle = parent.getDeltaMovement().horizontalDistanceSqr() < 0.0025D; + if (!idle) { + return MultipartLayout.super.getPartPosition(parent, spec); + } + + int index = partIndex(spec.name()); + if (index < 0) { + return MultipartLayout.super.getPartPosition(parent, spec); + } + + double yawRad = Math.toRadians(parent.getYRot()); + double arcAngleRad = Math.toRadians(IDLE_ARC_ANGLE_DEG[index]); + + double fwdX = -Math.sin(yawRad); + double fwdZ = Math.cos(yawRad); + double rightX = fwdZ; + double rightZ = -fwdX; + + double cosA = Math.cos(arcAngleRad); + double sinA = Math.sin(arcAngleRad); + double r = IDLE_ARC_RADIUS[index]; + + double offsetX = (fwdX * cosA + rightX * sinA) * r; + double offsetZ = (fwdZ * cosA + rightZ * sinA) * r; + + return new Vec3( + parent.getX() + offsetX, + parent.getY() + IDLE_Y_OFFSET[index], + parent.getZ() + offsetZ + ); + } + + private static int partIndex(String name) { + return switch (name) { + case "head" -> 0; + case "neck" -> 1; + case "body_1" -> 2; + case "body_2" -> 3; + case "body_3" -> 4; + case "body_4" -> 5; + case "tail" -> 6; + default -> -1; + }; + } +} 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 new file mode 100644 index 00000000..4e9c440b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java @@ -0,0 +1,863 @@ +package com.craisinlord.antarchy.content.entity.brutalfly; + +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 java.util.EnumSet; +import java.util.Objects; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.Entity; +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.server.level.ServerBossEvent; +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.tags.BlockTags; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.BossEvent; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +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.SpawnGroupData; +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.ServerLevelAccessor; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.gameevent.GameEvent; +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.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class BrutalflyEntity extends Monster implements GeoEntity { + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); + private static final RawAnimation SPIT_ANIM = RawAnimation.begin().thenPlay("spit"); + private static final RawAnimation SWIPE_ANIM = RawAnimation.begin().thenPlay("swipe"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); + private static final RawAnimation COOCON_ANIM = RawAnimation.begin().thenPlay("Coocon"); + private static final RawAnimation COOCON_HIT_ANIM = RawAnimation.begin().thenPlay("Coocon_hit"); + private static final RawAnimation COOCON_IDLE_ANIM = RawAnimation.begin().thenLoop("Coocon_idle"); + private static final RawAnimation COOCON_HATCH_ANIM = RawAnimation.begin().thenPlay("Coocon_hatch"); + + private static final EntityDataAccessor ANIMATION_STATE = + SynchedEntityData.defineId(BrutalflyEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor IS_COCOONED = + SynchedEntityData.defineId(BrutalflyEntity.class, EntityDataSerializers.BOOLEAN); + + private static final int ANIM_IDLE = 0; + private static final int ANIM_FLY = 1; + private static final int ANIM_SPIT = 2; + private static final int ANIM_SWIPE = 3; + private static final int ANIM_DEATH = 4; + private static final int ANIM_COCOON = 5; + private static final int ANIM_COCOON_HIT = 6; + private static final int ANIM_COCOON_IDLE = 7; + private static final int ANIM_COCOON_HATCH = 8; + + private static final int DEATH_ANIM_TICKS = 60; + private static final int SPIT_WINDUP_TICKS = 16; + private static final int SWIPE_TICKS = 18; + private static final float SWIPE_KNOCKBACK = 2.8F; + private static final int COCOON_HIT_THRESHOLD = 3; + private static final int COCOON_HIT_COOLDOWN_TICKS = 60; + private static final int COCOON_HIT_ANIM_TICKS = 30; + private static final int COCOON_HATCH_ANIM_TICKS = 40; + private static final int COCOON_IDLE_ANIM_TICKS = 70; + private static final int POST_COCOON_INVULNERABLE_TICKS = 100; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private final ServerBossEvent bossEvent = + new com.craisinlord.antarchy.content.boss.EntityLinkedServerBossEvent(this.getUUID(), this.getDisplayName(), BossEvent.BossBarColor.YELLOW, BossEvent.BossBarOverlay.PROGRESS); + + @Nullable + private Vec3 patrolTarget; + private int animationTicks; + private int spitWindupTicks; + private int spitCooldown = 50; + private int meleeCooldown = 35; + private int deathAnimationTicks; + private int currentStrafeDuration = 24; + private int strafeTicks = this.currentStrafeDuration; + private float orbitDirection = 1.0F; + private double currentStrafeRadius = 7.5D; + private double currentFlightHeight = 4.0D; + private double currentStrafeAngleOffset = this.random.nextDouble() * (Math.PI * 2.0D); + private boolean spawnedDeathButterflies; + + // Cocoon state (server-side) + @Nullable + BlockPos anchorPos; + private int cocoonHits; + private int cocoonHitCooldownTicks; + private boolean isHatching; + private int cocoonAnimTicks; + private boolean pendingHatchAnim; + private int postCocoonInvulnerableTicks; + + public BrutalflyEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new FlyingMoveControl(this, 20, true); + this.xpReward = 80; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.brutalflyHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.brutalflySwipeDamage()) + .add(Attributes.ARMOR, AntarchySettings.brutalflyArmor()) + .add(Attributes.ARMOR_TOUGHNESS, AntarchySettings.brutalflyArmorToughness()) + .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.brutalflyKnockbackResistance()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.brutalflyMovementSpeed()) + .add(Attributes.FLYING_SPEED, AntarchySettings.brutalflyFlyingSpeed()) + .add(Attributes.FOLLOW_RANGE, 48.0D); + } + + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + double maxHealth = AntarchySettings.brutalflyHealth(); + double swipeDamage = AntarchySettings.brutalflySwipeDamage(); + Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(maxHealth); + this.setHealth((float) maxHealth); + Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(swipeDamage); + this.setPersistenceRequired(); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + this.entityData.define(IS_COCOONED, false); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new BrutalflyHoverGoal(this)); + + HurtByTargetGoal hurtByTargetGoal = new HurtByTargetGoal(this); + hurtByTargetGoal.setAlertOthers(BrutalflyEntity.class); + this.targetSelector.addGoal(1, hurtByTargetGoal); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + protected PathNavigation createNavigation(Level level) { + FlyingPathNavigation navigation = new FlyingPathNavigation(this, level); + navigation.setCanFloat(true); + navigation.setCanPassDoors(true); + navigation.setCanOpenDoors(false); + return navigation; + } + + @Override + protected void customServerAiStep() { + if (this.isCocooned()) return; + super.customServerAiStep(); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, state -> switch (this.getAnimationState()) { + case ANIM_SPIT -> state.setAndContinue(SPIT_ANIM); + case ANIM_SWIPE -> state.setAndContinue(SWIPE_ANIM); + case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); + case ANIM_FLY -> state.setAndContinue(FLY_ANIM); + case ANIM_COCOON -> state.setAndContinue(COOCON_ANIM); + case ANIM_COCOON_HIT -> state.setAndContinue(COOCON_HIT_ANIM); + case ANIM_COCOON_IDLE -> state.setAndContinue(COOCON_IDLE_ANIM); + case ANIM_COCOON_HATCH -> state.setAndContinue(COOCON_HATCH_ANIM); + default -> state.setAndContinue(IDLE_ANIM); + }) + .triggerableAnim("spit", SPIT_ANIM) + .triggerableAnim("swipe", SWIPE_ANIM) + .triggerableAnim("death", DEATH_ANIM) + .triggerableAnim("Coocon", COOCON_ANIM) + .triggerableAnim("Coocon_hit", COOCON_HIT_ANIM) + .triggerableAnim("Coocon_idle", COOCON_IDLE_ANIM) + .triggerableAnim("Coocon_hatch", COOCON_HATCH_ANIM)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + this.setNoGravity(true); + + if (this.level().isClientSide) { + this.updateFlightRotation(); + return; + } + + this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + + if (this.isCocooned()) { + this.tickCocoon(); + return; + } + + if (this.animationTicks > 0) { + this.animationTicks--; + } + if (this.spitCooldown > 0) { + this.spitCooldown--; + } + if (this.meleeCooldown > 0) { + this.meleeCooldown--; + } + if (this.postCocoonInvulnerableTicks > 0) { + this.postCocoonInvulnerableTicks--; + } + if (this.spitWindupTicks > 0 && --this.spitWindupTicks == 0) { + this.fireCurrentSpitPattern(); + } + + LivingEntity target = this.getTarget(); + if ((target == null || !target.isAlive()) && this.tickCount % 10 == 0) { + Player nearbyPlayer = this.level().getNearestPlayer(this, 40.0D); + if (nearbyPlayer != null && this.canAttack(nearbyPlayer) + && !nearbyPlayer.isCreative() && !nearbyPlayer.isSpectator()) { + this.setTarget(nearbyPlayer); + target = nearbyPlayer; + } + } + + if (target != null && target.isAlive()) { + this.tickCombat(target); + } else { + this.tickPatrol(); + } + + this.updateBaseAnimationState(); + this.updateFlightRotation(); + } + + private void tickCocoon() { + if (this.cocoonHitCooldownTicks > 0) { + 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; + } + } + + if (this.isHatching) { + if (this.cocoonAnimTicks > 0) { + this.cocoonAnimTicks--; + } + if (this.pendingHatchAnim && this.cocoonAnimTicks <= 0) { + this.pendingHatchAnim = false; + this.setAnimationState(ANIM_COCOON_HATCH); + this.cocoonAnimTicks = COCOON_HATCH_ANIM_TICKS; + } else if (!this.pendingHatchAnim && this.cocoonAnimTicks <= 0) { + this.finishHatch(); + } + return; + } + + // Count down hit animation + if (this.cocoonAnimTicks > 0) { + this.cocoonAnimTicks--; + if (this.cocoonAnimTicks <= 0) { + this.setAnimationState(ANIM_COCOON); + } + 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; + } else if (this.getAnimationState() != ANIM_COCOON) { + this.setAnimationState(ANIM_COCOON); + } + } + + private void startHatching() { + this.isHatching = true; + this.pendingHatchAnim = true; + this.postCocoonInvulnerableTicks = POST_COCOON_INVULNERABLE_TICKS; + this.setAnimationState(ANIM_COCOON_HIT); + this.cocoonAnimTicks = COCOON_HIT_ANIM_TICKS; + } + + private void finishHatch() { + this.entityData.set(IS_COCOONED, false); + this.isHatching = false; + this.anchorPos = null; + this.cocoonHits = 0; + this.cocoonHitCooldownTicks = 0; + this.refreshDimensions(); + this.setAnimationState(ANIM_FLY); + Player nearbyPlayer = this.level().getNearestPlayer(this, 48.0D); + if (nearbyPlayer != null && !nearbyPlayer.isCreative() && !nearbyPlayer.isSpectator()) { + this.setTarget(nearbyPlayer); + } + } + + public boolean isCocooned() { + return this.entityData.get(IS_COCOONED); + } + + @Override + public net.minecraft.world.entity.EntityDimensions getDimensions(net.minecraft.world.entity.Pose pose) { + if (isCocooned()) { + return net.minecraft.world.entity.EntityDimensions.scalable(2.0F, 5.0F); + } + return super.getDimensions(pose); + } + + public void setCocooned(boolean cocooned, @Nullable BlockPos anchor) { + this.entityData.set(IS_COCOONED, cocooned); + this.anchorPos = anchor; + this.refreshDimensions(); + if (cocooned) { + this.cocoonHits = 0; + this.cocoonHitCooldownTicks = 0; + this.isHatching = false; + this.pendingHatchAnim = false; + this.setAnimationState(ANIM_COCOON); + } + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.postCocoonInvulnerableTicks > 0) { + return false; + } + + if (this.isCocooned() && !this.isHatching) { + if (this.level().isClientSide || this.cocoonHitCooldownTicks > 0) return false; + this.hurtTime = this.hurtDuration; + this.cocoonHits++; + this.cocoonHitCooldownTicks = COCOON_HIT_COOLDOWN_TICKS; + if (this.cocoonHits >= COCOON_HIT_THRESHOLD) { + this.startHatching(); + } else { + this.setAnimationState(ANIM_COCOON_HIT); + this.cocoonAnimTicks = COCOON_HIT_ANIM_TICKS; + } + SoundEvent hurtSound = this.getHurtSound(source); + if (hurtSound != null) { + this.playSound(hurtSound, this.getSoundVolume(), 1.0F); + } + return true; + } + return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount)); + } + + @Override + public boolean isInvulnerableTo(DamageSource source) { + if (this.postCocoonInvulnerableTicks > 0 || super.isInvulnerableTo(source)) { + return true; + } + return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.brutalflyDamageRange()); + } + + private void tickCombat(LivingEntity target) { + FightPhase phase = this.getFightPhase(); + + if (this.getAnimationState() == ANIM_SWIPE && this.animationTicks > 0) { + this.tickSwipe(target); + return; + } + + if (this.getAnimationState() == ANIM_SPIT && this.animationTicks > 0) { + this.tickStrafeMovement(target, phase, 0.72D); + return; + } + + this.tickStrafeMovement(target, phase, phase.moveSpeed); + + if (this.shouldSwipe(target, phase) && this.meleeCooldown <= 0) { + this.startSwipe(); + return; + } + + if (this.canStartSpit(target)) { + this.startSpit(); + } + } + + private void tickPatrol() { + if (this.patrolTarget == null || this.distanceToSqr(this.patrolTarget) < 4.0D || this.tickCount % 40 == 0) { + double targetX = this.getX() + this.random.nextDouble() * 14.0D - 7.0D; + double targetZ = this.getZ() + this.random.nextDouble() * 14.0D - 7.0D; + double targetY = this.getTerrainFollowY(targetX, targetZ, 3.5D, 5.0D); + this.patrolTarget = new Vec3(targetX, targetY, targetZ); + } + + this.getMoveControl().setWantedPosition(this.patrolTarget.x, this.patrolTarget.y, this.patrolTarget.z, 0.8D); + } + + private void tickStrafeMovement(LivingEntity target, FightPhase phase, double speed) { + if (this.strafeTicks <= 0) { + this.startNewStrafeCycle(phase); + } + + this.strafeTicks--; + Vec3 strafePoint = this.getStrafePoint(target); + this.getMoveControl().setWantedPosition(strafePoint.x, strafePoint.y, strafePoint.z, speed); + + if (this.random.nextFloat() < 0.02F) { + this.orbitDirection *= -1.0F; + } + } + + private Vec3 getStrafePoint(LivingEntity target) { + double angle = this.tickCount * 0.13D * this.orbitDirection + this.currentStrafeAngleOffset; + double x = target.getX() + Math.cos(angle) * this.currentStrafeRadius; + double z = target.getZ() + Math.sin(angle) * this.currentStrafeRadius; + double y = this.getTerrainFollowY( + x, + z, + this.currentFlightHeight + Mth.sin((float) (angle * 1.5D)) * 0.7D, + this.currentFlightHeight + 1.1D + ); + return new Vec3(x, y, z); + } + + private double getTerrainFollowY(double x, double z, double minOffset, double maxOffset) { + int groundY = this.level().getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Mth.floor(x), Mth.floor(z)); + double clampedMinOffset = Math.max(2.75D, minOffset); + double clampedMaxOffset = Math.max(clampedMinOffset + 0.8D, maxOffset); + double desiredY = groundY + clampedMinOffset + this.random.nextDouble() * (clampedMaxOffset - clampedMinOffset); + return Math.min(desiredY, groundY + 7.0D); + } + + private void startNewStrafeCycle(FightPhase phase) { + this.currentStrafeDuration = phase.minStrafeTicks + this.random.nextInt(phase.maxStrafeTicks - phase.minStrafeTicks + 1); + this.strafeTicks = this.currentStrafeDuration; + this.currentStrafeRadius = phase.minRadius + this.random.nextDouble() * (phase.maxRadius - phase.minRadius); + this.currentFlightHeight = phase.minHeight + this.random.nextDouble() * (phase.maxHeight - phase.minHeight); + this.currentStrafeAngleOffset = this.random.nextDouble() * (Math.PI * 2.0D); + } + + private boolean canStartSpit(LivingEntity target) { + return this.spitCooldown <= 0 + && this.hasLineOfSight(target) + && this.distanceToSqr(target) >= 16.0D + && this.distanceToSqr(target) <= 400.0D; + } + + private void startSpit() { + this.setAnimationState(ANIM_SPIT); + this.animationTicks = 20; + this.spitWindupTicks = SPIT_WINDUP_TICKS; + this.spitCooldown = this.getFightPhase().nextSpitCooldown(this.random); + this.gameEvent(GameEvent.PROJECTILE_SHOOT); + } + + private void fireCurrentSpitPattern() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + return; + } + + Vec3 origin = this.getSpitOrigin(); + this.playSound(AntarchySoundEvents.BRUTALFLY_SPIT.get(), 1.0F, 0.9F + this.random.nextFloat() * 0.2F); + switch (this.getFightPhase()) { + case PHASE_THREE -> { + this.launchOrb(serverLevel, origin, target, BrutalflyOrbEntity.OrbVariant.POISON, -8.0F); + this.launchOrb(serverLevel, origin, target, BrutalflyOrbEntity.OrbVariant.STICKY, 8.0F); + } + default -> { + BrutalflyOrbEntity.OrbVariant variant = this.random.nextBoolean() + ? BrutalflyOrbEntity.OrbVariant.POISON + : BrutalflyOrbEntity.OrbVariant.STICKY; + this.launchOrb(serverLevel, origin, target, variant, 0.0F); + } + } + } + + private void launchOrb(ServerLevel serverLevel, Vec3 origin, LivingEntity target, BrutalflyOrbEntity.OrbVariant variant, float yawOffsetDegrees) { + BrutalflyOrbEntity orb = AntarchyObjects.BRUTALFLY_ORB.get().create(serverLevel); + if (orb == null) { + return; + } + + orb.setOwner(this); + orb.setOrbVariant(variant); + orb.moveTo(origin.x, origin.y, origin.z, this.getYRot(), this.getXRot()); + + Vec3 shot = this.createShotVector(origin, target, yawOffsetDegrees); + orb.shoot(shot.x, shot.y, shot.z, 0.95F, 0.0F); + serverLevel.addFreshEntity(orb); + } + + private Vec3 createShotVector(Vec3 origin, LivingEntity target, float yawOffsetDegrees) { + Vec3 leadTarget = target.position().add(target.getDeltaMovement().scale(6.0D)); + Vec3 direction = leadTarget.subtract(origin).normalize(); + if (yawOffsetDegrees == 0.0F) { + return direction; + } + + double radians = Math.toRadians(yawOffsetDegrees); + double cos = Math.cos(radians); + double sin = Math.sin(radians); + return new Vec3( + direction.x * cos - direction.z * sin, + direction.y, + direction.x * sin + direction.z * cos + ).normalize(); + } + + private Vec3 getSpitOrigin() { + return this.position().add(0.0D, this.getBbHeight() * 0.58D, 0.0D).add(this.getViewVector(0.0F).scale(2.3D)); + } + + 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; + return beneathBoss || this.distanceToSqr(target) <= phase.swipeRangeSqr; + } + + private void startSwipe() { + this.setAnimationState(ANIM_SWIPE); + this.animationTicks = SWIPE_TICKS; + this.meleeCooldown = this.getFightPhase().nextMeleeCooldown(this.random); + } + + private void tickSwipe(LivingEntity target) { + Vec3 divePoint = target.position().add(0.0D, 1.0D, 0.0D); + this.getMoveControl().setWantedPosition(divePoint.x, divePoint.y, divePoint.z, 1.45D); + + if (this.animationTicks == 8) { + this.performSwipeHit(); + } + } + + private void performSwipeHit() { + float swipeDamage = (float) AntarchySettings.brutalflySwipeDamage(); + AABB attackBox = this.getBoundingBox().inflate(4.8D, 2.4D, 4.8D).expandTowards(0.0D, -2.5D, 0.0D); + for (LivingEntity target : this.level().getEntitiesOfClass( + LivingEntity.class, + attackBox, + entity -> entity.isAlive() && entity != this + )) { + if (!this.hasLineOfSight(target)) { + continue; + } + + target.hurt(this.damageSources().mobAttack(this), swipeDamage); + + double dx = target.getX() - this.getX(); + double dz = target.getZ() - this.getZ(); + if (dx * dx + dz * dz < 1.0E-4D) { + dx = this.random.nextDouble() - 0.5D; + dz = this.random.nextDouble() - 0.5D; + } + target.knockback(SWIPE_KNOCKBACK, -dx, -dz); + target.setDeltaMovement(target.getDeltaMovement().add(0.0D, 0.3D, 0.0D)); + } + } + + private FightPhase getFightPhase() { + float healthRatio = this.getHealth() / this.getMaxHealth(); + if (healthRatio > 0.70F) { + return FightPhase.PHASE_ONE; + } + if (healthRatio > 0.35F) { + return FightPhase.PHASE_TWO; + } + return FightPhase.PHASE_THREE; + } + + private int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setAnimationState(int animationState) { + int previous = this.entityData.get(ANIMATION_STATE); + if (previous != animationState) { + this.entityData.set(ANIMATION_STATE, animationState); + String trigger = switch (animationState) { + case ANIM_SPIT -> "spit"; + case ANIM_SWIPE -> "swipe"; + case ANIM_DEATH -> "death"; + case ANIM_COCOON -> "Coocon"; + case ANIM_COCOON_HIT -> "Coocon_hit"; + case ANIM_COCOON_IDLE -> "Coocon_idle"; + case ANIM_COCOON_HATCH -> "Coocon_hatch"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + if (previous == ANIM_COCOON_IDLE && animationState != ANIM_COCOON_IDLE) { + this.stopTriggeredAnimation("main_controller", "Coocon_idle"); + } + } + } + + private void updateBaseAnimationState() { + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + + if (this.animationTicks > 0 && (this.getAnimationState() == ANIM_SPIT || this.getAnimationState() == ANIM_SWIPE)) { + return; + } + + if (this.onGround()) { + this.setAnimationState(ANIM_IDLE); + } else { + this.setAnimationState(ANIM_FLY); + } + } + + private void updateFlightRotation() { + Vec3 movement = this.getDeltaMovement(); + if (movement.lengthSqr() < 1.0E-5D) { + return; + } + + double horizontal = Math.sqrt(movement.x * movement.x + movement.z * movement.z); + this.setYRot((float) (Mth.atan2(movement.z, movement.x) * (180.0F / Math.PI)) - 90.0F); + this.setXRot((float) (-(Mth.atan2(movement.y, horizontal) * (180.0F / Math.PI)))); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + } + + @Override + protected void tickDeath() { + this.deathAnimationTicks++; + this.setAnimationState(ANIM_DEATH); + this.setDeltaMovement(Vec3.ZERO); + + if (!this.spawnedDeathButterflies && this.deathAnimationTicks >= DEATH_ANIM_TICKS - 10) { + this.spawnDeathButterflies(); + this.spawnedDeathButterflies = true; + } + + if (this.deathAnimationTicks >= DEATH_ANIM_TICKS) { + this.remove(Entity.RemovalReason.KILLED); + this.gameEvent(GameEvent.ENTITY_DIE); + } + } + + private void spawnDeathButterflies() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + int count = 5 + this.random.nextInt(6); + for (int i = 0; i < count; i++) { + var butterfly = AntarchyObjects.BUTTERFLY.get().create(serverLevel); + if (butterfly == null) { + continue; + } + + butterfly.moveTo( + this.getX() + (this.random.nextDouble() - 0.5D) * 2.5D, + this.getY() + 1.0D + this.random.nextDouble() * 1.5D, + this.getZ() + (this.random.nextDouble() - 0.5D) * 2.5D, + this.random.nextFloat() * 360.0F, + 0.0F + ); + butterfly.setDeltaMovement( + (this.random.nextDouble() - 0.5D) * 0.35D, + 0.12D + this.random.nextDouble() * 0.15D, + (this.random.nextDouble() - 0.5D) * 0.35D + ); + serverLevel.addFreshEntity(butterfly); + } + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + public boolean isNoGravity() { + return true; + } + + @Override + public void setCustomName(@Nullable Component name) { + super.setCustomName(name); + this.bossEvent.setName(this.getDisplayName()); + } + + @Override + public void startSeenByPlayer(ServerPlayer serverPlayer) { + super.startSeenByPlayer(serverPlayer); + this.bossEvent.addPlayer(serverPlayer); + } + + @Override + public void stopSeenByPlayer(ServerPlayer serverPlayer) { + super.stopSeenByPlayer(serverPlayer); + this.bossEvent.removePlayer(serverPlayer); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean("IsCocooned", this.isCocooned()); + tag.putInt("CocoonHits", this.cocoonHits); + tag.putInt("CocoonHitCooldown", this.cocoonHitCooldownTicks); + if (this.anchorPos != null) { + tag.putInt("AnchorX", this.anchorPos.getX()); + tag.putInt("AnchorY", this.anchorPos.getY()); + tag.putInt("AnchorZ", this.anchorPos.getZ()); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.getBoolean("IsCocooned")) { + BlockPos anchor = null; + if (tag.contains("AnchorX")) { + anchor = new BlockPos(tag.getInt("AnchorX"), tag.getInt("AnchorY"), tag.getInt("AnchorZ")); + } + this.setCocooned(true, anchor); + this.cocoonHits = tag.getInt("CocoonHits"); + this.cocoonHitCooldownTicks = tag.getInt("CocoonHitCooldown"); + } + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.BRUTALFLY_IDLE.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.PHANTOM_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.BRUTALFLY_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 1.4F; + } + + private enum FightPhase { + PHASE_ONE(0.95D, 24, 34, 7.0D, 9.0D, 3.5D, 4.6D, 22.0D), + PHASE_TWO(1.12D, 18, 28, 5.3D, 7.0D, 2.4D, 3.2D, 19.0D), + PHASE_THREE(1.28D, 14, 22, 3.8D, 5.4D, 1.3D, 2.1D, 26.0D); + + final double moveSpeed; + final int minStrafeTicks; + final int maxStrafeTicks; + final double minRadius; + final double maxRadius; + final double minHeight; + final double maxHeight; + final double swipeRangeSqr; + + FightPhase(double moveSpeed, int minStrafeTicks, int maxStrafeTicks, double minRadius, double maxRadius, double minHeight, double maxHeight, double swipeRange) { + this.moveSpeed = moveSpeed; + this.minStrafeTicks = minStrafeTicks; + this.maxStrafeTicks = maxStrafeTicks; + this.minRadius = minRadius; + this.maxRadius = maxRadius; + this.minHeight = minHeight; + this.maxHeight = maxHeight; + this.swipeRangeSqr = swipeRange; + } + + int nextSpitCooldown(RandomSource random) { + return switch (this) { + case PHASE_ONE -> 70 + random.nextInt(26); + case PHASE_TWO -> 42 + random.nextInt(19); + case PHASE_THREE -> 26 + random.nextInt(15); + }; + } + + int nextMeleeCooldown(RandomSource random) { + return switch (this) { + case PHASE_ONE -> 42 + random.nextInt(10); + case PHASE_TWO -> 30 + random.nextInt(8); + case PHASE_THREE -> 20 + random.nextInt(7); + }; + } + } + + private static final class BrutalflyHoverGoal extends Goal { + private final BrutalflyEntity brutalfly; + + private BrutalflyHoverGoal(BrutalflyEntity brutalfly) { + this.brutalfly = brutalfly; + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + return true; + } + + @Override + public boolean canContinueToUse() { + return true; + } + + @Override + public void tick() { + LivingEntity target = this.brutalfly.getTarget(); + if (target != null) { + this.brutalfly.getLookControl().setLookAt(target, 30.0F, 30.0F); + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyOrbEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyOrbEntity.java new file mode 100644 index 00000000..13e133c5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyOrbEntity.java @@ -0,0 +1,242 @@ +package com.craisinlord.antarchy.content.entity.brutalfly; + +import com.craisinlord.antarchy.config.AntarchySettings; +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.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.projectile.ThrowableItemProjectile; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; + +public class BrutalflyOrbEntity extends ThrowableItemProjectile { + private static final EntityDataAccessor ORB_VARIANT = + SynchedEntityData.defineId(BrutalflyOrbEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor LINGERING = + SynchedEntityData.defineId(BrutalflyOrbEntity.class, EntityDataSerializers.BOOLEAN); + + private static final String ORB_VARIANT_KEY = "OrbVariant"; + private static final String LINGERING_KEY = "Lingering"; + private static final String LINGER_TICKS_KEY = "LingerTicks"; + + private static final int MAX_FLIGHT_TICKS = 200; + private static final int MAX_LIFETIME_TICKS = 100; + private static final float AREA_RADIUS = 2.75F; + + private int lingeringTicks; + + public BrutalflyOrbEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public BrutalflyOrbEntity(EntityType entityType, LivingEntity owner, Level level) { + super(entityType, owner, level); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ORB_VARIANT, OrbVariant.POISON.ordinal()); + this.entityData.define(LINGERING, false); + } + + public void setOrbVariant(OrbVariant variant) { + this.entityData.set(ORB_VARIANT, variant.ordinal()); + } + + public OrbVariant getOrbVariant() { + int index = Mth.clamp(this.entityData.get(ORB_VARIANT), 0, OrbVariant.values().length - 1); + return OrbVariant.values()[index]; + } + + public boolean isLingeringOrb() { + return this.entityData.get(LINGERING); + } + + public float getOrbRadius(float partialTick) { + if (!this.isLingeringOrb()) { + return 0.55F; + } + float age = Math.min(1.0F, (this.lingeringTicks + partialTick) / 12.0F); + return 0.7F + AREA_RADIUS * age; + } + + @Override + protected float getGravity() { + return (float) (0.0D); + } + + @Override + protected Item getDefaultItem() { + return Items.SLIME_BALL; + } + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + public boolean isAttackable() { + return false; + } + + @Override + public void tick() { + if (this.isLingeringOrb()) { + this.tickLingeringOrb(); + return; + } + + super.tick(); + + if (this.tickCount > MAX_FLIGHT_TICKS) { + this.discard(); + return; + } + + if (this.level().isClientSide) { + this.spawnTravelParticles(); + } + } + + private void tickLingeringOrb() { + this.lingeringTicks++; + + if (this.level().isClientSide) { + this.spawnLingeringParticles(); + return; + } + + if (this.lingeringTicks % 5 == 0) { + this.applyAreaEffects(); + } + + if (this.lingeringTicks >= MAX_LIFETIME_TICKS) { + this.discard(); + } + } + + private void applyAreaEffects() { + for (LivingEntity target : this.level().getEntitiesOfClass( + LivingEntity.class, + this.getBoundingBox().inflate(AREA_RADIUS, 1.75D, AREA_RADIUS), + entity -> entity.isAlive() && entity != this.getOwner() + )) { + switch (this.getOrbVariant()) { + case POISON -> target.addEffect(new MobEffectInstance(MobEffects.POISON, 60, 0, false, true)); + case STICKY -> { + target.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 50, 3, false, true)); + target.makeStuckInBlock(Blocks.HONEY_BLOCK.defaultBlockState(), new Vec3(0.35D, 0.2D, 0.35D)); + } + } + } + + if (this.level() instanceof ServerLevel serverLevel) { + double radius = this.getOrbRadius(0.0F) * 0.3D; + if (this.getOrbVariant() == OrbVariant.POISON) { + serverLevel.sendParticles(ParticleTypes.WITCH, this.getX(), this.getY() + 0.15D, this.getZ(), 3, radius, 0.1D, radius, 0.02D); + serverLevel.sendParticles(ParticleTypes.ITEM_SLIME, this.getX(), this.getY() + 0.25D, this.getZ(), 2, radius, 0.15D, radius, 0.0D); + } else { + serverLevel.sendParticles(ParticleTypes.FALLING_HONEY, this.getX(), this.getY() + 0.2D, this.getZ(), 4, radius, 0.15D, radius, 0.0D); + serverLevel.sendParticles(ParticleTypes.DRIPPING_HONEY, this.getX(), this.getY() + 0.1D, this.getZ(), 2, radius, 0.1D, radius, 0.0D); + } + } + } + + @Override + protected void onHitEntity(EntityHitResult result) { + if (!this.level().isClientSide && result.getEntity() instanceof LivingEntity livingTarget) { + float directHitDamage = (float) AntarchySettings.brutalflySpitDamage(); + Entity owner = this.getOwner(); + if (owner instanceof LivingEntity livingOwner) { + livingTarget.hurt(this.damageSources().mobProjectile(this, livingOwner), directHitDamage); + } else { + livingTarget.hurt(this.damageSources().magic(), directHitDamage); + } + + if (this.getOrbVariant() == OrbVariant.POISON) { + livingTarget.addEffect(new MobEffectInstance(MobEffects.POISON, 100, 0, false, true)); + } else { + livingTarget.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 80, 4, false, true)); + livingTarget.makeStuckInBlock(Blocks.HONEY_BLOCK.defaultBlockState(), new Vec3(0.3D, 0.2D, 0.3D)); + } + } + + this.beginLingering(result.getLocation()); + } + + @Override + protected void onHitBlock(BlockHitResult result) { + this.beginLingering(result.getLocation()); + } + + private void beginLingering(Vec3 location) { + if (this.isLingeringOrb()) { + return; + } + + this.setPos(location.x, location.y + 0.1D, location.z); + this.entityData.set(LINGERING, true); + this.noPhysics = true; + this.lingeringTicks = 0; + this.setDeltaMovement(Vec3.ZERO); + } + + private void spawnTravelParticles() { + if (this.getOrbVariant() == OrbVariant.POISON) { + this.level().addParticle(ParticleTypes.WITCH, this.getX(), this.getY(), this.getZ(), 0.0D, 0.0D, 0.0D); + this.level().addParticle(ParticleTypes.ITEM_SLIME, this.getX(), this.getY(), this.getZ(), 0.0D, 0.0D, 0.0D); + } else { + this.level().addParticle(ParticleTypes.FALLING_HONEY, this.getX(), this.getY(), this.getZ(), 0.0D, 0.0D, 0.0D); + } + } + + private void spawnLingeringParticles() { + double radius = this.getOrbRadius(0.0F) * 0.28D; + if (this.getOrbVariant() == OrbVariant.POISON) { + this.level().addParticle(ParticleTypes.WITCH, this.getX() + (this.random.nextDouble() - 0.5D) * radius, this.getY() + 0.15D, this.getZ() + (this.random.nextDouble() - 0.5D) * radius, 0.0D, 0.0D, 0.0D); + this.level().addParticle(ParticleTypes.ITEM_SLIME, this.getX() + (this.random.nextDouble() - 0.5D) * radius, this.getY() + 0.2D, this.getZ() + (this.random.nextDouble() - 0.5D) * radius, 0.0D, 0.0D, 0.0D); + } else { + this.level().addParticle(ParticleTypes.FALLING_HONEY, this.getX() + (this.random.nextDouble() - 0.5D) * radius, this.getY() + 0.1D, this.getZ() + (this.random.nextDouble() - 0.5D) * radius, 0.0D, 0.0D, 0.0D); + } + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(ORB_VARIANT_KEY, this.getOrbVariant().ordinal()); + tag.putBoolean(LINGERING_KEY, this.isLingeringOrb()); + tag.putInt(LINGER_TICKS_KEY, this.lingeringTicks); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.setOrbVariant(OrbVariant.values()[Mth.clamp(tag.getInt(ORB_VARIANT_KEY), 0, OrbVariant.values().length - 1)]); + this.entityData.set(LINGERING, tag.getBoolean(LINGERING_KEY)); + this.lingeringTicks = Math.max(0, tag.getInt(LINGER_TICKS_KEY)); + this.noPhysics = this.isLingeringOrb(); + if (this.isLingeringOrb()) { + this.setDeltaMovement(Vec3.ZERO); + } + } + + public enum OrbVariant { + POISON, + STICKY + } +} 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 new file mode 100644 index 00000000..f487f6dd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java @@ -0,0 +1,658 @@ +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/cloud_shark/SharknadoManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/SharknadoManager.java new file mode 100644 index 00000000..5960e1e1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/SharknadoManager.java @@ -0,0 +1,399 @@ +package com.craisinlord.antarchy.content.entity.cloud_shark; + +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.WeakHashMap; + +public final class SharknadoManager { + public static final double[] TIER_RADII = { 2.5D, 5.0D, 8.0D }; + public static final double[] TIER_HEIGHT_OFFSETS = { 8.0D, 5.0D, 1.5D }; + public static final int[] TIER_MAX_SLOTS = { 2, 4, 6 }; + + public static final double[] TIER_ROTATION_SPEEDS= { 0.06D, 0.045D, 0.03D }; + private static final int MIN_SHARKS_TO_FORM = 3; + private static final double FORM_SEARCH_RADIUS = 20.0D; + private static final double FORM_SEARCH_RADIUS_SQR = FORM_SEARCH_RADIUS * FORM_SEARCH_RADIUS; + private static final int MIN_SHARKS_TO_PERSIST = 2; + private static final int ATTACK_COOLDOWN_MIN = 80; + private static final int ATTACK_COOLDOWN_MAX = 160; + private static final float VOLLEY_CHANCE = 0.15F; + + private static final double DRIFT_SPEED = 0.06D; + + private static final double MAX_DRIFT_DIST = 10.0D; + private static final WeakHashMap INSTANCES = new WeakHashMap<>(); + + + private final Map tornadoes = new HashMap<>(); + + private final Map sharkToTornado = new HashMap<>(); + private long lastCleanupGameTime = Long.MIN_VALUE; + + private SharknadoManager() {} + + public static SharknadoManager get(ServerLevel level) { + return INSTANCES.computeIfAbsent(level, l -> new SharknadoManager()); + } + + + public boolean tryFormOrJoin(CloudSharkEntity shark, ServerLevel level) { + if (tryJoinExisting(shark)) return true; + + List soloNearby = getSoloSharksNear(shark, level); + if (soloNearby.size() + 1 < MIN_SHARKS_TO_FORM) return false; + UUID myUuid = shark.getUUID(); + for (CloudSharkEntity other : soloNearby) { + if (other.getUUID().compareTo(myUuid) < 0) return false; + } + + List all = new ArrayList<>(); + all.add(shark); + all.addAll(soloNearby); + formTornado(all, level); + return true; + } + + private void formTornado(List sharks, ServerLevel level) { + UUID id = UUID.randomUUID(); + SharknadoEntry entry = new SharknadoEntry(id); + int idx = 0; + outer: + 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++); + entry.add(s, tier, slot); + sharkToTornado.put(s.getUUID(), id); + s.onJoinSharknado(id, tier, slot); + } + } + + entry.updateCentroid(); + entry.initializeFormation(level); + entry.state = TornadoState.ACTIVE; + entry.attackCooldown = ATTACK_COOLDOWN_MIN + + level.getRandom().nextInt(ATTACK_COOLDOWN_MAX - ATTACK_COOLDOWN_MIN); + tornadoes.put(id, entry); + } + + private boolean tryJoinExisting(CloudSharkEntity shark) { + UUID bestId = null; + double bestDistSqr = FORM_SEARCH_RADIUS_SQR; + + for (Map.Entry e : tornadoes.entrySet()) { + SharknadoEntry entry = e.getValue(); + if (entry.state == TornadoState.DISPERSING) continue; + if (!entry.hasOpenSlot()) continue; + Vec3 c = entry.centroid; + if (c == null) continue; + double dx = shark.getX() - c.x; + double dz = shark.getZ() - c.z; + double dSqr = dx * dx + dz * dz; + if (dSqr < bestDistSqr) { + bestDistSqr = dSqr; + bestId = e.getKey(); + } + } + + if (bestId == null) return false; + SharknadoEntry entry = tornadoes.get(bestId); + int[] openSlot = entry.getNextOpenSlot(); + if (openSlot == null) return false; + + entry.add(shark, openSlot[0], openSlot[1]); + sharkToTornado.put(shark.getUUID(), bestId); + shark.onJoinSharknado(bestId, openSlot[0], openSlot[1]); + entry.updateCentroid(); + entry.syncOrbitCenter(); + return true; + } + + + public void tickSharknado(UUID sharknadoId, ServerLevel level) { + SharknadoEntry entry = tornadoes.get(sharknadoId); + if (entry == null) return; + long now = level.getGameTime(); + if (entry.lastTickedGameTime == now) return; + entry.lastTickedGameTime = now; + this.cleanup(level); + + entry.updateCentroid(); + if (entry.centroid == null) return; + entry.updateOrbitCenter(); + entry.advanceRotation(); + Player nearestPlayer = level.getNearestPlayer( + entry.getOrbitCenter().x, entry.getOrbitCenter().y, entry.getOrbitCenter().z, 48.0D, false); + entry.driftOffset = entry.driftOffset.scale(0.92D); + if (nearestPlayer != null) { + Vec3 toPlayer = nearestPlayer.position().subtract(entry.getOrbitCenter()); + double len = toPlayer.length(); + if (len > 0.001D) { + entry.driftOffset = entry.driftOffset.add(toPlayer.scale(DRIFT_SPEED / len)); + double driftLen = entry.driftOffset.length(); + if (driftLen > MAX_DRIFT_DIST) { + entry.driftOffset = entry.driftOffset.scale(MAX_DRIFT_DIST / driftLen); + } + } + } + + if (entry.getAliveCount() < MIN_SHARKS_TO_PERSIST) { + disperseTornado(sharknadoId); + return; + } + + if (entry.state != TornadoState.ACTIVE) return; + + if (--entry.attackCooldown <= 0) { + triggerAttack(entry, level); + entry.attackCooldown = ATTACK_COOLDOWN_MIN + + level.getRandom().nextInt(ATTACK_COOLDOWN_MAX - ATTACK_COOLDOWN_MIN); + } + } + + private void triggerAttack(SharknadoEntry entry, ServerLevel level) { + Vec3 orbitCenter = entry.getOrbitCenter(); + if (orbitCenter == null) return; + Player target = level.getNearestPlayer( + orbitCenter.x, orbitCenter.y, orbitCenter.z, 48.0D, false); + if (target == null) return; + + boolean volley = level.getRandom().nextFloat() < VOLLEY_CHANCE; + if (volley) { + int launched = 0; + for (SharkSlot s : entry.slots) { + if (s.tier == 2 && s.shark.isAlive() && s.shark.isOrbiting()) { + s.shark.launchFromSharknado(target); + if (++launched >= 2) break; + } + } + } else { + SharkSlot best = null; + double bestDist = Double.MAX_VALUE; + for (SharkSlot s : entry.slots) { + if (s.tier == 2 && s.shark.isAlive() && s.shark.isOrbiting()) { + double d = s.shark.distanceToSqr(target); + if (d < bestDist) { bestDist = d; best = s; } + } + } + if (best == null) { + for (SharkSlot s : entry.slots) { + if (s.shark.isAlive() && s.shark.isOrbiting()) { + double d = s.shark.distanceToSqr(target); + if (d < bestDist) { bestDist = d; best = s; } + } + } + } + if (best != null) best.shark.launchFromSharknado(target); + } + } + + + public void disperseTornado(UUID sharknadoId) { + SharknadoEntry entry = tornadoes.remove(sharknadoId); + if (entry == null) return; + entry.state = TornadoState.DISPERSING; + for (SharkSlot s : entry.slots) { + sharkToTornado.remove(s.shark.getUUID()); + if (s.shark.isAlive()) s.shark.onLeaveSharknado(); + } + } + + + public void unregisterShark(CloudSharkEntity shark) { + UUID tornadoId = sharkToTornado.remove(shark.getUUID()); + if (tornadoId == null) return; + SharknadoEntry entry = tornadoes.get(tornadoId); + if (entry == null) return; + entry.removeShark(shark); + if (entry.getAliveCount() < MIN_SHARKS_TO_PERSIST) { + disperseTornado(tornadoId); + } + } + + + public void cleanup(ServerLevel level) { + long now = level.getGameTime(); + if (this.lastCleanupGameTime == now || now % 200L != 0L) return; + this.lastCleanupGameTime = now; + Iterator> iter = tornadoes.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry e = iter.next(); + SharknadoEntry entry = e.getValue(); + Iterator slotIter = entry.slots.iterator(); + while (slotIter.hasNext()) { + SharkSlot s = slotIter.next(); + if (!s.shark.isAlive()) { + sharkToTornado.remove(s.shark.getUUID()); + slotIter.remove(); + } + } + if (entry.getAliveCount() < MIN_SHARKS_TO_PERSIST) { + for (SharkSlot s : entry.slots) { + sharkToTornado.remove(s.shark.getUUID()); + if (s.shark.isAlive()) s.shark.onLeaveSharknado(); + } + iter.remove(); + } + } + } + + + @Nullable + public Vec3 getOrbitTarget(UUID sharknadoId, int tier, int slot) { + SharknadoEntry entry = tornadoes.get(sharknadoId); + if (entry == null || entry.getOrbitCenter() == null) return null; + + Vec3 center = entry.getOrbitCenter().add(entry.driftOffset); + double baseAngle = (2.0 * Math.PI * slot) / TIER_MAX_SLOTS[tier]; + double currentAngle = baseAngle + entry.rotationPhases[tier]; + + double x = center.x + Math.cos(currentAngle) * TIER_RADII[tier]; + double z = center.z + Math.sin(currentAngle) * TIER_RADII[tier]; + double y = center.y + TIER_HEIGHT_OFFSETS[tier]; + return new Vec3(x, y, z); + } + + @Nullable + public Vec3 getCentroid(UUID sharknadoId) { + SharknadoEntry entry = tornadoes.get(sharknadoId); + return entry == null ? null : entry.getOrbitCenter(); + } + + public boolean isInSharknado(UUID sharkUuid) { + return sharkToTornado.containsKey(sharkUuid); + } + + + private List getSoloSharksNear(CloudSharkEntity seeker, ServerLevel level) { + List result = new ArrayList<>(); + for (CloudSharkEntity other : level.getEntitiesOfClass( + CloudSharkEntity.class, seeker.getBoundingBox().inflate(FORM_SEARCH_RADIUS))) { + if (other == seeker) continue; + if (sharkToTornado.containsKey(other.getUUID())) continue; + double dx = other.getX() - seeker.getX(); + double dz = other.getZ() - seeker.getZ(); + if (dx * dx + dz * dz <= FORM_SEARCH_RADIUS_SQR) result.add(other); + } + return result; + } + + public enum TornadoState { FORMING, ACTIVE, DISPERSING } + + private static final class SharknadoEntry { + final UUID id; + final List slots = new ArrayList<>(); + @Nullable Vec3 centroid; + @Nullable Vec3 orbitCenter; + Vec3 driftOffset = Vec3.ZERO; + final double[] rotationPhases = new double[TIER_ROTATION_SPEEDS.length]; + TornadoState state = TornadoState.FORMING; + int attackCooldown; + long lastTickedGameTime = -1L; + + SharknadoEntry(UUID id) { this.id = id; } + + void add(CloudSharkEntity shark, int tier, int slot) { + slots.add(new SharkSlot(shark, tier, slot)); + } + + void removeShark(CloudSharkEntity shark) { + slots.removeIf(s -> s.shark == shark); + } + + void updateCentroid() { + double x = 0, y = 0, z = 0; + int count = 0; + for (SharkSlot s : slots) { + if (s.shark.isAlive()) { + x += s.shark.getX(); + y += s.shark.getY(); + z += s.shark.getZ(); + count++; + } + } + centroid = count > 0 ? new Vec3(x / count, y / count, z / count) : null; + } + + void initializeFormation(ServerLevel level) { + this.syncOrbitCenter(); + for (int tier = 0; tier < this.rotationPhases.length; tier++) { + this.rotationPhases[tier] = level.getRandom().nextDouble() * (Math.PI * 2.0D); + } + } + + void syncOrbitCenter() { + this.orbitCenter = this.centroid; + } + + void updateOrbitCenter() { + if (this.centroid == null) { + this.orbitCenter = null; + return; + } + if (this.orbitCenter == null) { + this.orbitCenter = this.centroid; + return; + } + this.orbitCenter = this.orbitCenter.lerp(this.centroid, 0.2D); + } + + void advanceRotation() { + for (int tier = 0; tier < this.rotationPhases.length; tier++) { + this.rotationPhases[tier] += TIER_ROTATION_SPEEDS[tier]; + } + } + + @Nullable Vec3 getOrbitCenter() { + return this.orbitCenter != null ? this.orbitCenter : this.centroid; + } + + int getAliveCount() { + int c = 0; + for (SharkSlot s : slots) if (s.shark.isAlive()) c++; + return c; + } + + boolean hasOpenSlot() { + for (int tier = 2; tier >= 0; tier--) { + int used = 0; + for (SharkSlot s : slots) if (s.tier == tier) used++; + if (used < TIER_MAX_SLOTS[tier]) return true; + } + return false; + } + + @Nullable int[] getNextOpenSlot() { + for (int tier = 2; tier >= 0; tier--) { + Set usedSlots = new HashSet<>(); + for (SharkSlot s : slots) if (s.tier == tier) usedSlots.add(s.slot); + for (int slot = 0; slot < TIER_MAX_SLOTS[tier]; slot++) { + if (!usedSlots.contains(slot)) return new int[]{tier, slot}; + } + } + return null; + } + } + + private static final class SharkSlot { + final CloudSharkEntity shark; + final int tier; + final int slot; + + SharkSlot(CloudSharkEntity 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/flying_squirrel/FlyingSquirrelEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java new file mode 100644 index 00000000..d66c940e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java @@ -0,0 +1,2485 @@ +package com.craisinlord.antarchy.content.entity.flying_squirrel; + +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.antarchy.content.block.OuranwoodAcornBlock; +import com.craisinlord.antarchy.content.block.OuranwoodLeavesBlock; +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.core.registries.Registries; +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.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageTypes; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.*; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.GameRules; +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.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.pathfinder.BlockPathTypes; +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.*; +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; + +public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { + private static final ResourceKey ELYTHIA_DIMENSION = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "elythia") + ); + + private static final EntityDataAccessor GLIDING = + SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor CLIMBING = + SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor PICKING_UP_NUT = + SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor TEXTURE_VARIANT = + SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor QUIRK_TICKS = + SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor QUIRK_VARIANT = + SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor> SHOULDER_PLAYER_DATA = + SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.OPTIONAL_UUID); + + private static final String PICKUP_ANIM_TICKS_KEY = "PickupAnimTicks"; + 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"; + private static final String GLIDE_DIR_Z_KEY = "GlideDirZ"; + private static final int MAX_GLIDE_TICKS = 160; + private static final int PICKUP_ANIM_TICKS = 60; + private static final double MIN_GLIDE_DISTANCE = 10.0D; + private static final double MAX_GLIDE_DISTANCE = 64.0D; + private static final int MIN_CLIMB_HEIGHT = 5; + private static final int MAX_CLIMB_HEIGHT = 18; + private static final int GROUND_ESCAPE_MIN_CLIMB_HEIGHT = 12; + private static final double NUT_SEARCH_RANGE = 16.0D; + private static final float FALL_GLIDE_TRIGGER_DISTANCE = 0.75F; + private static final double FALL_GLIDE_TRIGGER_SPEED = -0.08D; + private static final int EMERGENCY_GLIDE_REPEAT_COOLDOWN = 60; + private static final int RECENT_GLIDE_REPEAT_COOLDOWN = 80; + private static final double CLIMB_START_DISTANCE_SQR = 4.0D; + private static final int CLIMB_APPROACH_TIMEOUT_TICKS = 120; + private static final int CLIMB_NO_PROGRESS_LIMIT = 25; + private static final int FAILED_CLIMB_TARGET_COOLDOWN = 80; + private static final int GROUND_STALL_FORCE_WANDER_TICKS = 100; + private static final int SHOULDER_CLIMB_TICKS = 20; + private static final int SHOULDER_SNEAK_GRACE_TICKS = 10; + private static final int SHOULDER_INTERACT_COOLDOWN_TICKS = 8; + private static final int QUIRK_1_DURATION_TICKS = 40; + private static final int QUIRK_2_DURATION_TICKS = 30; + private static final int MIN_QUIRK_COOLDOWN_TICKS = 260; + private static final int MAX_QUIRK_COOLDOWN_TICKS = 420; + private static final int QUIRK_NONE = 0; + private static final int QUIRK_1 = 1; + private static final int QUIRK_2 = 2; + private static final int TEXTURE_VARIANT_REGULAR = 0; + private static final int TEXTURE_VARIANT_BROWN = 1; + private static final int TEXTURE_VARIANT_ALBINO = 2; + private static final String[] TEXTURE_VARIANT_NAMES = { + "regular", + "brown", + "albino" + }; + private static final double SHOULDER_X_OFFSET = 0.0D; + private static final double SHOULDER_FORWARD_OFFSET = 0.0475D; + 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 CLIMB_ANIM = RawAnimation.begin().thenLoop("climbing"); + private static final RawAnimation GLIDE_ANIM = RawAnimation.begin().thenLoop("gliding"); + private static final RawAnimation PICKUP_ANIM = RawAnimation.begin().thenPlay("item_pickup"); + private static final RawAnimation QUIRK_1_ANIM = RawAnimation.begin().thenPlay("quirk1"); + private static final RawAnimation QUIRK_2_ANIM = RawAnimation.begin().thenPlay("quirk2"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private TemptGoal temptGoal; + private int wanderCooldown; + private int glideTicks; + private int pickupAnimTicks; + private int glideRecoveryTicks; + private int glideLoopSoundCooldown; + @Nullable + private BlockPos glideTarget; + @Nullable + private Vec3 glideDirection; + @Nullable + private BlockPos recentEmergencyGlideTarget; + @Nullable + private BlockPos currentGlideLaunch; + @Nullable + private BlockPos recentGlideLaunch; + @Nullable + private BlockPos recentGlideTarget; + @Nullable + private String currentGlideReason; + private int recentEmergencyGlideCooldown; + private int recentGlideCooldown; + private int idleStallTicks; + @Nullable + private BlockPos recentFailedClimbTarget; + private int recentFailedClimbCooldown; + @Nullable + private UUID shoulderPlayerId; + @Nullable + private Vec3 shoulderClimbStartPos; + private int climbingToShoulderTicks; + private int shoulderSneakGraceTicks; + private int shoulderInteractCooldownTicks; + private int nextFallGlideScanTick; + @Nullable + private BlockPos cachedFallGlideTarget; + private int nextBestGlideScanTick; + @Nullable + private BlockPos cachedBestGlideTarget; + private int nextNutScanTick; + @Nullable + private ItemEntity cachedNutItem; + @Nullable + private BlockPos cachedHarvestableAcorn; + private int quirkCooldownTicks = MIN_QUIRK_COOLDOWN_TICKS; + + public FlyingSquirrelEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setPathfindingMalus(BlockPathTypes.LEAVES, -2.0F); + } + + @Override + protected PathNavigation createNavigation(Level level) { + return new FlyingSquirrelNavigation(this, level); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.flyingSquirrelHealth()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.flyingSquirrelMovementSpeed()) + .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; + } + + return level.getLevel().dimension().equals(ELYTHIA_DIMENSION) + && pos.getY() >= 80 + && !level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && hasNearbyCanopy(level, pos); + } + + @Override + protected void registerGoals() { + this.temptGoal = new TemptGoal(this, 1.05D, Ingredient.of(AntarchyTags.Items.FLYING_SQUIRREL_NUTS), false); + + this.goalSelector.addGoal(0, new ShoulderMountGoal()); + this.goalSelector.addGoal(1, this.temptGoal); + this.goalSelector.addGoal(2, new FloatGoal(this)); + this.goalSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.PanicGoal(this, 1.5D)); + this.goalSelector.addGoal(4, new SitWhenOrderedToGoal(this)); + this.goalSelector.addGoal(5, new FollowOwnerGoal(this, 1.0D, 10.0F, 5.0F, false)); + this.goalSelector.addGoal(6, new BreedGoal(this, 0.8D)); + this.goalSelector.addGoal(7, new FindNutGoal()); + this.goalSelector.addGoal(8, new ClimbGoal()); + this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, Player.class, 5.0F, 1.0D, 1.2D) { + @Override + public boolean canUse() { + return !FlyingSquirrelEntity.this.isTame() && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + return !FlyingSquirrelEntity.this.isTame() && super.canContinueToUse(); + } + }); + this.goalSelector.addGoal(10, new ArborealRandomStrollGoal()); + this.goalSelector.addGoal(11, new LookAtPlayerGoal(this, Player.class, 10.0F)); + this.goalSelector.addGoal(12, new RandomLookAroundGoal(this)); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(GLIDING, false); + this.entityData.define(CLIMBING, false); + this.entityData.define(PICKING_UP_NUT, false); + this.entityData.define(TEXTURE_VARIANT, TEXTURE_VARIANT_REGULAR); + this.entityData.define(QUIRK_TICKS, 0); + this.entityData.define(QUIRK_VARIANT, QUIRK_NONE); + this.entityData.define(SHOULDER_PLAYER_DATA, Optional.empty()); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 5, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.isPickingUpNut()) { + return state.setAndContinue(PICKUP_ANIM); + } + + if (this.isOnShoulder()) { + return state.setAndContinue(PICKUP_ANIM); + } + + if (this.isGliding()) { + state.getController().setAnimationSpeed(1.1D); + return state.setAndContinue(GLIDE_ANIM); + } + + if (this.isClimbingToShoulder() || this.isClimbingTrunk()) { + 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) { + float moveYaw = (float)(Mth.atan2(motion.z, motion.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(Mth.approachDegrees(this.getYRot(), moveYaw, 10.0F)); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + } + if (horizontalSpeed > 0.001D && this.onGround() && !this.isClimbingTrunk()) { + state.getController().setAnimationSpeed(1.35D); + return state.setAndContinue(WALK_ANIM); + } + state.getController().setAnimationSpeed(1.0D); + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(PICKUP_ANIM_TICKS_KEY, this.pickupAnimTicks); + tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); + if (this.glideDirection != null) { + tag.putDouble(GLIDE_DIR_X_KEY, this.glideDirection.x); + tag.putDouble(GLIDE_DIR_Y_KEY, this.glideDirection.y); + tag.putDouble(GLIDE_DIR_Z_KEY, this.glideDirection.z); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.pickupAnimTicks = Math.max(0, tag.getInt(PICKUP_ANIM_TICKS_KEY)); + this.setPickingUpNut(this.pickupAnimTicks > 0); + if (tag.contains(TEXTURE_VARIANT_KEY)) { + this.setTextureVariant(tag.getInt(TEXTURE_VARIANT_KEY)); + } else { + this.assignRandomTextureVariant(); + } + this.stopGliding("loaded_from_nbt"); + if (tag.contains(GLIDE_DIR_X_KEY) && tag.contains(GLIDE_DIR_Y_KEY) && tag.contains(GLIDE_DIR_Z_KEY)) { + this.glideDirection = new Vec3( + tag.getDouble(GLIDE_DIR_X_KEY), + tag.getDouble(GLIDE_DIR_Y_KEY), + tag.getDouble(GLIDE_DIR_Z_KEY) + ); + } else { + this.glideDirection = null; + } + this.shoulderPlayerId = null; + this.shoulderClimbStartPos = null; + this.climbingToShoulderTicks = 0; + this.shoulderSneakGraceTicks = 0; + this.shoulderInteractCooldownTicks = 0; + } + + @Override + public void tick() { + super.tick(); + if (this.temptGoal != null && this.temptGoal.isRunning() && !this.isTame() && this.tickCount % 100 == 0) { + this.playSound(AntarchySoundEvents.FLYING_SQUIRREL_BEG.get(), 1.0F, 1.0F); + } + if (this.wanderCooldown > 0) { + this.wanderCooldown--; + } + if (this.glideRecoveryTicks > 0) { + this.glideRecoveryTicks--; + } + if (this.recentEmergencyGlideCooldown > 0) { + this.recentEmergencyGlideCooldown--; + if (this.recentEmergencyGlideCooldown == 0) { + this.recentEmergencyGlideTarget = null; + } + } + if (this.recentGlideCooldown > 0) { + this.recentGlideCooldown--; + if (this.recentGlideCooldown == 0) { + this.recentGlideLaunch = null; + this.recentGlideTarget = null; + } + } + if (this.recentFailedClimbCooldown > 0) { + this.recentFailedClimbCooldown--; + if (this.recentFailedClimbCooldown == 0) { + this.recentFailedClimbTarget = null; + } + } + if (this.shoulderSneakGraceTicks > 0) { + this.shoulderSneakGraceTicks--; + } + if (this.shoulderInteractCooldownTicks > 0) { + this.shoulderInteractCooldownTicks--; + } + Vec3 motion = this.getDeltaMovement(); + double horizontalSpeed = motion.horizontalDistanceSqr(); + + if (!this.isGliding() && !this.isClimbingTrunk() && !this.isClimbingToShoulder() && horizontalSpeed > 1.0E-4D) { + float moveYaw = (float)(Mth.atan2(motion.z, motion.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(Mth.approachDegrees(this.getYRot(), moveYaw, 10.0F)); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + } + + if (!this.level().isClientSide) { + this.tickPickupAnimation(); + this.tickQuirkAnimation(); + + if (this.isClimbingToShoulder()) { + Player shoulderPlayer = this.shoulderPlayerId != null + ? this.level().getPlayerByUUID(this.shoulderPlayerId) + : null; + if (shoulderPlayer == null || !shoulderPlayer.isAlive() || shoulderPlayer.isSpectator()) { + this.dismountShoulder(); + } else { + this.tickClimbingToShoulder(shoulderPlayer); + } + this.setNoGravity(true); + return; + } + + if (this.isOnShoulder()) { + Player shoulderPlayer = this.getShoulderPlayer(); + if (shoulderPlayer == null || !shoulderPlayer.isAlive() || shoulderPlayer.isSpectator()) { + this.dismountShoulder(); + } else if (this.shoulderSneakGraceTicks <= 0 && shoulderPlayer.isShiftKeyDown()) { + this.glideOffShoulder(); + } else { + Vec3 shoulderPos = this.getShoulderRidePos(shoulderPlayer); + this.setPos(shoulderPos.x, shoulderPos.y, shoulderPos.z); + this.setDeltaMovement(Vec3.ZERO); + this.setYRot(shoulderPlayer.getYHeadRot()); + this.setXRot(shoulderPlayer.getXRot()); + this.yBodyRot = shoulderPlayer.getYHeadRot(); + this.yHeadRot = shoulderPlayer.getYHeadRot(); + this.fallDistance = 0.0F; + } + this.setNoGravity(true); + return; + } + + if (!this.isGliding() + && !this.onGround() + && !this.isInWaterOrBubble() + && !this.isClimbingTrunk() + && this.glideRecoveryTicks <= 0 + && this.fallDistance > FALL_GLIDE_TRIGGER_DISTANCE + && this.getDeltaMovement().y < FALL_GLIDE_TRIGGER_SPEED) { + if (this.tickCount >= this.nextFallGlideScanTick) { + this.nextFallGlideScanTick = this.tickCount + 10; + this.cachedFallGlideTarget = this.findFallGlideTarget(); + } + BlockPos rescueTarget = this.cachedFallGlideTarget; + if (rescueTarget == null) { + if (this.tickCount >= this.nextBestGlideScanTick) { + this.nextBestGlideScanTick = this.tickCount + 10; + this.cachedBestGlideTarget = this.findBestGlideTarget(); + } + rescueTarget = this.cachedBestGlideTarget; + } + if (rescueTarget == null) { + rescueTarget = this.findForcedFallLanding(); + } + if (rescueTarget != null && this.isRecentEmergencyGlideTarget(rescueTarget)) { + rescueTarget = null; + } + if (rescueTarget != null) { + this.cachedFallGlideTarget = null; + this.cachedBestGlideTarget = null; + this.startGliding(rescueTarget, "emergency_fall_glide"); + } + } + + if (this.isGliding()) { + this.tickGliding(); + this.fallDistance = 0.0F; + } else { + this.glideTicks = 0; + this.glideTarget = null; + if (this.isClimbingTrunk()) { + this.fallDistance = 0.0F; + } + } + + this.tickIdleStallLogging(horizontalSpeed); + } + if (this.isOnShoulder() && this.level().isClientSide) { + Player shoulderPlayer = this.getShoulderPlayer(); + if (shoulderPlayer != null) { + Vec3 shoulderPos = this.getShoulderRidePos(shoulderPlayer); + this.setPos(shoulderPos.x, shoulderPos.y, shoulderPos.z); + this.setDeltaMovement(Vec3.ZERO); + this.setYRot(shoulderPlayer.getYHeadRot()); + this.setXRot(shoulderPlayer.getXRot()); + this.yBodyRot = shoulderPlayer.getYHeadRot(); + this.yHeadRot = shoulderPlayer.getYHeadRot(); + this.fallDistance = 0.0F; + } + } + this.setNoGravity(this.isGliding() || this.isClimbingTrunk() || this.isClimbingToShoulder() || this.isOnShoulder()); + } + + @Override + public void rideTick() { + super.rideTick(); + } + + @Override + public boolean onClimbable() { + return this.isClimbingTrunk(); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.isClimbingTrunk() && source.is(DamageTypes.IN_WALL)) { + return false; + } + + if ((this.isOnShoulder() || this.isClimbingToShoulder()) && !this.level().isClientSide) { + this.dismountShoulder(); + } + + return super.hurt(source, amount); + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (this.isTame() && this.isOwnedBy(player) && stack.isEmpty()) { + if (!this.level().isClientSide) { + if (player.isShiftKeyDown()) { + this.handleOwnerShoulderInteract(player); + } else { + this.toggleFollowState(player); + } + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (!this.isFood(stack)) { + return InteractionResult.PASS; + } + + if (this.level().isClientSide) { + boolean canUseFood = !this.isTame() || this.isBaby() || this.canFallInLove() || this.getHealth() < this.getMaxHealth(); + return canUseFood ? InteractionResult.SUCCESS : InteractionResult.CONSUME; + } + + if (!this.isTame()) { + this.usePlayerItem(player, hand, stack); + if (this.random.nextInt(3) == 0) { + this.tame(player); + this.wanderCooldown = 0; + this.setOrderedToSit(false); + this.cancelTravel(); + this.setTarget(null); + this.level().broadcastEntityEvent(this, (byte) 7); + } else { + this.level().broadcastEntityEvent(this, (byte) 6); + } + return InteractionResult.CONSUME; + } + + if (this.isBaby()) { + this.usePlayerItem(player, hand, stack); + this.ageUp((int) ((float) (-this.getAge() / 20) * 0.1F), true); + this.playSound(AntarchySoundEvents.FLYING_SQUIRREL_NUT.get(), 0.35F, 1.0F + this.random.nextFloat() * 0.2F); + return InteractionResult.CONSUME; + } + + if (this.canFallInLove()) { + this.usePlayerItem(player, hand, stack); + this.setInLove(player); + this.playSound(AntarchySoundEvents.FLYING_SQUIRREL_NUT.get(), 0.35F, 1.0F + this.random.nextFloat() * 0.2F); + return InteractionResult.CONSUME; + } + + if (this.getHealth() < this.getMaxHealth()) { + this.usePlayerItem(player, hand, stack); + this.heal(2.0F); + this.playSound(AntarchySoundEvents.FLYING_SQUIRREL_NUT.get(), 0.35F, 1.0F + this.random.nextFloat() * 0.2F); + return InteractionResult.CONSUME; + } + + return InteractionResult.PASS; + } + + public boolean handleOwnerShoulderInteract(Player player) { + if (!this.isTame() || !this.isOwnedBy(player)) { + return false; + } + + if (player.isSpectator()) { + return true; + } + + if (this.isOnShoulder()) { + if (!this.level().isClientSide) { + this.glideOffShoulder(); + } + player.displayClientMessage(Component.literal("Flying squirrel glided off your shoulder."), true); + return true; + } + + if (this.isClimbingToShoulder()) { + this.dismountShoulder(); + player.displayClientMessage(Component.literal("Flying squirrel left your shoulder."), true); + return true; + } + + if (this.shoulderInteractCooldownTicks > 0) { + return true; + } + + this.startShoulderMountSequence(player); + player.displayClientMessage(Component.literal("Flying squirrel is climbing onto your shoulder."), true); + return true; + } + + private void toggleFollowState(Player player) { + boolean shouldSit = !this.isOrderedToSit(); + this.setOrderedToSit(shouldSit); + this.setTarget(null); + this.cancelTravel(); + if (shouldSit) { + this.setDeltaMovement(Vec3.ZERO); + } else { + this.wanderCooldown = 0; + } + player.displayClientMessage(Component.literal(shouldSit ? "Flying squirrel set to sit." : "Flying squirrel set to follow."), true); + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(AntarchyTags.Items.FLYING_SQUIRREL_NUTS); + } + + @Override + public boolean canMate(Animal otherAnimal) { + return otherAnimal instanceof FlyingSquirrelEntity + && otherAnimal != this + && this.isTame() + && ((FlyingSquirrelEntity) otherAnimal).isTame() + && this.isInLove() + && otherAnimal.isInLove(); + } + + @Override + @Nullable + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + if (!(this.getType().create(level) instanceof FlyingSquirrelEntity flyingSquirrel)) { + return null; + } + flyingSquirrel.setTextureVariant(this.getTextureVariant()); + return flyingSquirrel; + } + + @Override + @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); + this.assignRandomTextureVariant(); + this.stopGliding("spawn_initialized"); + this.wanderCooldown = 40 + this.random.nextInt(60); + this.glideRecoveryTicks = 0; + this.setClimbingTrunk(false); + this.setPickingUpNut(false); + this.pickupAnimTicks = 0; + return finalized; + } + + @Override + public boolean shouldBeSaved() { + return super.shouldBeSaved() && !this.isOnShoulder() && !this.isClimbingToShoulder(); + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.FLYING_SQUIRREL_IDLE.get(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.FLYING_SQUIRREL_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.FLYING_SQUIRREL_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 0.35F; + } + + @Override + protected void playStepSound(BlockPos pos, BlockState state) { + SoundType soundType = state.getSoundType(); + this.playSound(soundType.getStepSound(), 0.12F, 1.15F); + } + + public boolean isGliding() { + return this.entityData.get(GLIDING); + } + + public boolean isClimbingTrunk() { + return this.entityData.get(CLIMBING); + } + + public boolean isPickingUpNut() { + return this.entityData.get(PICKING_UP_NUT); + } + + public int getQuirkTicks() { + return this.entityData.get(QUIRK_TICKS); + } + + public String getTextureVariantName() { + int variant = this.getTextureVariant(); + return TEXTURE_VARIANT_NAMES[Mth.clamp(variant, 0, TEXTURE_VARIANT_NAMES.length - 1)]; + } + + public boolean shouldMirrorIdleAnimation() { + return false; + } + + public int getWanderCooldown() { + return this.wanderCooldown; + } + + public void setWanderCooldown(int wanderCooldown) { + this.wanderCooldown = wanderCooldown; + } + + public void setGliding(boolean gliding) { + this.entityData.set(GLIDING, gliding); + } + + public void setClimbingTrunk(boolean climbing) { + this.entityData.set(CLIMBING, climbing); + } + + public void setPickingUpNut(boolean pickingUpNut) { + this.entityData.set(PICKING_UP_NUT, pickingUpNut); + } + + private int getQuirkVariant() { + return this.entityData.get(QUIRK_VARIANT); + } + + private void setQuirkTicks(int ticks) { + this.entityData.set(QUIRK_TICKS, Math.max(0, ticks)); + } + + private void setQuirkVariant(int variant) { + this.entityData.set(QUIRK_VARIANT, Mth.clamp(variant, QUIRK_NONE, QUIRK_2)); + } + + private void assignRandomTextureVariant() { + double roll = this.random.nextDouble(); + if (roll < 0.005D) { + this.setTextureVariant(TEXTURE_VARIANT_ALBINO); + } else if (roll < 0.205D) { + this.setTextureVariant(TEXTURE_VARIANT_BROWN); + } else { + this.setTextureVariant(TEXTURE_VARIANT_REGULAR); + } + } + + private int getTextureVariant() { + return this.entityData.get(TEXTURE_VARIANT); + } + + private void setTextureVariant(int variant) { + this.entityData.set(TEXTURE_VARIANT, Mth.clamp(variant, 0, TEXTURE_VARIANT_NAMES.length - 1)); + } + + private void tickQuirkAnimation() { + if (this.getQuirkTicks() > 0) { + if (this.canUseQuirkAnimation()) { + this.setQuirkTicks(this.getQuirkTicks() - 1); + } else { + this.stopQuirkAnimation(); + this.quirkCooldownTicks = this.nextQuirkCooldown(); + } + return; + } + + if (this.getQuirkVariant() != QUIRK_NONE) { + this.setQuirkVariant(QUIRK_NONE); + } + + if (this.quirkCooldownTicks > 0) { + this.quirkCooldownTicks--; + return; + } + + if (!this.canUseQuirkAnimation()) { + return; + } + + int variant = this.random.nextBoolean() ? QUIRK_1 : QUIRK_2; + this.setQuirkVariant(variant); + this.setQuirkTicks(variant == QUIRK_1 ? QUIRK_1_DURATION_TICKS : QUIRK_2_DURATION_TICKS); + this.quirkCooldownTicks = this.nextQuirkCooldown(); + } + + private void stopQuirkAnimation() { + this.setQuirkTicks(0); + this.setQuirkVariant(QUIRK_NONE); + } + + private int nextQuirkCooldown() { + return MIN_QUIRK_COOLDOWN_TICKS + this.random.nextInt(MAX_QUIRK_COOLDOWN_TICKS - MIN_QUIRK_COOLDOWN_TICKS + 1); + } + + private boolean canUseQuirkAnimation() { + return this.onGround() + && !this.isInWaterOrBubble() + && !this.isOrderedToSit() + && !this.isPickingUpNut() + && !this.isGliding() + && !this.isClimbingTrunk() + && !this.isClimbingToShoulder() + && !this.isOnShoulder() + && this.getTarget() == null + && this.getNavigation().isDone() + && this.getDeltaMovement().horizontalDistanceSqr() < 1.0E-4D; + } + + public boolean isOnShoulder() { + return this.entityData.get(SHOULDER_PLAYER_DATA).isPresent(); + } + + @Nullable + private Player getShoulderPlayer() { + return this.entityData.get(SHOULDER_PLAYER_DATA) + .map(uuid -> this.level().getPlayerByUUID(uuid)) + .orElse(null); + } + + public boolean isClimbingToShoulder() { + return this.climbingToShoulderTicks > 0 && this.shoulderPlayerId != null; + } + + private void startShoulderMountSequence(Player player) { + if (player.isSpectator()) { + return; + } + this.shoulderPlayerId = player.getUUID(); + this.shoulderClimbStartPos = this.position(); + this.climbingToShoulderTicks = SHOULDER_CLIMB_TICKS; + this.shoulderSneakGraceTicks = SHOULDER_SNEAK_GRACE_TICKS; + this.setOrderedToSit(false); + this.setClimbingTrunk(false); + this.stopGliding("start_shoulder_mount"); + this.setNoGravity(true); + this.cancelTravel(); + this.setTarget(null); + this.stopRiding(); + } + + private void dismountShoulder() { + Player shoulderPlayer = this.getShoulderPlayer(); + if (shoulderPlayer != null) { + Vec3 dismountPos = shoulderPlayer.position().add(0.0D, 0.1D, 0.0D); + this.setPos(dismountPos.x, dismountPos.y, dismountPos.z); + } + this.clearShoulderMountState(); + this.setNoGravity(false); + this.wanderCooldown = 20 + this.random.nextInt(30); + } + + private void clearShoulderMountState() { + this.entityData.set(SHOULDER_PLAYER_DATA, Optional.empty()); + this.shoulderPlayerId = null; + this.shoulderClimbStartPos = null; + this.climbingToShoulderTicks = 0; + this.shoulderSneakGraceTicks = 0; + this.shoulderInteractCooldownTicks = SHOULDER_INTERACT_COOLDOWN_TICKS; + this.setClimbingTrunk(false); + } + + private void glideOffShoulder() { + Player player = this.getShoulderPlayer(); + if (player == null) { + this.dismountShoulder(); + return; + } + + Vec3 launchPos = this.getShoulderRidePos(player); + this.clearShoulderMountState(); + this.setPos(launchPos.x, launchPos.y, launchPos.z); + this.fallDistance = 0.0F; + + BlockPos glideTarget = this.findFallGlideTarget(); + if (glideTarget == null) { + glideTarget = this.findBestGlideTarget(); + } + if (glideTarget == null) { + glideTarget = this.findForcedFallLanding(); + } + + if (glideTarget != null) { + this.startGliding(glideTarget, "shoulder_dismount_glide"); + return; + } + + this.setNoGravity(false); + this.wanderCooldown = 20 + this.random.nextInt(30); + } + + private void tickClimbingToShoulder(Player player) { + if (this.shoulderClimbStartPos == null) { + this.shoulderClimbStartPos = this.position(); + } + + this.cancelTravel(); + this.setTarget(null); + this.setClimbingTrunk(true); + this.setDeltaMovement(Vec3.ZERO); + this.fallDistance = 0.0F; + + int ticksRemaining = this.climbingToShoulderTicks - 1; + double progress = 1.0D - (double)Math.max(ticksRemaining, 0) / (double)SHOULDER_CLIMB_TICKS; + Vec3 midClimbPos = this.getShoulderClimbMidpoint(player); + Vec3 targetPos = this.getShoulderRidePos(player); + Vec3 nextPos; + if (progress < 0.65D) { + nextPos = this.shoulderClimbStartPos.lerp(midClimbPos, progress / 0.65D); + } else { + nextPos = midClimbPos.lerp(targetPos, (progress - 0.65D) / 0.35D); + } + this.setPos(nextPos.x, nextPos.y, nextPos.z); + float climbYaw = player.getYHeadRot() + 180.0F; + this.setYRot(climbYaw); + this.setXRot(player.getXRot()); + this.yBodyRot = climbYaw; + this.yHeadRot = climbYaw; + this.climbingToShoulderTicks = ticksRemaining; + + if (this.climbingToShoulderTicks <= 0) { + this.finishShoulderMount(player); + } + } + + private void finishShoulderMount(Player player) { + this.climbingToShoulderTicks = 0; + this.shoulderClimbStartPos = null; + this.shoulderPlayerId = null; + this.shoulderSneakGraceTicks = SHOULDER_SNEAK_GRACE_TICKS; + this.setClimbingTrunk(false); + this.entityData.set(SHOULDER_PLAYER_DATA, Optional.of(player.getUUID())); + this.setDeltaMovement(Vec3.ZERO); + this.fallDistance = 0.0F; + } + + private Vec3 getShoulderRidePos(Player player) { + float headYaw = player.getYHeadRot(); + Vec3 horizontalForward = Vec3.directionFromRotation(0.0F, headYaw).normalize(); + Vec3 headForward = Vec3.directionFromRotation(player.getXRot(), headYaw).normalize(); + Vec3 shoulderSide = new Vec3(-horizontalForward.z, 0.0D, horizontalForward.x).normalize(); + Vec3 headUp = shoulderSide.cross(headForward).normalize(); + Vec3 headBase = player.position().add(0.0D, player.getEyeHeight(), 0.0D); + + return headBase + .add(shoulderSide.scale(SHOULDER_X_OFFSET)) + .add(headForward.scale(SHOULDER_FORWARD_OFFSET)) + .add(headUp.scale(SHOULDER_HEAD_Y_OFFSET)); + } + + private Vec3 getShoulderClimbMidpoint(Player player) { + float headYaw = player.getYHeadRot(); + Vec3 forward = Vec3.directionFromRotation(0.0F, headYaw).normalize(); + Vec3 side = new Vec3(-forward.z, 0.0D, forward.x).normalize(); + Vec3 front = forward.scale(0.08D); + Vec3 lateral = side.scale(SHOULDER_X_OFFSET); + return player.position() + .add(front) + .add(lateral) + .add(0.0D, player.getBbHeight() * 0.32D, 0.0D); + } + + private void startPickupAnimation() { + this.setPickingUpNut(true); + this.pickupAnimTicks = PICKUP_ANIM_TICKS; + this.cancelTravel(); + this.setDeltaMovement(Vec3.ZERO); + } + + private void tickPickupAnimation() { + if (this.pickupAnimTicks <= 0) { + return; + } + + this.pickupAnimTicks--; + this.cancelTravel(); + this.setDeltaMovement(Vec3.ZERO); + + if (this.pickupAnimTicks <= 0) { + this.pickupAnimTicks = 0; + this.setPickingUpNut(false); + } + } + + private void tickGlideLoopSound() { + if (this.level().isClientSide || !this.isGliding()) { + return; + } + + if (this.glideLoopSoundCooldown > 0) { + this.glideLoopSoundCooldown--; + return; + } + + this.playSound(AntarchySoundEvents.FLYING_SQUIRREL_GLIDE_LOOP.get(), 0.2F, 0.92F + this.random.nextFloat() * 0.10F); + this.glideLoopSoundCooldown = 8 + this.random.nextInt(6); + } + + void startGliding(BlockPos targetStandPos, String reason) { + this.currentGlideLaunch = this.blockPosition().immutable(); + this.glideTarget = targetStandPos.immutable(); + this.currentGlideReason = reason; + this.glideTicks = 0; + this.glideLoopSoundCooldown = 0; + this.setGliding(true); + this.setClimbingTrunk(false); + this.cancelTravel(); + this.setNoGravity(true); + + Vec3 launch = Vec3.atBottomCenterOf(targetStandPos).subtract(this.position()); + Vec3 horizontal = new Vec3(launch.x, 0.0D, launch.z); + + if (horizontal.lengthSqr() > 1.0E-4D) { + this.glideDirection = horizontal.normalize(); + } else { + float yawRad = this.getYRot() * ((float)Math.PI / 180.0F); + this.glideDirection = new Vec3(-Mth.sin(yawRad), 0.0D, Mth.cos(yawRad)).normalize(); + } + + this.setDeltaMovement( + this.glideDirection.x * 0.38D, + -0.06D, + this.glideDirection.z * 0.38D + ); + + float targetYaw = (float)(Mth.atan2(this.glideDirection.z, this.glideDirection.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(targetYaw); + this.yBodyRot = targetYaw; + this.yHeadRot = targetYaw; + + this.hasImpulse = true; + } + + void stopGliding(String reason) { + if (this.isGliding()) { + if (this.currentGlideLaunch != null && this.glideTarget != null) { + this.recentGlideLaunch = this.currentGlideLaunch.immutable(); + this.recentGlideTarget = this.glideTarget.immutable(); + this.recentGlideCooldown = RECENT_GLIDE_REPEAT_COOLDOWN; + } + if ("emergency_fall_glide".equals(this.currentGlideReason) && this.glideTarget != null) { + this.recentEmergencyGlideTarget = this.glideTarget.immutable(); + this.recentEmergencyGlideCooldown = EMERGENCY_GLIDE_REPEAT_COOLDOWN; + } + } + this.setGliding(false); + this.glideTarget = null; + this.glideTicks = 0; + this.glideDirection = null; + this.currentGlideLaunch = null; + this.currentGlideReason = null; + this.glideLoopSoundCooldown = 0; + this.glideRecoveryTicks = 16; + } + + private void tickGliding() { + this.tickGlideLoopSound(); + + if (this.glideTarget == null || this.isInWaterOrBubble()) { + this.stopGliding( + "hit_ground_or_collision" + + ", onGround=" + this.onGround() + + ", inWater=" + this.isInWaterOrBubble() + ); + return; + } + + if (this.onGround() && this.glideTicks > 1) { + this.stopGliding("hit_ground_or_collision, onGround=true, inWater=false"); + return; + } + + if (this.glideDirection == null) { + this.stopGliding("missing_glide_direction"); + return; + } + + if (++this.glideTicks > MAX_GLIDE_TICKS) { + this.stopGliding("glide_timeout"); + return; + } + + Vec3 targetCenter = Vec3.atBottomCenterOf(this.glideTarget).add(0.0D, 0.08D, 0.0D); + Vec3 toTarget = targetCenter.subtract(this.position()); + + double horizontalDistance = Math.sqrt(toTarget.x * toTarget.x + toTarget.z * toTarget.z); + if (horizontalDistance < 0.85D && Math.abs(toTarget.y) <= 1.0D) { + this.stopGliding("reached_glide_target"); + return; + } + + Vec3 targetDirection = new Vec3(toTarget.x, 0.0D, toTarget.z); + if (targetDirection.lengthSqr() > 1.0E-4D) { + targetDirection = targetDirection.normalize(); + this.glideDirection = this.glideDirection.scale(0.92D) + .add(targetDirection.scale(0.08D)) + .normalize(); + } + + Vec3 motion = this.getDeltaMovement(); + + double horizontalSpeed = Mth.clamp(horizontalDistance * 0.05D, 0.30D, 0.48D); + double verticalSpeed = Mth.clamp(toTarget.y * 0.04D, -0.20D, -0.02D); + + this.setDeltaMovement( + this.glideDirection.x * horizontalSpeed, + verticalSpeed, + this.glideDirection.z * horizontalSpeed + ); + + this.hasImpulse = true; + + float targetYaw = (float)(Mth.atan2(this.glideDirection.z, this.glideDirection.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(Mth.approachDegrees(this.getYRot(), targetYaw, 4.0F)); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + } + + boolean requestTravelTo(BlockPos targetPos, double speed, String purpose) { + if (this.getNavigation() instanceof FlyingSquirrelNavigation squirrelNavigation) { + return squirrelNavigation.requestTravelTo(targetPos, speed, purpose); + } + + double x = targetPos.getX() + 0.5D; + double y = targetPos.getY(); + double z = targetPos.getZ() + 0.5D; + boolean moved = this.getNavigation().moveTo(x, y, z, speed); + this.getNavigation().setSpeedModifier(speed); + return moved; + } + + private void cancelTravel() { + if (this.getNavigation() instanceof FlyingSquirrelNavigation squirrelNavigation) { + squirrelNavigation.cancelTraversal(); + return; + } + + this.getNavigation().stop(); + } + + private boolean isRecentEmergencyGlideTarget(BlockPos targetStandPos) { + return this.recentEmergencyGlideTarget != null + && this.recentEmergencyGlideCooldown > 0 + && this.recentEmergencyGlideTarget.closerThan(targetStandPos, 4.0D); + } + + boolean isRecentGlidePath(Vec3 launchFrom, BlockPos targetStandPos) { + if (this.recentGlideCooldown <= 0 || this.recentGlideLaunch == null || this.recentGlideTarget == null) { + return false; + } + + BlockPos launchPos = BlockPos.containing(launchFrom); + return this.recentGlideLaunch.closerThan(launchPos, 4.0D) + && this.recentGlideTarget.closerThan(targetStandPos, 4.0D); + } + + boolean isAtStandPos(BlockPos standPos) { + return Vec3.atBottomCenterOf(standPos).distanceToSqr(this.position()) <= 1.45D; + } + + @Nullable BlockPos findClosestHarvestableAcorn() { + BlockPos origin = this.blockPosition(); + BlockPos bestPos = null; + double bestDistance = Double.MAX_VALUE; + + for (BlockPos pos : BlockPos.betweenClosed(origin.offset(-16, -6, -16), origin.offset(16, 8, 16))) { + BlockState state = this.level().getBlockState(pos); + if (!isHarvestableAcorn(state)) { + continue; + } + + double distance = origin.distSqr(pos); + if (distance < bestDistance) { + bestDistance = distance; + bestPos = pos.immutable(); + } + } + + return bestPos; + } + + @Nullable ItemEntity findClosestNutItem() { + ItemEntity bestMatch = null; + double bestDistance = Double.MAX_VALUE; + for (ItemEntity itemEntity : this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate(NUT_SEARCH_RANGE))) { + if (!itemEntity.isAlive() || !itemEntity.getItem().is(AntarchyTags.Items.FLYING_SQUIRREL_NUTS)) { + continue; + } + + double distance = this.distanceToSqr(itemEntity); + if (distance > NUT_SEARCH_RANGE * NUT_SEARCH_RANGE || distance >= bestDistance) { + continue; + } + + bestDistance = distance; + bestMatch = itemEntity; + } + + return bestMatch; + } + + @Nullable BlockPos findAcornHarvestStandPos(BlockPos acornPos) { + BlockPos bestPos = null; + double bestScore = Double.MAX_VALUE; + + for (int dx = -3; dx <= 3; dx++) { + for (int dz = -3; dz <= 3; dz++) { + for (int dy = -3; dy <= 3; dy++) { + BlockPos standPos = acornPos.offset(dx, dy, dz); + if (!isOpenStandPos(this.level(), standPos)) { + continue; + } + + double distanceToAcorn = Vec3.atBottomCenterOf(standPos).distanceToSqr(Vec3.atCenterOf(acornPos)); + if (distanceToAcorn > 9.0D) { + continue; + } + + double score = distanceToAcorn; + if (isAdjacentToLog(this.level(), standPos)) { + score -= 1.0D; + } + if (score < bestScore) { + bestScore = score; + bestPos = standPos.immutable(); + } + } + } + } + + return bestPos; + } + + public void collectNut(ItemEntity itemEntity) { + ItemStack itemStack = itemEntity.getItem(); + if (itemStack.isEmpty()) { + itemEntity.discard(); + return; + } + + this.startPickupAnimation(); + + ItemStack particleStack = itemStack.copy(); + particleStack.setCount(1); + itemStack.shrink(1); + if (itemStack.isEmpty()) { + itemEntity.discard(); + } + this.wanderCooldown = 30 + this.random.nextInt(80); + this.playSound(AntarchySoundEvents.FLYING_SQUIRREL_NUT.get(), 0.35F, 0.95F + this.random.nextFloat() * 0.2F); + + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles( + new ItemParticleOption(ParticleTypes.ITEM, particleStack), + this.getX(), + this.getEyeY() - 0.15D, + this.getZ(), + 6, + 0.18D, + 0.08D, + 0.18D, + 0.01D + ); + } + } + + boolean harvestAcorn(BlockPos acornPos) { + if (!this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { + return false; + } + + BlockState state = this.level().getBlockState(acornPos); + if (!isHarvestableAcorn(state)) { + return false; + } + + SoundType soundType = state.getSoundType(); + boolean destroyed = this.level().destroyBlock(acornPos, true, this); + if (destroyed) { + this.wanderCooldown = 10 + this.random.nextInt(15); + this.playSound(soundType.getBreakSound(), 0.25F, 1.1F); + } + return destroyed; + } + + @Nullable + private BlockPos findFallGlideTarget() { + BlockPos origin = this.blockPosition(); + BlockPos bestPos = null; + double bestScore = Double.NEGATIVE_INFINITY; + Vec3 motion = this.getDeltaMovement(); + Vec3 preferredDirection = new Vec3(motion.x, 0.0D, motion.z); + if (preferredDirection.lengthSqr() <= 1.0E-4D) { + float yawRad = this.getYRot() * ((float)Math.PI / 180.0F); + preferredDirection = new Vec3(-Mth.sin(yawRad), 0.0D, Mth.cos(yawRad)); + } + if (preferredDirection.lengthSqr() > 1.0E-4D) { + preferredDirection = preferredDirection.normalize(); + } + + for (int dx = -20; dx <= 20; dx++) { + for (int dz = -20; dz <= 20; dz++) { + for (int dy = -28; dy <= -2; dy++) { + BlockPos supportPos = origin.offset(dx, dy, dz); + BlockState supportState = this.level().getBlockState(supportPos); + if (!isStandableSurface(supportState)) { + continue; + } + + BlockPos standPos = supportPos.above(); + if (!isEmergencyLandingPos(this.level(), standPos)) { + continue; + } + if (this.isRecentGlidePath(this.position(), standPos)) { + continue; + } + + Vec3 standCenter = Vec3.atBottomCenterOf(standPos); + double horizontalDistance = Math.sqrt((standCenter.x - this.getX()) * (standCenter.x - this.getX()) + + (standCenter.z - this.getZ()) * (standCenter.z - this.getZ())); + if (horizontalDistance < 3.0D || horizontalDistance > 28.0D) { + continue; + } + + double verticalDrop = origin.getY() - standPos.getY(); + double score = horizontalDistance * 1.6D; + score += Math.min(verticalDrop, 18.0D) * 0.8D; + if (preferredDirection.lengthSqr() > 1.0E-4D) { + Vec3 toTarget = new Vec3(standCenter.x - this.getX(), 0.0D, standCenter.z - this.getZ()); + if (toTarget.lengthSqr() > 1.0E-4D) { + double alignment = preferredDirection.dot(toTarget.normalize()); + score += alignment * 10.0D; + } + } + if (isAdjacentToLog(this.level(), standPos)) { + score += 4.0D; + } + if (supportState.getBlock() instanceof OuranwoodLeavesBlock) { + score += 6.0D; + } else if (supportState.blocksMotion()) { + score += 2.0D; + } + + if (score > bestScore) { + bestScore = score; + bestPos = standPos.immutable(); + } + } + } + } + + if (bestPos == null) { + bestPos = this.findFallbackFallLanding(preferredDirection); + } + + return bestPos; + } + + @Nullable + BlockPos findBestGlideTarget() { + BlockPos origin = this.blockPosition(); + BlockPos bestPos = null; + double bestScore = Double.NEGATIVE_INFINITY; + + for (int dx = -24; dx <= 24; dx++) { + for (int dz = -24; dz <= 24; dz++) { + for (int dy = -32; dy <= -1; dy++) { + BlockPos supportPos = origin.offset(dx, dy, dz); + if (!isStandableSurface(this.level().getBlockState(supportPos))) { + continue; + } + + BlockPos standPos = supportPos.above(); + if (!isOpenStandPos(this.level(), standPos)) { + continue; + } + if (this.isRecentGlidePath(this.position(), standPos)) { + continue; + } + + double score = this.scoreGlideTarget(standPos); + if (score > bestScore) { + bestScore = score; + bestPos = standPos.immutable(); + } + } + } + } + + return bestPos; + } + + @Nullable + private BlockPos findFallbackFallLanding(Vec3 preferredDirection) { + if (preferredDirection.lengthSqr() <= 1.0E-4D) { + return null; + } + + BlockPos origin = this.blockPosition(); + int minY = Math.max(this.level().getMinBuildHeight() + 1, origin.getY() - 40); + + for (int step = 4; step <= 18; step += 2) { + int x = Mth.floor(this.getX() + preferredDirection.x * step); + int z = Mth.floor(this.getZ() + preferredDirection.z * step); + + for (int y = origin.getY() - 2; y >= minY; y--) { + BlockPos supportPos = new BlockPos(x, y, z); + if (!isStandableSurface(this.level().getBlockState(supportPos))) { + continue; + } + + BlockPos standPos = supportPos.above(); + if (isEmergencyLandingPos(this.level(), standPos)) { + return standPos; + } + } + } + + return null; + } + + @Nullable + private BlockPos findForcedFallLanding() { + Vec3 preferredDirection = this.getPreferredGlideDirection(); + BlockPos origin = this.blockPosition(); + int minY = Math.max(this.level().getMinBuildHeight() + 1, origin.getY() - 96); + + for (int forward = 4; forward <= 20; forward += 2) { + double sampleX = this.getX() + preferredDirection.x * forward; + double sampleZ = this.getZ() + preferredDirection.z * forward; + + BlockPos landing = this.findLandingInColumn(Mth.floor(sampleX), Mth.floor(sampleZ), origin.getY() - 1, minY); + if (landing != null && !this.isRecentGlidePath(this.position(), landing)) { + return landing; + } + + Vec3 side = new Vec3(-preferredDirection.z, 0.0D, preferredDirection.x); + for (int lateral = 2; lateral <= 4; lateral += 2) { + BlockPos leftLanding = this.findLandingInColumn( + Mth.floor(sampleX + side.x * lateral), + Mth.floor(sampleZ + side.z * lateral), + origin.getY() - 1, + minY + ); + if (leftLanding != null && !this.isRecentGlidePath(this.position(), leftLanding)) { + return leftLanding; + } + + BlockPos rightLanding = this.findLandingInColumn( + Mth.floor(sampleX - side.x * lateral), + Mth.floor(sampleZ - side.z * lateral), + origin.getY() - 1, + minY + ); + if (rightLanding != null && !this.isRecentGlidePath(this.position(), rightLanding)) { + return rightLanding; + } + } + } + + BlockPos directLanding = this.findLandingInColumn(origin.getX(), origin.getZ(), origin.getY() - 1, minY); + return directLanding != null && !this.isRecentGlidePath(this.position(), directLanding) ? directLanding : null; + } + + @Nullable + private BlockPos findLandingInColumn(int x, int z, int startY, int minY) { + for (int y = startY; y >= minY; y--) { + BlockPos supportPos = new BlockPos(x, y, z); + if (!isStandableSurface(this.level().getBlockState(supportPos))) { + continue; + } + + BlockPos standPos = supportPos.above(); + if (isEmergencyLandingPos(this.level(), standPos)) { + return standPos.immutable(); + } + } + + return null; + } + + static boolean hasNearbyCanopy(BlockGetter level, BlockPos pos) { + for (int dx = -2; dx <= 2; dx++) { + for (int dz = -2; dz <= 2; dz++) { + for (int dy = -2; dy <= 2; dy++) { + if (isCanopySupport(level.getBlockState(pos.offset(dx, dy, dz)))) { + return true; + } + } + } + } + return false; + } + + private static boolean isCanopySupport(BlockState state) { + return state.getBlock() instanceof OuranwoodLeavesBlock || state.is(net.minecraft.tags.BlockTags.LOGS); + } + + private static boolean isClimbableTrunk(BlockState state) { + return state.is(net.minecraft.tags.BlockTags.LOGS); + } + + static boolean isStandableSurface(BlockState state) { + return state.blocksMotion() || isCanopySupport(state); + } + + static boolean isClimbSurface(BlockState state) { + return state.blocksMotion() || state.is(BlockTags.LEAVES); + } + + static boolean isClimbPassable(BlockState state) { + return state.isAir() || state.is(net.minecraft.tags.BlockTags.LEAVES); + } + + static boolean isOpenStandPos(BlockGetter level, BlockPos pos) { + return level.getBlockState(pos).isAir() + && level.getBlockState(pos.above()).isAir() + && isStandableSurface(level.getBlockState(pos.below())); + } + + private static boolean isEmergencyLandingPos(BlockGetter level, BlockPos pos) { + return level.getBlockState(pos).isAir() + && isStandableSurface(level.getBlockState(pos.below())); + } + + static boolean isOpenAir(BlockGetter level, BlockPos pos) { + return level.getBlockState(pos).isAir() + && level.getBlockState(pos.above()).isAir(); + } + + static boolean isOpenClimbPos(BlockGetter level, BlockPos pos) { + return isClimbPassable(level.getBlockState(pos)) + && isClimbPassable(level.getBlockState(pos.above())); + } + + static boolean isAdjacentToLog(BlockGetter level, BlockPos pos) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (level.getBlockState(pos.relative(direction)).is(net.minecraft.tags.BlockTags.LOGS) + || level.getBlockState(pos.above().relative(direction)).is(net.minecraft.tags.BlockTags.LOGS)) { + return true; + } + } + return false; + } + + static boolean isHarvestableAcorn(BlockState state) { + return state.getBlock() instanceof OuranwoodAcornBlock + && state.hasProperty(OuranwoodAcornBlock.HANGING) + && state.getValue(OuranwoodAcornBlock.HANGING); + } + + static boolean isGroundEscapeSurface(BlockState state) { + return state.is(net.minecraft.tags.BlockTags.DIRT) + || state.is(Blocks.GRASS_BLOCK) + || state.is(Blocks.MOSS_BLOCK) + || state.is(Blocks.MOSS_CARPET); + } + + private Vec3 getPreferredGlideDirection() { + Vec3 motion = this.getDeltaMovement(); + Vec3 preferredDirection = new Vec3(motion.x, 0.0D, motion.z); + if (preferredDirection.lengthSqr() > 1.0E-4D) { + return preferredDirection.normalize(); + } + + float yawRad = this.getYRot() * ((float)Math.PI / 180.0F); + return new Vec3(-Mth.sin(yawRad), 0.0D, Mth.cos(yawRad)).normalize(); + } + + private double getClimbFaceOffset() { + return Mth.clamp(0.5D - this.getBbWidth() * 0.5D + 0.04D, 0.16D, 0.30D); + } + + private void tickIdleStallLogging(double horizontalSpeed) { + if (this.isOrderedToSit() || this.isGliding() || this.isClimbingTrunk() || this.isClimbingToShoulder() || this.isPickingUpNut() || this.isOnShoulder()) { + this.idleStallTicks = 0; + return; + } + + boolean mostlyStill = horizontalSpeed < 1.0E-4D && Math.abs(this.getDeltaMovement().y) < 0.02D; + if (!this.onGround() || !mostlyStill || !this.getNavigation().isDone()) { + this.idleStallTicks = 0; + return; + } + + this.idleStallTicks++; + + if (this.idleStallTicks == GROUND_STALL_FORCE_WANDER_TICKS) { + this.forceGroundStallWander(); + } + } + + private void forceGroundStallWander() { + BlockPos origin = this.blockPosition(); + for (int attempt = 0; attempt < 16; attempt++) { + int dx = this.random.nextIntBetweenInclusive(-8, 8); + int dz = this.random.nextIntBetweenInclusive(-8, 8); + for (int dy = 2; dy >= -2; dy--) { + BlockPos candidate = origin.offset(dx, dy, dz); + if (isOpenStandPos(this.level(), candidate)) { + this.wanderCooldown = 0; + this.requestTravelTo(candidate, 1.0D, "stall_recovery"); + this.idleStallTicks = 0; + return; + } + } + } + BlockPos glideTarget = this.findBestGlideTarget(); + if (glideTarget == null) { + glideTarget = this.findFallGlideTarget(); + } + if (glideTarget != null && !this.isRecentEmergencyGlideTarget(glideTarget)) { + this.startGliding(glideTarget, "stall_recovery_glide"); + this.idleStallTicks = 0; + return; + } + BlockPos edge = this.findNearestEdge(); + if (edge != null) { + this.setDeltaMovement( + (edge.getX() + 0.5D - this.getX()) * 0.15D, + 0.12D, + (edge.getZ() + 0.5D - this.getZ()) * 0.15D + ); + this.hasImpulse = true; + this.idleStallTicks = 0; + return; + } + this.idleStallTicks = GROUND_STALL_FORCE_WANDER_TICKS - 40; + } + + @Nullable + private BlockPos findNearestEdge() { + BlockPos origin = this.blockPosition(); + for (int r = 1; r <= 5; r++) { + for (Direction dir : Direction.Plane.HORIZONTAL) { + BlockPos candidate = origin.relative(dir, r); + if (this.level().getBlockState(candidate).isAir() + && this.level().getBlockState(candidate.below()).isAir()) { + return candidate.immutable(); + } + } + } + return null; + } + + private void refreshNutCache() { + if (this.tickCount < this.nextNutScanTick) { + return; + } + this.nextNutScanTick = this.tickCount + 30; + this.cachedNutItem = this.findClosestNutItem(); + this.cachedHarvestableAcorn = this.cachedNutItem == null ? this.findClosestHarvestableAcorn() : null; + } + + double scoreGlideTarget(BlockPos standPos) { + return this.scoreGlideTargetFrom(this.position(), standPos); + } + + double scoreGlideTargetFrom(Vec3 from, BlockPos standPos) { + Vec3 to = Vec3.atBottomCenterOf(standPos); + + double dx = to.x - from.x; + double dz = to.z - from.z; + double horizontalDistance = Math.sqrt(dx * dx + dz * dz); + double verticalDrop = from.y - to.y; + + if (horizontalDistance < MIN_GLIDE_DISTANCE || horizontalDistance > MAX_GLIDE_DISTANCE) { + return Double.NEGATIVE_INFINITY; + } + + if (verticalDrop <= MIN_GLIDE_DISTANCE || verticalDrop > 32.0D) { + return Double.NEGATIVE_INFINITY; + } + + return horizontalDistance * 1.5D + verticalDrop * 2.0D; + } + + private class FindNutGoal extends Goal { + @Nullable + private ItemEntity targetNut; + @Nullable + private BlockPos targetAcorn; + @Nullable + private BlockPos acornStandPos; + private int repathDelay; + private int searchCooldown; + + private FindNutGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + if (this.searchCooldown > 0) { + this.searchCooldown--; + return false; + } + + if (FlyingSquirrelEntity.this.isGliding() + || FlyingSquirrelEntity.this.isClimbingTrunk() + || FlyingSquirrelEntity.this.isPickingUpNut() + || FlyingSquirrelEntity.this.isOrderedToSit()) { + this.searchCooldown = 10; + return false; + } + + FlyingSquirrelEntity.this.refreshNutCache(); + this.targetNut = FlyingSquirrelEntity.this.cachedNutItem; + this.targetAcorn = null; + this.acornStandPos = null; + + if (this.targetNut != null) { + return true; + } + + if (!FlyingSquirrelEntity.this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { + this.searchCooldown = 20; + return false; + } + + this.targetAcorn = FlyingSquirrelEntity.this.cachedHarvestableAcorn; + this.acornStandPos = this.targetAcorn == null ? null : FlyingSquirrelEntity.this.findAcornHarvestStandPos(this.targetAcorn); + + if (this.targetAcorn != null && this.acornStandPos != null) { + return true; + } + + this.searchCooldown = 20; + return false; + } + + @Override + public boolean canContinueToUse() { + if (FlyingSquirrelEntity.this.isGliding() + || FlyingSquirrelEntity.this.isClimbingTrunk() + || FlyingSquirrelEntity.this.isOrderedToSit()) { + return false; + } + + if (this.targetNut != null) { + return this.targetNut.isAlive(); + } + + return this.targetAcorn != null + && this.acornStandPos != null + && FlyingSquirrelEntity.isHarvestableAcorn(FlyingSquirrelEntity.this.level().getBlockState(this.targetAcorn)); + } + + @Override + public void start() { + this.repathDelay = 0; + this.searchCooldown = 0; + } + + @Override + public void stop() { + this.targetNut = null; + this.targetAcorn = null; + this.acornStandPos = null; + this.repathDelay = 0; + this.searchCooldown = 10; + if (!FlyingSquirrelEntity.this.isGliding()) { + FlyingSquirrelEntity.this.cancelTravel(); + } + } + + @Override + public void tick() { + if (this.targetNut != null) { + if (!this.targetNut.isAlive() || this.targetNut.getItem().isEmpty()) { + this.targetNut = null; + return; + } + + FlyingSquirrelEntity.this.getLookControl().setLookAt(this.targetNut, 30.0F, 30.0F); + + if (--this.repathDelay <= 0 && !FlyingSquirrelEntity.this.isGliding()) { + boolean moved = FlyingSquirrelEntity.this.requestTravelTo(this.targetNut.blockPosition(), 1.15D, "forage_item"); + this.repathDelay = moved ? 10 : 0; + } + + if (FlyingSquirrelEntity.this.distanceToSqr(this.targetNut) <= 2.1D) { + FlyingSquirrelEntity.this.collectNut(this.targetNut); + this.targetNut = null; + } + return; + } + + if (this.targetAcorn == null || this.acornStandPos == null) { + return; + } + + FlyingSquirrelEntity.this.getLookControl().setLookAt( + this.targetAcorn.getX() + 0.5D, + this.targetAcorn.getY() + 0.5D, + this.targetAcorn.getZ() + 0.5D + ); + + if (FlyingSquirrelEntity.this.position().distanceTo(Vec3.atCenterOf(this.targetAcorn)) <= 2.2D) { + if (FlyingSquirrelEntity.this.harvestAcorn(this.targetAcorn)) { + this.targetAcorn = null; + this.acornStandPos = null; + } + return; + } + + if (--this.repathDelay <= 0 && !FlyingSquirrelEntity.this.isGliding()) { + boolean moved = FlyingSquirrelEntity.this.requestTravelTo(this.acornStandPos, 1.1D, "forage_acorn"); + this.repathDelay = moved ? 10 : 0; + } + } + } + + private class ShoulderMountGoal extends Goal { + private ShoulderMountGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); + } + + @Override + public boolean canUse() { + return FlyingSquirrelEntity.this.isClimbingToShoulder(); + } + + @Override + public boolean canContinueToUse() { + return FlyingSquirrelEntity.this.isClimbingToShoulder(); + } + + @Override + public void start() { + FlyingSquirrelEntity.this.cancelTravel(); + FlyingSquirrelEntity.this.setTarget(null); + } + + @Override + public void stop() { + if (FlyingSquirrelEntity.this.isClimbingToShoulder()) { + FlyingSquirrelEntity.this.dismountShoulder(); + } + } + + @Override + public void tick() { + FlyingSquirrelEntity.this.cancelTravel(); + FlyingSquirrelEntity.this.setTarget(null); + } + } + + private double getClimbBias() { + if (!this.onGround()) { + return 0.0D; + } + + BlockState groundState = this.level().getBlockState(this.blockPosition().below()); + if (!isGroundEscapeSurface(groundState)) { + return 0.0D; + } + + if (this.getY() >= 200.0D) { + return 0.0D; + } + + double yBias = Mth.clampedMap(this.getY(), 80.0D, 180.0D, 1.0D, 0.0D); + return Math.min(1.0D, yBias + 0.20D); + } + + private boolean shouldFavorClimbingFromGround() { + return this.getClimbBias() > 0.08D; + } + + private void rememberFailedClimbTarget(BlockPos topStandPos) { + this.recentFailedClimbTarget = topStandPos.immutable(); + this.recentFailedClimbCooldown = FAILED_CLIMB_TARGET_COOLDOWN; + } + + @Nullable + private ClimbTarget findBestClimbTarget() { + BlockPos origin = this.blockPosition(); + boolean favorClimbing = this.shouldFavorClimbingFromGround(); + int horizontalRange = favorClimbing ? 24 : 10; + ClimbTarget bestTarget = null; + double bestScore = Double.NEGATIVE_INFINITY; + int currentY = Mth.floor(this.getY()); + int minimumTargetY = currentY + (favorClimbing ? Math.max(MIN_CLIMB_HEIGHT, GROUND_ESCAPE_MIN_CLIMB_HEIGHT) : MIN_CLIMB_HEIGHT); + int maximumTargetY = currentY + MAX_CLIMB_HEIGHT; + + for (BlockPos baseStandPos : BlockPos.betweenClosed(origin.offset(-horizontalRange, -1, -horizontalRange), origin.offset(horizontalRange, 1, horizontalRange))) { + if (!isOpenStandPos(this.level(), baseStandPos)) { + continue; + } + + Direction attachDirection = this.findClimbAttachmentDirection(baseStandPos, null); + if (attachDirection == null || !this.isValidClimbColumnPos(baseStandPos, attachDirection)) { + continue; + } + + int reachableTopY = this.findHighestReachableClimbY(baseStandPos, maximumTargetY, attachDirection); + if (reachableTopY < minimumTargetY) { + continue; + } + + BlockPos topStandPos = this.findBestClimbPerch(baseStandPos, minimumTargetY, reachableTopY + 2, attachDirection); + if (topStandPos == null) { + continue; + } + + if (this.recentFailedClimbTarget != null + && this.recentFailedClimbCooldown > 0 + && this.recentFailedClimbTarget.closerThan(topStandPos, 4.0D)) { + continue; + } + + int climbHeight = topStandPos.getY() - currentY; + if (climbHeight < MIN_CLIMB_HEIGHT || climbHeight > MAX_CLIMB_HEIGHT) { + continue; + } + + double walkDistance = Vec3.atBottomCenterOf(baseStandPos).distanceTo(this.position()); + double perchOffset = Vec3.atBottomCenterOf(topStandPos).distanceTo(Vec3.atBottomCenterOf(baseStandPos)); + double score = climbHeight * (favorClimbing ? 10.0D : 4.5D) - walkDistance - perchOffset * 0.6D; + if (favorClimbing) { + score += 20.0D; + } + if (score > bestScore) { + bestScore = score; + bestTarget = new ClimbTarget( + baseStandPos.immutable(), + topStandPos.immutable(), + attachDirection + ); + } + } + + return bestTarget; + } + + private int findHighestReachableClimbY(BlockPos baseStandPos, int maxTargetY, Direction preferredDirection) { + int highestOpenY = baseStandPos.getY(); + for (int y = baseStandPos.getY(); y <= maxTargetY; y++) { + BlockPos columnPos = new BlockPos(baseStandPos.getX(), y, baseStandPos.getZ()); + if (!this.isValidClimbColumnPos(columnPos, preferredDirection)) { + break; + } + highestOpenY = y; + } + + return highestOpenY; + } + + private boolean hasSideClimbSupportAt(BlockPos pos) { + return this.findClimbAttachmentDirection(pos, null) != null; + } + + private boolean hasClimbSupportAt(BlockPos pos) { + return this.hasSideClimbSupportAt(pos) || isStandableSurface(this.level().getBlockState(pos.above())); + } + + private boolean isValidClimbColumnPos(BlockPos pos, @Nullable Direction preferredDirection) { + return isOpenClimbPos(this.level(), pos) && this.findClimbAttachmentDirection(pos, preferredDirection) != null; + } + + private Vec3 getClimbAttachPoint(BlockPos climbColumnPos, @Nullable Direction preferredDirection) { + Direction attachDirection = this.findClimbAttachmentDirection(climbColumnPos, preferredDirection); + double x = climbColumnPos.getX() + 0.5D; + double y = climbColumnPos.getY(); + double z = climbColumnPos.getZ() + 0.5D; + if (attachDirection == null) { + return new Vec3(x, y, z); + } + double faceOffset = this.getClimbFaceOffset(); + switch (attachDirection) { + case NORTH -> z -= faceOffset; + case SOUTH -> z += faceOffset; + case WEST -> x -= faceOffset; + case EAST -> x += faceOffset; + } + return new Vec3(x, y, z); + } + + @Nullable + private Direction findClimbAttachmentDirection(BlockPos pos, @Nullable Direction preferredDirection) { + if (preferredDirection != null + && preferredDirection.getAxis().isHorizontal() + && this.isValidClimbSupport(pos.relative(preferredDirection))) { + return preferredDirection; + } + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockState supportState = this.level().getBlockState(pos.relative(direction)); + if (supportState.is(BlockTags.LOGS)) { + return direction; + } + } + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockState supportState = this.level().getBlockState(pos.relative(direction)); + if (supportState.blocksMotion()) { + return direction; + } + } + return null; + } + + private boolean isValidClimbSupport(BlockPos pos) { + BlockState state = this.level().getBlockState(pos); + return state.is(BlockTags.LOGS) + || (state.blocksMotion() && !state.is(BlockTags.LEAVES)) + || state.is(BlockTags.LEAVES); + } + + @Nullable + private BlockPos findBestClimbPerch(BlockPos baseStandPos, int minimumY, int maximumY, Direction preferredDirection) { + BlockPos bestStandPos = null; + double bestScore = Double.NEGATIVE_INFINITY; + for (int y = maximumY; y >= minimumY; y--) { + for (int dx = -2; dx <= 2; dx++) { + for (int dz = -2; dz <= 2; dz++) { + if (Math.abs(dx) + Math.abs(dz) > 3) { + continue; + } + + BlockPos standPos = new BlockPos(baseStandPos.getX() + dx, y, baseStandPos.getZ() + dz); + if (!isOpenStandPos(this.level(), standPos)) { + continue; + } + + BlockPos climbColumnPos = new BlockPos(baseStandPos.getX(), y, baseStandPos.getZ()); + if (!this.isValidClimbColumnPos(climbColumnPos, preferredDirection)) { + continue; + } + + if (!this.hasSideClimbSupportAt(standPos) && !isStandableSurface(this.level().getBlockState(standPos.above()))) { + continue; + } + + double horizontalOffset = Math.sqrt(dx * dx + dz * dz); + double score = y * 4.0D - horizontalOffset * 1.5D; + if (isAdjacentToLog(this.level(), standPos)) { + score += 2.0D; + } + if (score > bestScore) { + bestScore = score; + bestStandPos = standPos.immutable(); + } + } + } + } + + return bestStandPos; + } + + private class ArborealRandomStrollGoal extends WaterAvoidingRandomStrollGoal { + private static final int INTERVAL = 80; + + private ArborealRandomStrollGoal() { + super(FlyingSquirrelEntity.this, 1.0D, INTERVAL); + } + + @Override + public boolean canUse() { + if (FlyingSquirrelEntity.this.isOrderedToSit()) { + return false; + } + + if (!FlyingSquirrelEntity.this.onGround() + && !FlyingSquirrelEntity.this.isClimbingTrunk() + && !FlyingSquirrelEntity.this.isAtStandPos(FlyingSquirrelEntity.this.blockPosition()) + && !FlyingSquirrelEntity.hasNearbyCanopy( + FlyingSquirrelEntity.this.level(), + FlyingSquirrelEntity.this.blockPosition())) { + return false; + } + if (FlyingSquirrelEntity.this.isGliding()) { + return false; + } + + if (FlyingSquirrelEntity.this.isClimbingTrunk()) { + return false; + } + + if (FlyingSquirrelEntity.this.isPickingUpNut()) { + return false; + } + + if (FlyingSquirrelEntity.this.getWanderCooldown() > 0) { + return false; + } + + return super.canUse(); + } + + @Override + @Nullable + protected Vec3 getPosition() { + BlockPos target = this.findBestArborealDestination(); + if (target != null) { + return Vec3.atBottomCenterOf(target); + } + return super.getPosition(); + } + + @Override + public void start() { + BlockPos target = BlockPos.containing(this.wantedX, this.wantedY, this.wantedZ); + FlyingSquirrelEntity.this.requestTravelTo(target, this.speedModifier, "arboreal_wander"); + } + + @Override + public void stop() { + super.stop(); + + if (!FlyingSquirrelEntity.this.isGliding()) { + FlyingSquirrelEntity.this.setWanderCooldown( + 25 + FlyingSquirrelEntity.this.getRandom().nextInt(35) + ); + } + } + + @Nullable + private BlockPos findBestArborealDestination() { + BlockPos origin = FlyingSquirrelEntity.this.blockPosition(); + double heightBias = this.getHeightBias(origin); + + int horizontalRange = Mth.floor(Mth.lerp(heightBias, 24.0D, 30.0D)); + int verticalDown = Mth.floor(Mth.lerp(heightBias, 8.0D, 4.0D)); + int verticalUp = Mth.floor(Mth.lerp(heightBias, 30.0D, 40.0D)); + + BlockPos bestPos = null; + double bestScore = Double.NEGATIVE_INFINITY; + + for (BlockPos candidate : BlockPos.betweenClosed( + origin.offset(-horizontalRange, -verticalDown, -horizontalRange), + origin.offset(horizontalRange, verticalUp, horizontalRange))) { + + if (!FlyingSquirrelEntity.isOpenStandPos(FlyingSquirrelEntity.this.level(), candidate)) { + continue; + } + + if (FlyingSquirrelEntity.this.isAtStandPos(candidate)) { + continue; + } + + boolean nearCanopy = FlyingSquirrelEntity.hasNearbyCanopy( + FlyingSquirrelEntity.this.level(), candidate + ); + boolean nearLog = FlyingSquirrelEntity.isAdjacentToLog( + FlyingSquirrelEntity.this.level(), candidate + ); + + if (!nearCanopy && !nearLog) { + continue; + } + + double dx = candidate.getX() + 0.5D - FlyingSquirrelEntity.this.getX(); + double dy = candidate.getY() - FlyingSquirrelEntity.this.getY(); + double dz = candidate.getZ() + 0.5D - FlyingSquirrelEntity.this.getZ(); + double horizontalDistance = Math.sqrt(dx * dx + dz * dz); + + if (horizontalDistance < 6.0D) { + continue; + } + + double minPreferredRise = Mth.lerp(heightBias, 0.0D, 8.0D); + if (heightBias > 0.15D && dy < minPreferredRise) { + continue; + } + + double score = 0.0D; + + if (nearCanopy) score += 10.0D; + if (nearLog) score += 8.0D; + + score += Math.max(dy, 0.0D) * Mth.lerp(heightBias, 3.0D, 5.5D); + score += Math.min(horizontalDistance, 24.0D) * Mth.lerp(heightBias, 1.1D, 0.9D); + + if (dy <= -4.0D && horizontalDistance >= 10.0D) { + score += 18.0D * (1.0D - heightBias); + } + + if (dy >= 12.0D) { + score += Mth.lerp(heightBias, 10.0D, 18.0D); + } + if (horizontalDistance >= 12.0D) { + score += 12.0D; + } + if (horizontalDistance >= 18.0D) { + score += 10.0D; + } + + if (dy < -2.0D) { + score += dy * Mth.lerp(heightBias, 0.75D, 0.15D); + } + + if (score > bestScore) { + bestScore = score; + bestPos = candidate.immutable(); + } + } + + return bestPos; + } + + private double getHeightBias(BlockPos origin) { + double yBias = Mth.clampedMap(origin.getY(), 80.0D, 170.0D, 1.0D, 0.0D); + if (origin.getY() >= 190) { + yBias = 0.0D; + } + + if (FlyingSquirrelEntity.isGroundEscapeSurface( + FlyingSquirrelEntity.this.level().getBlockState(origin.below()))) { + yBias = Math.min(1.0D, yBias + 0.15D); + } + + return yBias; + } + } + + private static final class ClimbTarget { + private final BlockPos baseStandPos; + private final BlockPos topStandPos; + @Nullable + private final Direction preferredAttachDirection; + + private ClimbTarget(BlockPos baseStandPos, BlockPos topStandPos, @Nullable Direction preferredAttachDirection) { + this.baseStandPos = baseStandPos; + this.topStandPos = topStandPos; + this.preferredAttachDirection = preferredAttachDirection; + } + } + + private class ClimbGoal extends Goal { + @Nullable + private ClimbTarget target; + @Nullable + private Direction activeAttachDirection; + private int repathDelay; + private int climbTicks; + private int approachTicks; + private int searchCooldown; + private int noProgressTicks; + private double lastDistanceToBase; + private boolean climbing; + private int attachDirectionRefreshTick; + + private ClimbGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + boolean favorClimbing = FlyingSquirrelEntity.this.shouldFavorClimbingFromGround(); + + if (this.searchCooldown > 0) { + this.searchCooldown--; + return false; + } + + if (FlyingSquirrelEntity.this.isOrderedToSit() + || FlyingSquirrelEntity.this.isGliding() + || FlyingSquirrelEntity.this.isPickingUpNut() + || !FlyingSquirrelEntity.this.onGround() + || (!favorClimbing && FlyingSquirrelEntity.this.getWanderCooldown() > 30)) { + return false; + } + + this.target = FlyingSquirrelEntity.this.findBestClimbTarget(); + if (this.target != null) { + return true; + } + + this.searchCooldown = favorClimbing ? 10 : 20; + return false; + } + + @Override + public boolean canContinueToUse() { + if (this.target == null + || FlyingSquirrelEntity.this.isGliding() + || FlyingSquirrelEntity.this.isOrderedToSit()) { + return false; + } + + if (this.climbing) { + return this.climbTicks < 200; + } + + return !FlyingSquirrelEntity.this.isAtStandPos(this.target.topStandPos); + } + + @Override + public void start() { + this.repathDelay = 0; + this.climbTicks = 0; + this.approachTicks = 0; + this.searchCooldown = 0; + this.noProgressTicks = 0; + this.lastDistanceToBase = Double.MAX_VALUE; + this.climbing = false; + this.activeAttachDirection = null; + } + + @Override + public void stop() { + if (this.climbing) { + FlyingSquirrelEntity.this.setClimbingTrunk(false); + FlyingSquirrelEntity.this.setNoGravity(false); + } + + this.target = null; + this.repathDelay = 0; + this.climbTicks = 0; + this.approachTicks = 0; + this.noProgressTicks = 0; + this.lastDistanceToBase = Double.MAX_VALUE; + this.climbing = false; + this.activeAttachDirection = null; + this.searchCooldown = 10; + + if (!FlyingSquirrelEntity.this.isGliding()) { + FlyingSquirrelEntity.this.getNavigation().stop(); + } + } + + @Override + public void tick() { + if (this.target == null) { + return; + } + + if (!this.climbing) { + FlyingSquirrelEntity.this.getLookControl().setLookAt( + this.target.topStandPos.getX() + 0.5D, + this.target.topStandPos.getY(), + this.target.topStandPos.getZ() + 0.5D, + 20.0F, + 20.0F + ); + + this.approachTicks++; + + double distanceToBase = Vec3.atBottomCenterOf(this.target.baseStandPos) + .distanceTo(FlyingSquirrelEntity.this.position()); + + boolean closeEnoughToStart = FlyingSquirrelEntity.this.isAtStandPos(this.target.baseStandPos) + || FlyingSquirrelEntity.this.position().distanceToSqr(Vec3.atBottomCenterOf(this.target.baseStandPos)) <= CLIMB_START_DISTANCE_SQR; + + if (closeEnoughToStart) { + this.climbing = true; + this.climbTicks = 0; + this.activeAttachDirection = this.target.preferredAttachDirection; + FlyingSquirrelEntity.this.setClimbingTrunk(true); + return; + } + + if (distanceToBase + 0.15D < this.lastDistanceToBase) { + this.noProgressTicks = 0; + this.lastDistanceToBase = distanceToBase; + } else if (++this.noProgressTicks > CLIMB_NO_PROGRESS_LIMIT + || this.approachTicks > CLIMB_APPROACH_TIMEOUT_TICKS) { + FlyingSquirrelEntity.this.rememberFailedClimbTarget(this.target.topStandPos); + this.target = null; + return; + } + + if (--this.repathDelay <= 0) { + this.repathDelay = 10; + FlyingSquirrelEntity.this.requestTravelTo( + this.target.baseStandPos, + 1.0D, + "climb_approach" + ); + } + + return; + } + + if (++this.climbTicks > 200) { + FlyingSquirrelEntity.this.rememberFailedClimbTarget(this.target.topStandPos); + FlyingSquirrelEntity.this.setClimbingTrunk(false); + FlyingSquirrelEntity.this.setNoGravity(false); + this.target = null; + this.climbing = false; + return; + } + + FlyingSquirrelEntity.this.setClimbingTrunk(true); + FlyingSquirrelEntity.this.setNoGravity(true); + FlyingSquirrelEntity.this.fallDistance = 0.0F; + + double nextY = Math.min( + FlyingSquirrelEntity.this.getY() + 0.24D, + this.target.topStandPos.getY() + ); + + BlockPos climbColumnPos = new BlockPos( + this.target.baseStandPos.getX(), + Mth.floor(nextY), + this.target.baseStandPos.getZ() + ); + + if (!FlyingSquirrelEntity.this.isValidClimbColumnPos( + climbColumnPos, + this.target.preferredAttachDirection + )) { + FlyingSquirrelEntity.this.rememberFailedClimbTarget(this.target.topStandPos); + FlyingSquirrelEntity.this.setClimbingTrunk(false); + FlyingSquirrelEntity.this.setNoGravity(false); + this.target = null; + this.climbing = false; + return; + } + + Vec3 attachPoint = FlyingSquirrelEntity.this.getClimbAttachPoint( + climbColumnPos, + this.activeAttachDirection + ); + + double nextX = Mth.lerp(0.45D, FlyingSquirrelEntity.this.getX(), attachPoint.x); + double nextZ = Mth.lerp(0.45D, FlyingSquirrelEntity.this.getZ(), attachPoint.z); + + FlyingSquirrelEntity.this.setPos(nextX, nextY, nextZ); + FlyingSquirrelEntity.this.setDeltaMovement(Vec3.ZERO); + FlyingSquirrelEntity.this.hasImpulse = true; + + if (this.climbTicks >= this.attachDirectionRefreshTick) { + this.attachDirectionRefreshTick = this.climbTicks + 5; + Direction newDir = FlyingSquirrelEntity.this.findClimbAttachmentDirection( + climbColumnPos, + this.activeAttachDirection + ); + if (newDir != null) { + this.activeAttachDirection = newDir; + } + } + Direction attachDirection = this.activeAttachDirection; + if (attachDirection != null) { + float targetYaw = attachDirection.toYRot(); + FlyingSquirrelEntity.this.setYRot(targetYaw); + FlyingSquirrelEntity.this.yRotO = targetYaw; + FlyingSquirrelEntity.this.yBodyRot = targetYaw; + FlyingSquirrelEntity.this.yBodyRotO = targetYaw; + FlyingSquirrelEntity.this.yHeadRot = targetYaw; + FlyingSquirrelEntity.this.yHeadRotO = targetYaw; + } + + if (FlyingSquirrelEntity.this.getY() >= this.target.topStandPos.getY() - 0.15D) { + FlyingSquirrelEntity.this.setPos( + this.target.topStandPos.getX() + 0.5D, + this.target.topStandPos.getY(), + this.target.topStandPos.getZ() + 0.5D + ); + FlyingSquirrelEntity.this.setDeltaMovement(Vec3.ZERO); + FlyingSquirrelEntity.this.setClimbingTrunk(false); + FlyingSquirrelEntity.this.setNoGravity(false); + + this.target = null; + this.climbing = false; + FlyingSquirrelEntity.this.setWanderCooldown( + 20 + FlyingSquirrelEntity.this.getRandom().nextInt(25) + ); + } + } + } + + @Override + public boolean isPushable() { + return !this.isOnShoulder() && super.isPushable(); + } + + @Override + public void push(Entity entity) { + if (!this.isOnShoulder()) { + super.push(entity); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelNavigation.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelNavigation.java new file mode 100644 index 00000000..db682ba0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelNavigation.java @@ -0,0 +1,427 @@ +package com.craisinlord.antarchy.content.entity.flying_squirrel; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.pathfinder.Path; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +public class FlyingSquirrelNavigation extends GroundPathNavigation { + private static final double MIN_GLIDE_DISTANCE = 10.0D; + private static final double MAX_GLIDE_DISTANCE = 64.0D; + private static final double MIN_GLIDE_HEIGHT = 3.0D; + private static final int LAUNCH_EDGE_SEARCH_RADIUS = 7; + private static final int REPATH_INTERVAL = 10; + + private final FlyingSquirrelEntity squirrel; + @Nullable + private BlockPos requestedTarget; + @Nullable + private BlockPos adjustedTarget; + @Nullable + private String requestedPurpose; + @Nullable + private GlideLaunchPlan glideLaunchPlan; + @Nullable + private BlockPos pathToPosition; + + private double requestedSpeed; + private boolean glidingToLaunch; + private boolean glideStarted; + private int repathDelay; + private int repathFailStreak; + + public FlyingSquirrelNavigation(FlyingSquirrelEntity squirrel, Level level) { + super(squirrel, level); + this.squirrel = squirrel; + this.setCanFloat(true); + } + + boolean requestTravelTo(BlockPos target, double speed, String purpose) { + this.requestedTarget = target.immutable(); + this.requestedPurpose = purpose; + this.requestedSpeed = speed; + this.repathDelay = 0; + + this.adjustedTarget = this.adjustNavigationTarget(this.requestedTarget); + this.glideLaunchPlan = null; + this.glidingToLaunch = false; + this.glideStarted = false; + if (!this.squirrel.isGliding() + && this.squirrel.onGround()) { + + GlideLaunchPlan plan = this.findLaunchPlan(this.adjustedTarget); + if (plan != null + && !this.squirrel.isRecentGlidePath( + Vec3.atBottomCenterOf(plan.launchStandPos), + this.adjustedTarget + ) + && this.shouldGlideBetween( + Vec3.atBottomCenterOf(plan.launchStandPos), + this.adjustedTarget + ) + && this.hasLaunchEdgeToward(plan.launchStandPos, this.adjustedTarget)) { + this.glideLaunchPlan = plan; + this.glidingToLaunch = true; + } + } + + return this.beginGroundOrLaunchMove("request"); + } + + @Override + public boolean moveTo(double x, double y, double z, double speed) { + return this.requestTravelTo(BlockPos.containing(x, y, z), speed, "generic"); + } + + @Override + public boolean moveTo(Entity entity, double speed) { + Path path = this.createPath(entity, 0); + if (path != null) { + return this.moveTo(path, speed); + } else { + this.pathToPosition = entity.blockPosition().immutable(); + this.requestedTarget = this.pathToPosition; + this.adjustedTarget = this.adjustNavigationTarget(this.pathToPosition); + this.requestedPurpose = "generic"; + this.requestedSpeed = speed; + this.glideLaunchPlan = null; + this.glidingToLaunch = false; + this.glideStarted = false; + return true; + } + } + + @Override + @Nullable + public Path createPath(BlockPos pos, int accuracy) { + this.pathToPosition = pos.immutable(); + return super.createPath(this.adjustNavigationTarget(pos), accuracy); + } + + @Override + @Nullable + public Path createPath(Entity entity, int accuracy) { + this.pathToPosition = entity.blockPosition().immutable(); + return super.createPath(entity, accuracy); + } + + @Override + public boolean isStableDestination(BlockPos pos) { + return this.isNavigationStandPos(pos) + || this.isNavigationTransitionPos(pos) + || super.isStableDestination(pos); + } + + @Override + protected boolean canUpdatePath() { + return !this.squirrel.isGliding(); + } + + @Override + public void stop() { + super.stop(); + this.clearTraversal(); + } + + void cancelTraversal() { + super.stop(); + this.clearTraversal(); + } + + @Override + public void tick() { + if (this.requestedTarget == null) { + super.tick(); + return; + } + + if (this.squirrel.isGliding()) { + this.glideStarted = true; + return; + } + if (this.glideStarted) { + this.glideStarted = false; + this.glidingToLaunch = false; + this.glideLaunchPlan = null; + + if (this.adjustedTarget != null && !this.squirrel.isAtStandPos(this.adjustedTarget)) { + this.beginGroundOrLaunchMove("post_glide"); + } else { + this.clearTraversal(); + } + return; + } + if (this.glidingToLaunch && this.glideLaunchPlan != null && this.adjustedTarget != null) { + this.tickGlideApproach(); + return; + } + this.tickGroundNav(); + + if (this.adjustedTarget != null && this.squirrel.isAtStandPos(this.adjustedTarget)) { + this.clearTraversal(); + return; + } + + if (this.repathDelay > 0) { + this.repathDelay--; + } + + if (this.repathDelay <= 0 && (this.isDone() || this.getPath() == null)) { + this.beginGroundOrLaunchMove("repath"); + } + } + + private void tickGlideApproach() { + if (this.glideLaunchPlan == null || this.adjustedTarget == null) { + this.glidingToLaunch = false; + this.beginGroundOrLaunchMove("glide_missing_plan"); + return; + } + + BlockPos launch = this.glideLaunchPlan.launchStandPos; + + if (this.squirrel.isAtStandPos(launch)) { + if (this.hasLaunchEdgeToward(launch, this.adjustedTarget) + && this.shouldGlideBetween(Vec3.atBottomCenterOf(launch), this.adjustedTarget)) { + String reason = this.requestedPurpose == null + ? "direct_navigation" + : "direct_" + this.requestedPurpose; + this.squirrel.startGliding(this.adjustedTarget, reason); + this.glideStarted = true; + return; + } + this.glidingToLaunch = false; + this.glideLaunchPlan = null; + this.beginGroundOrLaunchMove("glide_launch_rejected"); + return; + } + + this.tickGroundNav(); + + if (this.repathDelay > 0) { + this.repathDelay--; + } + + if (this.repathDelay <= 0 && (this.isDone() || this.getPath() == null)) { + this.tryStartMoveToward(launch, this.requestedSpeed, "glide_launch_approach"); + } + } + + private boolean beginGroundOrLaunchMove(String reason) { + BlockPos target = this.glidingToLaunch && this.glideLaunchPlan != null + ? this.glideLaunchPlan.launchStandPos + : this.adjustedTarget; + + if (target == null) { + return false; + } + + return this.tryStartMoveToward(target, this.requestedSpeed, reason); + } + + private void tickGroundNav() { + super.tick(); + this.tickPathToPositionFallback(); + } + + private boolean tryStartMoveToward(BlockPos target, double speed, String reason) { + this.pathToPosition = target.immutable(); + + Path path = super.createPath(target, 0); + if (path != null) { + boolean started = super.moveTo(path, speed); + if (started) { + this.repathFailStreak = 0; + this.repathDelay = REPATH_INTERVAL; + return true; + } + } + this.repathFailStreak++; + this.repathDelay = REPATH_INTERVAL * Math.min(this.repathFailStreak, 4); + this.speedModifier = speed; + return true; + } + + private void tickPathToPositionFallback() { + if (!this.isDone()) { + return; + } + + if (this.pathToPosition == null) { + return; + } + + double threshold = Math.max(this.mob.getBbWidth(), 1.0F); + + if (this.pathToPosition.closerToCenterThan(this.mob.position(), threshold) + || (this.mob.getY() > this.pathToPosition.getY() + && BlockPos.containing(this.pathToPosition.getX(), this.mob.getY(), this.pathToPosition.getZ()) + .closerToCenterThan(this.mob.position(), threshold))) { + this.pathToPosition = null; + return; + } + + this.mob.getMoveControl().setWantedPosition( + this.pathToPosition.getX() + 0.5D, + this.pathToPosition.getY(), + this.pathToPosition.getZ() + 0.5D, + this.speedModifier + ); + } + + private BlockPos adjustNavigationTarget(BlockPos desiredTarget) { + if (this.isNavigationStandPos(desiredTarget) || this.isNavigationTransitionPos(desiredTarget)) { + return desiredTarget.immutable(); + } + + BlockPos adjusted = this.findNearbyNavigationStandPos(desiredTarget, 4, 4); + return adjusted != null ? adjusted : desiredTarget.immutable(); + } + + private boolean isNavigationStandPos(BlockPos pos) { + return FlyingSquirrelEntity.isOpenStandPos(this.level, pos); + } + + private boolean isNavigationTransitionPos(BlockPos pos) { + return FlyingSquirrelEntity.isStandableSurface(this.level.getBlockState(pos.below())) + && FlyingSquirrelEntity.hasNearbyCanopy(this.level, pos); + } + + @Nullable + private BlockPos findNearbyNavigationStandPos(BlockPos targetPos, int horizontalRadius, int verticalRadius) { + BlockPos bestPos = null; + double bestScore = Double.NEGATIVE_INFINITY; + + for (BlockPos candidate : BlockPos.betweenClosed( + targetPos.offset(-horizontalRadius, -verticalRadius, -horizontalRadius), + targetPos.offset(horizontalRadius, verticalRadius, horizontalRadius))) { + + if (!this.isNavigationStandPos(candidate)) { + continue; + } + + double score = -Vec3.atBottomCenterOf(candidate).distanceToSqr(Vec3.atBottomCenterOf(targetPos)); + if (FlyingSquirrelEntity.isAdjacentToLog(this.level, candidate)) { + score += 6.0D; + } + if (FlyingSquirrelEntity.hasNearbyCanopy(this.level, candidate)) { + score += 4.0D; + } + if (candidate.getY() > targetPos.getY()) { + score += (candidate.getY() - targetPos.getY()) * 0.35D; + } + + if (score > bestScore) { + bestScore = score; + bestPos = candidate.immutable(); + } + } + + return bestPos; + } + + private boolean shouldGlideBetween(Vec3 fromPos, BlockPos standPos) { + if (this.squirrel.isGliding()) { + return false; + } + + double dx = standPos.getX() + 0.5D - fromPos.x; + double dz = standPos.getZ() + 0.5D - fromPos.z; + double horizontalDistance = Math.sqrt(dx * dx + dz * dz); + double verticalDrop = fromPos.y - (standPos.getY() + 0.5D); + + return horizontalDistance >= MIN_GLIDE_DISTANCE + && horizontalDistance <= MAX_GLIDE_DISTANCE + && verticalDrop >= MIN_GLIDE_HEIGHT; + } + + @Nullable + private GlideLaunchPlan findLaunchPlan(BlockPos targetStandPos) { + BlockPos origin = this.squirrel.blockPosition(); + GlideLaunchPlan bestPlan = null; + double bestScore = Double.NEGATIVE_INFINITY; + + for (BlockPos candidate : BlockPos.betweenClosed( + origin.offset(-LAUNCH_EDGE_SEARCH_RADIUS, -2, -LAUNCH_EDGE_SEARCH_RADIUS), + origin.offset(LAUNCH_EDGE_SEARCH_RADIUS, 2, LAUNCH_EDGE_SEARCH_RADIUS))) { + + if (!FlyingSquirrelEntity.isOpenStandPos(this.level, candidate)) { + continue; + } + + if (!this.hasLaunchEdgeToward(candidate, targetStandPos)) { + continue; + } + if (!this.squirrel.isAtStandPos(candidate) + && Vec3.atBottomCenterOf(candidate).distanceToSqr(this.squirrel.position()) > 36.0D) { + continue; + } + + if (this.squirrel.isRecentGlidePath(Vec3.atBottomCenterOf(candidate), targetStandPos)) { + continue; + } + + Vec3 launchPos = Vec3.atBottomCenterOf(candidate); + double glideScore = this.squirrel.scoreGlideTargetFrom(launchPos, targetStandPos); + if (glideScore == Double.NEGATIVE_INFINITY) { + continue; + } + + double walkDistance = launchPos.distanceTo(this.squirrel.position()); + double score = glideScore - walkDistance * 1.75D; + if (this.squirrel.isAtStandPos(candidate)) { + score += 3.0D; + } + + if (score > bestScore) { + bestScore = score; + bestPlan = new GlideLaunchPlan(candidate.immutable()); + } + } + + return bestPlan; + } + + private boolean hasLaunchEdgeToward(BlockPos launchStandPos, BlockPos targetStandPos) { + Direction launchDirection = this.getLaunchDirectionToward(launchStandPos, targetStandPos); + BlockPos edgePos = launchStandPos.relative(launchDirection); + return FlyingSquirrelEntity.isOpenAir(this.level, edgePos) + && !FlyingSquirrelEntity.isStandableSurface(this.level.getBlockState(edgePos.below())); + } + + private Direction getLaunchDirectionToward(BlockPos launchStandPos, BlockPos targetStandPos) { + double dx = (targetStandPos.getX() + 0.5D) - (launchStandPos.getX() + 0.5D); + double dz = (targetStandPos.getZ() + 0.5D) - (launchStandPos.getZ() + 0.5D); + + if (Math.abs(dx) >= Math.abs(dz)) { + return dx >= 0.0D ? Direction.EAST : Direction.WEST; + } + + return dz >= 0.0D ? Direction.SOUTH : Direction.NORTH; + } + + private void clearTraversal() { + this.requestedTarget = null; + this.adjustedTarget = null; + this.requestedPurpose = null; + this.requestedSpeed = 0.0D; + this.glideLaunchPlan = null; + this.glidingToLaunch = false; + this.glideStarted = false; + this.repathDelay = 0; + this.repathFailStreak = 0; + this.pathToPosition = null; + } + + static final class GlideLaunchPlan { + final BlockPos launchStandPos; + + GlideLaunchPlan(BlockPos launchStandPos) { + this.launchStandPos = launchStandPos; + } + } +} 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 new file mode 100644 index 00000000..5c72ecf6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java @@ -0,0 +1,113 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +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.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +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 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; + private static final int STRENGTH_BURST_DURATION = 20 * 12; + + private static ResourceLocation rl(String path) { + return new ResourceLocation(Antarchy.MODID, path); + } + + @Override + public void registerGoals(GlimmerEntity entity) { + entity.addGoal(0, new FloatGoal(entity)); + entity.addGoal(5, new WaterAvoidingRandomStrollGoal(entity, 1.1D)); + entity.addGoal(6, new LookAtPlayerGoal(entity, Player.class, 8.0F)); + entity.addGoal(7, new RandomLookAroundGoal(entity)); + } + + @Override + public ResourceLocation modelGeo() { + return rl("geo/ant.geo.json"); + } + + @Override + public ResourceLocation animationFile() { + return rl("animations/ant.animation.json"); + } + + @Override + public ResourceLocation texture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/glimmer_ant.png"); + } + + @Override + public ResourceLocation emissiveTexture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/glimmer_ant_emissive.png"); + } + + @Override + public SoundEvent ambientSound() { + return AntarchySoundEvents.ANT_AMBIENT.get(); + } + + @Override + public SoundEvent hurtSound() { + return AntarchySoundEvents.ANT_HURT.get(); + } + + @Override + public SoundEvent deathSound() { + return AntarchySoundEvents.ANT_HURT.get(); + } + + @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) { + } + + @Override + public void clearPassive(GlimmerEntity entity, Player owner) { + } + + @Override + public int abilityCooldownTicks() { + return ABILITY_COOLDOWN_TICKS; + } + + @Override + public void tickAbilityCheck(GlimmerEntity entity, Player owner) { + if (owner.getLastHurtMobTimestamp() != owner.tickCount) { + return; + } + + LivingEntity target = owner.getLastHurtMob(); + if (!(target instanceof Enemy) || target.getMaxHealth() < LARGE_ENEMY_MIN_HEALTH) { + return; + } + + owner.addEffect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, STRENGTH_BURST_DURATION, 1, false, true, true)); + owner.level().playSound(null, owner.blockPosition(), SoundEvents.PLAYER_ATTACK_STRONG, owner.getSoundSource(), 1.0F, 0.8F); + this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.ant", target.getDisplayName())); + entity.startAbilityCooldown(); + } +} 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 new file mode 100644 index 00000000..e95852e7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java @@ -0,0 +1,140 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.EntityDimensions; +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.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.food.FoodData; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import org.jetbrains.annotations.Nullable; + +public class GlimmerAppleCowBehavior implements GlimmerVariantBehavior { + private static final int SHEAR_REGROW_TICKS = 20 * 60 * 2; + private static final float EXHAUSTION_REDUCTION = 0.25F; + private static final int LOW_FOOD_THRESHOLD = 16; + private static final int ABILITY_COOLDOWN_TICKS = 20 * 120; + + private static ResourceLocation rl(String path) { + return new ResourceLocation(Antarchy.MODID, path); + } + + @Override + public void registerGoals(GlimmerEntity entity) { + entity.addGoal(0, new FloatGoal(entity)); + entity.addGoal(5, new WaterAvoidingRandomStrollGoal(entity, 1.0D)); + entity.addGoal(6, new LookAtPlayerGoal(entity, Player.class, 8.0F)); + entity.addGoal(7, new RandomLookAroundGoal(entity)); + } + + @Override + public ResourceLocation modelGeo() { + return rl("geo/apple_cow.geo.json"); + } + + @Override + public ResourceLocation animationFile() { + return rl("animations/apple_cow.animation.json"); + } + + @Override + public ResourceLocation texture(GlimmerEntity entity) { + return entity.isShearCooldownActive() + ? rl("textures/entity/glimmer/apple_cow_glimmer_sheared.png") + : rl("textures/entity/glimmer/apple_cow_glimmer.png"); + } + + @Override + public ResourceLocation emissiveTexture(GlimmerEntity entity) { + return entity.isShearCooldownActive() + ? rl("textures/entity/glimmer/apple_cow_glimmer_sheared_emissive.png") + : rl("textures/entity/glimmer/apple_cow_glimmer_emissive.png"); + } + + @Override + public SoundEvent ambientSound() { + return SoundEvents.COW_AMBIENT; + } + + @Override + public SoundEvent hurtSound() { + return SoundEvents.COW_HURT; + } + + @Override + public SoundEvent deathSound() { + return SoundEvents.COW_DEATH; + } + + @Override + public EntityDimensions adultDimensions() { + // Matches the real Apple Cow's hitbox (extends vanilla Cow). + return EntityDimensions.scalable(0.9F, 1.4F); + } + + @Override + @Nullable + public InteractionResult onInteract(GlimmerEntity entity, Player player, ItemStack stack, InteractionHand hand) { + if ((entity.isTame() && !entity.isOwnedBy(player)) || entity.isShearCooldownActive() || !stack.is(Items.SHEARS)) { + return null; + } + + if (entity.level().isClientSide) { + return InteractionResult.CONSUME; + } + + entity.startShearCooldown(SHEAR_REGROW_TICKS); + entity.playSound(SoundEvents.SHEEP_SHEAR, 1.0F, 1.0F); + stack.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(hand == InteractionHand.MAIN_HAND + ? net.minecraft.world.entity.EquipmentSlot.MAINHAND + : net.minecraft.world.entity.EquipmentSlot.OFFHAND)); + entity.spawnAtLocation(new net.minecraft.world.item.ItemStack(AntarchyObjects.SPIRIT_APPLE.get()), entity.getBbHeight() * 0.6F); + return InteractionResult.SUCCESS; + } + + @Override + public void tickPassiveEveryTick(GlimmerEntity entity, Player owner) { + FoodData food = owner.getFoodData(); + float current = food.getExhaustionLevel(); + float last = entity.getLastOwnerExhaustion(); + if (last >= 0.0F && current > last) { + owner.causeFoodExhaustion(-(current - last) * EXHAUSTION_REDUCTION); + } + entity.setLastOwnerExhaustion(food.getExhaustionLevel()); + } + + @Override + public void clearPassive(GlimmerEntity entity, Player owner) { + entity.setLastOwnerExhaustion(-1.0F); + } + + @Override + public int abilityCooldownTicks() { + return ABILITY_COOLDOWN_TICKS; + } + + @Override + public void tickAbilityCheck(GlimmerEntity entity, Player owner) { + if (owner.getFoodData().getFoodLevel() > LOW_FOOD_THRESHOLD) { + return; + } + + owner.addEffect(new MobEffectInstance(MobEffects.SATURATION, 20, 1, false, false, true)); + owner.addEffect(new MobEffectInstance(MobEffects.REGENERATION, 20 * 8, 1, false, true, true)); + entity.playSound(SoundEvents.COW_AMBIENT, 1.2F, 0.8F); + this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.apple_cow")); + entity.startAbilityCooldown(); + } +} 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 new file mode 100644 index 00000000..6d74ffc8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java @@ -0,0 +1,95 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.server.MinecraftServer; +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"; + private static final String OWNER_KEY = "Owner"; + private static final String COMPANION_KEY = "Companion"; + + private final Map companionByOwner = new HashMap<>(); + + public static GlimmerCompanionSavedData create() { + return new GlimmerCompanionSavedData(); + } + + public static GlimmerCompanionSavedData load(CompoundTag tag) { + GlimmerCompanionSavedData data = new GlimmerCompanionSavedData(); + for (net.minecraft.nbt.Tag rawEntry : tag.getList(ENTRIES_KEY, net.minecraft.nbt.Tag.TAG_COMPOUND)) { + CompoundTag entryTag = (CompoundTag) rawEntry; + data.companionByOwner.put(entryTag.getUUID(OWNER_KEY), entryTag.getUUID(COMPANION_KEY)); + } + return data; + } + + @Override + public CompoundTag save(CompoundTag tag) { + ListTag entries = new ListTag(); + for (Map.Entry entry : this.companionByOwner.entrySet()) { + CompoundTag entryTag = new CompoundTag(); + entryTag.putUUID(OWNER_KEY, entry.getKey()); + entryTag.putUUID(COMPANION_KEY, entry.getValue()); + entries.add(entryTag); + } + tag.put(ENTRIES_KEY, entries); + return tag; + } + + private static GlimmerCompanionSavedData get(MinecraftServer server) { + return server.overworld().getDataStorage().computeIfAbsent( + GlimmerCompanionSavedData::load, + GlimmerCompanionSavedData::create, + ID + ); + } + + /** + * 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); + data.setDirty(); + + if (previous == null || previous.equals(newCompanion)) { + return; + } + + for (ServerLevel level : server.getAllLevels()) { + Entity entity = level.getEntity(previous); + if (entity instanceof GlimmerEntity glimmer) { + glimmer.setTame(false); + glimmer.setOwnerUUID(null); + return; + } + } + } + + /** + * 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))) { + data.companionByOwner.remove(owner); + data.setDirty(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java new file mode 100644 index 00000000..4542d67d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java @@ -0,0 +1,306 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.bloodglass.BloodglassAccess; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.core.animation.RawAnimation; + +public class GlimmerElkaBehavior implements GlimmerVariantBehavior { + private static final int PASSIVE_REFRESH_DURATION = 20 * 4; + private static final int WARD_AMPLIFIER = 1; + private static final int ABILITY_COOLDOWN_TICKS = 20 * 60; + private static final int CRY_ANIM_TICKS = 40; + private static final double SHOCKWAVE_RADIUS = 6.0D; + private static final double SHOCKWAVE_KNOCKBACK = 1.3D; + private static final float SHOCKWAVE_DAMAGE = 8.0F; + private static final int IDLE_ANIMATION_CYCLE_TICKS = 60; + private static final int QUIRK_ANIMATION_TICKS = 40; + private static final int QUIRK_CHANCE = 60; + private static final int SIT_MIN_TICKS = 20 * 60; + private static final int SIT_MAX_TICKS = 20 * 60 * 3; + private static final int SIT_COOLDOWN_TICKS = 20 * 60 * 6; + private static final int SIT_CHECK_CHANCE_SHADE = 300; + private static final int SIT_CHECK_CHANCE_OPEN = 1200; + private static final double FOLLOW_BREAK_SIT_DISTANCE_SQR = 81.0D; + private static final RawAnimation ELKA_WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation ELKA_IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation ELKA_SIT_IDLE_ANIM = RawAnimation.begin().thenLoop("sit_idle"); + private static final RawAnimation ELKA_QUIRK_ANIM = RawAnimation.begin().thenPlay("quirk"); + private static final RawAnimation ELKA_QUIRK_2_ANIM = RawAnimation.begin().thenPlay("quirk_2"); + private static final RawAnimation ELKA_QUIRK_3_ANIM = RawAnimation.begin().thenPlay("quirk_3"); + + private static ResourceLocation rl(String path) { + return new ResourceLocation(Antarchy.MODID, path); + } + + @Override + public void registerGoals(GlimmerEntity entity) { + entity.addGoal(0, new FloatGoal(entity)); + } + + @Override + public ResourceLocation modelGeo() { + return rl("geo/elka.geo.json"); + } + + @Override + public ResourceLocation animationFile() { + return rl("animations/elka.animation.json"); + } + + @Override + public ResourceLocation texture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/elka_glimmer.png"); + } + + @Override + public ResourceLocation emissiveTexture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/elka_glimmer_emissive.png"); + } + + @Override + public SoundEvent ambientSound() { + return SoundEvents.PANDA_AMBIENT; + } + + @Override + public SoundEvent hurtSound() { + return SoundEvents.PANDA_BITE; + } + + @Override + public SoundEvent deathSound() { + return SoundEvents.PANDA_DEATH; + } + + @Override + public EntityDimensions adultDimensions() { + return EntityDimensions.scalable(2.2F, 3.5F); + } + + @Override + public EntityDimensions babyDimensions() { + return EntityDimensions.scalable(1.0F, 1.5F); + } + + @Override + public void tickPassive(GlimmerEntity entity, Player owner) { + owner.addEffect(new MobEffectInstance(AntarchyObjects.BLOODGLASS_WARD.get(), PASSIVE_REFRESH_DURATION, WARD_AMPLIFIER, false, false, true)); + } + + @Override + public void tickPassiveEveryTick(GlimmerEntity entity, Player owner) { + this.tickIdleState(entity); + + if (!(owner instanceof BloodglassAccess access)) { + return; + } + + long lostNow = access.antarchy$getArmorShieldLostCount() + access.antarchy$getAppleShieldLostCount(); + long lastLost = entity.getLastOwnerShieldLostCount(); + if (lastLost >= 0L && lostNow > lastLost && !entity.isAbilityOnCooldown()) { + this.shatterWard(entity, owner); + } + entity.setLastOwnerShieldLostCount(lostNow); + } + + @Override + public void clearPassive(GlimmerEntity entity, Player owner) { + entity.setLastOwnerShieldLostCount(-1L); + this.stopSitting(entity); + } + + @Override + public int abilityCooldownTicks() { + return ABILITY_COOLDOWN_TICKS; + } + + @Override + @Nullable + public RawAnimation movingAnimation(GlimmerEntity entity) { + return ELKA_WALK_ANIM; + } + + @Override + @Nullable + public RawAnimation idleAnimation(GlimmerEntity entity) { + if (entity.getElkaIdleQuirkTicks() > 0) { + return switch (entity.getElkaIdleQuirkVariant()) { + case 1 -> ELKA_QUIRK_2_ANIM; + case 2 -> ELKA_QUIRK_3_ANIM; + default -> ELKA_QUIRK_ANIM; + }; + } + if (entity.isElkaIdleSitting()) { + return ELKA_SIT_IDLE_ANIM; + } + return ELKA_IDLE_ANIM; + } + + @Override + @Nullable + public software.bernie.geckolib.core.animation.RawAnimation abilityAnimation() { + return software.bernie.geckolib.core.animation.RawAnimation.begin().thenPlay("cry"); + } + + private void shatterWard(GlimmerEntity entity, Player owner) { + entity.playAbilityAnimation(CRY_ANIM_TICKS); + entity.playSound(SoundEvents.PANDA_CANT_BREED, 1.2F, 0.7F); + entity.level().playSound(null, entity.blockPosition(), SoundEvents.GLASS_BREAK, entity.getSoundSource(), 1.0F, 0.6F); + + AABB area = owner.getBoundingBox().inflate(SHOCKWAVE_RADIUS); + for (Entity nearby : owner.level().getEntities(owner, area)) { + if (nearby instanceof Projectile projectile) { + Vec3 away = projectile.position().subtract(owner.position()).normalize(); + projectile.setDeltaMovement(away.scale(1.5D)); + continue; + } + + if (nearby instanceof LivingEntity living && (nearby instanceof Enemy || living.getLastHurtByMob() == owner)) { + if (nearby instanceof Enemy) { + living.hurt(owner.damageSources().mobAttack(entity), SHOCKWAVE_DAMAGE); + } + Vec3 away = living.position().subtract(owner.position()); + double horizontalDistance = Math.max(0.1D, away.horizontalDistance()); + living.knockback(SHOCKWAVE_KNOCKBACK, -away.x / horizontalDistance, -away.z / horizontalDistance); + } + } + + this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.elka")); + entity.startAbilityCooldown(); + } + + private void tickIdleState(GlimmerEntity entity) { + int quirkTicks = entity.getElkaIdleQuirkTicks(); + if (quirkTicks > 0) { + entity.setElkaIdleQuirkTicks(quirkTicks - 1); + } + + if (entity.isElkaIdleSitting()) { + if (!this.canRemainSitting(entity)) { + this.stopSitting(entity); + return; + } + + int sitTicks = entity.getElkaIdleSitTicksRemaining(); + if (sitTicks > 0) { + entity.setElkaIdleSitTicksRemaining(sitTicks - 1); + if (sitTicks - 1 <= 0) { + this.stopSitting(entity); + } + } + return; + } + + if (entity.getElkaIdleSitCooldownTicks() > 0) { + entity.setElkaIdleSitCooldownTicks(entity.getElkaIdleSitCooldownTicks() - 1); + } + + if (this.canStartSitting(entity)) { + int chance = this.isNearShade(entity) ? SIT_CHECK_CHANCE_SHADE : SIT_CHECK_CHANCE_OPEN; + if (entity.getElkaIdleSitCooldownTicks() <= 0 && entity.getRandom().nextInt(chance) == 0) { + this.startSitting(entity); + return; + } + } + + this.tickIdleQuirk(entity); + } + + private void tickIdleQuirk(GlimmerEntity entity) { + if (entity.getElkaIdleQuirkTicks() > 0 + || entity.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D + || entity.getNavigation().isInProgress() + || entity.getTarget() != null + || entity.isFollowingOwner() && entity.getOwner() != null && entity.distanceToSqr(entity.getOwner()) > 9.0D) { + entity.setElkaIdleAnimationCycleTicks(0); + return; + } + + entity.setElkaIdleAnimationCycleTicks(entity.getElkaIdleAnimationCycleTicks() + 1); + if (entity.getElkaIdleAnimationCycleTicks() < IDLE_ANIMATION_CYCLE_TICKS) { + return; + } + entity.setElkaIdleAnimationCycleTicks(0); + + if (entity.getRandom().nextInt(QUIRK_CHANCE) != 0) { + return; + } + + entity.setElkaIdleQuirkTicks(QUIRK_ANIMATION_TICKS); + if (entity.isElkaIdleSitting()) { + entity.setElkaIdleQuirkVariant(2); + } else { + entity.setElkaIdleQuirkVariant(entity.getRandom().nextBoolean() ? 0 : 1); + } + } + + private void startSitting(GlimmerEntity entity) { + entity.setElkaIdleSitting(true); + entity.setElkaIdleSitTicksRemaining(Mth.nextInt(entity.getRandom(), SIT_MIN_TICKS, SIT_MAX_TICKS)); + entity.getNavigation().stop(); + entity.setDeltaMovement(0.0D, entity.getDeltaMovement().y, 0.0D); + entity.setElkaIdleAnimationCycleTicks(0); + } + + private void stopSitting(GlimmerEntity entity) { + if (!entity.isElkaIdleSitting()) { + return; + } + entity.setElkaIdleSitting(false); + entity.setElkaIdleSitTicksRemaining(0); + entity.setElkaIdleSitCooldownTicks(SIT_COOLDOWN_TICKS); + entity.setElkaIdleAnimationCycleTicks(0); + } + + private boolean canStartSitting(GlimmerEntity entity) { + if (entity.isOrderedToSit() || !entity.onGround() || entity.isInWaterOrBubble() || entity.isOnFire()) { + return false; + } + if (entity.getTarget() != null || entity.getNavigation().isInProgress() || entity.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D) { + return false; + } + if (entity.isFollowingOwner() && entity.getOwner() != null && entity.distanceToSqr(entity.getOwner()) > 9.0D) { + return false; + } + return true; + } + + private boolean canRemainSitting(GlimmerEntity entity) { + if (entity.isOrderedToSit() || !entity.onGround() || entity.isInWaterOrBubble() || entity.isOnFire() || entity.getTarget() != null) { + return false; + } + if (entity.isFollowingOwner() && entity.getOwner() != null && entity.distanceToSqr(entity.getOwner()) > FOLLOW_BREAK_SIT_DISTANCE_SQR) { + return false; + } + return entity.hurtTime <= 0; + } + + private boolean isNearShade(GlimmerEntity entity) { + BlockPos base = entity.blockPosition(); + for (BlockPos pos : BlockPos.betweenClosed(base.offset(-3, -1, -3), base.offset(3, 3, 3))) { + if (entity.level().getBlockState(pos).is(BlockTags.LEAVES)) { + return true; + } + } + return false; + } +} 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 new file mode 100644 index 00000000..0c87d8f1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java @@ -0,0 +1,699 @@ +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.client.particle.GlimmerParticles; +import com.craisinlord.antarchy.Antarchy; +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; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.sounds.SoundEvent; +import net.minecraft.util.Mth; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageTypes; +import net.minecraft.tags.DamageTypeTags; +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.MobSpawnType; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.phys.shapes.VoxelShape; +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 GlimmerEntity extends TamableAnimal implements GeoEntity { + private static final ResourceKey GLIMMERING_POOLS = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "glimmering_pools") + ); + 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 FUNGAL_OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "fungal_ouranwood_forest") + ); + private static final ResourceKey ELYTHIA_MEADOW = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "elythia_meadow") + ); + private static final ResourceKey PEACH_FOREST = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "peach_forest") + ); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + + private static final EntityDataAccessor VARIANT = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor SHEAR_COOLDOWN = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor FADE_TICKS = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor FOLLOWING = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor ABILITY_COOLDOWN = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor GROWTH_SCALE = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.FLOAT); + private static final EntityDataAccessor ABILITY_ANIM_TICKS = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ELKA_IDLE_SITTING = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor ELKA_IDLE_QUIRK_TICKS = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ELKA_IDLE_QUIRK_VARIANT = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + + public static final int FADE_DURATION_TICKS = 40; + private static final int PASSIVE_RANGE = 16; + private static final int PASSIVE_EFFECT_REFRESH_TICKS = 60; + + private static final String VARIANT_KEY = "GlimmerVariant"; + private static final String SHEAR_COOLDOWN_KEY = "ShearCooldown"; + private static final String VARIANT_LOCKED_KEY = "VariantLocked"; + private static final String FOLLOWING_KEY = "GlimmerFollowing"; + private static final String ABILITY_COOLDOWN_KEY = "AbilityCooldown"; + private static final String ELKA_IDLE_SITTING_KEY = "ElkaIdleSitting"; + private static final String ELKA_IDLE_SIT_TICKS_KEY = "ElkaIdleSitTicks"; + private static final String ELKA_IDLE_SIT_COOLDOWN_KEY = "ElkaIdleSitCooldown"; + private static final String ELKA_IDLE_QUIRK_TICKS_KEY = "ElkaIdleQuirkTicks"; + private static final String ELKA_IDLE_QUIRK_VARIANT_KEY = "ElkaIdleQuirkVariant"; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private boolean variantLocked; + private float lastOwnerExhaustion = -1.0F; + private long lastOwnerShieldLostCount = -1L; + private int elkaIdleSitTicksRemaining; + private int elkaIdleSitCooldownTicks = 20 * 60 * 6; + private int elkaIdleAnimationCycleTicks; + + public GlimmerEntity(EntityType entityType, Level level) { + super(entityType, level); + this.noPhysics = true; + this.setInvulnerable(true); + } + + public static AttributeSupplier.Builder createAttributes() { + return TamableAnimal.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.glimmerHealth()) + .add(Attributes.ATTACK_DAMAGE, 1.0D) + .add(Attributes.MOVEMENT_SPEED, 0.3D) + .add(Attributes.FOLLOW_RANGE, 24.0D); + } + + @Override + public boolean isPushable() { + return false; + } + + @Override + public void push(Entity entity) { + // no-op: Glimmers pass through other entities + } + + @Override + public boolean isInvulnerableTo(DamageSource damageSource) { + return !damageSource.is(DamageTypeTags.BYPASSES_INVULNERABILITY) && !damageSource.is(DamageTypes.GENERIC); + } + + @Override + public int getMaxHeadYRot() { + return this.getVariant() == GlimmerVariant.FROG ? 5 : super.getMaxHeadYRot(); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(VARIANT, GlimmerVariant.APPLE_COW.ordinal()); + this.entityData.define(SHEAR_COOLDOWN, 0); + this.entityData.define(FADE_TICKS, 0); + this.entityData.define(FOLLOWING, true); + this.entityData.define(ABILITY_COOLDOWN, 0); + this.entityData.define(GROWTH_SCALE, 1.0F); + this.entityData.define(ABILITY_ANIM_TICKS, 0); + this.entityData.define(ELKA_IDLE_SITTING, false); + this.entityData.define(ELKA_IDLE_QUIRK_TICKS, 0); + this.entityData.define(ELKA_IDLE_QUIRK_VARIANT, 0); + } + + public void playAbilityAnimation(int ticks) { + 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); + } + + public float getFadeAlpha(float partialTick) { + int ticks = this.getFadeTicks(); + if (ticks <= 0) { + return 1.0F; + } + return Mth.clamp((ticks - partialTick) / (float) FADE_DURATION_TICKS, 0.0F, 1.0F); + } + + public boolean isFollowingOwner() { + return this.entityData.get(FOLLOWING); + } + + public boolean isAbilityOnCooldown() { + return this.entityData.get(ABILITY_COOLDOWN) > 0; + } + + public void startAbilityCooldown() { + this.entityData.set(ABILITY_COOLDOWN, this.getVariant().getBehavior().abilityCooldownTicks()); + } + + public void setAbilityCooldown(int ticks) { + this.entityData.set(ABILITY_COOLDOWN, Math.max(0, ticks)); + } + + public float getAbilityCooldownFraction(float partialTick) { + int max = this.getVariant().getBehavior().abilityCooldownTicks(); + if (max <= 0) { + return 0.0F; + } + int ticks = this.entityData.get(ABILITY_COOLDOWN); + return Mth.clamp((ticks - partialTick) / (float) max, 0.0F, 1.0F); + } + + public float getLastOwnerExhaustion() { + return this.lastOwnerExhaustion; + } + + public void setLastOwnerExhaustion(float value) { + this.lastOwnerExhaustion = value; + } + + public long getLastOwnerShieldLostCount() { + return this.lastOwnerShieldLostCount; + } + + public void setLastOwnerShieldLostCount(long value) { + this.lastOwnerShieldLostCount = value; + } + + public float getGrowthScale() { + return this.entityData.get(GROWTH_SCALE); + } + + public void setGrowthScale(float scale) { + this.entityData.set(GROWTH_SCALE, scale); + this.refreshDimensions(); + } + + public boolean isElkaIdleSitting() { + return this.entityData.get(ELKA_IDLE_SITTING); + } + + public void setElkaIdleSitting(boolean sitting) { + this.entityData.set(ELKA_IDLE_SITTING, sitting); + } + + public int getElkaIdleQuirkTicks() { + return this.entityData.get(ELKA_IDLE_QUIRK_TICKS); + } + + public void setElkaIdleQuirkTicks(int ticks) { + this.entityData.set(ELKA_IDLE_QUIRK_TICKS, Math.max(0, ticks)); + } + + public int getElkaIdleQuirkVariant() { + return this.entityData.get(ELKA_IDLE_QUIRK_VARIANT); + } + + public void setElkaIdleQuirkVariant(int variant) { + this.entityData.set(ELKA_IDLE_QUIRK_VARIANT, Math.max(0, variant)); + } + + public int getElkaIdleSitTicksRemaining() { + return this.elkaIdleSitTicksRemaining; + } + + public void setElkaIdleSitTicksRemaining(int ticks) { + this.elkaIdleSitTicksRemaining = Math.max(0, ticks); + } + + public int getElkaIdleSitCooldownTicks() { + return this.elkaIdleSitCooldownTicks; + } + + public void setElkaIdleSitCooldownTicks(int ticks) { + this.elkaIdleSitCooldownTicks = Math.max(0, ticks); + } + + public int getElkaIdleAnimationCycleTicks() { + return this.elkaIdleAnimationCycleTicks; + } + + public void setElkaIdleAnimationCycleTicks(int ticks) { + this.elkaIdleAnimationCycleTicks = Math.max(0, ticks); + } + + private void cycleMovementState(Player player) { + if (this.isOrderedToSit()) { + this.setOrderedToSit(false); + this.entityData.set(FOLLOWING, true); + player.displayClientMessage(Component.translatable("entity.antarchy.glimmer.set_follow"), true); + } else if (this.isFollowingOwner()) { + this.entityData.set(FOLLOWING, false); + player.displayClientMessage(Component.translatable("entity.antarchy.glimmer.set_wander"), true); + } else { + this.setOrderedToSit(true); + this.getNavigation().stop(); + player.displayClientMessage(Component.translatable("entity.antarchy.glimmer.set_sit"), true); + } + } + + public GlimmerVariant getVariant() { + int ordinal = Mth.clamp(this.entityData.get(VARIANT), 0, GlimmerVariant.values().length - 1); + return GlimmerVariant.values()[ordinal]; + } + + public void setVariant(GlimmerVariant variant) { + this.entityData.set(VARIANT, variant.ordinal()); + } + + public void lockVariant(GlimmerVariant variant) { + this.setVariant(variant); + this.variantLocked = true; + } + + @Override + public void onSyncedDataUpdated(EntityDataAccessor key) { + super.onSyncedDataUpdated(key); + if (VARIANT.equals(key)) { + this.refreshDimensions(); + if (!this.level().isClientSide) { + this.goalSelector.removeAllGoals(goal -> true); + this.targetSelector.removeAllGoals(goal -> true); + this.registerGoals(); + } + } + } + + @Override + public EntityDimensions getDimensions(Pose pose) { + 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); + } + + @Override + protected void ageBoundaryReached() { + super.ageBoundaryReached(); + this.refreshDimensions(); + } + + public boolean isShearCooldownActive() { + return this.entityData.get(SHEAR_COOLDOWN) > 0; + } + + public void startShearCooldown(int ticks) { + this.entityData.set(SHEAR_COOLDOWN, ticks); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new net.minecraft.world.entity.ai.goal.SitWhenOrderedToGoal(this)); + this.goalSelector.addGoal(3, new GlimmerFollowOwnerGoal(this, this.getVariant().getBehavior().followSpeedModifier())); + this.getVariant().getBehavior().registerGoals(this); + } + + public void addGoal(int priority, Goal goal) { + this.goalSelector.addGoal(priority, goal); + } + + public void addTargetGoal(int priority, Goal goal) { + this.targetSelector.addGoal(priority, goal); + } + + @Override + @Nullable + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return null; + } + + @Override + public boolean isFood(ItemStack stack) { + return false; + } + + @Override + public boolean doHurtTarget(Entity target) { + boolean hurt = super.doHurtTarget(target); + if (hurt) { + this.getVariant().getBehavior().onHurtTarget(this, target); + } + return hurt; + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + + if (!this.isTame() && stack.is(AntarchyObjects.SPIRIT_APPLE.get())) { + return this.tameWithSpiritApple(player, hand, stack); + } + + if (this.isTame() && this.isOwnedBy(player) && stack.is(net.minecraft.world.item.Items.GLASS_BOTTLE)) { + return this.captureInBottle(player, hand, stack); + } + + if (this.isTame() && this.isOwnedBy(player) && stack.isEmpty() && !player.isSecondaryUseActive()) { + if (!this.level().isClientSide) { + this.cycleMovementState(player); + } + return InteractionResult.SUCCESS; + } + + InteractionResult variantResult = this.getVariant().getBehavior().onInteract(this, player, stack, hand); + if (variantResult != null) { + return variantResult; + } + + return super.mobInteract(player, hand); + } + + private InteractionResult tameWithSpiritApple(Player player, InteractionHand hand, ItemStack stack) { + if (this.level().isClientSide) { + return InteractionResult.CONSUME; + } + + this.usePlayerItem(player, hand, stack); + this.tame(player); + this.setOrderedToSit(false); + this.level().broadcastEntityEvent(this, (byte) 7); + GlimmerParticles.tickBurst(this); + + if (this.level() instanceof ServerLevel serverLevel) { + GlimmerCompanionSavedData.replaceCompanion(serverLevel.getServer(), player.getUUID(), this.getUUID()); + } + + if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { + AntarchyAdvancements.award(serverPlayer, this.getVariant().tameAdvancementId()); + } + + return InteractionResult.SUCCESS; + } + + private InteractionResult captureInBottle(Player player, InteractionHand hand, ItemStack stack) { + if (this.level().isClientSide) { + return InteractionResult.CONSUME; + } + + ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(this.getVariant(), this.entityData.get(ABILITY_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); + + if (this.level() instanceof ServerLevel serverLevel) { + GlimmerCompanionSavedData.clearCompanion(serverLevel.getServer(), player.getUUID(), this.getUUID()); + } + + this.discard(); + return InteractionResult.SUCCESS; + } + + @Override + @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); + if (!this.variantLocked) { + this.setVariant(selectNaturalVariant(level, this.blockPosition())); + this.variantLocked = true; + } + return result; + } + + private GlimmerVariant selectNaturalVariant(ServerLevelAccessor level, BlockPos pos) { + Holder biome = level.getBiome(pos); + if (biome.is(GLIMMERING_POOLS)) { + GlimmerVariant[] poolVariants = new GlimmerVariant[] { + GlimmerVariant.FROG, + GlimmerVariant.OURANWOOD_DEER, + GlimmerVariant.APPLE_COW + }; + return poolVariants[this.random.nextInt(poolVariants.length)]; + } + if (biome.is(OURANWOOD_FOREST) || biome.is(SPARSE_OURANWOOD_FOREST) || biome.is(FUNGAL_OURANWOOD_FOREST)) { + GlimmerVariant[] forestVariants = new GlimmerVariant[] { + GlimmerVariant.FROG, + GlimmerVariant.OURANWOOD_DEER + }; + return forestVariants[this.random.nextInt(forestVariants.length)]; + } + if (biome.is(ELYTHIA_MEADOW)) { + return GlimmerVariant.APPLE_COW; + } + if (biome.is(PEACH_FOREST)) { + return GlimmerVariant.ELKA; + } + 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)) { + return false; + } + Holder biome = level.getBiome(pos); + if (biome.is(GLIMMERING_POOLS)) { + return true; + } + return level.getLevel().isNight(); + } + + @Override + public void tick() { + super.tick(); + + this.clampBodyToHeadRotation(); + GlimmerParticles.tickAmbient(this, this.getDeltaMovement().horizontalDistanceSqr() > 0.01D); + + if (!this.level().isClientSide) { + int fadeTicks = this.entityData.get(FADE_TICKS); + if (this.isTame() || this.level().getBiome(this.blockPosition()).is(GLIMMERING_POOLS)) { + if (fadeTicks > 0) { + this.entityData.set(FADE_TICKS, 0); + } + } else if (fadeTicks > 0 || this.level().isDay()) { + if (fadeTicks <= 0) { + fadeTicks = FADE_DURATION_TICKS; + } + fadeTicks--; + this.entityData.set(FADE_TICKS, fadeTicks); + if (fadeTicks <= 0) { + this.discard(); + return; + } + } + + int shearCooldown = this.entityData.get(SHEAR_COOLDOWN); + if (shearCooldown > 0) { + this.entityData.set(SHEAR_COOLDOWN, shearCooldown - 1); + } + + this.applyGroundSupport(); + this.getVariant().getBehavior().customTick(this); + this.tickAbilitiesAndPassive(); + this.tickGrowthDecay(); + } + } + + private void tickAbilitiesAndPassive() { + int cooldown = this.entityData.get(ABILITY_COOLDOWN); + if (cooldown > 0) { + this.entityData.set(ABILITY_COOLDOWN, cooldown - 1); + } + + int animTicks = this.entityData.get(ABILITY_ANIM_TICKS); + if (animTicks > 0) { + this.entityData.set(ABILITY_ANIM_TICKS, animTicks - 1); + } + + if (!this.isTame() || !(this.getOwner() instanceof Player owner)) { + return; + } + + boolean nearby = owner.level() == this.level() + && this.distanceToSqr(owner) <= (double) (PASSIVE_RANGE * PASSIVE_RANGE); + if (!nearby) { + this.getVariant().getBehavior().clearPassive(this, owner); + return; + } + + if (this.tickCount % PASSIVE_EFFECT_REFRESH_TICKS == 0) { + this.getVariant().getBehavior().tickPassive(this, owner); + } + this.getVariant().getBehavior().tickPassiveEveryTick(this, owner); + + if (cooldown <= 0) { + this.getVariant().getBehavior().tickAbilityCheck(this, owner); + } + } + + private void tickGrowthDecay() { + float scale = this.getGrowthScale(); + if (scale == 1.0F) { + return; + } + double decayPerTick = this.getVariant().getBehavior().growthDecayPerTick(); + if (decayPerTick <= 0.0D) { + return; + } + float next = scale > 1.0F + ? (float) Math.max(1.0D, scale - decayPerTick) + : (float) Math.min(1.0D, scale + decayPerTick); + if (next != scale) { + this.setGrowthScale(next); + } + } + + /** + * 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); + if (Math.abs(delta) > maxYaw) { + this.yBodyRot = Mth.wrapDegrees(this.yHeadRot - Math.copySign(maxYaw, delta)); + } + } + + private void applyGroundSupport() { + BlockPos below = BlockPos.containing(this.getX(), this.getY() - 0.05D, this.getZ()); + VoxelShape shape = this.level().getBlockState(below).getCollisionShape(this.level(), below); + if (!shape.isEmpty()) { + double top = below.getY() + shape.max(Direction.Axis.Y); + if (this.getY() <= top + 0.2D && this.getDeltaMovement().y <= 0.0D) { + this.setPos(this.getX(), top, this.getZ()); + this.setDeltaMovement(this.getDeltaMovement().x, 0.0D, this.getDeltaMovement().z); + this.setOnGround(true); + return; + } + } + this.setOnGround(false); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putString(VARIANT_KEY, this.getVariant().name()); + tag.putInt(SHEAR_COOLDOWN_KEY, this.entityData.get(SHEAR_COOLDOWN)); + tag.putBoolean(VARIANT_LOCKED_KEY, this.variantLocked); + tag.putBoolean(FOLLOWING_KEY, this.isFollowingOwner()); + tag.putInt(ABILITY_COOLDOWN_KEY, this.entityData.get(ABILITY_COOLDOWN)); + tag.putBoolean(ELKA_IDLE_SITTING_KEY, this.isElkaIdleSitting()); + tag.putInt(ELKA_IDLE_SIT_TICKS_KEY, this.elkaIdleSitTicksRemaining); + tag.putInt(ELKA_IDLE_SIT_COOLDOWN_KEY, this.elkaIdleSitCooldownTicks); + tag.putInt(ELKA_IDLE_QUIRK_TICKS_KEY, this.getElkaIdleQuirkTicks()); + tag.putInt(ELKA_IDLE_QUIRK_VARIANT_KEY, this.getElkaIdleQuirkVariant()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.contains(VARIANT_KEY)) { + this.setVariant(GlimmerVariant.byName(tag.getString(VARIANT_KEY))); + } + this.entityData.set(SHEAR_COOLDOWN, tag.getInt(SHEAR_COOLDOWN_KEY)); + this.variantLocked = tag.getBoolean(VARIANT_LOCKED_KEY); + this.entityData.set(FOLLOWING, !tag.contains(FOLLOWING_KEY) || tag.getBoolean(FOLLOWING_KEY)); + this.entityData.set(ABILITY_COOLDOWN, tag.getInt(ABILITY_COOLDOWN_KEY)); + this.entityData.set(ELKA_IDLE_SITTING, tag.getBoolean(ELKA_IDLE_SITTING_KEY)); + this.elkaIdleSitTicksRemaining = tag.getInt(ELKA_IDLE_SIT_TICKS_KEY); + this.elkaIdleSitCooldownTicks = tag.contains(ELKA_IDLE_SIT_COOLDOWN_KEY) ? tag.getInt(ELKA_IDLE_SIT_COOLDOWN_KEY) : 20 * 60 * 6; + this.entityData.set(ELKA_IDLE_QUIRK_TICKS, tag.getInt(ELKA_IDLE_QUIRK_TICKS_KEY)); + this.entityData.set(ELKA_IDLE_QUIRK_VARIANT, tag.getInt(ELKA_IDLE_QUIRK_VARIANT_KEY)); + } + + @Override + protected SoundEvent getAmbientSound() { + return this.getVariant().getBehavior().ambientSound(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return this.getVariant().getBehavior().hurtSound(); + } + + @Override + protected SoundEvent getDeathSound() { + return this.getVariant().getBehavior().deathSound(); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.entityData.get(ABILITY_ANIM_TICKS) > 0) { + RawAnimation abilityAnim = this.getVariant().getBehavior().abilityAnimation(); + if (abilityAnim != null) { + return state.setAndContinue(abilityAnim); + } + } + if (state.isMoving()) { + RawAnimation movingAnim = this.getVariant().getBehavior().movingAnimation(this); + return state.setAndContinue(movingAnim != null ? movingAnim : WALK_ANIM); + } + RawAnimation idleAnim = this.getVariant().getBehavior().idleAnimation(this); + return state.setAndContinue(idleAnim != null ? idleAnim : IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFollowOwnerGoal.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFollowOwnerGoal.java new file mode 100644 index 00000000..69a3e73e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFollowOwnerGoal.java @@ -0,0 +1,77 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.goal.Goal; + +import java.util.EnumSet; + +public class GlimmerFollowOwnerGoal extends Goal { + private static final float START_DISTANCE = 8.0F; + private static final float STOP_DISTANCE = 3.0F; + private static final float TELEPORT_DISTANCE = 20.0F; + + private final GlimmerEntity glimmer; + private final double speedModifier; + private LivingEntity owner; + + public GlimmerFollowOwnerGoal(GlimmerEntity glimmer, double speedModifier) { + this.glimmer = glimmer; + this.speedModifier = speedModifier; + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + if (!this.glimmer.isTame() || this.glimmer.isOrderedToSit() || !this.glimmer.isFollowingOwner()) { + return false; + } + + LivingEntity owner = this.glimmer.getOwner(); + if (owner == null || owner.isSpectator()) { + return false; + } + + if (this.glimmer.distanceToSqr(owner) < START_DISTANCE * START_DISTANCE) { + return false; + } + + this.owner = owner; + return true; + } + + @Override + public boolean canContinueToUse() { + if (this.owner == null || !this.glimmer.isTame() || this.glimmer.isOrderedToSit() || !this.glimmer.isFollowingOwner()) { + return false; + } + return this.glimmer.distanceToSqr(this.owner) > STOP_DISTANCE * STOP_DISTANCE; + } + + @Override + public void start() { + this.glimmer.getNavigation().stop(); + } + + @Override + public void stop() { + this.owner = null; + this.glimmer.getNavigation().stop(); + } + + @Override + public void tick() { + if (this.owner == null) { + return; + } + + this.glimmer.getLookControl().setLookAt(this.owner, 10.0F, this.glimmer.getMaxHeadXRot()); + + double distanceSq = this.glimmer.distanceToSqr(this.owner); + if (distanceSq > TELEPORT_DISTANCE * TELEPORT_DISTANCE) { + this.glimmer.teleportTo(this.owner.getX(), this.owner.getY(), this.owner.getZ()); + return; + } + + this.glimmer.getNavigation().moveTo(this.owner, this.speedModifier); + } +} 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 new file mode 100644 index 00000000..9f150dc7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java @@ -0,0 +1,229 @@ +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 net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.TagKey; +import net.minecraft.util.Mth; +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.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.NearestAttackableTargetGoal; +import net.minecraft.world.entity.boss.enderdragon.EnderDragon; +import net.minecraft.world.entity.boss.wither.WitherBoss; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.monster.MagmaCube; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class GlimmerFrogBehavior implements GlimmerVariantBehavior { + private static final int SMALL_SLIME_SIZE = 1; + private static final TagKey> NO_EAT_TAG = + TagKey.create(Registries.ENTITY_TYPE, new ResourceLocation(Antarchy.MODID, "frog_glimmer_no_eat")); + private static final int PASSIVE_REFRESH_DURATION = 20 * 4; + private static final int ABILITY_COOLDOWN_TICKS = 20 * 120; + private static final double EAT_RANGE = 8.0D; + private static final float GROWTH_PER_EAT_MIN = 0.05F; + private static final float GROWTH_PER_EAT_MAX = 0.6F; + private static final float GROWTH_MAX_SCALE = 2.2F; + private static final double GROWTH_DECAY_PER_TICK = 0.0006D; + private static final int TONGUE_ANIM_TICKS = 10; + private static final int TONGUE_GRAB_TICK = 6; + + private final Map pendingEats = new HashMap<>(); + + private static ResourceLocation rl(String path) { + return new ResourceLocation(Antarchy.MODID, path); + } + + @Override + public void registerGoals(GlimmerEntity entity) { + entity.addGoal(0, new FloatGoal(entity)); + entity.addGoal(1, new MeleeAttackGoal(entity, 1.1D, true)); + entity.addGoal(5, new WaterAvoidingRandomStrollGoal(entity, 1.0D)); + entity.addGoal(6, new LookAtPlayerGoal(entity, Player.class, 8.0F)); + entity.addGoal(7, new RandomLookAroundGoal(entity)); + entity.addTargetGoal(2, new NearestAttackableTargetGoal<>(entity, MagmaCube.class, 10, true, false, + magmaCube -> ((MagmaCube) magmaCube).getSize() == SMALL_SLIME_SIZE)); + } + + @Override + public void onHurtTarget(GlimmerEntity entity, Entity target) { + if (!(target instanceof MagmaCube magmaCube) || magmaCube.isAlive() || magmaCube.getSize() != SMALL_SLIME_SIZE) { + return; + } + + entity.spawnAtLocation(AntarchyObjects.LUMEN_FROGLIGHT.get()); + } + + @Override + public ResourceLocation modelGeo() { + return rl("geo/apple_cow.geo.json"); + } + + @Override + public ResourceLocation animationFile() { + return rl("animations/apple_cow.animation.json"); + } + + @Override + public ResourceLocation texture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/frog_glimmer.png"); + } + + @Override + public ResourceLocation emissiveTexture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/frog_glimmer_emissive.png"); + } + + @Override + public SoundEvent ambientSound() { + return SoundEvents.FROG_AMBIENT; + } + + @Override + public SoundEvent hurtSound() { + return SoundEvents.FROG_HURT; + } + + @Override + public SoundEvent deathSound() { + return SoundEvents.FROG_DEATH; + } + + @Override + public EntityDimensions adultDimensions() { + // Matches vanilla Frog's real hitbox. + return EntityDimensions.scalable(0.5F, 0.5F); + } + + @Override + public void tickPassive(GlimmerEntity entity, Player owner) { + owner.addEffect(new MobEffectInstance(MobEffects.JUMP, PASSIVE_REFRESH_DURATION, 0, false, false, true)); + } + + @Override + public int abilityCooldownTicks() { + return ABILITY_COOLDOWN_TICKS; + } + + @Override + public double growthDecayPerTick() { + return GROWTH_DECAY_PER_TICK; + } + + @Override + public void tickAbilityCheck(GlimmerEntity entity, Player owner) { + if (this.pendingEats.containsKey(entity.getUUID())) { + return; + } + LivingEntity target = findEdibleTarget(entity, owner); + if (target != null) { + this.startEat(entity, owner, target); + } + } + + @Override + public void customTick(GlimmerEntity entity) { + PendingEat pending = this.pendingEats.get(entity.getUUID()); + if (pending == null) { + return; + } + + if (!pending.target.isAlive() || entity.distanceToSqr(pending.target) > EAT_RANGE * EAT_RANGE * 4.0D) { + this.pendingEats.remove(entity.getUUID()); + return; + } + + 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) { + Vec3 mouth = entity.position().add(0.0D, entity.getBbHeight() * 0.5D, 0.0D); + Vec3 pulled = pending.target.position().lerp(mouth, 0.55D); + pending.target.teleportTo(pulled.x, pulled.y, pulled.z); + } + + if (pending.ticksRemaining <= 0) { + this.pendingEats.remove(entity.getUUID()); + this.finishEat(entity, pending.owner, pending.target); + } + } + + private static LivingEntity findEdibleTarget(GlimmerEntity entity, Player owner) { + AABB area = owner.getBoundingBox().inflate(EAT_RANGE); + LivingEntity best = null; + double bestDistSq = EAT_RANGE * EAT_RANGE; + for (Entity candidate : owner.level().getEntities(entity, area)) { + if (!(candidate instanceof Enemy) || !(candidate instanceof LivingEntity living) || !living.isAlive()) { + continue; + } + if (isExcluded(living)) { + continue; + } + double distSq = candidate.distanceToSqr(owner); + if (distSq > bestDistSq) { + continue; + } + bestDistSq = distSq; + best = living; + } + return best; + } + + private static boolean isExcluded(LivingEntity target) { + if (target instanceof MultipartEntityOwner || target instanceof EnderDragon || target instanceof WitherBoss) { + return true; + } + return target.getType().is(NO_EAT_TAG); + } + + private void startEat(GlimmerEntity entity, Player owner, LivingEntity target) { + PendingEat pending = new PendingEat(); + pending.target = target; + pending.owner = owner; + pending.ticksRemaining = TONGUE_ANIM_TICKS; + this.pendingEats.put(entity.getUUID(), pending); + + entity.playAbilityAnimation(TONGUE_ANIM_TICKS); + entity.playSound(SoundEvents.FROG_LONG_JUMP, 0.8F, 1.4F); + entity.startAbilityCooldown(); + } + + private void finishEat(GlimmerEntity entity, Player owner, LivingEntity target) { + float growthAdd = Mth.clamp(target.getMaxHealth() / 40.0F, GROWTH_PER_EAT_MIN, GROWTH_PER_EAT_MAX); + entity.setGrowthScale(Math.min(GROWTH_MAX_SCALE, entity.getGrowthScale() + growthAdd)); + + Component targetName = target.getDisplayName(); + entity.playSound(SoundEvents.FROG_EAT, 1.2F, 0.9F); + target.remove(Entity.RemovalReason.DISCARDED); + + this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.frog", targetName)); + } + + private static final class PendingEat { + LivingEntity target; + Player owner; + int ticksRemaining; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java new file mode 100644 index 00000000..035369d2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java @@ -0,0 +1,216 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +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.LivingEntity; +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.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.core.animation.RawAnimation; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +public class GlimmerOuranwoodDeerBehavior implements GlimmerVariantBehavior { + private static final int PASSIVE_REFRESH_DURATION = 20 * 4; + private static final int ABILITY_COOLDOWN_TICKS = 20 * 10; + private static final double FOLLOW_SPEED_MODIFIER = 1.75D; + private static final RawAnimation RUN_ANIM = RawAnimation.begin().thenLoop("run"); + private static final double CHARGE_RANGE = 12.0D; + private static final double CHARGE_CONE_DOT = 0.5D; + private static final double CHARGE_HIT_RADIUS = 1.5D; + private static final double CHARGE_SPEED = 1.4D; + private static final int CHARGE_DURATION_TICKS = 14; + private static final float CHARGE_DAMAGE = 14.0F; + private static final double CHARGE_KNOCKBACK = 1.6D; + private static final int CHARGE_ANIM_TICKS = 45; + + private final Map activeCharges = new HashMap<>(); + + private static ResourceLocation rl(String path) { + return new ResourceLocation(Antarchy.MODID, path); + } + + @Override + public void registerGoals(GlimmerEntity entity) { + entity.addGoal(0, new FloatGoal(entity)); + entity.addGoal(5, new WaterAvoidingRandomStrollGoal(entity, 1.15D)); + entity.addGoal(6, new LookAtPlayerGoal(entity, Player.class, 8.0F)); + entity.addGoal(7, new RandomLookAroundGoal(entity)); + } + + @Override + public ResourceLocation modelGeo() { + return rl("geo/ouranwood_deer.geo.json"); + } + + @Override + public ResourceLocation animationFile() { + return rl("animations/ouranwood_deer.animation.json"); + } + + @Override + public ResourceLocation texture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/deer_glimmer.png"); + } + + @Override + public ResourceLocation emissiveTexture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/deer_glimmer_emissive.png"); + } + + @Override + public SoundEvent ambientSound() { + return SoundEvents.FOX_AMBIENT; + } + + @Override + public SoundEvent hurtSound() { + return SoundEvents.FOX_HURT; + } + + @Override + public SoundEvent deathSound() { + return SoundEvents.FOX_DEATH; + } + + @Override + public EntityDimensions adultDimensions() { + return EntityDimensions.scalable(1.35F, 2.1F); + } + + @Override + public EntityDimensions babyDimensions() { + return EntityDimensions.scalable(0.9F, 1.4F); + } + + @Override + public void tickPassive(GlimmerEntity entity, Player owner) { + owner.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, PASSIVE_REFRESH_DURATION, 0, false, false, true)); + } + + @Override + public double followSpeedModifier() { + return FOLLOW_SPEED_MODIFIER; + } + + @Override + @Nullable + public RawAnimation movingAnimation(GlimmerEntity entity) { + return entity.isFollowingOwner() ? RUN_ANIM : null; + } + + @Override + public int abilityCooldownTicks() { + return ABILITY_COOLDOWN_TICKS; + } + + @Override + @Nullable + public RawAnimation abilityAnimation() { + return RawAnimation.begin().thenPlay("charge_start").thenPlay("charge_loop").thenPlay("charge_end"); + } + + @Override + public void tickAbilityCheck(GlimmerEntity entity, Player owner) { + if (!owner.isSprinting()) { + return; + } + + Vec3 look = owner.getLookAngle(); + LivingEntity bestTarget = null; + double bestDistSq = CHARGE_RANGE * CHARGE_RANGE; + for (Entity candidate : owner.level().getEntities(owner, owner.getBoundingBox().inflate(CHARGE_RANGE))) { + if (!(candidate instanceof Enemy) || !(candidate instanceof LivingEntity living) || !living.isAlive()) { + continue; + } + Vec3 toTarget = candidate.position().subtract(owner.position()); + double distSq = toTarget.lengthSqr(); + if (distSq > bestDistSq) { + continue; + } + if (toTarget.normalize().dot(look) < CHARGE_CONE_DOT) { + continue; + } + bestDistSq = distSq; + bestTarget = living; + } + + if (bestTarget != null) { + this.startCharge(entity, owner, bestTarget); + } + } + + private void startCharge(GlimmerEntity entity, Player owner, LivingEntity target) { + Vec3 from = entity.position(); + Vec3 direction = target.position().subtract(from); + double horizontalDistance = Math.max(1.0D, direction.horizontalDistance()); + + ChargeState state = new ChargeState(); + state.dirX = direction.x / horizontalDistance; + state.dirZ = direction.z / horizontalDistance; + state.ticksRemaining = CHARGE_DURATION_TICKS; + state.owner = owner; + this.activeCharges.put(entity.getUUID(), state); + + entity.playAbilityAnimation(CHARGE_ANIM_TICKS); + entity.playSound(SoundEvents.RAVAGER_ROAR, 1.0F, 1.3F); + this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.deer")); + entity.startAbilityCooldown(); + } + + @Override + public void customTick(GlimmerEntity entity) { + ChargeState state = this.activeCharges.get(entity.getUUID()); + if (state == null) { + return; + } + + if (!entity.isAlive() || state.ticksRemaining <= 0) { + this.activeCharges.remove(entity.getUUID()); + return; + } + + state.ticksRemaining--; + entity.setDeltaMovement(state.dirX * CHARGE_SPEED, entity.getDeltaMovement().y, state.dirZ * CHARGE_SPEED); + + AABB hitBox = entity.getBoundingBox().inflate(CHARGE_HIT_RADIUS); + for (Entity candidate : entity.level().getEntities(entity, hitBox)) { + if (!(candidate instanceof Enemy) || !(candidate instanceof LivingEntity living) || !living.isAlive() + || state.alreadyHit.contains(candidate.getUUID())) { + continue; + } + + living.hurt(state.owner.damageSources().mobAttack(entity), CHARGE_DAMAGE); + Vec3 away = living.position().subtract(entity.position()); + double awayDistance = Math.max(0.1D, away.horizontalDistance()); + living.knockback(CHARGE_KNOCKBACK, -away.x / awayDistance, -away.z / awayDistance); + state.alreadyHit.add(candidate.getUUID()); + } + } + + private static final class ChargeState { + double dirX; + double dirZ; + int ticksRemaining; + Player owner; + final Set alreadyHit = new HashSet<>(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariant.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariant.java new file mode 100644 index 00000000..df9dc666 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariant.java @@ -0,0 +1,50 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import java.util.Locale; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; + +public enum GlimmerVariant { + APPLE_COW(new GlimmerAppleCowBehavior(), "apple_of_my_eye"), + OURANWOOD_DEER(new GlimmerOuranwoodDeerBehavior(), "deerly_beloved"), + FROG(new GlimmerFrogBehavior(), "hoppy_together"), + ANT(new GlimmerAntBehavior(), "spirant_animal"), + ELKA(new GlimmerElkaBehavior(), "elkcellent_choice"); + + public static final Codec CODEC = Codec.STRING.xmap(GlimmerVariant::byName, GlimmerVariant::name); + + private final GlimmerVariantBehavior behavior; + private final ResourceLocation tameAdvancementId; + + GlimmerVariant(GlimmerVariantBehavior behavior, String tameAdvancementPath) { + this.behavior = behavior; + this.tameAdvancementId = new ResourceLocation(Antarchy.MODID, tameAdvancementPath); + } + + public GlimmerVariantBehavior getBehavior() { + return this.behavior; + } + + public ResourceLocation tameAdvancementId() { + return this.tameAdvancementId; + } + + public Component displayName() { + return Component.translatable("glimmer_variant.antarchy." + this.name().toLowerCase(Locale.ROOT)); + } + + public static GlimmerVariant random(net.minecraft.util.RandomSource random) { + GlimmerVariant[] values = values(); + return values[random.nextInt(values.length)]; + } + + public static GlimmerVariant byName(String name) { + try { + return GlimmerVariant.valueOf(name); + } catch (IllegalArgumentException ignored) { + return APPLE_COW; + } + } +} 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 new file mode 100644 index 00000000..37f200c1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java @@ -0,0 +1,156 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; +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); + + ResourceLocation modelGeo(); + + ResourceLocation animationFile(); + + ResourceLocation texture(GlimmerEntity entity); + + ResourceLocation emissiveTexture(GlimmerEntity entity); + + SoundEvent ambientSound(); + + SoundEvent hurtSound(); + + 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 new file mode 100644 index 00000000..79e63795 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java @@ -0,0 +1,1246 @@ +package com.craisinlord.antarchy.content.entity.kraken; + +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.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.antarchy.content.damage.AntarchyDamageTypes; + +import java.util.List; +import java.util.Objects; +import net.minecraft.core.BlockPos; +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.ServerBossEvent; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.tags.DamageTypeTags; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.BossEvent; +import net.minecraft.world.Difficulty; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageTypes; +import net.minecraft.world.entity.*; +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.control.FlyingMoveControl; +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.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.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 com.craisinlord.antarchy.compat.geckolib.AutoPlayingSoundKeyframeHandlerCompat; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityOwner { + private static final EntityDataAccessor ATTACK_STATE = SynchedEntityData.defineId(KrakenEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ROARING = SynchedEntityData.defineId(KrakenEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor PHASE_TWO = SynchedEntityData.defineId(KrakenEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(KrakenEntity.class, EntityDataSerializers.INT); + + private static final String ATTACK_COOLDOWN_KEY = "AttackCooldown"; + private static final String ACTION_TICKS_KEY = "ActionTicks"; + private static final String PHASE_TRANSITION_TICKS_KEY = "PhaseTransitionTicks"; + private static final String PHASE_SUMMON_COOLDOWN_KEY = "PhaseSummonCooldown"; + private static final String LAST_ATTACK_STATE_KEY = "LastAttackState"; + private static final String AGGRO_TRIGGERED_KEY = "AggroTriggered"; + private static final String GRAB_TARGET_KEY = "GrabTarget"; + + private static final int ATTACK_NONE = 0; + private static final int ATTACK_GRAB = 1; + private static final int ATTACK_SWING_LEFT = 2; + 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; + private static final int ANIM_SWING_LEFT = 3; + private static final int ANIM_SWING_RIGHT = 4; + private static final int ANIM_SLAM = 5; + private static final int ANIM_DEATH = 6; + + private static final int DEATH_ANIM_TICKS = 60; + + private static final java.util.UUID PHASE_TWO_SPEED_ID = java.util.UUID.nameUUIDFromBytes((Antarchy.MODID + ":kraken_phase_two_speed").getBytes(java.nio.charset.StandardCharsets.UTF_8)); + private static final java.util.UUID PHASE_TWO_FLYING_SPEED_ID = java.util.UUID.nameUUIDFromBytes((Antarchy.MODID + ":kraken_phase_two_flying_speed").getBytes(java.nio.charset.StandardCharsets.UTF_8)); + private static final java.util.UUID PHASE_TWO_DAMAGE_ID = java.util.UUID.nameUUIDFromBytes((Antarchy.MODID + ":kraken_phase_two_damage").getBytes(java.nio.charset.StandardCharsets.UTF_8)); + private static final double PHASE_TWO_SPEED_BONUS = 0.15D; + private static final double PHASE_TWO_DAMAGE_BONUS = 4.0D; + private static final AttributeModifier PHASE_TWO_SPEED = new AttributeModifier(PHASE_TWO_SPEED_ID, "kraken_phase_two_speed", PHASE_TWO_SPEED_BONUS, AttributeModifier.Operation.MULTIPLY_BASE); + private static final AttributeModifier PHASE_TWO_FLYING_SPEED = new AttributeModifier(PHASE_TWO_FLYING_SPEED_ID, "kraken_phase_two_flying_speed", PHASE_TWO_SPEED_BONUS, AttributeModifier.Operation.MULTIPLY_BASE); + private static final AttributeModifier PHASE_TWO_DAMAGE = new AttributeModifier(PHASE_TWO_DAMAGE_ID, "kraken_phase_two_damage", PHASE_TWO_DAMAGE_BONUS, AttributeModifier.Operation.ADDITION); + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation CRY_ANIM = RawAnimation.begin().thenPlay("cry"); + private static final RawAnimation GRAB_ANIM = RawAnimation.begin().thenPlay("grab"); + private static final RawAnimation SWING_LEFT_ANIM = RawAnimation.begin().thenPlay("swing_left"); + private static final RawAnimation SWING_RIGHT_ANIM = RawAnimation.begin().thenPlay("swing_right"); + private static final RawAnimation SLAM_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); + + private static final Vec3 GRAB_ANCHOR_LOCAL = new Vec3(22.0D / 16.0D, 223.5D / 16.0D, -12.5D / 16.0D); + + private final ServerBossEvent bossEvent = new com.craisinlord.antarchy.content.boss.EntityLinkedServerBossEvent(this.getUUID(), Component.translatable("entity.antarchy.kraken"), BossEvent.BossBarColor.BLUE, BossEvent.BossBarOverlay.PROGRESS); + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + @Nullable + private Vec3 patrolTarget; + private int patrolRetargetTicks; + private int attackCooldown; + private int actionTicks; + private int phaseTransitionTicks; + private int phaseSummonCooldown; + private int lastAttackState; + private boolean aggroTriggered; + private int grabbedTargetId = -1; + private boolean spawnedPhaseMinions; + private int lightningStrikeCooldown; + private int lightningAmbientCooldown; + private int strafeRetargetTicks; + private float orbitDirection = 1.0F; + private boolean stormActive; + + @Nullable + private Entity[] multipartParts; + + public KrakenEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new FlyingMoveControl(this, 20, true); + this.xpReward = 60; + this.bossEvent.setDarkenScreen(false); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.krakenHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.krakenAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.krakenMovementSpeed()) + .add(Attributes.FLYING_SPEED, AntarchySettings.krakenFlyingSpeed()) + .add(Attributes.FOLLOW_RANGE, AntarchySettings.krakenFollowRange()) + .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.krakenKnockbackResistance()) + .add(Attributes.ARMOR, AntarchySettings.krakenArmor()); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + return level.getFluidState(pos).is(FluidTags.WATER) && level.getFluidState(pos.above()).is(FluidTags.WATER); + } + + @Override + public MultipartLayout antarchy$getMultipartLayout() { + return KrakenMultipartLayout.INSTANCE; + } + + @Override + @Nullable + public Entity[] antarchy$getMultipartParts() { + return this.multipartParts; + } + + @Override + public void antarchy$setMultipartParts(@Nullable Entity[] parts) { + this.multipartParts = parts; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ATTACK_STATE, ATTACK_NONE); + this.entityData.define(ROARING, false); + this.entityData.define(PHASE_TWO, false); + this.entityData.define(ANIMATION_STATE, ANIM_NONE); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 20.0F)); + this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + + HurtByTargetGoal hurtByTargetGoal = new HurtByTargetGoal(this); + hurtByTargetGoal.setAlertOthers(MissileSquidEntity.class); + this.targetSelector.addGoal(1, hurtByTargetGoal); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @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; + } + state.setAndContinue(IDLE_ANIM); + return PlayState.CONTINUE; + }).setSoundKeyframeHandler(AutoPlayingSoundKeyframeHandlerCompat.create())); + controllers.add(new AnimationController<>(this, "action_controller", 0, this::actionAnimController) + .setSoundKeyframeHandler(AutoPlayingSoundKeyframeHandlerCompat.create()) + .triggerableAnim("cry", CRY_ANIM) + .triggerableAnim("grab", GRAB_ANIM) + .triggerableAnim("swing_left", SWING_LEFT_ANIM) + .triggerableAnim("swing_right", SWING_RIGHT_ANIM) + .triggerableAnim("attack", SLAM_ANIM)); + } + + private PlayState actionAnimController(AnimationState state) { + return switch (this.getAnimationState()) { + case ANIM_CRY -> state.setAndContinue(CRY_ANIM); + case ANIM_GRAB -> state.setAndContinue(GRAB_ANIM); + case ANIM_SWING_LEFT -> state.setAndContinue(SWING_LEFT_ANIM); + case ANIM_SWING_RIGHT -> state.setAndContinue(SWING_RIGHT_ANIM); + case ANIM_SLAM -> state.setAndContinue(SLAM_ANIM); + case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); + default -> PlayState.STOP; + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @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 SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnData, @org.jetbrains.annotations.Nullable net.minecraft.nbt.CompoundTag dataTag) { + Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.krakenHealth()); + this.setHealth((float) com.craisinlord.antarchy.config.AntarchySettings.krakenHealth()); + Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.krakenAttackDamage()); + this.playSound(AntarchySoundEvents.KRAKEN_SUMMON.get(), 2.2F, 0.9F + this.random.nextFloat() * 0.08F); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData, dataTag); + } + + @Override + public void tick() { + if (!this.level().isClientSide && this.level().getDifficulty() == Difficulty.PEACEFUL) { + this.remove(Entity.RemovalReason.DISCARDED); + return; + } + + super.tick(); + this.setAirSupply(this.getMaxAirSupply()); + this.setNoGravity(true); + + if (this.level().isClientSide) { + this.tickClientParticles(); + this.updateSwimRotation(); + return; + } + + this.updateBossBarPlayers(); + this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + this.tickLightning(); + + if (this.attackCooldown > 0) { + this.attackCooldown--; + } + if (this.phaseSummonCooldown > 0) { + this.phaseSummonCooldown--; + } + + LivingEntity target = this.getTarget(); + if ((target == null || !target.isAlive()) && this.tickCount % 10 == 0) { + Player nearbyPlayer = null; + double nearestHorizontalDistanceSqr = Double.MAX_VALUE; + for (Player player : this.level().getEntitiesOfClass(Player.class, this.getBoundingBox().inflate(this.getBossBarRange(), 192.0D, this.getBossBarRange()))) { + if (!player.isAlive() || !this.canAttack(player) || !this.isWithinBossBarRange(player)) { + continue; + } + double horizontalDistanceSqr = this.horizontalDistanceToSqr(player); + if (horizontalDistanceSqr < nearestHorizontalDistanceSqr) { + nearestHorizontalDistanceSqr = horizontalDistanceSqr; + nearbyPlayer = player; + } + } + if (nearbyPlayer != null) { + this.setTarget(nearbyPlayer); + target = nearbyPlayer; + } + } + + if (target == null || !target.isAlive()) { + this.resetCombatState(); + this.tickPatrolMovement(); + this.updateSwimRotation(); + this.updateAnimationState(); + return; + } + + this.getLookControl().setLookAt(target, 25.0F, 20.0F); + + if (!this.aggroTriggered) { + this.startAggroRoar(); + } + + if (!this.isPhaseTwo() && this.phaseTransitionTicks <= 0 && this.getHealth() <= this.getMaxHealth() * 0.5F) { + this.startPhaseTransition(); + } + + if (this.isRoaring()) { + this.tickRoarState(target); + this.updateSwimRotation(); + this.updateAnimationState(); + return; + } + + if (this.phaseTransitionTicks > 0) { + this.tickPhaseTransition(target); + this.updateSwimRotation(); + this.updateAnimationState(); + return; + } + + if (this.getAttackState() != ATTACK_NONE) { + this.tickCurrentAttack(target); + this.updateSwimRotation(); + this.updateAnimationState(); + return; + } + + this.tickPhaseTwoPressure(target); + this.tickPursuitMovement(target); + + if (this.attackCooldown <= 0) { + int nextAttack = this.chooseNextAttack(target); + if (nextAttack != ATTACK_NONE) { + this.startAttack(nextAttack); + } + } + + this.updateSwimRotation(); + this.updateAnimationState(); + } + + @Override + public void travel(Vec3 travelVector) { + if (this.isEffectiveAi()) { + this.moveRelative(this.getSpeed(), travelVector); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.setDeltaMovement(this.getDeltaMovement().scale(this.isInWater() ? 0.92D : 0.91D)); + return; + } + + super.travel(travelVector); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (source.is(DamageTypeTags.IS_FIRE) + || source.is(DamageTypes.IN_WALL) + || source.is(DamageTypes.LIGHTNING_BOLT) + || source.is(AntarchyDamageTypes.KRAKEN_LIGHTNING) + || source.getEntity() instanceof MissileSquidEntity + || source.getEntity() instanceof OctopusBombEntity) { + return false; + } + + return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount)); + } + + @Override + public boolean isInvulnerableTo(DamageSource source) { + if (super.isInvulnerableTo(source)) { + return true; + } + return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.krakenDamageRange()); + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + protected boolean shouldDespawnInPeaceful() { + return true; + } + + @Override + @Nullable + protected SoundEvent getAmbientSound() { + return null; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.KRAKEN_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.KRAKEN_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 1.5F; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(ATTACK_COOLDOWN_KEY, this.attackCooldown); + tag.putInt(ACTION_TICKS_KEY, this.actionTicks); + tag.putInt(PHASE_TRANSITION_TICKS_KEY, this.phaseTransitionTicks); + tag.putInt(PHASE_SUMMON_COOLDOWN_KEY, this.phaseSummonCooldown); + tag.putInt(LAST_ATTACK_STATE_KEY, this.lastAttackState); + tag.putBoolean(AGGRO_TRIGGERED_KEY, this.aggroTriggered); + if (this.grabbedTargetId >= 0) { + tag.putInt(GRAB_TARGET_KEY, this.grabbedTargetId); + } + tag.putBoolean("PhaseTwo", this.isPhaseTwo()); + tag.putBoolean("Roaring", this.isRoaring()); + tag.putInt("AttackState", this.getAttackState()); + tag.putInt("AnimationState", this.getAnimationState()); + tag.putBoolean("SpawnedPhaseMinions", this.spawnedPhaseMinions); + tag.putInt("LightningStrikeCooldown", this.lightningStrikeCooldown); + tag.putInt("LightningAmbientCooldown", this.lightningAmbientCooldown); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.attackCooldown = tag.getInt(ATTACK_COOLDOWN_KEY); + this.actionTicks = tag.getInt(ACTION_TICKS_KEY); + this.phaseTransitionTicks = tag.getInt(PHASE_TRANSITION_TICKS_KEY); + this.phaseSummonCooldown = tag.getInt(PHASE_SUMMON_COOLDOWN_KEY); + this.lastAttackState = tag.contains(LAST_ATTACK_STATE_KEY) ? tag.getInt(LAST_ATTACK_STATE_KEY) : ATTACK_NONE; + this.aggroTriggered = tag.getBoolean(AGGRO_TRIGGERED_KEY); + this.grabbedTargetId = tag.contains(GRAB_TARGET_KEY) ? tag.getInt(GRAB_TARGET_KEY) : -1; + this.spawnedPhaseMinions = tag.getBoolean("SpawnedPhaseMinions"); + this.entityData.set(ROARING, tag.getBoolean("Roaring")); + this.entityData.set(ATTACK_STATE, tag.getInt("AttackState")); + this.entityData.set(PHASE_TWO, tag.getBoolean("PhaseTwo")); + this.entityData.set(ANIMATION_STATE, tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_NONE); + this.lightningStrikeCooldown = tag.getInt("LightningStrikeCooldown"); + this.lightningAmbientCooldown = tag.getInt("LightningAmbientCooldown"); + this.stormActive = false; + if (this.isPhaseTwo()) { + this.applyPhaseTwoBuffs(); + } + this.updateAnimationState(); + } + + @Override + public void startSeenByPlayer(net.minecraft.server.level.ServerPlayer player) { + super.startSeenByPlayer(player); + } + + @Override + public void stopSeenByPlayer(net.minecraft.server.level.ServerPlayer player) { + super.stopSeenByPlayer(player); + this.bossEvent.removePlayer(player); + } + + @Override + public void remove(Entity.RemovalReason reason) { + this.clearKrakenStorm(); + super.remove(reason); + this.bossEvent.removeAllPlayers(); + } + + public boolean isRoaring() { + return this.entityData.get(ROARING); + } + + public boolean isPhaseTwo() { + return this.entityData.get(PHASE_TWO); + } + + public int getAttackState() { + return this.entityData.get(ATTACK_STATE); + } + + public int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setRoaring(boolean roaring) { + this.entityData.set(ROARING, roaring); + } + + private void setPhaseTwo(boolean phaseTwo) { + this.entityData.set(PHASE_TWO, phaseTwo); + } + + private void setAttackState(int attackState) { + this.entityData.set(ATTACK_STATE, attackState); + } + + private void setAnimationState(int animationState) { + if (this.entityData.get(ANIMATION_STATE) != animationState) { + this.entityData.set(ANIMATION_STATE, animationState); + String trigger = switch (animationState) { + case ANIM_CRY -> "cry"; + case ANIM_GRAB -> "grab"; + case ANIM_SWING_LEFT -> "swing_left"; + case ANIM_SWING_RIGHT -> "swing_right"; + case ANIM_SLAM -> "attack"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("action_controller", trigger); + } + } + } + + private void startAggroRoar() { + this.aggroTriggered = true; + this.actionTicks = 30; + this.setRoaring(true); + this.playSound(AntarchySoundEvents.KRAKEN_ROAR.get(), 1.8F, 0.78F); + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.2D)); + this.updateAnimationState(); + } + + private void tickRoarState(LivingEntity target) { + this.getNavigation().stop(); + this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); + this.setDeltaMovement(this.getDeltaMovement().scale(0.6D)); + this.getLookControl().setLookAt(target, 25.0F, 20.0F); + + if (--this.actionTicks <= 0) { + this.actionTicks = 0; + this.setRoaring(false); + this.attackCooldown = 18; + } + } + + private void startPhaseTransition() { + this.phaseTransitionTicks = 50; + this.actionTicks = 0; + this.setAttackState(ATTACK_NONE); + this.setRoaring(false); + this.grabbedTargetId = -1; + this.spawnedPhaseMinions = false; + this.phaseSummonCooldown = 0; + this.playSound(AntarchySoundEvents.KRAKEN_ROAR.get(), 2.0F, 0.82F); + this.getNavigation().stop(); + this.updateAnimationState(); + } + + private void tickPhaseTransition(LivingEntity target) { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.45D)); + this.getLookControl().setLookAt(target, 25.0F, 20.0F); + + if (!this.spawnedPhaseMinions && this.phaseTransitionTicks <= 40) { + this.spawnMinions(1 + this.random.nextInt(2), target); + this.spawnedPhaseMinions = true; + } + + if (this.phaseTransitionTicks % 8 == 0 && this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.SQUID_INK, this.getX(), this.getY() + 1.0D, this.getZ(), 12, 1.0D, 0.7D, 1.0D, 0.02D); + } + + if (--this.phaseTransitionTicks <= 0) { + this.phaseTransitionTicks = 0; + this.setPhaseTwo(true); + this.applyPhaseTwoBuffs(); + this.attackCooldown = 25; + this.playSound(AntarchySoundEvents.KRAKEN_ROAR.get(), 2.0F, 0.72F); + } + } + + private void tickCurrentAttack(LivingEntity target) { + this.getNavigation().stop(); + this.getLookControl().setLookAt(target, 30.0F, 25.0F); + this.setDeltaMovement(this.getDeltaMovement().scale(0.8D)); + + switch (this.getAttackState()) { + case ATTACK_GRAB -> this.tickGrabAttack(target); + case ATTACK_SWING_LEFT -> this.tickSwingAttack(false); + case ATTACK_SWING_RIGHT -> this.tickSwingAttack(true); + case ATTACK_SLAM -> this.tickSlamAttack(); + default -> this.finishAttack(); + } + } + + private void startAttack(int attackState) { + this.setAttackState(attackState); + this.grabbedTargetId = -1; + + if (attackState == ATTACK_GRAB) { + this.actionTicks = 55; + this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.45F, 0.9F); + } else if (attackState == ATTACK_SLAM) { + this.actionTicks = 40; + this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.55F, this.isPhaseTwo() ? 0.78F : 0.84F); + } else if (attackState == ATTACK_SWING_LEFT || attackState == ATTACK_SWING_RIGHT) { + this.actionTicks = 40; + this.playSound(AntarchySoundEvents.KRAKEN_SPIN.get(), 1.3F, 0.95F); + } + } + + private void tickGrabAttack(LivingEntity target) { + if (this.actionTicks == 48 && this.distanceToSqr(target) <= 42.25D) { + this.grabbedTargetId = target.getId(); + } + + LivingEntity grabbedTarget = this.getGrabbedTarget(); + if (grabbedTarget != null && grabbedTarget.isAlive()) { + this.holdGrabbedTarget(grabbedTarget); + if (this.actionTicks <= 45 && this.actionTicks > 10 && this.actionTicks % 10 == 0) { + if (this.level() instanceof ServerLevel serverLevel) { + grabbedTarget.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), 4.0F); + } + } + } + + if (--this.actionTicks <= 0) { + if (grabbedTarget != null && grabbedTarget.isAlive()) { + this.knockAway(grabbedTarget, 2.8D, 4.2D); + } + this.grabbedTargetId = -1; + this.finishAttack(); + } + } + + // 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); + } + + if (--this.actionTicks <= 0) { + this.finishAttack(); + } + } + + private void tickSlamAttack() { + if (this.actionTicks == 20) { + this.performSlam(); + } + + if (--this.actionTicks <= 0) { + this.finishAttack(); + } + } + + private void finishAttack() { + int finished = this.getAttackState(); + this.setAttackState(ATTACK_NONE); + this.actionTicks = 0; + this.attackCooldown = this.isPhaseTwo() ? 12 : 18; + this.grabbedTargetId = -1; + this.lastAttackState = finished; + this.updateAnimationState(); + } + + private void tickPursuitMovement(LivingEntity target) { + this.patrolTarget = null; + if (this.strafeRetargetTicks-- <= 0) { + this.strafeRetargetTicks = 10 + this.random.nextInt(12); + if (this.random.nextFloat() < 0.4F) { + this.orbitDirection *= -1.0F; + } + } + + Vec3 attackPoint = this.createCombatFlightTarget(target); + this.getMoveControl().setWantedPosition(attackPoint.x, attackPoint.y, attackPoint.z, this.isPhaseTwo() ? 1.2D : 1.1D); + } + + private void tickPatrolMovement() { + if (this.patrolRetargetTicks-- <= 0 || this.patrolTarget == null || this.position().distanceToSqr(this.patrolTarget) < 6.0D) { + this.patrolRetargetTicks = 28 + this.random.nextInt(24); + this.patrolTarget = this.findPatrolTarget(); + } + + if (this.patrolTarget != null) { + this.getMoveControl().setWantedPosition(this.patrolTarget.x, this.patrolTarget.y, this.patrolTarget.z, 0.45D); + } + } + + private void resetCombatState() { + this.setAttackState(ATTACK_NONE); + this.setRoaring(false); + this.actionTicks = 0; + this.phaseTransitionTicks = 0; + this.grabbedTargetId = -1; + this.aggroTriggered = false; + this.spawnedPhaseMinions = this.isPhaseTwo(); + this.updateAnimationState(); + } + + private int chooseNextAttack(LivingEntity target) { + double distSqr = this.distanceToSqr(target); + boolean canGrab = distSqr <= 64.0D; + boolean canSwing = distSqr <= 81.0D; + boolean canSlam = distSqr <= 121.0D; + + if (!canGrab && !canSwing && !canSlam) { + return ATTACK_NONE; + } + + int grabWeight = canGrab ? (this.lastAttackState == ATTACK_GRAB ? 1 : 4) : 0; + int swingWeight = canSwing ? (this.isSwingAttack(this.lastAttackState) ? 1 : 5) : 0; + int slamWeight = canSlam ? (this.lastAttackState == ATTACK_SLAM ? 1 : 3) : 0; + int total = grabWeight + swingWeight + slamWeight; + if (total == 0) { + return ATTACK_NONE; + } + + int roll = this.random.nextInt(total); + if (roll < grabWeight) { + return ATTACK_GRAB; + } + roll -= grabWeight; + if (roll < slamWeight) { + return ATTACK_SLAM; + } + return this.resolveSwingDirection(target); + } + + private boolean isSwingAttack(int attackState) { + return attackState == ATTACK_SWING_LEFT || attackState == ATTACK_SWING_RIGHT; + } + + private boolean isSlamAttack(int attackState) { + 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(); + Vec3 toTarget = target.position().subtract(this.position()); + return right.dot(toTarget) > 0 ? ATTACK_SWING_RIGHT : ATTACK_SWING_LEFT; + } + + private void performSwing(boolean swingRight) { + AABB hitBox = this.getBoundingBox().inflate(7.0D, 3.0D, 7.0D); + List players = this.level().getEntitiesOfClass(Player.class, hitBox, LivingEntity::isAlive); + 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; + + for (Player player : players) { + if (!(this.level() instanceof ServerLevel serverLevel)) continue; + if (!player.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), damage)) continue; + player.push(knockDir.x * 1.75D, 0.4D, knockDir.z * 1.75D); + player.hurtMarked = true; + } + + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.SPLASH, this.getX(), this.getY() + 0.8D, this.getZ(), 24, 1.2D, 0.4D, 1.2D, 0.08D); + } + } + + private void performSlam() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + AABB hitBox = this.getBoundingBox().inflate(9.0D, 4.0D, 9.0D); + List players = this.level().getEntitiesOfClass(Player.class, hitBox, LivingEntity::isAlive); + float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE) * 1.4F; + + for (Player player : players) { + if (!player.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), damage)) { + continue; + } + this.knockAway(player, 3.2D, 0.75D); + } + + serverLevel.sendParticles(ParticleTypes.SPLASH, this.getX(), this.getY() + 0.8D, this.getZ(), 40, 2.0D, 0.8D, 2.0D, 0.12D); + serverLevel.sendParticles(ParticleTypes.BUBBLE, this.getX(), this.getY() + 0.6D, this.getZ(), 30, 1.8D, 0.6D, 1.8D, 0.05D); + } + + private void holdGrabbedTarget(LivingEntity target) { + Vec3 anchor = this.getGrabAnchorWorldPos(); + target.setDeltaMovement(anchor.subtract(target.position()).scale(0.35D)); + target.resetFallDistance(); + if (target instanceof ServerPlayer serverPlayer) { + serverPlayer.connection.teleport(anchor.x, anchor.y, anchor.z, target.getYRot(), target.getXRot()); + } else { + target.moveTo(anchor.x, anchor.y, anchor.z, target.getYRot(), target.getXRot()); + } + target.hurtMarked = true; + } + + private Vec3 getGrabAnchorWorldPos() { + Vec3 localAnchor = this.getGrabAnchorOffset(); + Vec3 rotatedAnchor = localToWorldOffset(localAnchor); + return this.position().add(rotatedAnchor); + } + + private Vec3 getGrabAnchorOffset() { + if (this.getAttackState() != ATTACK_GRAB) { + return new Vec3(this.getBbWidth() * 0.65D, this.getBbHeight() * 0.28D, 0.0D); + } + + double progress = 1.0D - (this.actionTicks / 55.0D); + double forward = Mth.lerp(progress, this.getBbWidth() * 0.45D, GRAB_ANCHOR_LOCAL.z); + double vertical = Mth.lerp(progress, this.getBbHeight() * 0.18D, GRAB_ANCHOR_LOCAL.y); + double lateral = Mth.lerp(progress, this.getBbWidth() * 0.18D, GRAB_ANCHOR_LOCAL.x); + return new Vec3(lateral, vertical, forward); + } + + private Vec3 localToWorldOffset(Vec3 localOffset) { + float bodyYawRadians = this.yBodyRot * Mth.DEG_TO_RAD; + double cos = Math.cos(bodyYawRadians); + double sin = Math.sin(bodyYawRadians); + double worldX = localOffset.x * cos - localOffset.z * sin; + double worldZ = localOffset.z * cos + localOffset.x * sin; + return new Vec3(worldX, localOffset.y, worldZ); + } + + private void knockAway(LivingEntity target, double horizontalStrength, double verticalStrength) { + Vec3 direction = target.position().subtract(this.position()); + Vec3 horizontal = new Vec3(direction.x, 0.0D, direction.z); + if (horizontal.lengthSqr() < 1.0E-4D) { + horizontal = this.getViewVector(1.0F).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().scale(horizontalStrength); + target.push(horizontal.x, verticalStrength, horizontal.z); + target.hurtMarked = true; + } + + @Nullable + private LivingEntity getGrabbedTarget() { + if (this.grabbedTargetId < 0) { + return null; + } + + Entity entity = this.level().getEntity(this.grabbedTargetId); + return entity instanceof LivingEntity livingEntity ? livingEntity : null; + } + + private void tickPhaseTwoPressure(LivingEntity target) { + if (!this.isPhaseTwo() || this.phaseSummonCooldown > 0) { + return; + } + if (this.countNearbyMinions() >= 12) { + this.phaseSummonCooldown = 40; + return; + } + this.spawnMinions(1 + this.random.nextInt(2), target); + this.phaseSummonCooldown = 90 + this.random.nextInt(50); + } + + private int countNearbyMinions() { + net.minecraft.world.phys.AABB range = this.getBoundingBox().inflate(28.0D); + return this.level().getEntitiesOfClass(OctopusBombEntity.class, range, OctopusBombEntity::isAlive).size() + + this.level().getEntitiesOfClass(MissileSquidEntity.class, range, MissileSquidEntity::isAlive).size(); + } + + private void spawnMinions(int desiredCount, @Nullable LivingEntity currentTarget) { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + int spawned = 0; + + for (int attempt = 0; attempt < desiredCount * 4 && spawned < desiredCount; attempt++) { + Vec3 spawnPos = this.findBombSpawnPos(currentTarget); + boolean spawnBomb = this.random.nextBoolean(); + + if (spawnBomb) { + OctopusBombEntity bomb = AntarchyObjects.OCTOPUS_BOMB.get().create(serverLevel); + if (bomb == null) continue; + bomb.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, this.getYRot(), 0.0F); + serverLevel.addFreshEntity(bomb); + bomb.launchAsProjectile(this, this.createBombLaunchVelocity(spawnPos, currentTarget)); + serverLevel.sendParticles(ParticleTypes.BUBBLE, bomb.getX(), bomb.getY() + 0.4D, bomb.getZ(), 14, 0.3D, 0.25D, 0.3D, 0.03D); + } else { + MissileSquidEntity squid = AntarchyObjects.MISSILE_SQUID.get().create(serverLevel); + if (squid == null) continue; + squid.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, this.getYRot(), 0.0F); + serverLevel.addFreshEntity(squid); + serverLevel.sendParticles(ParticleTypes.BUBBLE, squid.getX(), squid.getY() + 0.4D, squid.getZ(), 14, 0.3D, 0.25D, 0.3D, 0.03D); + } + spawned++; + } + + if (spawned > 0) { + this.playSound(AntarchySoundEvents.KRAKEN_ROAR.get(), 1.8F, this.isPhaseTwo() ? 0.74F : 0.82F); + } + } + + private Vec3 findBombSpawnPos(@Nullable LivingEntity currentTarget) { + Vec3 anchor = currentTarget != null ? currentTarget.position() : this.position(); + for (int attempt = 0; attempt < 18; attempt++) { + double angle = this.random.nextDouble() * Mth.TWO_PI; + double radius = 7.0D + this.random.nextDouble() * 8.0D; + double height = 4.0D + this.random.nextDouble() * (this.isPhaseTwo() ? 6.0D : 4.0D); + BlockPos candidate = BlockPos.containing( + anchor.x + Math.cos(angle) * radius, + anchor.y + height, + anchor.z + Math.sin(angle) * radius + ); + if (this.isOpenFlightSpace(candidate)) { + return Vec3.atCenterOf(candidate); + } + } + + return this.position().add(0.0D, this.getBbHeight() * 0.6D, 0.0D); + } + + private Vec3 createBombLaunchVelocity(Vec3 spawnPos, @Nullable LivingEntity currentTarget) { + Vec3 aimPoint = currentTarget != null + ? currentTarget.getEyePosition() + : this.position().add(this.getViewVector(1.0F).scale(10.0D)); + Vec3 direction = aimPoint.subtract(spawnPos); + if (direction.lengthSqr() < 1.0E-4D) { + direction = this.getViewVector(1.0F); + } + + Vec3 spread = new Vec3( + (this.random.nextDouble() - 0.5D) * 0.18D, + (this.random.nextDouble() - 0.5D) * 0.12D, + (this.random.nextDouble() - 0.5D) * 0.18D + ); + return direction.normalize().scale(this.isPhaseTwo() ? 1.45D : 1.2D).add(spread); + } + + private boolean isOpenFlightSpace(BlockPos candidate) { + return (this.level().isEmptyBlock(candidate) || this.level().getFluidState(candidate).is(FluidTags.WATER)) + && (this.level().isEmptyBlock(candidate.above()) || this.level().getFluidState(candidate.above()).is(FluidTags.WATER)); + } + + private Vec3 findPatrolTarget() { + BlockPos origin = this.blockPosition(); + for (int attempt = 0; attempt < 20; attempt++) { + BlockPos candidate = origin.offset( + this.random.nextInt(29) - 14, + this.random.nextInt(9) - 4, + this.random.nextInt(29) - 14 + ); + if (!this.level().isEmptyBlock(candidate) && !this.level().getFluidState(candidate).is(FluidTags.WATER)) { + continue; + } + if (!this.level().isEmptyBlock(candidate.above()) && !this.level().getFluidState(candidate.above()).is(FluidTags.WATER)) { + continue; + } + + double clampedY = Mth.clamp(candidate.getY() + 0.5D, this.getY() - 5.0D, this.getY() + 5.0D); + return new Vec3(candidate.getX() + 0.5D, clampedY, candidate.getZ() + 0.5D); + } + + return this.position().add(0.0D, 1.5D, 0.0D); + } + + private Vec3 createCombatFlightTarget(LivingEntity target) { + double radius = this.isPhaseTwo() ? 7.0D : 9.0D; + double angle = this.tickCount * 0.16D * this.orbitDirection + this.getId() * 0.11D; + double x = target.getX() + Math.cos(angle) * radius; + double z = target.getZ() + Math.sin(angle) * radius; + double y = Mth.clamp( + target.getY() + 2.0D + Math.sin((this.tickCount + this.getId()) * 0.18D) * 1.0D, + target.getY() - 2.0D, + target.getY() + 5.0D + ); + return this.findNearestFlightTarget(new Vec3(x, y, z)); + } + + private Vec3 findNearestFlightTarget(Vec3 desired) { + BlockPos desiredPos = BlockPos.containing(desired); + for (int attempt = 0; attempt < 16; attempt++) { + BlockPos candidate = desiredPos.offset( + this.random.nextInt(7) - 3, + this.random.nextInt(5) - 2, + this.random.nextInt(7) - 3 + ); + if (!this.level().isEmptyBlock(candidate) && !this.level().getFluidState(candidate).is(FluidTags.WATER)) { + continue; + } + if (!this.level().isEmptyBlock(candidate.above()) && !this.level().getFluidState(candidate.above()).is(FluidTags.WATER)) { + continue; + } + return Vec3.atCenterOf(candidate); + } + + boolean desiredOpen = this.level().isEmptyBlock(desiredPos) || this.level().getFluidState(desiredPos).is(FluidTags.WATER); + boolean desiredOpenAbove = this.level().isEmptyBlock(desiredPos.above()) || this.level().getFluidState(desiredPos.above()).is(FluidTags.WATER); + return desiredOpen && desiredOpenAbove ? desired : this.position().add(0.0D, 1.5D, 0.0D); + } + + private void tickLightning() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + if (this.stormActive && --this.lightningAmbientCooldown <= 0) { + this.lightningAmbientCooldown = this.isPhaseTwo() ? 35 + this.random.nextInt(35) : 80 + this.random.nextInt(80); + int ambientBolts = this.isPhaseTwo() ? 4 : 2; + for (int i = 0; i < ambientBolts; i++) { + this.spawnVisualLightning(serverLevel, this.getRandomStormStrikePos(serverLevel)); + } + } + + LivingEntity target = this.getTarget(); + if (target != null && target.isAlive()) { + if (--this.lightningStrikeCooldown <= 0) { + this.lightningStrikeCooldown = this.isPhaseTwo() ? 26 + this.random.nextInt(20) : 60 + this.random.nextInt(80); + int strikeBolts = this.isPhaseTwo() ? 2 : 1; + for (int i = 0; i < strikeBolts; i++) { + this.spawnVisualLightning(serverLevel, this.getTargetStormStrikePos(target)); + } + target.hurt(AntarchyDamageSources.krakenLightning(serverLevel, this), this.isPhaseTwo() ? 12.0F : 8.0F); + } + } else { + this.lightningStrikeCooldown = this.isPhaseTwo() ? 30 : 60; + } + } + + private void setKrakenStormActive(boolean active) { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + if (active) { + this.stormActive = true; + serverLevel.setWeatherParameters(0, 200, true, true); + return; + } + + if (this.stormActive) { + this.stormActive = false; + serverLevel.setWeatherParameters(6000, 0, false, false); + } + } + + private void clearKrakenStorm() { + this.setKrakenStormActive(false); + } + + private void updateBossBarPlayers() { + if (this.tickCount % 20 != 0) { + return; + } + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + double bossBarRange = this.getBossBarRange(); + AABB bossBarArea = this.getBoundingBox().inflate(bossBarRange, 192.0D, bossBarRange); + List nearbyPlayers = serverLevel.getEntitiesOfClass( + ServerPlayer.class, + bossBarArea, + player -> player.isAlive() && this.isWithinBossBarRange(player) + ); + + for (ServerPlayer player : List.copyOf(this.bossEvent.getPlayers())) { + if (!nearbyPlayers.contains(player)) { + this.bossEvent.removePlayer(player); + } + } + + for (ServerPlayer player : nearbyPlayers) { + if (!this.bossEvent.getPlayers().contains(player)) { + this.bossEvent.addPlayer(player); + } + } + + this.setKrakenStormActive(!nearbyPlayers.isEmpty()); + } + + private double getBossBarRange() { + return Math.max(40.0D, com.craisinlord.antarchy.config.AntarchySettings.krakenBossBarRange()); + } + + private boolean isWithinBossBarRange(Entity entity) { + double bossBarRange = this.getBossBarRange(); + return this.horizontalDistanceToSqr(entity) <= bossBarRange * bossBarRange; + } + + private double horizontalDistanceToSqr(Entity entity) { + double dx = this.getX() - entity.getX(); + double dz = this.getZ() - entity.getZ(); + return dx * dx + dz * dz; + } + + private void applyPhaseTwoBuffs() { + AttributeInstance movementSpeed = this.getAttribute(Attributes.MOVEMENT_SPEED); + 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)) { + flyingSpeed.addPermanentModifier(PHASE_TWO_FLYING_SPEED); + } + + AttributeInstance attackDamage = this.getAttribute(Attributes.ATTACK_DAMAGE); + if (attackDamage != null && !(attackDamage.getModifier(PHASE_TWO_DAMAGE_ID) != null)) { + attackDamage.addPermanentModifier(PHASE_TWO_DAMAGE); + } + } + + private Vec3 getRandomStormStrikePos(ServerLevel serverLevel) { + double lx = this.getX() + (this.random.nextDouble() - 0.5D) * 56.0D; + double lz = this.getZ() + (this.random.nextDouble() - 0.5D) * 56.0D; + int ly = serverLevel.getHeight(Heightmap.Types.MOTION_BLOCKING, Mth.floor(lx), Mth.floor(lz)); + return new Vec3(lx, ly, lz); + } + + private Vec3 getTargetStormStrikePos(LivingEntity target) { + double spread = this.isPhaseTwo() ? 4.0D : 1.5D; + return new Vec3( + target.getX() + (this.random.nextDouble() - 0.5D) * spread, + target.getY(), + target.getZ() + (this.random.nextDouble() - 0.5D) * spread + ); + } + + private void spawnVisualLightning(ServerLevel serverLevel, Vec3 strikePos) { + LightningBolt bolt = EntityType.LIGHTNING_BOLT.create(serverLevel); + if (bolt == null) { + return; + } + + bolt.moveTo(strikePos.x, strikePos.y, strikePos.z); + bolt.setVisualOnly(true); + serverLevel.addFreshEntity(bolt); + } + + private void tickClientParticles() { + if (this.isRoaring() || this.phaseTransitionTicks > 0 || this.getAttackState() != ATTACK_NONE) { + if (this.tickCount % 3 == 0) { + this.level().addParticle( + ParticleTypes.BUBBLE, + this.getX() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), + this.getY() + 0.8D + this.random.nextDouble() * 0.6D, + this.getZ() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), + 0.0D, + 0.02D, + 0.0D + ); + } + } + } + + private void updateSwimRotation() { + 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, 6.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, 4.0F)); + } + } + + @Override + public void die(DamageSource damageSource) { + if (!this.level().isClientSide) { + this.setAnimationState(ANIM_DEATH); + this.actionTicks = 0; + this.attackCooldown = 0; + this.phaseTransitionTicks = 0; + this.setAttackState(ATTACK_NONE); + this.setRoaring(false); + this.setDeltaMovement(Vec3.ZERO); + this.getNavigation().stop(); + } + super.die(damageSource); + } + + @Override + protected void tickDeath() { + this.deathTime++; + + if (this.deathTime == 1) { + this.setAnimationState(ANIM_DEATH); + } + + if (this.deathTime >= DEATH_ANIM_TICKS) { + this.remove(RemovalReason.KILLED); + this.dropExperience(); + } + } + + private void updateAnimationState() { + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + + if (this.isRoaring()) { + this.setAnimationState(ANIM_CRY); + return; + } + + if (this.phaseTransitionTicks > 0) { + this.setAnimationState(ANIM_NONE); + return; + } + + switch (this.getAttackState()) { + case ATTACK_GRAB -> { + this.setAnimationState(ANIM_GRAB); + return; + } + case ATTACK_SWING_LEFT -> { + this.setAnimationState(ANIM_SWING_LEFT); + return; + } + case ATTACK_SWING_RIGHT -> { + this.setAnimationState(ANIM_SWING_RIGHT); + return; + } + case ATTACK_SLAM -> { + this.setAnimationState(ANIM_SLAM); + return; + } + default -> { + } + } + + this.setAnimationState(ANIM_NONE); + } +} 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 new file mode 100644 index 00000000..e4058999 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenMultipartLayout.java @@ -0,0 +1,79 @@ +package com.craisinlord.antarchy.content.entity.kraken; + +import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; +import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; + +public final class KrakenMultipartLayout implements MultipartLayout { + public static final KrakenMultipartLayout INSTANCE = new KrakenMultipartLayout(); + + public static final MultipartPartDefinition TENTACLE_MASS = new MultipartPartDefinition( + "tentacle_mass", + 7.5F, + 14.0F, + 0.90F, + -0.35D, + 14.00D, + 0.00D, + true + ); + + public static final MultipartPartDefinition HEAD = new MultipartPartDefinition( + "head", + 9.0F, + 4.0F, + 1.00F, + 1.50D, + 28.00D, + 0.00D, + true + ); + + public static final MultipartPartDefinition BACK_HEAD = new MultipartPartDefinition( + "back_head", + 5.5F, + 4.5F, + 1.10F, + 0.70D, + 31.00D, + 0.00D, + true + ); + + public static final MultipartPartDefinition MANTLE = new MultipartPartDefinition( + "mantle", + 8.0F, + 7.0F, + 1.00F, + 0.60D, + 34.50D, + 0.00D, + true + ); + + public static final MultipartPartDefinition CREST = new MultipartPartDefinition( + "crest", + 4.5F, + 4.0F, + 1.10F, + 0.55D, + 41.50D, + 0.00D, + true + ); + + private static final MultipartPartDefinition[] PARTS = { + TENTACLE_MASS, + HEAD, + BACK_HEAD, + MANTLE, + CREST + }; + + private KrakenMultipartLayout() { + } + + @Override + public MultipartPartDefinition[] parts() { + return PARTS; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakensGraspThrownTrident.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakensGraspThrownTrident.java new file mode 100644 index 00000000..c52d1973 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakensGraspThrownTrident.java @@ -0,0 +1,120 @@ +package com.craisinlord.antarchy.content.entity.kraken; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.item.KrakensGraspItem; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +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.LivingEntity; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.entity.projectile.ItemSupplier; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; + +public class KrakensGraspThrownTrident extends AbstractArrow implements ItemSupplier { + private boolean dealtDamage; + private boolean returning; + + public KrakensGraspThrownTrident(EntityType entityType, Level level) { + super(entityType, level); + } + + public KrakensGraspThrownTrident(EntityType entityType, LivingEntity owner, Level level, ItemStack stack) { + super(entityType, owner, level); + this.setBaseDamage(AntarchySettings.krakensGraspThrownDamage()); + } + + @Override + public ItemStack getItem() { + return new ItemStack(AntarchyObjects.KRAKENS_GRASP.get()); + } + + @Override + protected ItemStack getPickupItem() { + return new ItemStack(AntarchyObjects.KRAKENS_GRASP.get()); + } + + @Override + protected net.minecraft.sounds.SoundEvent getDefaultHitGroundSoundEvent() { + return SoundEvents.TRIDENT_HIT_GROUND; + } + + @Override + public void tick() { + if (this.inGroundTime > 4) { + this.dealtDamage = true; + } + + Entity owner = this.getOwner(); + int loyalty = this.effectiveLoyaltyLevel(); + if (loyalty > 0 && (this.dealtDamage || this.isNoPhysics()) && owner instanceof LivingEntity livingOwner && livingOwner.isAlive()) { + this.setNoPhysics(true); + Vec3 toOwner = owner.getEyePosition().subtract(this.position()); + this.setPosRaw(this.getX(), this.getY() + toOwner.y * 0.015D * loyalty, this.getZ()); + if (this.level().isClientSide) { + this.yOld = this.getY(); + } + + double speed = 0.05D * loyalty; + this.setDeltaMovement(this.getDeltaMovement().scale(0.95D).add(toOwner.normalize().scale(speed))); + if (!this.returning) { + this.returning = true; + this.playSound(SoundEvents.TRIDENT_RETURN, 10.0F, 1.0F); + } + } + + super.tick(); + } + + private int effectiveLoyaltyLevel() { + return AntarchySettings.krakensGraspInnateLoyalty() ? Mth.clamp(AntarchySettings.krakensGraspInnateLoyaltyLevel(), 1, 3) : 0; + } + + @Override + protected net.minecraft.world.phys.EntityHitResult findHitEntity(Vec3 startVec, Vec3 endVec) { + return this.dealtDamage ? null : super.findHitEntity(startVec, endVec); + } + + @Override + protected void onHitEntity(EntityHitResult result) { + Entity target = result.getEntity(); + float damage = (float) this.getBaseDamage(); + Entity owner = this.getOwner(); + DamageSource damageSource = this.damageSources().trident(this, owner != null ? owner : this); + + this.dealtDamage = true; + + if (target.hurt(damageSource, damage) && target.getType() != EntityType.ENDERMAN) { + if (target instanceof LivingEntity livingTarget) { + this.doPostHurtEffects(livingTarget); + } + } + + this.setDeltaMovement(this.getDeltaMovement().multiply(-0.01D, -0.1D, -0.01D)); + this.playSound(SoundEvents.TRIDENT_HIT, 1.0F, 1.0F); + + if (target instanceof LivingEntity livingTarget && this.level() instanceof ServerLevel serverLevel) { + KrakensGraspItem.strikeLightning(livingTarget, serverLevel); + TentacleEntity.spawnAt(serverLevel, new Vec3(target.getX(), target.getY(), target.getZ()), + owner instanceof LivingEntity livingOwner ? livingOwner : null); + } + } + + @Override + protected void onHitBlock(BlockHitResult result) { + super.onHitBlock(result); + if (this.level() instanceof ServerLevel serverLevel) { + Vec3 pos = result.getLocation(); + KrakensGraspItem.strikeLightningAt(serverLevel, pos.x, pos.y, pos.z); + TentacleEntity.spawnAt(serverLevel, pos, this.getOwner() instanceof LivingEntity livingOwner ? livingOwner : null); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java new file mode 100644 index 00000000..db10388a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java @@ -0,0 +1,169 @@ +package com.craisinlord.antarchy.content.entity.kraken; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +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; + +import java.util.List; +import java.util.UUID; + +public class TentacleEntity extends Mob implements GeoEntity { + private static final RawAnimation GRASP_ANIM = RawAnimation.begin().thenLoop("animation"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int lifetimeTicks; + private UUID ownerId; + + public TentacleEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setNoAi(true); + this.noPhysics = true; + this.noCulling = true; + this.xpReward = 0; + this.setInvulnerable(true); + } + + @Override + public boolean isInvulnerableTo(DamageSource damageSource) { + return true; + } + + @Override + public boolean fireImmune() { + return true; + } + + @Override + public void lavaHurt() { + } + + @Override + public void push(net.minecraft.world.entity.Entity entity) { + } + + @Override + public boolean isPickable() { + return false; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 20.0D) + .add(Attributes.MOVEMENT_SPEED, 0.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 1.0D); + } + + public static void spawnAt(ServerLevel level, Vec3 pos, LivingEntity owner) { + TentacleEntity tentacle = new TentacleEntity(com.craisinlord.antarchy.content.AntarchyObjects.TENTACLE.get(), level); + tentacle.moveTo(pos.x, pos.y, pos.z, 0.0F, 0.0F); + if (owner != null) { + tentacle.ownerId = owner.getUUID(); + } + level.addFreshEntity(tentacle); + level.playSound(null, pos.x, pos.y, pos.z, AntarchySoundEvents.KRAKEN_ATTACK.get(), SoundSource.HOSTILE, 1.0F, 1.0F); + } + + @Override + protected void registerGoals() { + } + + @Override + protected PathNavigation createNavigation(Level level) { + return new net.minecraft.world.entity.ai.navigation.GroundPathNavigation(this, level); + } + + @Override + public boolean isPushable() { + return false; + } + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + protected boolean shouldDespawnInPeaceful() { + return false; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + + this.lifetimeTicks++; + if (this.lifetimeTicks >= AntarchySettings.krakensGraspTentacleDurationTicks()) { + this.discard(); + return; + } + + int refreshTicks = Math.max(1, AntarchySettings.krakensGraspTentacleSlownessRefreshTicks()); + if (this.lifetimeTicks % refreshTicks == 0) { + this.slowNearbyEntities(refreshTicks); + } + } + + private void slowNearbyEntities(int refreshTicks) { + double radius = AntarchySettings.krakensGraspTentacleRadius(); + AABB area = this.getBoundingBox().inflate(radius, radius * 0.6D, radius); + List victims = this.level().getEntitiesOfClass(LivingEntity.class, area, + entity -> entity.isAlive() && !entity.isSpectator() && !entity.getUUID().equals(this.ownerId) + && !(entity instanceof Player player && player.isCreative())); + + int amplifier = Math.max(0, AntarchySettings.krakensGraspTentacleSlownessAmplifier()); + + for (LivingEntity victim : victims) { + victim.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, refreshTicks + 4, amplifier, false, true, true)); + + Vec3 pull = this.position().subtract(victim.position()).multiply(1.0D, 0.0D, 1.0D); + if (pull.lengthSqr() > 1.0E-4D) { + victim.setDeltaMovement(victim.getDeltaMovement().add(pull.normalize().scale(0.12D))); + victim.hurtMarked = true; + } + } + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "grasp_controller", 0, this::graspAnimController)); + } + + private PlayState graspAnimController(AnimationState state) { + return state.setAndContinue(GRASP_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidBoltEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidBoltEntity.java new file mode 100644 index 00000000..693d582a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidBoltEntity.java @@ -0,0 +1,138 @@ +package com.craisinlord.antarchy.content.entity.lucid; + +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.Holder; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.ThrowableProjectile; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; + +import java.util.function.Supplier; +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.animation.RawAnimation; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class LucidBoltEntity extends ThrowableProjectile implements GeoEntity { + private static final int MAX_LIFETIME_TICKS = 40; + private static final int INVERTED_EFFECT_DURATION = 100; + private static final double BASE_DAMAGE = 3.0D; + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + + public static Supplier invertedEffectSupplier; + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public LucidBoltEntity(EntityType entityType, Level level) { + super(entityType, level); + this.configureBolt(); + } + + public LucidBoltEntity(EntityType entityType, LivingEntity shooter, Level level) { + super(entityType, shooter, level); + this.configureBolt(); + } + + private void configureBolt() { + this.setNoGravity(true); + this.noCulling = true; + } + + @Override + protected void defineSynchedData() { + } + + @Override + protected float getGravity() { + return (float) (0.0D); + } + + @Override + public void tick() { + if (!this.level().isClientSide() && this.tickCount > MAX_LIFETIME_TICKS) { + this.discard(); + return; + } + super.tick(); + this.realignToMotion(); + } + + @Override + protected void onHitEntity(EntityHitResult result) { + if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) { + spawnImpactParticles(serverLevel, result.getLocation()); + if (result.getEntity() instanceof LivingEntity target && target.getType().is(AntarchyTags.Entities.LUCID_BOLT_IMMUNE)) { + this.discard(); + return; + } + + if (result.getEntity() instanceof LivingEntity target) { + Entity owner = this.getOwner(); + if (owner instanceof LivingEntity shooter) { + target.hurt(this.damageSources().mobAttack(shooter), (float) BASE_DAMAGE); + } else { + target.hurt(this.damageSources().magic(), (float) BASE_DAMAGE); + } + + if (invertedEffectSupplier != null) { + target.addEffect(new MobEffectInstance(invertedEffectSupplier.get(), INVERTED_EFFECT_DURATION, 0, false, true)); + } + } + } + + this.discard(); + } + + @Override + protected void onHitBlock(BlockHitResult result) { + if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) { + spawnImpactParticles(serverLevel, result.getLocation()); + this.level().playSound(null, result.getBlockPos(), AntarchySoundEvents.LUCID_BOLT_SOUND.get(), SoundSource.HOSTILE, 0.8F, 1.0F); + } + this.discard(); + } + + public static void spawnImpactParticles(ServerLevel level, Vec3 position) { + level.sendParticles(AntarchyObjects.LUCID_BOLT_IMPACT_LARGE.get(), position.x, position.y, position.z, 2, 0.08D, 0.08D, 0.08D, 0.01D); + level.sendParticles(AntarchyObjects.LUCID_BOLT_IMPACT_SMALL.get(), position.x, position.y, position.z, 10, 0.16D, 0.16D, 0.16D, 0.065D); + } + + private void realignToMotion() { + Vec3 motion = this.getDeltaMovement(); + if (motion.lengthSqr() < 1.0E-6D) { + return; + } + + double horizontal = Math.sqrt(motion.x * motion.x + motion.z * motion.z); + this.setYRot((float) (net.minecraft.util.Mth.atan2(motion.x, motion.z) * (180.0D / Math.PI))); + this.setXRot((float) (net.minecraft.util.Mth.atan2(motion.y, horizontal) * (180.0D / Math.PI))); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "bolt_controller", 0, this::boltController)); + } + + private PlayState boltController(AnimationState state) { + 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/entity/lucid/LucidEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java new file mode 100644 index 00000000..e9649178 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java @@ -0,0 +1,567 @@ +package com.craisinlord.antarchy.content.entity.lucid; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +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.world.Difficulty; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffect; +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.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.ai.util.HoverRandomPos; +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.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.Supplier; + +public class LucidEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor ANIMATION_STATE = + SynchedEntityData.defineId(LucidEntity.class, EntityDataSerializers.INT); + + private static final String ATTACK_COOLDOWN_KEY = "AttackCooldown"; + private static final String ATTACK_ANIMATION_TICKS_KEY = "AttackAnimationTicks"; + private static final String BURST_SHOTS_REMAINING_KEY = "BurstShotsRemaining"; + private static final String BURST_SHOT_DELAY_KEY = "BurstShotDelay"; + + private static final int ANIM_IDLE = 0; + private static final int ANIM_FLY = 1; + private static final int ANIM_ATTACK = 2; + private static final int ANIM_DEATH = 3; + + public static Supplier invertedEffectSupplier; + public static Supplier> boltEntityTypeSupplier; + + private static final int ATTACK_WINDUP_TICKS = 16; + private static final int ATTACK_RECOVERY_TICKS = 8; + private static final int ATTACK_BURST_SHOTS = 3; + private static final int ATTACK_BURST_INTERVAL_TICKS = 6; + private static final int ATTACK_COOLDOWN_TICKS = 52; + private static final int DEATH_TICKS = 15; + + private static final double MIN_EFFECTIVE_ATTACK_RANGE = 10.0D; + 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 RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int attackCooldown; + private int attackAnimationTicks; + private int burstShotsRemaining; + private int burstShotDelayTicks; + + public LucidEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new FlyingMoveControl(this, 2, true); + this.xpReward = 10; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.lucidHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.lucidAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.lucidMovementSpeed()) + .add(Attributes.FLYING_SPEED, AntarchySettings.lucidFlyingSpeed()) + .add(Attributes.FOLLOW_RANGE, 40.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.lucidKnockbackResistance()); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, + MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + return level.getDifficulty() != Difficulty.PEACEFUL + && pos.getY() <= 250 + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && level.isEmptyBlock(pos.above(2)); + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new LucidPatrolGoal()); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 20, true, false, this::canTargetEntity)); + } + + @Override + public int getMaxHeadYRot() { + return 360; + } + + @Override + public int getMaxHeadXRot() { + return 45; + } + + @Override + protected PathNavigation createNavigation(Level level) { + FlyingPathNavigation nav = new FlyingPathNavigation(this, level); + nav.setCanOpenDoors(false); + nav.setCanFloat(true); + nav.setCanPassDoors(true); + return nav; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .triggerableAnim("attack", ATTACK_ANIM) + .triggerableAnim("death", DEATH_ANIM)); + } + + private PlayState mainAnimController(AnimationState state) { + return switch (this.getAnimationState()) { + case ANIM_FLY -> state.setAndContinue(FLY_ANIM); + case ANIM_ATTACK -> state.setAndContinue(ATTACK_ANIM); + case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); + default -> state.setAndContinue(IDLE_ANIM); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + this.setNoGravity(true); + + if (this.level().isClientSide) { + return; + } + + if (this.isDeadOrDying()) { + this.updateAnimationState(); + return; + } + + if (this.attackCooldown > 0) { + this.attackCooldown--; + } + + LivingEntity target = this.getTarget(); + if (this.attackAnimationTicks > 0) { + this.tickAttack(target); + this.updateAnimationState(); + return; + } + + if (target != null && this.canTargetEntity(target)) { + this.tickCombatMovement(target); + } + + this.updateAnimationState(); + } + + @Override + public void travel(Vec3 travelVector) { + if (this.isEffectiveAi() || this.isNoGravity()) { + this.moveRelative(this.getSpeed(), travelVector); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.setDeltaMovement(this.getDeltaMovement().scale(0.91D)); + return; + } + super.travel(travelVector); + } + + private void tickCombatMovement(LivingEntity target) { + double distanceSqr = this.distanceToSqr(target); + + this.faceTowards(target.getEyePosition(), 12.0F, 8.0F); + this.getMoveControl().setWantedPosition(target.getX(), target.getY() + 2.0D, target.getZ(), 0.42D); + + if (this.attackCooldown <= 0 + && distanceSqr <= this.getAttackRange() * this.getAttackRange() * 1.1D + && this.hasLineOfSight(target)) { + this.startAttack(); + } + } + + private void startAttack() { + this.attackAnimationTicks = ATTACK_WINDUP_TICKS + ATTACK_RECOVERY_TICKS + (ATTACK_BURST_SHOTS - 1) * ATTACK_BURST_INTERVAL_TICKS; + this.burstShotsRemaining = ATTACK_BURST_SHOTS; + this.burstShotDelayTicks = ATTACK_WINDUP_TICKS; + this.attackCooldown = ATTACK_COOLDOWN_TICKS; + this.getNavigation().stop(); + } + + private void tickAttack(@Nullable LivingEntity target) { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.84D)); + + if (target == null || !this.canTargetEntity(target)) { + this.attackAnimationTicks = 0; + this.burstShotsRemaining = 0; + this.burstShotDelayTicks = 0; + return; + } + + this.faceTowards(target.getEyePosition(), 16.0F, 10.0F); + + double riseTargetY = Math.max(this.getY() + 1.25D, target.getY() + 3.0D); + this.getMoveControl().setWantedPosition(this.getX(), riseTargetY, this.getZ(), 0.42D); + + if (this.burstShotDelayTicks > 0) { + this.burstShotDelayTicks--; + } + if (this.burstShotsRemaining > 0 && this.burstShotDelayTicks <= 0) { + this.fireBoltAt(target); + this.burstShotsRemaining--; + this.burstShotDelayTicks = this.burstShotsRemaining > 0 ? ATTACK_BURST_INTERVAL_TICKS : ATTACK_RECOVERY_TICKS; + } + + if (--this.attackAnimationTicks <= 0) { + this.attackAnimationTicks = 0; + } + } + + private void fireBoltAt(LivingEntity target) { + if (!(this.level() instanceof ServerLevel serverLevel) || boltEntityTypeSupplier == null) { + return; + } + + LucidBoltEntity bolt = new LucidBoltEntity(boltEntityTypeSupplier.get(), this, serverLevel); + Vec3 origin = this.getEyePosition(); + Vec3 lead = target.getDeltaMovement().scale(0.35D); + Vec3 aimPoint = target.getEyePosition().add(lead); + Vec3 toTarget = aimPoint.subtract(origin); + if (toTarget.lengthSqr() < 1.0E-6D) { + return; + } + + Vec3 direction = toTarget.normalize(); + Vec3 launchPos = origin.add(direction.scale(0.75D)); + double horizontal = Math.sqrt(direction.x * direction.x + direction.z * direction.z); + float yaw = (float) (Mth.atan2(direction.z, direction.x) * (180.0D / Math.PI)) - 90.0F; + float pitch = (float) (-(Mth.atan2(direction.y, horizontal) * (180.0D / Math.PI))); + + bolt.setPos(launchPos.x, launchPos.y, launchPos.z); + bolt.setYRot(yaw); + bolt.setXRot(pitch); + bolt.shoot( + direction.x + (this.random.nextDouble() - 0.5D) * 0.18D, + direction.y + (this.random.nextDouble() - 0.5D) * 0.12D, + direction.z + (this.random.nextDouble() - 0.5D) * 0.18D, + 0.71F, + 0.0F + ); + serverLevel.addFreshEntity(bolt); + } + + + private double getAttackRange() { + return Math.max(MIN_EFFECTIVE_ATTACK_RANGE, AntarchySettings.lucidAttackRange()); + } + + private void faceTowards(Vec3 targetPos, float maxYawStep, float maxPitchStep) { + Vec3 delta = targetPos.subtract(this.getEyePosition()); + double horizontal = Math.sqrt(delta.x * delta.x + delta.z * delta.z); + if (horizontal < 1.0E-6D && Math.abs(delta.y) < 1.0E-6D) { + return; + } + + float targetYaw = (float) (Mth.atan2(delta.z, delta.x) * (180.0D / Math.PI)) - 90.0F; + float targetPitch = (float) (-(Mth.atan2(delta.y, horizontal) * (180.0D / Math.PI))); + float nextYaw = Mth.approachDegrees(this.getYRot(), targetYaw, maxYawStep); + float nextPitch = Mth.approachDegrees(this.getXRot(), targetPitch, maxPitchStep); + + this.setYRot(nextYaw); + this.setYHeadRot(nextYaw); + this.yBodyRot = nextYaw; + this.setXRot(nextPitch); + } + + @Override + public void die(DamageSource damageSource) { + if (!this.level().isClientSide) { + this.setAnimationState(ANIM_DEATH); + this.attackAnimationTicks = 0; + this.attackCooldown = 0; + this.burstShotsRemaining = 0; + this.burstShotDelayTicks = 0; + this.setDeltaMovement(Vec3.ZERO); + this.getNavigation().stop(); + } + super.die(damageSource); + } + + @Override + protected void tickDeath() { + this.deathTime++; + + if (this.deathTime == 1) { + this.setAnimationState(ANIM_DEATH); + } + + if (this.deathTime >= DEATH_TICKS) { + this.remove(RemovalReason.KILLED); + this.dropExperience(); + } + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + public boolean fireImmune() { + return true; + } + + @Override + public void lavaHurt() { + } + + @Override + protected void checkFallDamage(double y, boolean onGround, + net.minecraft.world.level.block.state.BlockState state, BlockPos pos) { + } + + @Override + public boolean canAttack(LivingEntity target) { + return this.canTargetEntity(target) && super.canAttack(target); + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return super.removeWhenFarAway(distanceToClosestPlayer); + } + + @Override + protected SoundEvent getAmbientSound() { + return null; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.LUCID_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.LUCID_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 0.9F; + } + + @Override + public float getVoicePitch() { + return 1.4F + this.random.nextFloat() * 0.2F; + } + + public boolean shouldPlayAmbientLoop() { + return !this.isDeadOrDying() && this.getAnimationState() != ANIM_DEATH; + } + + public boolean shouldPlayFlyingLoop() { + return this.shouldPlayAmbientLoop() && this.getAnimationState() != ANIM_IDLE; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(ATTACK_COOLDOWN_KEY, this.attackCooldown); + tag.putInt(ATTACK_ANIMATION_TICKS_KEY, this.attackAnimationTicks); + tag.putInt(BURST_SHOTS_REMAINING_KEY, this.burstShotsRemaining); + tag.putInt(BURST_SHOT_DELAY_KEY, this.burstShotDelayTicks); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.attackCooldown = tag.getInt(ATTACK_COOLDOWN_KEY); + this.attackAnimationTicks = tag.getInt(ATTACK_ANIMATION_TICKS_KEY); + this.burstShotsRemaining = tag.getInt(BURST_SHOTS_REMAINING_KEY); + this.burstShotDelayTicks = tag.getInt(BURST_SHOT_DELAY_KEY); + } + + public int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setAnimationState(int state) { + if (this.entityData.get(ANIMATION_STATE) != state) { + this.entityData.set(ANIMATION_STATE, state); + String trigger = switch (state) { + case ANIM_ATTACK -> "attack"; + case ANIM_DEATH -> "death"; + default -> null; + }; + if (trigger != null) { + this.triggerAnim("main_controller", trigger); + } + } + } + + private void updateAnimationState() { + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + if (this.attackAnimationTicks > 0) { + this.setAnimationState(ANIM_ATTACK); + return; + } + LivingEntity target = this.getTarget(); + if (target != null && this.canTargetEntity(target)) { + this.setAnimationState(ANIM_FLY); + return; + } + this.setAnimationState(ANIM_IDLE); + } + + private boolean canTargetEntity(@Nullable LivingEntity entity) { + if (entity == null || !entity.isAlive() || entity == this || entity.getType() == this.getType()) { + return false; + } + if (entity instanceof Player player) { + return !player.isCreative() && !player.isSpectator() + && this.level().getDifficulty() != Difficulty.PEACEFUL; + } + return entity.isAttackable(); + } + + private final class LucidPatrolGoal extends Goal { + private static final int RETARGET_DELAY_MIN = 40; + private static final int RETARGET_DELAY_MAX = 80; + private static final double PATROL_SPEED = 0.18D; + + private int retargetDelay; + + private LucidPatrolGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + return LucidEntity.this.getTarget() == null + && LucidEntity.this.attackAnimationTicks <= 0 + && LucidEntity.this.getNavigation().isDone(); + } + + @Override + public boolean canContinueToUse() { + return LucidEntity.this.getTarget() == null + && LucidEntity.this.attackAnimationTicks <= 0 + && LucidEntity.this.getNavigation().isInProgress(); + } + + @Override + public void start() { + this.retargetDelay = Mth.nextInt(LucidEntity.this.random, RETARGET_DELAY_MIN, RETARGET_DELAY_MAX); + this.moveToNewTarget(); + } + + @Override + public void stop() { + LucidEntity.this.getNavigation().stop(); + LucidEntity.this.setDeltaMovement(Vec3.ZERO); + this.retargetDelay = 0; + } + + @Override + public void tick() { + if (LucidEntity.this.getTarget() != null || LucidEntity.this.attackAnimationTicks > 0) { + this.stop(); + return; + } + + if (LucidEntity.this.getNavigation().isDone()) { + if (this.retargetDelay-- <= 0) { + this.retargetDelay = Mth.nextInt(LucidEntity.this.random, RETARGET_DELAY_MIN, RETARGET_DELAY_MAX); + this.moveToNewTarget(); + } + } + } + + private void moveToNewTarget() { + Vec3 target = this.findPatrolTarget(); + if (target == null) { + return; + } + + LucidEntity.this.getNavigation().moveTo(target.x, target.y, target.z, PATROL_SPEED); + } + + @Nullable + private Vec3 findPatrolTarget() { + Vec3 bias = LucidEntity.this.getDeltaMovement(); + if (bias.lengthSqr() < 1.0E-4D) { + bias = LucidEntity.this.getViewVector(0.0F); + } + Vec3 hover = HoverRandomPos.getPos( + LucidEntity.this, + 10, + 5, + bias.x, + bias.z, + (float) Math.PI / 2.0F, + 3, + 1 + ); + if (hover != null) { + return hover; + } return new Vec3( + LucidEntity.this.getX() + (LucidEntity.this.random.nextDouble() - 0.5D) * 10.0D, + LucidEntity.this.getY() + (LucidEntity.this.random.nextDouble() - 0.5D) * 4.0D, + LucidEntity.this.getZ() + (LucidEntity.this.random.nextDouble() - 0.5D) * 10.0D + ); + } + } + +} + + + + + + diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEyeProjectileEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEyeProjectileEntity.java new file mode 100644 index 00000000..58ca399f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEyeProjectileEntity.java @@ -0,0 +1,75 @@ +package com.craisinlord.antarchy.content.entity.lucid; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.core.Holder; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.ThrowableItemProjectile; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +import java.util.function.Supplier; + +public class LucidEyeProjectileEntity extends ThrowableItemProjectile { + public static Supplier defaultItemSupplier; + + + public static Supplier invertedEffectSupplier; + + public LucidEyeProjectileEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public LucidEyeProjectileEntity(EntityType entityType, + LivingEntity thrower, Level level) { + super(entityType, thrower, level); + } + + + @Override + protected float getGravity() { + return (float) (-0.03); + } + + @Override + protected Item getDefaultItem() { + return defaultItemSupplier != null ? defaultItemSupplier.get() : net.minecraft.world.item.Items.ENDER_PEARL; + } + + @Override + protected void onHit(HitResult hitResult) { + super.onHit(hitResult); + + if (this.level() instanceof ServerLevel serverLevel) { + LivingEntity owner = this.getOwner() instanceof LivingEntity le ? le : null; + if (owner != null) { + Vec3 destination = hitResult.getLocation(); + owner.resetFallDistance(); + owner.teleportTo(destination.x, destination.y, destination.z); + owner.hurt(owner.damageSources().fall(), 5.0F); + } + + if (owner != null && invertedEffectSupplier != null) { + int effectDurationTicks = (int) Math.round(AntarchySettings.lucidPearlInvertedDurationSeconds() * 20.0D); + owner.addEffect(new MobEffectInstance( + invertedEffectSupplier.get(), effectDurationTicks, 0, false, true)); + serverLevel.playSound(null, owner.getX(), owner.getY(), owner.getZ(), + SoundEvents.AMETHYST_BLOCK_CHIME, SoundSource.PLAYERS, + 1.0F, 0.8F + this.random.nextFloat() * 0.4F); + } + } + + if (!this.level().isClientSide) { + this.level().broadcastEntityEvent(this, (byte) 3); + this.discard(); + } + } + +} 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 new file mode 100644 index 00000000..9e5c1a9d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartEntityOwner.java @@ -0,0 +1,40 @@ +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 new file mode 100644 index 00000000..ba954583 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartFramework.java @@ -0,0 +1,119 @@ +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 new file mode 100644 index 00000000..81bf5b01 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartLayout.java @@ -0,0 +1,24 @@ +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 new file mode 100644 index 00000000..d2b36603 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartAccess.java @@ -0,0 +1,5 @@ +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 new file mode 100644 index 00000000..194758e5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartDefinition.java @@ -0,0 +1,13 @@ +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 new file mode 100644 index 00000000..b5ce393b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartAttackPayload.java @@ -0,0 +1,28 @@ +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 new file mode 100644 index 00000000..9d2e5603 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartInteractPayload.java @@ -0,0 +1,28 @@ +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 new file mode 100644 index 00000000..2b6c92dc --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java @@ -0,0 +1,123 @@ +package com.craisinlord.antarchy.content.entity.nightmare; + +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.server.level.ServerLevel; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; +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.animation.RawAnimation; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class NightmareBiteEntity extends Entity implements GeoEntity { + private static final EntityDataAccessor PHASE_TWO = SynchedEntityData.defineId(NightmareBiteEntity.class, EntityDataSerializers.BOOLEAN); + private static final RawAnimation BITE_ANIM = RawAnimation.begin().thenPlay("bite"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int ageTicks; + + public NightmareBiteEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setInvulnerable(true); + this.noPhysics = true; + this.noCulling = true; + } + + public static NightmareBiteEntity spawnAt(ServerLevel level, Vec3 pos, float yaw, boolean phaseTwo) { + NightmareBiteEntity bite = new NightmareBiteEntity(AntarchyObjects.NIGHTMARE_BITE.get(), level); + bite.moveTo(pos.x, pos.y, pos.z, yaw, 0.0F); + bite.setPhaseTwo(phaseTwo); + level.addFreshEntity(bite); + return bite; + } + + @Override + protected void defineSynchedData() { + this.entityData.define(PHASE_TWO, false); + } + + @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; + } + + public boolean isPhaseTwo() { + return this.entityData.get(PHASE_TWO); + } + + private void setPhaseTwo(boolean phaseTwo) { + this.getEntityData().set(PHASE_TWO, phaseTwo); + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + if (++this.ageTicks >= 12) { + this.discard(); + } + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + tag.putBoolean("PhaseTwo", this.isPhaseTwo()); + tag.putInt("AgeTicks", this.ageTicks); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + this.setPhaseTwo(tag.getBoolean("PhaseTwo")); + this.ageTicks = tag.getInt("AgeTicks"); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "bite_controller", 0, this::biteController)); + } + + private PlayState biteController(AnimationState state) { + return state.setAndContinue(BITE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} 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 new file mode 100644 index 00000000..e3d0257d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java @@ -0,0 +1,857 @@ +package com.craisinlord.antarchy.content.entity.nightmare; + +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.damage.AntarchyDamageSources; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.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.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.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.MoverType; +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.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +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.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.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.List; + +public class NightmareEntity extends Monster implements GeoEntity { + + private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ROARING = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); + + private static final String ATTACK_COOLDOWN_KEY = "AttackCooldown"; + private static final String ATTACK_ANIMATION_TICKS_KEY = "AttackAnimationTicks"; + private static final String ATTACK_HIT_APPLIED_KEY = "AttackHitApplied"; + private static final String ROAR_TICKS_KEY = "RoarTicks"; + private static final String ROAR_COOLDOWN_KEY = "RoarCooldown"; + 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 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 ATTACK_TOTAL_TICKS = 20; + private static final int ATTACK_DAMAGE_TICK = 10; + private static final int INTRO_ROAR_TICKS = 30; + private static final int COMBAT_ROAR_TICKS = 30; + private static final int DEATH_TICKS = 30; + private static final int TARGET_RESET_TICKS = 60; + private static final int MIN_AIRBORNE_TICKS_FOR_FLY_ANIM = 4; + 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 FLIGHT_CEILING_CLEARANCE_BLOCKS = 4; + + 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_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 ROAR_RETRY_DISTANCE_SQR = 400.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 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 final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int attackCooldown; + private int attackAnimationTicks; + private int roarTicks; + private int roarCooldown; + private int targetlessTicks; + private int airborneTicks; + private int landingCooldown; + private int groundMoveTicks; + private int wingFlapCooldown; + private int blockBreakCooldown; + private boolean attackHitApplied; + private boolean introRoarUsed; + private boolean flyingToTarget; + + public NightmareEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new FlyingMoveControl(this, 12, true); + this.xpReward = 25; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.nightmareHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.nightmareAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.nightmareMovementSpeed()) + .add(Attributes.FLYING_SPEED, 0.375D) + .add(Attributes.FOLLOW_RANGE, 48.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.75D) + .add(Attributes.ARMOR, 8.0D); + } + + 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); + boolean posEmpty = level.isEmptyBlock(pos); + boolean aboveEmpty = level.isEmptyBlock(pos.above()); + return level.getDifficulty() != Difficulty.PEACEFUL && sturdy && posEmpty && aboveEmpty; + } + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + this.entityData.define(ANIMATION_STATE, ANIM_IDLE); + this.entityData.define(ROARING, 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.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)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + int animState = this.getAnimationState(); + state.getController().setAnimationSpeed(switch (animState) { + case ANIM_FLY -> 0.45D; + default -> 1.0D; + }); + 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); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @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(); + + if (this.level().isClientSide) { + this.tickClientParticles(); + this.updateFlightRotation(); + if (this.isRoaring()) { + com.craisinlord.antarchy.content.client.CameraShakeClientState.register( + this, + com.craisinlord.antarchy.content.client.CameraShakeClientState.NIGHTMARE_RANGE, + com.craisinlord.antarchy.content.client.CameraShakeClientState.NIGHTMARE_STRENGTH, + this::isRoaring + ); + } + return; + } + + this.setNoGravity(this.flyingToTarget && !this.isTooCloseToCeiling()); + + int prevAirborneTicks = this.airborneTicks; + this.airborneTicks = this.onGround() ? 0 : this.airborneTicks + 1; + if (this.onGround() && prevAirborneTicks > 5) { + this.landingCooldown = 100; + } + + if (this.attackCooldown > 0) this.attackCooldown--; + if (this.roarCooldown > 0) this.roarCooldown--; + if (this.blockBreakCooldown > 0) this.blockBreakCooldown--; + if (this.landingCooldown > 0) this.landingCooldown--; + + LivingEntity target = this.getTarget(); + if (!this.canTargetEntity(target)) { + this.setTarget(null); + target = null; + } + + if (target == null) { + this.targetlessTicks++; + if (this.targetlessTicks >= TARGET_RESET_TICKS) { + this.introRoarUsed = false; + } + } else { + this.targetlessTicks = 0; + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + } + + if (this.isDeadOrDying()) { + this.updateFlightRotation(); + return; + } + + if (this.attackAnimationTicks > 0) { + this.tickAttack(target); + } + + this.updateAnimationState(); + this.updateFlightRotation(); + } + + @Override + public void travel(Vec3 travelVector) { + if (this.isEffectiveAi() && this.isNoGravity()) { + this.moveRelative(this.getSpeed(), travelVector); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.setDeltaMovement(this.getDeltaMovement().scale(0.91D)); + return; + } + super.travel(travelVector); + } + + @Override + public boolean doHurtTarget(Entity target) { + if (!(target instanceof LivingEntity livingTarget)) return false; + boolean hurt = this.level() instanceof ServerLevel serverLevel + ? livingTarget.hurt(AntarchyDamageSources.nightmareMauling(serverLevel, this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)) + : super.doHurtTarget(target); + if (hurt) { + this.playNightmareBiteSound(); + this.applyNightmareStrikeEffects(livingTarget); + } + return hurt; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + public boolean fireImmune() { + return true; + } + + @Override + public void lavaHurt() { + } + + @Override + public boolean isInvulnerableTo(DamageSource source) { + return source.is(net.minecraft.world.damagesource.DamageTypes.DROWN) || super.isInvulnerableTo(source); + } + + @Override + public boolean canBeAffected(MobEffectInstance effectInstance) { + if (effectInstance.getEffect() == MobEffects.WITHER) { + return false; + } + return super.canBeAffected(effectInstance); + } + + @Override + protected void checkFallDamage(double y, boolean onGround, net.minecraft.world.level.block.state.BlockState state, BlockPos pos) { + } + + @Override + public boolean canAttack(LivingEntity target) { + return this.canTargetEntity(target) && super.canAttack(target); + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.NIGHTMARE_IDLE.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.NIGHTMARE_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 1.25F; + } + + @Override + public float getVoicePitch() { + return 0.75F + this.random.nextFloat() * 0.1F; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(ATTACK_COOLDOWN_KEY, this.attackCooldown); + tag.putInt(ATTACK_ANIMATION_TICKS_KEY, this.attackAnimationTicks); + tag.putBoolean(ATTACK_HIT_APPLIED_KEY, this.attackHitApplied); + tag.putInt(ROAR_TICKS_KEY, this.roarTicks); + tag.putInt(ROAR_COOLDOWN_KEY, this.roarCooldown); + tag.putBoolean(INTRO_ROAR_USED_KEY, this.introRoarUsed); + tag.putInt(TARGETLESS_TICKS_KEY, this.targetlessTicks); + tag.putInt("AirborneTicks", this.airborneTicks); + tag.putBoolean("Roaring", this.isRoaring()); + tag.putInt(ANIMATION_STATE_KEY, this.getAnimationState()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.attackCooldown = tag.getInt(ATTACK_COOLDOWN_KEY); + this.attackAnimationTicks = tag.getInt(ATTACK_ANIMATION_TICKS_KEY); + this.attackHitApplied = tag.getBoolean(ATTACK_HIT_APPLIED_KEY); + this.roarTicks = tag.getInt(ROAR_TICKS_KEY); + this.roarCooldown = tag.getInt(ROAR_COOLDOWN_KEY); + this.introRoarUsed = tag.getBoolean(INTRO_ROAR_USED_KEY); + this.targetlessTicks = tag.getInt(TARGETLESS_TICKS_KEY); + this.airborneTicks = tag.getInt("AirborneTicks"); + this.entityData.set(ROARING, tag.getBoolean("Roaring")); + this.entityData.set(ANIMATION_STATE, tag.contains(ANIMATION_STATE_KEY) ? tag.getInt(ANIMATION_STATE_KEY) : ANIM_IDLE); + } + + @Override + public void die(DamageSource damageSource) { + if (!this.level().isClientSide) { + this.attackAnimationTicks = 0; + this.attackCooldown = 0; + this.roarTicks = 0; + this.setRoaring(false); + this.setDeltaMovement(Vec3.ZERO); + this.getNavigation().stop(); + } + super.die(damageSource); + } + + @Override + protected void tickDeath() { + this.deathTime++; + if (this.deathTime >= DEATH_TICKS) { + this.remove(RemovalReason.KILLED); + this.dropExperience(); + } + } + + public boolean isRoaring() { + return this.entityData.get(ROARING); + } + + public int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setRoaring(boolean roaring) { + this.entityData.set(ROARING, roaring); + } + + private void setAnimationState(int animationState) { + if (this.entityData.get(ANIMATION_STATE) != animationState) { + this.entityData.set(ANIMATION_STATE, animationState); + } + } + + 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; + } + + private void startRoar() { + this.roarTicks = this.introRoarUsed ? COMBAT_ROAR_TICKS : INTRO_ROAR_TICKS; + this.introRoarUsed = true; + this.roarCooldown = 240 + this.random.nextInt(140); + this.attackAnimationTicks = 0; + this.attackHitApplied = false; + this.setRoaring(true); + 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); + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.SOUL_FIRE_FLAME, this.getX(), this.getY() + 2.0D, this.getZ(), 20, 1.1D, 0.8D, 1.1D, 0.02D); + serverLevel.sendParticles(ParticleTypes.SMOKE, this.getX(), this.getY() + 2.0D, this.getZ(), 12, 0.9D, 0.6D, 0.9D, 0.02D); + } + } + + private void tickRoar(@Nullable LivingEntity target) { + this.getNavigation().stop(); + this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); + this.setDeltaMovement(this.getDeltaMovement().scale(0.6D)); + if (target != null) { + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + this.faceTowardTarget(target, 14.0F); + } + if (--this.roarTicks <= 0) { + this.roarTicks = 0; + this.setRoaring(false); + this.attackCooldown = Math.max(this.attackCooldown, 18); + } + } + + private void startAttack(LivingEntity target) { + this.attackAnimationTicks = ATTACK_TOTAL_TICKS; + this.attackHitApplied = false; + this.attackCooldown = ATTACK_TOTAL_TICKS + 12; + this.getNavigation().stop(); + Vec3 lunge = target.getEyePosition().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)); + this.hasImpulse = true; + } + } + + private void tickAttack(@Nullable LivingEntity target) { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.93D)); + if (target != null) { + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + this.faceTowardTarget(target, 20.0F); + } + int elapsed = ATTACK_TOTAL_TICKS - this.attackAnimationTicks; + if (!this.attackHitApplied && elapsed >= ATTACK_DAMAGE_TICK) { + this.attackHitApplied = true; + this.playNightmareBiteSound(); + this.performAttackHit(); + } + if (--this.attackAnimationTicks <= 0) { + this.attackAnimationTicks = 0; + } + } + + 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); + float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE); + for (LivingEntity victim : victims) { + if (!this.isInFront(victim.position(), -0.25D)) 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(ParticleTypes.SMOKE, this.getX(), this.getY() + 1.6D, this.getZ(), 8, 0.7D, 0.25D, 0.7D, 0.03D); + } + } + + private void playNightmareBiteSound() { + this.playSound(AntarchySoundEvents.NIGHTMARE_BITE.get(), 1.3F, 0.72F + this.random.nextFloat() * 0.08F); + } + + private void applyNightmareStrikeEffects(LivingEntity target) { + if (target instanceof Player) { + target.addEffect(new MobEffectInstance(AntarchyObjects.DREAD.get(), DREAD_TICKS, 0)); + } + target.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, WEAKNESS_TICKS, 0)); + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(AntarchyObjects.NIGHTMARE_FIRE_FLAME.get(), target.getX(), target.getY(0.8D), target.getZ(), 10, 0.28D, 0.22D, 0.28D, 0.01D); + serverLevel.sendParticles(ParticleTypes.SMOKE, target.getX(), target.getY(0.8D), target.getZ(), 6, 0.22D, 0.16D, 0.22D, 0.02D); + } + } + + 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); + target.hurtMarked = true; + } + + private DamageSource nightmareDamageSource() { + return this.level() instanceof ServerLevel serverLevel + ? AntarchyDamageSources.nightmareMauling(serverLevel, this) + : this.damageSources().mobAttack(this); + } + + 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); + if (this.level().getBlockState(cursor).is(AntarchyTags.Blocks.NIGHTMARE_BREAKABLE)) { + if (this.blockBreakCooldown <= 0) { + this.level().destroyBlock(cursor.immutable(), true, this); + this.blockBreakCooldown = BLOCK_BREAK_TICKS; + } + this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); + return true; + } + } + return false; + } + + private boolean canTargetEntity(@Nullable LivingEntity entity) { + if (entity == null || !entity.isAlive() || entity == this || entity.getType() == this.getType()) return false; + if (entity.getType().is(AntarchyTags.Entities.NIGHTMARE_NO_ATTACK)) return false; + if (entity instanceof Player player) { + return !player.isCreative() && !player.isSpectator() && this.level().getDifficulty() != Difficulty.PEACEFUL; + } + 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; + } + + private double horizontalDistanceToSqr(LivingEntity target) { + double dx = target.getX() - this.getX(); + double dz = target.getZ() - this.getZ(); + 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); + 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()); + 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; + float nextYaw = Mth.approachDegrees(this.getYRot(), targetYaw, maxTurnDegrees); + this.setYRot(nextYaw); + this.yBodyRot = nextYaw; + this.yHeadRot = nextYaw; + } + if (toTarget.lengthSqr() > 1.0E-4D) { + float targetPitch = (float) (-(Mth.atan2(toTarget.y, horizontal) * (180.0D / Math.PI))); + this.setXRot(Mth.approachDegrees(this.getXRot(), targetPitch, maxTurnDegrees * 0.7F)); + } + } + + + private boolean isTooCloseToCeiling() { + BlockPos current = BlockPos.containing(this.getX(), this.getY(), this.getZ()); + for (int i = 1; i <= FLIGHT_CEILING_CLEARANCE_BLOCKS; i++) { + if (!this.level().isEmptyBlock(current.above(i))) return true; + } + return false; + } + + private void tickClientParticles() { + if ((this.isRoaring() || this.attackAnimationTicks > 0) && this.tickCount % 3 == 0) { + this.level().addParticle( + ParticleTypes.SOUL_FIRE_FLAME, + this.getX() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), + this.getY() + 1.2D + this.random.nextDouble() * 1.1D, + this.getZ() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), + 0.0D, 0.03D, 0.0D + ); + } + } + + 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; + float nextYaw = Mth.approachDegrees(this.getYRot(), targetYaw, 4.0F); + this.setYRot(nextYaw); + this.yBodyRot = Mth.approachDegrees(this.yBodyRot, nextYaw, 2.5F); + this.yHeadRot = Mth.approachDegrees(this.yHeadRot, nextYaw, 3.5F); + } + if (!this.onGround() && 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, 3.0F)); + } else { + this.setXRot(Mth.approachDegrees(this.getXRot(), 0.0F, 2.0F)); + } + } + + private void updateAnimationState() { + if (this.isDeadOrDying()) { + this.groundMoveTicks = 0; + 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.flyingToTarget) { + this.groundMoveTicks = 0; + this.setAnimationState(ANIM_FLY); + this.tickWingFlapSound(); + return; + } + if (this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM) { + this.groundMoveTicks = 0; + this.setAnimationState(ANIM_FLY); + this.tickWingFlapSound(); + return; + } + if (this.walkDist - this.walkDistO > 0.005F) { + this.groundMoveTicks = 6; + } + if (this.groundMoveTicks > 0) { + this.groundMoveTicks--; + this.setAnimationState(ANIM_WALK); + this.wingFlapCooldown = 0; + return; + } + this.setAnimationState(ANIM_IDLE); + this.wingFlapCooldown = 0; + } + + private void tickWingFlapSound() { + if (!(this.level() instanceof ServerLevel)) return; + if (this.onGround() || this.isRoaring() || this.isDeadOrDying()) { + this.wingFlapCooldown = 0; + return; + } + Vec3 movement = this.getDeltaMovement(); + if (movement.lengthSqr() < 0.01D) return; + if (this.wingFlapCooldown > 0) { + this.wingFlapCooldown--; + return; + } + this.playSound(AntarchySoundEvents.NIGHTMARE_FLAP.get(), 1.25F, 0.85F + this.random.nextFloat() * 0.08F); + this.wingFlapCooldown = 5 + this.random.nextInt(4); + } + + private final class NightmareRoarGoal extends Goal { + NightmareRoarGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return target instanceof Player && NightmareEntity.this.shouldStartRoar(target); + } + + @Override + public boolean canContinueToUse() { + return NightmareEntity.this.isRoaring(); + } + + @Override + public void start() { + NightmareEntity.this.startRoar(); + } + + @Override + public void tick() { + NightmareEntity.this.tickRoar(NightmareEntity.this.getTarget()); + } + + @Override + public void stop() { + NightmareEntity.this.roarTicks = 0; + NightmareEntity.this.setRoaring(false); + } + } + + private final class NightmareFlyToTargetGoal extends Goal { + NightmareFlyToTargetGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return target != null + && NightmareEntity.this.landingCooldown <= 0 + && NightmareEntity.this.distanceToSqr(target) > FLIGHT_ENGAGE_RANGE_SQR + && !NightmareEntity.this.isTooCloseToCeiling(); + } + + @Override + public boolean canContinueToUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return target != null && NightmareEntity.this.distanceToSqr(target) > FLIGHT_DISENGAGE_RANGE_SQR; + } + + @Override + public void start() { + NightmareEntity.this.flyingToTarget = true; + } + + @Override + public void stop() { + NightmareEntity.this.flyingToTarget = false; + NightmareEntity.this.landingCooldown = 80; + NightmareEntity.this.getNavigation().stop(); + } + + @Override + public void tick() { + LivingEntity target = NightmareEntity.this.getTarget(); + if (target == null) return; + if (NightmareEntity.this.isTooCloseToCeiling()) { + NightmareEntity.this.flyingToTarget = false; + NightmareEntity.this.getNavigation().stop(); + 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 + ); + } + } + + private final class NightmareMeleeGoal extends MeleeAttackGoal { + NightmareMeleeGoal() { + super(NightmareEntity.this, GROUND_APPROACH_SPEED, true); + } + + @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(); + if (target.onGround() && hdSqr <= 25.0D && vertDelta > 1.6D) { + NightmareEntity.this.tryBreakBlocksToTarget(target); + } + } + super.tick(); + } + + @Override + protected void checkAndPerformAttack(LivingEntity target, double distToEnemySqr) { + if (NightmareEntity.this.attackCooldown <= 0 && NightmareEntity.this.canStartAttackOn(target)) { + NightmareEntity.this.startAttack(target); + } + } + } + + private final class NightmareWanderGoal extends Goal { + private double x, y, z; + private int wanderTicks; + + NightmareWanderGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + if (NightmareEntity.this.getTarget() != null || NightmareEntity.this.isDeadOrDying()) 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(); + return true; + } + + @Override + public boolean canContinueToUse() { + return this.wanderTicks > 0 + && NightmareEntity.this.getTarget() == null + && !NightmareEntity.this.isDeadOrDying() + && NightmareEntity.this.distanceToSqr(this.x, this.y, this.z) > 2.25; + } + + @Override + public void start() { + this.wanderTicks = 80 + NightmareEntity.this.random.nextInt(40); + } + + @Override + public void tick() { + this.wanderTicks--; + NightmareEntity.this.getMoveControl().setWantedPosition(this.x, this.y, this.z, PATROL_SPEED); + } + } +} 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 new file mode 100644 index 00000000..79f7f90c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareMultipartLayout.java @@ -0,0 +1,67 @@ +package com.craisinlord.antarchy.content.entity.nightmare; + +import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; +import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; + +public final class NightmareMultipartLayout implements MultipartLayout { + public static final NightmareMultipartLayout INSTANCE = new NightmareMultipartLayout(); + + public static final MultipartPartDefinition LEFT_WING = new MultipartPartDefinition( + "left_wing", + 2.0F, + 1.0F, + 1.00F, + 0.10D, + 3.05D, + -1.90D, + false + ); + + public static final MultipartPartDefinition LEFT_WING_OUTER = new MultipartPartDefinition( + "left_wing_outer", + 1.55F, + 0.95F, + 0.90F, + -0.25D, + 3.20D, + -3.70D, + false + ); + + public static final MultipartPartDefinition RIGHT_WING = new MultipartPartDefinition( + "right_wing", + 2.0F, + 1.0F, + 1.00F, + 0.10D, + 3.05D, + 1.90D, + false + ); + + public static final MultipartPartDefinition RIGHT_WING_OUTER = new MultipartPartDefinition( + "right_wing_outer", + 1.55F, + 0.95F, + 0.90F, + -0.25D, + 3.20D, + 3.70D, + false + ); + + private static final MultipartPartDefinition[] PARTS = { + LEFT_WING, + LEFT_WING_OUTER, + RIGHT_WING, + RIGHT_WING_OUTER + }; + + private NightmareMultipartLayout() { + } + + @Override + public MultipartPartDefinition[] parts() { + return PARTS; + } +} 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 new file mode 100644 index 00000000..f6ead755 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java @@ -0,0 +1,186 @@ +package com.craisinlord.antarchy.content.entity.nightmare; + +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.server.level.ServerLevel; +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; +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.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 EntityDataAccessor CLOSING = SynchedEntityData.defineId(NightmarePortalEntity.class, EntityDataSerializers.BOOLEAN); + private static final RawAnimation OPEN_ANIM = RawAnimation.begin().thenPlay("open").thenLoop("idle"); + private static final RawAnimation CLOSE_ANIM = RawAnimation.begin().thenPlay("close"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int lifetimeTicks; + private int ageTicks; + private UUID ownerId; + private UUID linkedPortalId; + private Vec3 fallbackDestination = Vec3.ZERO; + + public NightmarePortalEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setInvulnerable(true); + this.noPhysics = true; + this.noCulling = true; + } + + public static NightmarePortalEntity spawnAt(ServerLevel level, Vec3 pos, NightmareEntity owner, Vec3 fallbackDestination, int lifetimeTicks) { + NightmarePortalEntity portal = new NightmarePortalEntity(AntarchyObjects.NIGHTMARE_PORTAL.get(), level); + portal.moveTo(pos.x, pos.y, pos.z, owner.getYRot(), 0.0F); + portal.ownerId = owner.getUUID(); + portal.fallbackDestination = fallbackDestination; + portal.lifetimeTicks = lifetimeTicks; + level.addFreshEntity(portal); + return portal; + } + + @Override + protected void defineSynchedData() { + this.entityData.define(CLOSING, false); + } + + @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 tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + + this.ageTicks++; + if (this.ageTicks >= this.lifetimeTicks - 10) { + 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) { + this.linkedPortalId = other.getUUID(); + 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); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + tag.putInt("LifetimeTicks", this.lifetimeTicks); + tag.putInt("AgeTicks", this.ageTicks); + if (this.ownerId != null) { + tag.putUUID("OwnerId", this.ownerId); + } + if (this.linkedPortalId != null) { + tag.putUUID("LinkedPortalId", this.linkedPortalId); + } + tag.putDouble("FallbackX", this.fallbackDestination.x); + tag.putDouble("FallbackY", this.fallbackDestination.y); + tag.putDouble("FallbackZ", this.fallbackDestination.z); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + this.lifetimeTicks = tag.getInt("LifetimeTicks"); + this.ageTicks = tag.getInt("AgeTicks"); + if (tag.hasUUID("OwnerId")) { + this.ownerId = tag.getUUID("OwnerId"); + } + if (tag.hasUUID("LinkedPortalId")) { + this.linkedPortalId = tag.getUUID("LinkedPortalId"); + } + this.fallbackDestination = new Vec3(tag.getDouble("FallbackX"), tag.getDouble("FallbackY"), tag.getDouble("FallbackZ")); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "portal_controller", 0, this::portalController)); + } + + private PlayState portalController(AnimationState state) { + return state.setAndContinue(this.isClosing() ? CLOSE_ANIM : OPEN_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} 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 new file mode 100644 index 00000000..2371cb32 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java @@ -0,0 +1,360 @@ +package com.craisinlord.antarchy.content.entity.portal; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +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.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.registries.BuiltInRegistries; +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.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +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.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.level.Level; +import net.minecraft.tags.TagKey; +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.animation.RawAnimation; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class DimensionalTearEntity extends Entity implements GeoEntity { + public enum TearState { + NORMAL, + UNSTABLE, + LUCID, + COLLAPSING + } + + private static final EntityDataAccessor STATE = + SynchedEntityData.defineId(DimensionalTearEntity.class, EntityDataSerializers.INT); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final int DEFAULT_LIFETIME_TICKS = 20 * 60 * 20; + private static final int COLLAPSE_WARNING_TICKS = 20 * 20; + 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 final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private UUID linkedTearId; + 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; + + public DimensionalTearEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setInvulnerable(true); + this.noPhysics = true; + this.noCulling = true; + } + + public static DimensionalTearEntity create(ServerLevel level, Vec3 pos, float yaw, int lifetimeTicks) { + DimensionalTearEntity tear = new DimensionalTearEntity(AntarchyObjects.DIMENSIONAL_TEAR.get(), level); + tear.moveTo(pos.x, pos.y, pos.z, yaw, 0.0F); + tear.lifetimeTicks = lifetimeTicks; + tear.nextEventTicks = tear.randomEventDelay(); + return tear; + } + + public void linkTo(DimensionalTearEntity other) { + this.linkedTearId = other.getUUID(); + this.linkedFallbackPos = other.position(); + } + + @Override + protected void defineSynchedData() { + this.entityData.define(STATE, TearState.NORMAL.ordinal()); + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + this.tickClientParticles(); + return; + } + + this.ageTicks++; + if (this.ageTicks >= this.lifetimeTicks - COLLAPSE_WARNING_TICKS) { + this.setTearState(TearState.COLLAPSING); + } + if (this.ageTicks >= this.lifetimeTicks) { + this.removeLinkedPair(); + return; + } + + DimensionalTearEntity linked = this.findLinkedTear(); + if (linked == null || !linked.isAlive()) { + this.discard(); + return; + } + + this.tickMobEvent((ServerLevel) this.level()); + this.tickTeleport(linked); + } + + private void tickMobEvent(ServerLevel level) { + if (this.getTearState() == TearState.COLLAPSING || level.getDifficulty() == Difficulty.PEACEFUL) { + return; + } + + if (this.eventTicks > 0) { + this.eventTicks--; + if (this.eventTicks == 1) { + this.spawnEmergence(level, this.pendingEvent); + this.pendingEvent = TearState.NORMAL; + this.setTearState(TearState.NORMAL); + this.nextEventTicks = this.randomEventDelay(); + } + return; + } + + if (this.nextEventTicks > 0) { + this.nextEventTicks--; + return; + } + + this.pendingEvent = this.random.nextFloat() < AntarchySettings.dimensionalTearLucidEventChance() + ? TearState.LUCID + : TearState.UNSTABLE; + this.eventTicks = EVENT_WARNING_TICKS; + this.setTearState(this.pendingEvent); + level.playSound(null, this.blockPosition(), SoundEvents.RESPAWN_ANCHOR_CHARGE, SoundSource.HOSTILE, 0.85F, this.pendingEvent == TearState.LUCID ? 1.35F : 0.65F); + } + + private void spawnEmergence(ServerLevel level, TearState eventState) { + Vec3 exitPos = this.exitPosition(); + TagKey> spawnTag = eventState == TearState.LUCID + ? AntarchyTags.Entities.DIMENSIONAL_TEAR_COMMON_SPAWNS + : AntarchyTags.Entities.DIMENSIONAL_TEAR_RARE_SPAWNS; + Mob mob = this.createTaggedMob(level, spawnTag); + if (mob == null || !level.noCollision(mob, mob.getType().getDimensions().makeBoundingBox(exitPos))) { + return; + } + + mob.moveTo(exitPos.x, exitPos.y, exitPos.z, this.getYRot(), 0.0F); + mob.finalizeSpawn(level, level.getCurrentDifficultyAt(BlockPos.containing(exitPos)), MobSpawnType.MOB_SUMMONED, null, null); + 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); + } + + @Nullable + private Mob createTaggedMob(ServerLevel level, TagKey> tag) { + return BuiltInRegistries.ENTITY_TYPE.getTag(tag) + .flatMap((HolderSet.Named> entityTypes) -> entityTypes.getRandomElement(this.random)) + .map(Holder::value) + .map(entityType -> entityType.create(level)) + .filter(entity -> entity instanceof Mob) + .map(entity -> (Mob) entity) + .orElse(null); + } + + private void tickTeleport(DimensionalTearEntity linked) { + AABB area = this.getBoundingBox().inflate(PORTAL_RADIUS); + List entities = this.level().getEntities(this, area, this::canTeleportEntity); + for (Entity entity : entities) { + teleportEntity(entity, linked); + } + } + + private boolean canTeleportEntity(Entity entity) { + if (!entity.isAlive() || entity instanceof DimensionalTearEntity || entity.isPassenger() || entity.isVehicle()) { + return false; + } + UUID uuid = entity.getUUID(); + long gameTime = this.level().getGameTime(); + long cooldownUntil = TELEPORT_COOLDOWNS.getOrDefault(uuid, 0L); + if (cooldownUntil <= gameTime) { + TELEPORT_COOLDOWNS.remove(uuid); + return true; + } + return false; + } + + private void teleportEntity(Entity entity, DimensionalTearEntity destination) { + Vec3 motion = entity.getDeltaMovement(); + Vec3 exitPos = destination.exitPosition(); + TELEPORT_COOLDOWNS.put(entity.getUUID(), this.level().getGameTime() + TELEPORT_COOLDOWN_TICKS); + + if (entity instanceof ServerPlayer player && destination.level() instanceof ServerLevel serverLevel) { + player.teleportTo(serverLevel, exitPos.x, exitPos.y, exitPos.z, player.getYRot(), player.getXRot()); + } else { + entity.teleportTo(exitPos.x, exitPos.y, exitPos.z); + } + + entity.setDeltaMovement(motion); + entity.hasImpulse = true; + if (entity instanceof LivingEntity living) { + living.addEffect(new MobEffectInstance(AntarchyObjects.INVERTED_EFFECT.get(), AntarchySettings.dimensionalTearInvertedDurationTicks(), 0)); + } + this.level().playSound(null, this.blockPosition(), SoundEvents.ENDERMAN_TELEPORT, SoundSource.NEUTRAL, 0.7F, 0.65F + this.random.nextFloat() * 0.2F); + } + + private Vec3 exitPosition() { + Vec3 facing = this.getViewVector(1.0F); + if (facing.lengthSqr() < 1.0E-4D) { + facing = new Vec3(0.0D, 0.0D, 1.0D); + } + return this.position().add(facing.normalize().scale(EXIT_OFFSET)); + } + + @Nullable + private DimensionalTearEntity findLinkedTear() { + if (!(this.level() instanceof ServerLevel serverLevel) || this.linkedTearId == null) { + return null; + } + Entity entity = serverLevel.getEntity(this.linkedTearId); + return entity instanceof DimensionalTearEntity tear ? tear : null; + } + + private void removeLinkedPair() { + DimensionalTearEntity linked = this.findLinkedTear(); + if (linked != null && linked.isAlive()) { + linked.discard(); + } + this.discard(); + } + + private int randomEventDelay() { + int min = Math.max(20, AntarchySettings.dimensionalTearEmergenceMinIntervalTicks()); + int max = Math.max(min, AntarchySettings.dimensionalTearEmergenceMaxIntervalTicks()); + return min + this.random.nextInt(max - min + 1); + } + + public TearState getTearState() { + int ordinal = this.entityData.get(STATE); + TearState[] values = TearState.values(); + return ordinal >= 0 && ordinal < values.length ? values[ordinal] : TearState.NORMAL; + } + + private void setTearState(TearState state) { + this.entityData.set(STATE, state.ordinal()); + } + + private void tickClientParticles() { + TearState state = this.getTearState(); + if (this.random.nextInt(state == TearState.NORMAL ? 5 : 2) != 0) { + return; + } + double spread = state == TearState.NORMAL ? 0.65D : 1.15D; + this.level().addParticle( + state == TearState.LUCID ? ParticleTypes.END_ROD : ParticleTypes.PORTAL, + this.getX() + (this.random.nextDouble() - 0.5D) * spread, + this.getY() + 1.3D + (this.random.nextDouble() - 0.5D) * spread, + this.getZ() + (this.random.nextDouble() - 0.5D) * spread, + (this.random.nextDouble() - 0.5D) * 0.05D, + (this.random.nextDouble() - 0.5D) * 0.05D, + (this.random.nextDouble() - 0.5D) * 0.05D + ); + } + + @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 addAdditionalSaveData(CompoundTag tag) { + tag.putInt("AgeTicks", this.ageTicks); + tag.putInt("LifetimeTicks", this.lifetimeTicks); + tag.putInt("EventTicks", this.eventTicks); + tag.putInt("NextEventTicks", this.nextEventTicks); + tag.putInt("PendingEvent", this.pendingEvent.ordinal()); + 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); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + this.ageTicks = tag.getInt("AgeTicks"); + this.lifetimeTicks = tag.getInt("LifetimeTicks"); + this.eventTicks = tag.getInt("EventTicks"); + this.nextEventTicks = tag.getInt("NextEventTicks"); + int event = tag.getInt("PendingEvent"); + TearState[] states = TearState.values(); + this.pendingEvent = event >= 0 && event < states.length ? states[event] : TearState.NORMAL; + if (tag.hasUUID("LinkedTearId")) { + this.linkedTearId = tag.getUUID("LinkedTearId"); + } + this.linkedFallbackPos = new Vec3(tag.getDouble("LinkedX"), tag.getDouble("LinkedY"), tag.getDouble("LinkedZ")); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "tear_controller", 0, this::tearController)); + } + + private PlayState tearController(AnimationState state) { + double speed = switch (this.getTearState()) { + case UNSTABLE, COLLAPSING -> 1.8D; + case LUCID -> 0.65D; + default -> 1.0D; + }; + state.getController().setAnimationSpeed(speed); + 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/entity/trades/DrTrayaurusTradeManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/DrTrayaurusTradeManager.java new file mode 100644 index 00000000..5a3ce9e6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/DrTrayaurusTradeManager.java @@ -0,0 +1,125 @@ +package com.craisinlord.antarchy.content.entity.trades; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.mojang.serialization.Codec; +import com.mojang.serialization.JsonOps; +import com.mojang.serialization.codecs.RecordCodecBuilder; +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.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.trading.MerchantOffer; +import net.minecraft.world.item.trading.MerchantOffers; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public final class DrTrayaurusTradeManager extends SimpleJsonResourceReloadListener { + 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( + TradeEntry.CODEC.listOf().fieldOf("trades").forGetter(TradeFile::trades) + ).apply(instance, TradeFile::new)); + private static volatile List loadedTrades = defaultTrades(); + + public DrTrayaurusTradeManager() { + super(GSON, DIRECTORY); + } + + @Override + protected void apply(java.util.Map object, ResourceManager resourceManager, ProfilerFiller profiler) { + List parsedTrades = new ArrayList<>(); + for (java.util.Map.Entry entry : object.entrySet()) { + TRADE_FILE_CODEC.parse(JsonOps.INSTANCE, entry.getValue()) + .resultOrPartial(message -> { + throw new JsonParseException("Failed to parse " + entry.getKey() + ": " + message); + }) + .ifPresent(file -> parsedTrades.addAll(file.trades())); + } + + loadedTrades = parsedTrades.isEmpty() ? defaultTrades() : List.copyOf(parsedTrades); + } + + public static MerchantOffers createOffers() { + MerchantOffers offers = new MerchantOffers(); + for (TradeEntry trade : loadedTrades) { + trade.toOffer().ifPresent(offers::add); + } + return offers; + } + + private static List defaultTrades() { + return List.of( + new TradeEntry(new StackEntry(new ResourceLocation("antarchy", "uranium_ingot"), 4), Optional.empty(), new StackEntry(new ResourceLocation("spyglass"), 1), 16, 1, 0.05F), + new TradeEntry(new StackEntry(new ResourceLocation("antarchy", "titanium_ingot"), 6), Optional.empty(), new StackEntry(new ResourceLocation("antarchy", "duct_tape"), 2), 12, 5, 0.05F), + new TradeEntry(new StackEntry(new ResourceLocation("antarchy", "uranium_ingot"), 8), Optional.of(new StackEntry(new ResourceLocation("antarchy", "kraken_tooth"), 1)), new StackEntry(new ResourceLocation("antarchy", "duplicator_sapling"), 1), 6, 10, 0.1F), + new TradeEntry(new StackEntry(new ResourceLocation("antarchy", "titanium_ingot"), 10), Optional.empty(), new StackEntry(new ResourceLocation("antarchy", "easter_bunny_spawn_egg"), 1), 3, 5, 0.05F), + new TradeEntry(new StackEntry(new ResourceLocation("antarchy", "uranium_ingot"), 16), Optional.of(new StackEntry(new ResourceLocation("antarchy", "titanium_ingot"), 8)), new StackEntry(new ResourceLocation("enchanted_golden_apple"), 1), 2, 20, 0.2F) + ); + } + + private record TradeFile(List trades) { + } + + private record TradeEntry(StackEntry buy, Optional secondBuy, StackEntry sell, int maxUses, int villagerXp, float priceMultiplier) { + private static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + StackEntry.CODEC.fieldOf("buy").forGetter(TradeEntry::buy), + StackEntry.CODEC.optionalFieldOf("second_buy").forGetter(TradeEntry::secondBuy), + StackEntry.CODEC.fieldOf("sell").forGetter(TradeEntry::sell), + Codec.INT.optionalFieldOf("max_uses", 12).forGetter(TradeEntry::maxUses), + Codec.INT.optionalFieldOf("villager_xp", 1).forGetter(TradeEntry::villagerXp), + Codec.FLOAT.optionalFieldOf("price_multiplier", 0.05F).forGetter(TradeEntry::priceMultiplier) + ).apply(instance, TradeEntry::new)); + + private Optional toOffer() { + if (this.maxUses < 1 || this.villagerXp < 1 || this.villagerXp > 99) { + return Optional.empty(); + } + + ItemStack buyStack = this.buy.toStack(); + if (buyStack.isEmpty()) { + return Optional.empty(); + } + + ItemStack secondBuyStack = this.secondBuy.map(StackEntry::toStack).orElse(ItemStack.EMPTY); + ItemStack sellStack = this.sell.toStack(); + if (sellStack.isEmpty()) { + return Optional.empty(); + } + + return Optional.of(new MerchantOffer( + buyStack, + secondBuyStack, + sellStack, + this.maxUses, + this.villagerXp, + this.priceMultiplier + )); + } + } + + private record StackEntry(ResourceLocation itemId, int count) { + 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) + ).apply(instance, StackEntry::new)); + + 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); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fire/AntarchyFireVisualAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fire/AntarchyFireVisualAccess.java new file mode 100644 index 00000000..0697a60a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fire/AntarchyFireVisualAccess.java @@ -0,0 +1,7 @@ +package com.craisinlord.antarchy.content.fire; + +public interface AntarchyFireVisualAccess { + AntarchyFireVisualType antarchy$getFireVisualType(); + + void antarchy$setFireVisualType(AntarchyFireVisualType type); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fire/AntarchyFireVisualType.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fire/AntarchyFireVisualType.java new file mode 100644 index 00000000..ba968066 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fire/AntarchyFireVisualType.java @@ -0,0 +1,7 @@ +package com.craisinlord.antarchy.content.fire; + +public enum AntarchyFireVisualType { + NORMAL, + SOUL, + DREAM +} 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 new file mode 100644 index 00000000..27c89a2c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/AntarchyFluidChecks.java @@ -0,0 +1,74 @@ +package com.craisinlord.antarchy.content.fluid; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; + +public final class AntarchyFluidChecks { + private static final ResourceLocation ANTIWATER_ID = new ResourceLocation(Antarchy.MODID, "antiwater"); + private static final ResourceLocation FLOWING_ANTIWATER_ID = new ResourceLocation(Antarchy.MODID, "flowing_antiwater"); + private static final ResourceLocation ICHOR_ID = new ResourceLocation(Antarchy.MODID, "ichor"); + private static final ResourceLocation FLOWING_ICHOR_ID = new ResourceLocation(Antarchy.MODID, "flowing_ichor"); + private static final ResourceLocation LUMEN_ID = new ResourceLocation(Antarchy.MODID, "lumen"); + private static final ResourceLocation FLOWING_LUMEN_ID = new ResourceLocation(Antarchy.MODID, "flowing_lumen"); + private static final ResourceLocation BILE_ID = new ResourceLocation(Antarchy.MODID, "bile"); + private static final ResourceLocation FLOWING_BILE_ID = new ResourceLocation(Antarchy.MODID, "flowing_bile"); + private static final ResourceLocation BILE_VEIN_ID = new ResourceLocation(Antarchy.MODID, "bile_vein"); + + private AntarchyFluidChecks() { + } + + public static boolean isAntiwater(FluidState fluidState) { + ResourceLocation fluidId = BuiltInRegistries.FLUID.getKey(fluidState.getType()); + return ANTIWATER_ID.equals(fluidId) || FLOWING_ANTIWATER_ID.equals(fluidId); + } + + public static boolean isIchor(FluidState fluidState) { + ResourceLocation fluidId = BuiltInRegistries.FLUID.getKey(fluidState.getType()); + return ICHOR_ID.equals(fluidId) || FLOWING_ICHOR_ID.equals(fluidId); + } + + public static boolean isLumen(FluidState fluidState) { + ResourceLocation fluidId = BuiltInRegistries.FLUID.getKey(fluidState.getType()); + return LUMEN_ID.equals(fluidId) || FLOWING_LUMEN_ID.equals(fluidId); + } + + public static boolean isBile(FluidState fluidState) { + ResourceLocation fluidId = BuiltInRegistries.FLUID.getKey(fluidState.getType()); + return BILE_ID.equals(fluidId) || FLOWING_BILE_ID.equals(fluidId); + } + + public static boolean usesWaterLikePhysics(FluidState fluidState) { + return isIchor(fluidState) || isLumen(fluidState) || isBile(fluidState); + } + + public static boolean isBileVein(BlockState state) { + ResourceLocation blockId = BuiltInRegistries.BLOCK.getKey(state.getBlock()); + 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++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + mutable.set(center.getX() + dx, center.getY() + dy, center.getZ() + dz); + BlockState state = level.getBlockState(mutable); + if (isBile(state.getFluidState()) || isBileVein(state)) { + return true; + } + } + } + } + return false; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/AntiwaterLiquidBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/AntiwaterLiquidBlock.java new file mode 100644 index 00000000..c16021fe --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/AntiwaterLiquidBlock.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.content.fluid; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FlowingFluid; + +public class AntiwaterLiquidBlock extends LiquidBlock { + private final FlowingFluid antarchy$fluid; + + public AntiwaterLiquidBlock(FlowingFluid fluid, BlockBehaviour.Properties properties) { + super(fluid, properties); + this.antarchy$fluid = fluid; + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + scheduleCurrentAntiwaterTick(level, pos); + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + super.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston); + scheduleCurrentAntiwaterTick(level, pos); + } + + @Override + public BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + scheduleCurrentAntiwaterTick(level, pos); + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock())) { + scheduleDependentAntiwaterTicks(level, pos); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } + + private void scheduleCurrentAntiwaterTick(LevelAccessor level, BlockPos pos) { + level.scheduleTick(pos, this.antarchy$fluid, this.antarchy$fluid.getTickDelay(level)); + } + + private void scheduleDependentAntiwaterTicks(LevelAccessor level, BlockPos pos) { + level.scheduleTick(pos.above(), this.antarchy$fluid, this.antarchy$fluid.getTickDelay(level)); + for (Direction direction : Direction.Plane.HORIZONTAL) { + level.scheduleTick(pos.relative(direction), this.antarchy$fluid, this.antarchy$fluid.getTickDelay(level)); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java new file mode 100644 index 00000000..a558872e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java @@ -0,0 +1,85 @@ +package com.craisinlord.antarchy.content.fluid; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +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.tags.EntityTypeTags; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluids; + +public class BileLiquidBlock extends LiquidBlock { + private static final ResourceLocation BILE_ID = new ResourceLocation(Antarchy.MODID, "bile"); + private static final ResourceLocation FLOWING_BILE_ID = new ResourceLocation(Antarchy.MODID, "flowing_bile"); + private static final ResourceLocation BROODSTONE_ID = new ResourceLocation(Antarchy.MODID, "broodstone"); + private static final ResourceLocation MYRMITE_ID = new ResourceLocation(Antarchy.MODID, "myrmite"); + private static final int EFFECT_DURATION_TICKS = 100; + + public BileLiquidBlock(FlowingFluid fluid, BlockBehaviour.Properties properties) { + super(fluid, properties); + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + super.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston); + if (!level.isClientSide) { + reactWithWater(state, level, pos); + } + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + if (!level.isClientSide) { + reactWithWater(state, level, pos); + } + } + + private void reactWithWater(BlockState state, Level level, BlockPos pos) { + for (Direction dir : Direction.values()) { + FluidState neighbor = level.getFluidState(pos.relative(dir)); + if (neighbor.is(Fluids.WATER) || neighbor.is(Fluids.FLOWING_WATER)) { + boolean isSource = state.getFluidState().isSource(); + ResourceLocation resultId = isSource ? BROODSTONE_ID : MYRMITE_ID; + Block resultBlock = BuiltInRegistries.BLOCK.getOptional(resultId).orElse(null); + if (resultBlock != null) { + level.setBlock(pos, resultBlock.defaultBlockState(), 3); + level.levelEvent(1501, pos, 0); + } + return; + } + } + } + + @Override + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + super.entityInside(state, level, pos, entity); + + if (entity instanceof LivingEntity livingEntity) { + if (!level.isClientSide) { + if (livingEntity.getMobType() == net.minecraft.world.entity.MobType.ARTHROPOD) { + return; + } + livingEntity.addEffect(new MobEffectInstance(AntarchyObjects.STINKY_EFFECT.get(), EFFECT_DURATION_TICKS, 0, false, true, true)); + livingEntity.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, EFFECT_DURATION_TICKS, 0, false, true, true)); + } + } + } + + public static boolean isBile(FluidState fluidState) { + ResourceLocation fluidId = BuiltInRegistries.FLUID.getKey(fluidState.getType()); + return BILE_ID.equals(fluidId) || FLOWING_BILE_ID.equals(fluidId); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/LumenLiquidBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/LumenLiquidBlock.java new file mode 100644 index 00000000..a8afc851 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/fluid/LumenLiquidBlock.java @@ -0,0 +1,111 @@ +package com.craisinlord.antarchy.content.fluid; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FlowingFluid; + +public class LumenLiquidBlock extends LiquidBlock { + private static final int SOURCE_PARTICLE_INTERVAL = 8; + private static final int FLOW_PARTICLE_INTERVAL = 20; + private final FlowingFluid antarchy$fluid; + + public LumenLiquidBlock(FlowingFluid fluid, BlockBehaviour.Properties properties) { + super(fluid, properties); + this.antarchy$fluid = fluid; + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + scheduleCurrentLumenTick(level, pos); + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + super.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston); + scheduleCurrentLumenTick(level, pos); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + scheduleCurrentLumenTick(level, pos); + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock())) { + scheduleDependentLumenTicks(level, pos); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + super.animateTick(state, level, pos, random); + if (!isSurfaceExposed(level, pos)) { + return; + } + + int chance = state.getValue(LEVEL) == 0 ? SOURCE_PARTICLE_INTERVAL : FLOW_PARTICLE_INTERVAL; + if (random.nextInt(chance) != 0) { + return; + } + + double x = pos.getX() + 0.15D + random.nextDouble() * 0.7D; + double y = pos.getY() + 0.76D + random.nextDouble() * 0.18D; + double z = pos.getZ() + 0.15D + random.nextDouble() * 0.7D; + level.addParticle(ParticleTypes.GLOW, x, y, z, 0.0D, 0.02D, 0.0D); + + if (random.nextInt(4) == 0) { + level.addParticle(ParticleTypes.ENCHANT, x, y + 0.02D, z, 0.0D, 0.015D, 0.0D); + } + } + + @Override + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + super.entityInside(state, level, pos, entity); + if (!level.isClientSide || !(entity instanceof LivingEntity) || !isSurfaceExposed(level, pos)) { + return; + } + + RandomSource random = level.getRandom(); + if (random.nextInt(10) != 0) { + return; + } + + double x = entity.getX() + (random.nextDouble() - 0.5D) * entity.getBbWidth(); + double y = entity.getY() + 0.1D + random.nextDouble() * Math.max(0.2D, entity.getBbHeight() * 0.2D); + double z = entity.getZ() + (random.nextDouble() - 0.5D) * entity.getBbWidth(); + level.addParticle(ParticleTypes.GLOW, x, y, z, 0.0D, 0.03D, 0.0D); + if (random.nextBoolean()) { + level.addParticle(ParticleTypes.ENCHANT, x, y + 0.05D, z, 0.0D, 0.04D, 0.0D); + } + } + + private static boolean isSurfaceExposed(Level level, BlockPos pos) { + BlockState above = level.getBlockState(pos.above()); + return above.isAir() || !above.canOcclude(); + } + + private void scheduleCurrentLumenTick(LevelAccessor level, BlockPos pos) { + level.scheduleTick(pos, this.antarchy$fluid, this.antarchy$fluid.getTickDelay(level)); + } + + private void scheduleDependentLumenTicks(LevelAccessor level, BlockPos pos) { + level.scheduleTick(pos.above(), this.antarchy$fluid, this.antarchy$fluid.getTickDelay(level)); + for (Direction direction : Direction.Plane.HORIZONTAL) { + level.scheduleTick(pos.relative(direction), this.antarchy$fluid, this.antarchy$fluid.getTickDelay(level)); + } + } +} 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 new file mode 100644 index 00000000..4fd8661e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityAccess.java @@ -0,0 +1,23 @@ +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 new file mode 100644 index 00000000..6301b5bf --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityApi.java @@ -0,0 +1,109 @@ +package com.craisinlord.antarchy.content.gravity; + +import net.minecraft.world.entity.Entity; + +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); + } + + 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 new file mode 100644 index 00000000..183d1489 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityDirection.java @@ -0,0 +1,44 @@ +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 new file mode 100644 index 00000000..1f6c6c3b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityRotationUtil.java @@ -0,0 +1,140 @@ +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 new file mode 100644 index 00000000..b58f2bf7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityTransition.java @@ -0,0 +1,9 @@ +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/GravityWalkNodeEvaluator.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/GravityWalkNodeEvaluator.java new file mode 100644 index 00000000..dbcfc0af --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/gravity/GravityWalkNodeEvaluator.java @@ -0,0 +1,184 @@ +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 new file mode 100644 index 00000000..c14491b4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynCreatureSpawner.java @@ -0,0 +1,227 @@ +package com.craisinlord.antarchy.content.horde; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.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.level.GameRules; +import net.minecraft.world.level.Level; +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, + new ResourceLocation(Antarchy.MODID, "cavaryn") + ); + + private static final int CHECK_INTERVAL_TICKS = 20 * 10; + private static final int AREA_COOLDOWN_TICKS = 20 * 60; + private static final int AREA_CELL_SIZE = 40; + private static final double NEARBY_RADIUS = 40.0D; + private static final int TARGET_NEARBY_COUNT = 4; + private static final double MIN_SPAWN_DISTANCE = 16.0D; + private static final double MAX_SPAWN_DISTANCE = 36.0D; + private static final int STINK_BUG_MIN_GROUP_SIZE = 1; + private static final int STINK_BUG_MAX_GROUP_SIZE = 5; + private static final int ROLLY_POLLY_MIN_GROUP_SIZE = 1; + private static final int ROLLY_POLLY_MAX_GROUP_SIZE = 3; + private static final int STINK_BUG_WEIGHT = 750; + private static final int ROLLY_POLLY_WEIGHT = 250; + private static final int MEMBER_JITTER_RADIUS = 4; + private static final int MEMBER_VERTICAL_SEARCH = 3; + + private static final Map AREA_COOLDOWNS = new HashMap<>(); + + private CavarynCreatureSpawner() { + } + + public static void tick(ServerLevel level) { + if (!level.dimension().equals(CAVARYN)) { + return; + } + if (level.getDifficulty() == Difficulty.PEACEFUL || !level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { + return; + } + + long gameTime = level.getGameTime(); + if (gameTime % CHECK_INTERVAL_TICKS != 0L) { + return; + } + + for (ServerPlayer player : level.players()) { + if (player.isSpectator() || player.isCreative() || !player.isAlive()) { + continue; + } + attemptSpawnNear(level, player, gameTime); + } + } + + private static void attemptSpawnNear(ServerLevel level, ServerPlayer player, long gameTime) { + BlockPos playerPos = player.blockPosition(); + long area = areaKey(playerPos); + Long cooldownUntil = AREA_COOLDOWNS.get(area); + if (cooldownUntil != null && gameTime < cooldownUntil) { + return; + } + + EntityType stinkBugType = AntarchyObjects.STINK_BUG.get(); + EntityType rollyPollyType = AntarchyObjects.ROLLY_POLLY.get(); + int nearbyStinkBugs = countNearby(level, playerPos, stinkBugType); + int nearbyRollyPollies = countNearby(level, playerPos, rollyPollyType); + boolean needStinkBug = nearbyStinkBugs < TARGET_NEARBY_COUNT; + boolean needRollyPolly = nearbyRollyPollies < TARGET_NEARBY_COUNT; + if (!needStinkBug && !needRollyPolly) { + AREA_COOLDOWNS.put(area, gameTime + AREA_COOLDOWN_TICKS); + return; + } + + RandomSource random = level.random; + BlockPos anchor = pickColumnNear(level, player, random); + if (anchor == null) { + return; + } + + EntityType chosenType = chooseType(needStinkBug, needRollyPolly, random); + boolean isStinkBug = chosenType == AntarchyObjects.STINK_BUG.get(); + int minGroupSize = isStinkBug ? STINK_BUG_MIN_GROUP_SIZE : ROLLY_POLLY_MIN_GROUP_SIZE; + int maxGroupSize = isStinkBug ? STINK_BUG_MAX_GROUP_SIZE : ROLLY_POLLY_MAX_GROUP_SIZE; + int groupSize = minGroupSize + random.nextInt(maxGroupSize - minGroupSize + 1); + int spawned = 0; + for (int i = 0; i < groupSize; i++) { + BlockPos memberPos = jitter(anchor, random); + BlockPos memberFloor = findFloorNear(level, memberPos); + if (memberFloor == null) { + continue; + } + if (spawnMob(level, chosenType, memberFloor)) { + spawned++; + } + } + + if (spawned > 0) { + AREA_COOLDOWNS.put(area, gameTime + AREA_COOLDOWN_TICKS); + } + } + + private static int countNearby(ServerLevel level, BlockPos center, EntityType type) { + AABB box = new AABB(center).inflate(NEARBY_RADIUS); + return level.getEntities(type, box, entity -> true).size(); + } + + private static EntityType chooseType(boolean needStinkBug, boolean needRollyPolly, RandomSource random) { + if (needStinkBug && !needRollyPolly) { + return AntarchyObjects.STINK_BUG.get(); + } + if (needRollyPolly && !needStinkBug) { + return AntarchyObjects.ROLLY_POLLY.get(); + } + int roll = random.nextInt(STINK_BUG_WEIGHT + ROLLY_POLLY_WEIGHT); + return roll < STINK_BUG_WEIGHT ? AntarchyObjects.STINK_BUG.get() : AntarchyObjects.ROLLY_POLLY.get(); + } + + private static BlockPos pickColumnNear(ServerLevel level, ServerPlayer player, RandomSource random) { + BlockPos origin = player.blockPosition(); + for (int attempt = 0; attempt < 12; 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 floor = scanColumnForFloor(level, x, z); + if (floor != null) { + return floor; + } + } + return null; + } + + private static BlockPos scanColumnForFloor(ServerLevel level, int x, int z) { + int minY = level.getMinBuildHeight(); + int maxY = level.getMaxBuildHeight() - 1; + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + for (int y = minY; y <= maxY; y++) { + cursor.set(x, y, z); + if (isValidGroundSpawn(level, cursor)) { + return cursor.immutable(); + } + } + return null; + } + + private static BlockPos jitter(BlockPos anchor, RandomSource random) { + int dx = random.nextInt(MEMBER_JITTER_RADIUS * 2 + 1) - MEMBER_JITTER_RADIUS; + int dz = random.nextInt(MEMBER_JITTER_RADIUS * 2 + 1) - MEMBER_JITTER_RADIUS; + return anchor.offset(dx, 0, dz); + } + + private static BlockPos findFloorNear(ServerLevel level, BlockPos start) { + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + for (int dy = 0; dy <= MEMBER_VERTICAL_SEARCH; dy++) { + cursor.set(start.getX(), start.getY() - dy, start.getZ()); + if (isValidGroundSpawn(level, cursor)) { + return cursor.immutable(); + } + if (dy != 0) { + cursor.set(start.getX(), start.getY() + dy, start.getZ()); + if (isValidGroundSpawn(level, cursor)) { + return cursor.immutable(); + } + } + } + return null; + } + + private static boolean isValidGroundSpawn(ServerLevel level, BlockPos pos) { + BlockPos below = pos.below(); + return level.getBlockState(pos).isAir() + && level.getBlockState(pos.above()).isAir() + && level.getFluidState(pos).isEmpty() + && level.getFluidState(pos.above()).isEmpty() + && level.getBlockState(below).isFaceSturdy(level, below, Direction.UP); + } + + private static boolean spawnMob(ServerLevel level, EntityType type, BlockPos pos) { + if (!level.noCollision(type.getAABB(pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D))) { + return false; + } + Entity entity = type.create(level); + if (!(entity instanceof Mob mob)) { + return false; + } + mob.moveTo(pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D, level.random.nextFloat() * 360.0F, 0.0F); + mob.finalizeSpawn(level, level.getCurrentDifficultyAt(pos), MobSpawnType.NATURAL, null, null); + return level.addFreshEntity(mob); + } + + private static long areaKey(BlockPos pos) { + return BlockPos.asLong( + Math.floorDiv(pos.getX(), AREA_CELL_SIZE) * AREA_CELL_SIZE, + Math.floorDiv(pos.getY(), AREA_CELL_SIZE) * AREA_CELL_SIZE, + Math.floorDiv(pos.getZ(), AREA_CELL_SIZE) * AREA_CELL_SIZE + ); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeDefinitions.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeDefinitions.java new file mode 100644 index 00000000..775816d3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeDefinitions.java @@ -0,0 +1,264 @@ +package com.craisinlord.antarchy.content.horde; + +import com.craisinlord.antarchy.Antarchy; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.packs.resources.Resource; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.tags.TagKey; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.entity.EntityType; + +public final class CavarynHordeDefinitions { + private static final String DIRECTORY = "cavaryn_hordes"; + private static ResourceManager cachedManager; + private static Map definitions = Map.of(); + private static Set> configuredTypes = Set.of(); + + private CavarynHordeDefinitions() { + } + + public static Definition get(ServerLevel level, ResourceLocation id) { + reloadIfNeeded(level.getServer().getResourceManager()); + return definitions.getOrDefault(id, Definition.EMPTY); + } + + public static boolean isConfiguredHordeType(ServerLevel level, EntityType type) { + reloadIfNeeded(level.getServer().getResourceManager()); + return configuredTypes.contains(type); + } + + private static void reloadIfNeeded(ResourceManager manager) { + if (cachedManager == manager) { + return; + } + + Map loaded = new HashMap<>(); + manager.listResources(DIRECTORY, location -> location.getPath().endsWith(".json")).forEach((location, resource) -> { + String path = location.getPath(); + String idPath = path.substring((DIRECTORY + "/").length(), path.length() - ".json".length()); + ResourceLocation id = new ResourceLocation(location.getNamespace(), idPath); + try { + loaded.put(id, Definition.fromJson(resource)); + } catch (Exception exception) { + Antarchy.LOGGER.warn("Failed to load Cavaryn horde definition {}", location, exception); + } + }); + Set> types = new HashSet<>(); + for (Definition definition : loaded.values()) { + definition.addTypesTo(types); + } + definitions = Map.copyOf(loaded); + configuredTypes = Set.copyOf(types); + cachedManager = manager; + } + + public record Definition(int maxActive, List entries) { + private static final Definition EMPTY = new Definition(0, List.of()); + + private static Definition fromJson(Resource resource) throws Exception { + try (Reader reader = resource.openAsReader()) { + JsonObject json = JsonParser.parseReader(reader).getAsJsonObject(); + int maxActive = getInt(json, "max_active", 0); + JsonArray rawEntries = json.getAsJsonArray("entries"); + if (rawEntries == null) { + return new Definition(maxActive, List.of()); + } + + List entries = new ArrayList<>(); + for (JsonElement rawEntry : rawEntries) { + if (rawEntry.isJsonObject()) { + Entry entry = Entry.fromJson(rawEntry.getAsJsonObject()); + if (entry != null) { + entries.add(entry); + } + } + } + return new Definition(maxActive, List.copyOf(entries)); + } + } + + public int resolvedMaxActive(ServerLevel level, int fallback) { + return this.maxActive > 0 ? scaleSpawnCount(level, this.maxActive) : fallback; + } + + public List buildSpawnList(ServerLevel level, int players, boolean highAttention, RandomSource random) { + if (level.getDifficulty() == Difficulty.PEACEFUL || this.entries.isEmpty()) { + return List.of(); + } + + List choices = new ArrayList<>(); + for (Entry entry : this.entries) { + int count = entry.count(players, highAttention); + count = scaleSpawnCount(level, count); + for (int i = 0; i < count; i++) { + EntityType type = entry.randomType(random); + if (type != null) { + choices.add(new SpawnChoice(type, entry.trackCompletion, entry.heavyArrivalEffect, entry.jerryStage)); + } + } + } + Collections.shuffle(choices); + return choices; + } + + public boolean shouldWarn() { + for (Entry entry : this.entries) { + if (entry.warning) { + return true; + } + } + return false; + } + + private void addTypesTo(Set> types) { + for (Entry entry : this.entries) { + entry.addTypesTo(types); + } + } + } + + public record SpawnChoice(EntityType type, boolean trackCompletion, boolean heavyArrivalEffect, String jerryStage) { + } + + private static final class Entry { + private final TagKey> entityTag; + private final int weight; + private final int baseCount; + private final int highAttentionBaseCount; + private final int perPlayerCount; + private final int perPlayers; + private final int perPlayersCount; + private final int minCount; + private final int maxCount; + private final boolean warning; + private final boolean trackCompletion; + private final boolean heavyArrivalEffect; + private final String jerryStage; + + private Entry(TagKey> entityTag, int weight, int baseCount, int highAttentionBaseCount, int perPlayerCount, + int perPlayers, int perPlayersCount, int minCount, int maxCount, boolean warning, + boolean trackCompletion, boolean heavyArrivalEffect, String jerryStage) { + this.entityTag = entityTag; + this.weight = Math.max(1, weight); + this.baseCount = baseCount; + this.highAttentionBaseCount = highAttentionBaseCount; + this.perPlayerCount = perPlayerCount; + this.perPlayers = perPlayers; + this.perPlayersCount = perPlayersCount; + this.minCount = minCount; + this.maxCount = maxCount; + this.warning = warning; + this.trackCompletion = trackCompletion; + this.heavyArrivalEffect = heavyArrivalEffect; + this.jerryStage = jerryStage; + } + + private static Entry fromJson(JsonObject json) { + String tagId = getString(json, "entity_tag", ""); + ResourceLocation tagLocation = ResourceLocation.tryParse(tagId); + if (tagLocation == null) { + Antarchy.LOGGER.warn("Skipping Cavaryn horde entry with invalid entity_tag '{}'", tagId); + return null; + } + + return new Entry( + TagKey.create(Registries.ENTITY_TYPE, tagLocation), + getInt(json, "weight", 1), + getInt(json, "base_count", 0), + getInt(json, "high_attention_base_count", -1), + getInt(json, "per_player_count", 0), + getInt(json, "per_players", 0), + getInt(json, "per_players_count", 1), + getInt(json, "min_count", 0), + getInt(json, "max_count", Integer.MAX_VALUE), + getBoolean(json, "warning", false), + getBoolean(json, "track_completion", false), + getBoolean(json, "heavy_arrival_effect", false), + getString(json, "jerry_stage", "") + ); + } + + private int count(int players, boolean highAttention) { + int count = highAttention && this.highAttentionBaseCount >= 0 ? this.highAttentionBaseCount : this.baseCount; + count += this.perPlayerCount * Math.max(0, players); + if (this.perPlayers > 0) { + count += (Math.max(0, players) / this.perPlayers) * this.perPlayersCount; + } + count = Math.max(this.minCount, count); + return Math.min(this.maxCount, count); + } + + private EntityType randomType(RandomSource random) { + Optional>> tag = BuiltInRegistries.ENTITY_TYPE.getTag(this.entityTag); + if (tag.isEmpty()) { + return null; + } + + List> weightedTypes = new ArrayList<>(); + for (Holder> holder : tag.get()) { + EntityType type = holder.value(); + for (int i = 0; i < this.weight; i++) { + weightedTypes.add(type); + } + } + if (weightedTypes.isEmpty()) { + return null; + } + return weightedTypes.get(random.nextInt(weightedTypes.size())); + } + + private void addTypesTo(Set> types) { + Optional>> tag = BuiltInRegistries.ENTITY_TYPE.getTag(this.entityTag); + tag.ifPresent(entityTypes -> { + for (Holder> holder : entityTypes) { + types.add(holder.value()); + } + }); + } + } + + private static int scaleSpawnCount(ServerLevel level, int baseCount) { + if (baseCount <= 0 || level.getDifficulty() == Difficulty.PEACEFUL) { + return 0; + } + float multiplier = switch (level.getDifficulty()) { + case PEACEFUL -> 0.0F; + case EASY -> 0.65F; + case NORMAL -> 1.0F; + case HARD -> 1.35F; + }; + return Math.max(1, Mth.ceil(baseCount * multiplier)); + } + + private static String getString(JsonObject json, String key, String fallback) { + return json.has(key) ? json.get(key).getAsString() : fallback; + } + + private static int getInt(JsonObject json, String key, int fallback) { + return json.has(key) ? json.get(key).getAsInt() : fallback; + } + + private static boolean getBoolean(JsonObject json, String key, boolean fallback) { + return json.has(key) ? json.get(key).getAsBoolean() : fallback; + } +} 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 new file mode 100644 index 00000000..fec6ccdf --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java @@ -0,0 +1,917 @@ +package com.craisinlord.antarchy.content.horde; + +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.entity.JerryEntity; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.network.HordeIntensitySync; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +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.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +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.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +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.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.saveddata.SavedData; +import net.minecraft.world.phys.AABB; +import org.jetbrains.annotations.Nullable; + +public final class CavarynHordeManager { + private static final ResourceKey CAVARYN = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "cavaryn") + ); + private static final ResourceKey BIOWART_CAVES = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "biowart_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"); + private static final ResourceLocation WAVE_TWO_HORDE = hordeId("wave_2"); + private static final ResourceLocation WAVE_THREE_HORDE = hordeId("wave_3"); + private static final ResourceLocation FINAL_HORDE = hordeId("final"); + private static final String DATA_ID = "antarchy_cavaryn_hordes"; + + private static final int GROUP_RADIUS_BLOCKS = 128; + private static final int ATTENTION_THRESHOLD = 100; + 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; + private static final int BLOCK_BREAK_ATTENTION = 0; + private static final int STALE_ATTENTION_PRUNE_TICKS = 20 * 60 * 20; + private static final int PLAYER_CHECK_INTERVAL = 20; + private static final int AREA_ATTENTION_INTERVAL = 20 * 45; + private static final int DORMANT_ATTENTION_DECAY_INTERVAL = 20 * 15; + private static final int DORMANT_MIN_SPAWN_INTERVAL = 20 * 50; + private static final int DORMANT_RANDOM_SPAWN_INTERVAL = 20 * 35; + private static final int AWAKENING_SKIRMISH_INTERVAL = 20 * 8; + private static final int AWAKENING_TICKS = 20 * 25; + private static final int PULSE_INTERVAL_TICKS = 20 * 18; + private static final int RECOVERY_TICKS = 20 * 60; + private static final int ABANDON_TIMEOUT_TICKS = 20 * 20; + private static final int HERCULES_TIMEOUT_TICKS = 20 * 180; + private static final int MAX_HORDE_MOBS_PER_ENCOUNTER = 48; + private static final int MAX_DORMANT_MOBS_PER_AREA = 8; + private static final int MAX_SPAWN_ATTEMPTS_PER_MOB = 18; + private static final double MIN_SPAWN_DISTANCE = 18.0D; + private static final double MAX_SPAWN_DISTANCE = 36.0D; + private static final int EGG_HATCH_ACCELERATION_MIN_ATTENTION = ATTENTION_THRESHOLD / 2; + + private CavarynHordeManager() { + } + + public static void tick(ServerLevel level) { + if (!level.dimension().equals(CAVARYN)) { + return; + } + + HordeData data = get(level); + if (!hordesEnabled(level)) { + clearDisabledState(level, data); + return; + } + long gameTime = level.getGameTime(); + if (gameTime % PLAYER_CHECK_INTERVAL == 0L) { + tickPlayers(level, data, gameTime); + } + tickEncounters(level, data, gameTime); + if (gameTime % 100L == 0L) { + data.prune(level, gameTime); + } + } + + public static void recordMobKill(ServerPlayer player, LivingEntity killed) { + if (!(player.level() instanceof ServerLevel level) || !level.dimension().equals(CAVARYN) || !hordesEnabled(level)) { + return; + } + if (!isValidHordeTarget(player) || !isHordeBiome(level, player.blockPosition())) { + return; + } + if (isPlayerInActiveEncounter(level, player)) { + return; + } + addAttention(level, player, scaleActionAttention(level, killed instanceof Enemy || killed.getType().getCategory() == MobCategory.MONSTER ? HOSTILE_KILL_ATTENTION : MOB_KILL_ATTENTION)); + } + + public static void recordBlockBreak(ServerPlayer player, BlockState brokenState, BlockPos pos) { + if (!(player.level() instanceof ServerLevel level) || !level.dimension().equals(CAVARYN) || !hordesEnabled(level)) { + return; + } + if (!isValidHordeTarget(player) || !isHordeBiome(level, pos) || isPlayerInActiveEncounter(level, player)) { + return; + } + addAttention(level, player, scaleActionAttention(level, isEggOrNest(brokenState) ? EGG_OR_NEST_BREAK_ATTENTION : BLOCK_BREAK_ATTENTION)); + } + + public static boolean isHordeBiome(ServerLevelAccessor level, BlockPos pos) { + return level.getBiome(pos).is(AntarchyTags.Biomes.USES_HORDE_SYSTEM); + } + + public static int maxHordeLevel() { + return ATTENTION_THRESHOLD; + } + + public static int getHordeLevel(ServerPlayer player) { + if (!(player.level() instanceof ServerLevel level) || !level.dimension().equals(CAVARYN)) { + return -1; + } + + PlayerAttention attention = get(level).players.get(player.getUUID()); + return attention != null ? attention.attention : 0; + } + + public static boolean shouldAccelerateNearbyEggHatching(ServerLevel level, BlockPos pos, double playerRadius, RandomSource random) { + if (!level.dimension().equals(CAVARYN) || !hordesEnabled(level) || !isHordeBiome(level, pos)) { + return false; + } + + double radiusSqr = playerRadius * playerRadius; + HordeData data = get(level); + int highestAttention = 0; + for (ServerPlayer player : level.players()) { + if (!isValidHordeTarget(player) || player.blockPosition().distSqr(pos) > radiusSqr) { + continue; + } + PlayerAttention attention = data.players.get(player.getUUID()); + if (attention == null) { + continue; + } + highestAttention = Math.max(highestAttention, attention.attention); + } + + if (highestAttention < EGG_HATCH_ACCELERATION_MIN_ATTENTION) { + return false; + } + + float pressure = highestAttention / (float) ATTENTION_THRESHOLD; + float chance = Mth.lerp(pressure, 0.02F, 0.3F); + return random.nextFloat() < chance; + } + + public static int setHordeLevel(ServerPlayer player, int levelValue) { + if (!(player.level() instanceof ServerLevel level) || !level.dimension().equals(CAVARYN)) { + return -1; + } + if (!isValidHordeTarget(player)) { + return -1; + } + + HordeData data = get(level); + PlayerAttention attention = data.players.computeIfAbsent(player.getUUID(), ignored -> new PlayerAttention()); + int currentAttention = attention.attention; + int clampedLevel = Mth.clamp(levelValue, 0, ATTENTION_THRESHOLD); + if (!hordesEnabled(level) && clampedLevel > currentAttention) { + return currentAttention; + } + attention.attention = clampedLevel; + attention.areaKey = areaKey(player.blockPosition()); + attention.areaTicks = 0; + attention.lastSeenGameTime = level.getGameTime(); + if (attention.attention < ATTENTION_THRESHOLD) { + data.encounters.removeIf(encounter -> encounter.center.distSqr(player.blockPosition()) <= GROUP_RADIUS_BLOCKS * GROUP_RADIUS_BLOCKS); + } + data.setDirty(); + HordeIntensitySync.send(player, attention.attention / (float) ATTENTION_THRESHOLD); + return attention.attention; + } + + private static void tickPlayers(ServerLevel level, HordeData data, long gameTime) { + Set seen = new HashSet<>(); + for (ServerPlayer player : level.players()) { + if (player.isSpectator() || player.isCreative()) { + HordeIntensitySync.send(player, 0.0F); + PlayerAttention attention = data.players.get(player.getUUID()); + if (attention != null && attention.attention > 0) { + attention.fade(10); + data.setDirty(); + } + continue; + } + + UUID uuid = player.getUUID(); + seen.add(uuid); + PlayerAttention attention = data.players.computeIfAbsent(uuid, ignored -> new PlayerAttention()); + if (!player.isAlive()) { + attention.fade(10); + data.setDirty(); + HordeIntensitySync.send(player, 0.0F); + continue; + } + + boolean inHordeBiome = isHordeBiome(level, player.blockPosition()); + if (!inHordeBiome) { + attention.fade(10); + data.setDirty(); + HordeIntensitySync.send(player, 0.0F); + continue; + } + + attention.lastSeenGameTime = gameTime; + BlockPos pos = player.blockPosition(); + long currentArea = areaKey(pos); + if (attention.areaKey != currentArea) { + attention.areaKey = currentArea; + attention.areaTicks = 0; + attention.fade(8); + data.setDirty(); + } else if (!isPlayerInActiveEncounter(level, player)) { + attention.areaTicks += PLAYER_CHECK_INTERVAL; + if (attention.areaTicks >= AREA_ATTENTION_INTERVAL) { + attention.areaTicks = 0; + attention.add(6); + data.setDirty(); + } else if (gameTime % DORMANT_ATTENTION_DECAY_INTERVAL == 0L) { + attention.fade(1); + data.setDirty(); + } + } + + Encounter encounter = findNearbyEncounter(data, player.blockPosition()); + if (encounter == null && attention.attention >= ATTENTION_THRESHOLD) { + startEncounter(level, data, player); + encounter = findNearbyEncounter(data, player.blockPosition()); + } + if (encounter == null) { + tickDormantPressure(level, data, player, attention, currentArea, gameTime); + } + HordeIntensitySync.send(player, attention.attention / (float) ATTENTION_THRESHOLD); + } + + for (Map.Entry entry : data.players.entrySet()) { + if (!seen.contains(entry.getKey())) { + entry.getValue().fade(4); + } + } + } + + private static void tickEncounters(ServerLevel level, HordeData data, long gameTime) { + Iterator iterator = data.encounters.iterator(); + while (iterator.hasNext()) { + Encounter encounter = iterator.next(); + List targets = targetsFor(level, encounter); + if (targets.isEmpty()) { + if (encounter.abandonedSince < 0L) { + encounter.abandonedSince = gameTime; + } + if (gameTime - encounter.abandonedSince >= ABANDON_TIMEOUT_TICKS) { + iterator.remove(); + data.setDirty(); + } + continue; + } + encounter.abandonedSince = -1L; + encounter.center = averageBlockPos(targets); + + if (encounter.phase == Phase.AWAKENING && gameTime >= encounter.nextSkirmishTime) { + spawnAwakeningSkirmish(level, encounter, targets); + encounter.nextSkirmishTime = gameTime + AWAKENING_SKIRMISH_INTERVAL; + data.setDirty(); + } + if (encounter.phase == Phase.AWAKENING && gameTime >= encounter.nextPulseTime) { + encounter.phase = Phase.SWARMING; + encounter.nextPulseTime = gameTime; + } + if (encounter.phase == Phase.SWARMING && gameTime >= encounter.nextPulseTime) { + spawnPulse(level, encounter, targets); + encounter.wave++; + encounter.nextPulseTime = gameTime + PULSE_INTERVAL_TICKS; + if (encounter.wave >= 4) { + encounter.phase = Phase.HERCULES; + } + data.setDirty(); + } + if (encounter.phase == Phase.HERCULES && herculesCleared(level, encounter, gameTime)) { + encounter.phase = Phase.RECOVERY; + encounter.recoveryEndsAt = gameTime + RECOVERY_TICKS; + data.setDirty(); + } + if (encounter.phase == Phase.RECOVERY && gameTime >= encounter.recoveryEndsAt) { + fadeAttentionNear(data, encounter.center, 70); + iterator.remove(); + data.setDirty(); + } + } + } + + private static void tickDormantPressure(ServerLevel level, HordeData data, ServerPlayer player, PlayerAttention attention, long areaKey, long gameTime) { + long nextSpawnTime = data.areaSpawnCooldowns.getOrDefault(areaKey, 0L); + if (gameTime < nextSpawnTime || level.getDifficulty() == Difficulty.PEACEFUL || !mobSpawningEnabled(level)) { + return; + } + + CavarynHordeDefinitions.Definition definition = CavarynHordeDefinitions.get(level, hordeForPosition(level, player.blockPosition(), DORMANT_HORDE)); + int existing = countNearbyDirectHordeMobs(level, player.blockPosition(), 48.0D); + if (existing >= definition.resolvedMaxActive(level, scaleSpawnCount(level, MAX_DORMANT_MOBS_PER_AREA))) { + data.areaSpawnCooldowns.put(areaKey, gameTime + DORMANT_MIN_SPAWN_INTERVAL); + data.setDirty(); + return; + } + + boolean highAttention = attention.attention >= ATTENTION_THRESHOLD * 2 / 3; + for (CavarynHordeDefinitions.SpawnChoice choice : definition.buildSpawnList(level, 1, highAttention, level.random)) { + spawnDirectMob(level, null, choice, player); + } + data.areaSpawnCooldowns.put(areaKey, gameTime + DORMANT_MIN_SPAWN_INTERVAL + level.random.nextInt(DORMANT_RANDOM_SPAWN_INTERVAL)); + data.setDirty(); + } + + private static boolean herculesCleared(ServerLevel level, Encounter encounter, long gameTime) { + if (encounter.herculesIds.isEmpty() || gameTime >= encounter.herculesTimeoutAt) { + return true; + } + 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()); + attention.lastSeenGameTime = level.getGameTime(); + attention.areaKey = areaKey(player.blockPosition()); + attention.add(amount); + data.setDirty(); + } + + private static int scaleActionAttention(ServerLevel level, int amount) { + float multiplier = switch (level.getDifficulty()) { + case HARD -> 1.5F; + case EASY -> 0.75F; + default -> 1.0F; + }; + return Math.max(1, Math.round(amount * multiplier)); + } + + private static void startEncounter(ServerLevel level, HordeData data, ServerPlayer seedPlayer) { + Encounter existing = findNearbyEncounter(data, seedPlayer.blockPosition()); + if (existing != null) { + return; + } + + Encounter encounter = new Encounter(); + encounter.id = UUID.randomUUID(); + encounter.center = seedPlayer.blockPosition(); + encounter.phase = Phase.AWAKENING; + encounter.startedAt = level.getGameTime(); + encounter.nextPulseTime = level.getGameTime() + AWAKENING_TICKS; + encounter.nextSkirmishTime = level.getGameTime() + AWAKENING_SKIRMISH_INTERVAL; + encounter.recoveryEndsAt = -1L; + encounter.abandonedSince = -1L; + encounter.herculesTimeoutAt = level.getGameTime() + AWAKENING_TICKS + PULSE_INTERVAL_TICKS * 4L + HERCULES_TIMEOUT_TICKS; + for (ServerPlayer player : targetsFor(level, encounter)) { + encounter.targets.add(player.getUUID()); + } + if (encounter.targets.isEmpty()) { + encounter.targets.add(seedPlayer.getUUID()); + } + data.encounters.add(encounter); + data.setDirty(); + } + + private static List buildTargetedSpawnList(ServerLevel level, ResourceLocation horde, List targets, int players, boolean highAttention) { + Map> targetsByHorde = new HashMap<>(); + for (ServerPlayer target : targets) { + ResourceLocation targetHorde = hordeForPosition(level, target.blockPosition(), horde); + targetsByHorde.computeIfAbsent(targetHorde, ignored -> new ArrayList<>()).add(target); + } + + List choices = new ArrayList<>(); + for (Map.Entry> entry : targetsByHorde.entrySet()) { + List groupTargets = entry.getValue(); + int groupPlayers = Math.max(1, Math.min(players, groupTargets.size())); + List groupChoices = CavarynHordeDefinitions.get(level, entry.getKey()) + .buildSpawnList(level, groupPlayers, highAttention, level.random); + for (CavarynHordeDefinitions.SpawnChoice choice : groupChoices) { + ServerPlayer target = groupTargets.get(level.random.nextInt(groupTargets.size())); + choices.add(new TargetedSpawnChoice(choice, target)); + } + } + java.util.Collections.shuffle(choices); + return choices; + } + + private static boolean shouldWarnForTargets(ServerLevel level, ResourceLocation horde, List targets) { + for (ServerPlayer target : targets) { + if (CavarynHordeDefinitions.get(level, hordeForPosition(level, target.blockPosition(), horde)).shouldWarn()) { + return true; + } + } + return false; + } + + private static void spawnAwakeningSkirmish(ServerLevel level, Encounter encounter, List targets) { + if (level.getDifficulty() == Difficulty.PEACEFUL || !mobSpawningEnabled(level)) { + return; + } + int players = Math.max(1, targets.size()); + int capacity = Math.max(0, scaleSpawnCount(level, MAX_HORDE_MOBS_PER_ENCOUNTER) - encounter.hordeMobIds.size()); + if (capacity <= 0) { + return; + } + + List choices = buildTargetedSpawnList(level, AWAKENING_HORDE, targets, players, false); + int spawned = 0; + for (TargetedSpawnChoice choice : choices) { + if (spawned >= capacity) { + break; + } + if (spawnDirectMob(level, encounter, choice.choice(), choice.target())) { + spawned++; + } + } + } + + private static void spawnPulse(ServerLevel level, Encounter encounter, List targets) { + if (level.getDifficulty() == Difficulty.PEACEFUL || !mobSpawningEnabled(level)) { + return; + } + + int players = Math.max(1, targets.size()); + int capacity = Math.max(0, scaleSpawnCount(level, MAX_HORDE_MOBS_PER_ENCOUNTER) - encounter.hordeMobIds.size()); + if (capacity <= 0) { + return; + } + + ResourceLocation horde = hordeForWave(encounter.wave); + if (shouldWarnForTargets(level, horde, targets)) { + warnHercules(level, encounter.center, targets); + } + + List choices = buildTargetedSpawnList(level, horde, targets, players, false); + int spawned = 0; + for (TargetedSpawnChoice choice : choices) { + if (spawned >= capacity) { + break; + } + if (spawnDirectMob(level, encounter, choice.choice(), choice.target())) { + spawned++; + } + } + } + + private static boolean spawnDirectMob(ServerLevel level, @Nullable Encounter encounter, CavarynHordeDefinitions.SpawnChoice choice, ServerPlayer target) { + if (!mobSpawningEnabled(level)) { + return false; + } + EntityType type = choice.type(); + BlockPos spawnPos = findSpawnPos(level, target, type, level.random); + if (spawnPos == null) { + return false; + } + Entity entity = type.create(level); + if (!(entity instanceof Mob mob)) { + return false; + } + mob.moveTo(spawnPos.getX() + 0.5D, spawnPos.getY(), spawnPos.getZ() + 0.5D, level.random.nextFloat() * 360.0F, 0.0F); + mob.finalizeSpawn(level, level.getCurrentDifficultyAt(spawnPos), MobSpawnType.EVENT, null, null); + applyJerryStage(mob, choice.jerryStage(), level.random); + if (mob.canAttack(target)) { + mob.setTarget(target); + } + if (!level.addFreshEntity(mob)) { + return false; + } + if (encounter != null) { + encounter.hordeMobIds.add(mob.getUUID()); + } + if (choice.trackCompletion()) { + if (encounter != null) { + encounter.herculesIds.add(mob.getUUID()); + } + } + if (choice.heavyArrivalEffect()) { + level.playSound(null, spawnPos, SoundEvents.GENERIC_EXPLODE, SoundSource.HOSTILE, 1.5F, 0.65F); + HerculesBeetleImpactShakeSync.send(target, 28); + } else { + level.playSound(null, spawnPos, SoundEvents.GRAVEL_BREAK, SoundSource.HOSTILE, 0.7F, 0.75F + level.random.nextFloat() * 0.25F); + } + level.sendParticles(net.minecraft.core.particles.ParticleTypes.POOF, spawnPos.getX() + 0.5D, spawnPos.getY() + 0.2D, spawnPos.getZ() + 0.5D, 8, 0.4D, 0.2D, 0.4D, 0.03D); + return true; + } + + private static void applyJerryStage(Mob mob, String stageName, RandomSource random) { + if (!(mob instanceof JerryEntity jerry) || stageName == null || stageName.isBlank()) { + return; + } + + JerryEntity.Stage stage = switch (stageName) { + case "random" -> JerryEntity.Stage.values()[random.nextInt(JerryEntity.Stage.values().length)]; + case "random_young" -> random.nextBoolean() ? JerryEntity.Stage.INFANT : JerryEntity.Stage.MATURE; + case "random_adult" -> random.nextBoolean() ? JerryEntity.Stage.ALPHA : JerryEntity.Stage.GAMMA; + default -> JerryEntity.Stage.byName(stageName); + }; + jerry.setStage(stage); + } + + private static ResourceLocation hordeForPosition(ServerLevel level, BlockPos pos, ResourceLocation horde) { + if (level.getBiome(pos).is(BIOWART_CAVES)) { + return new ResourceLocation(horde.getNamespace(), "biowart_caves/" + horde.getPath()); + } + return horde; + } + + private static int countNearbyDirectHordeMobs(ServerLevel level, BlockPos center, double radius) { + AABB box = new AABB(center).inflate(radius); + return level.getEntitiesOfClass(Mob.class, box, mob -> CavarynHordeDefinitions.isConfiguredHordeType(level, mob.getType())).size(); + } + + @Nullable + private static BlockPos findSpawnPos(ServerLevel level, ServerPlayer target, EntityType type, RandomSource random) { + BlockPos origin = target.blockPosition(); + for (int attempt = 0; attempt < MAX_SPAWN_ATTEMPTS_PER_MOB; attempt++) { + double angle = random.nextDouble() * Math.PI * 2.0D; + double distance = MIN_SPAWN_DISTANCE + random.nextDouble() * (MAX_SPAWN_DISTANCE - MIN_SPAWN_DISTANCE); + BlockPos base = origin.offset(Mth.floor(Math.cos(angle) * distance), random.nextInt(13) - 6, Mth.floor(Math.sin(angle) * distance)); + if (!level.hasChunkAt(base) || !isHordeBiome(level, base)) { + continue; + } + BlockPos candidate = findFloor(level, base); + if (candidate == null || !level.hasChunkAt(candidate) || !isHordeBiome(level, candidate)) { + continue; + } + if (candidate.distSqr(target.blockPosition()) < MIN_SPAWN_DISTANCE * MIN_SPAWN_DISTANCE) { + continue; + } + if (!level.noCollision(type.getAABB(candidate.getX() + 0.5D, candidate.getY(), candidate.getZ() + 0.5D))) { + continue; + } + if (target.hasLineOfSight(new net.minecraft.world.entity.item.ItemEntity(level, candidate.getX() + 0.5D, candidate.getY(), candidate.getZ() + 0.5D, net.minecraft.world.item.ItemStack.EMPTY))) { + continue; + } + return candidate; + } + return null; + } + + @Nullable + private static BlockPos findFloor(ServerLevel level, BlockPos start) { + BlockPos.MutableBlockPos cursor = start.mutable(); + for (int dy = 0; dy <= 8; dy++) { + cursor.set(start.getX(), start.getY() - dy, start.getZ()); + if (isValidFloorSpawn(level, cursor)) { + return cursor.immutable(); + } + cursor.set(start.getX(), start.getY() + dy, start.getZ()); + if (isValidFloorSpawn(level, cursor)) { + return cursor.immutable(); + } + } + return null; + } + + private static boolean isValidFloorSpawn(ServerLevel level, BlockPos pos) { + BlockPos below = pos.below(); + return level.getBlockState(below).isFaceSturdy(level, below, net.minecraft.core.Direction.UP) + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()); + } + + private static int scaleSpawnCount(ServerLevel level, int baseCount) { + if (baseCount <= 0 || level.getDifficulty() == Difficulty.PEACEFUL) { + return 0; + } + float multiplier = switch (level.getDifficulty()) { + case PEACEFUL -> 0.0F; + case EASY -> 0.65F; + case NORMAL -> 1.0F; + case HARD -> 1.35F; + }; + return Math.max(1, Mth.ceil(baseCount * multiplier)); + } + + private static ResourceLocation hordeForWave(int wave) { + return switch (wave) { + case 0 -> WAVE_ONE_HORDE; + case 1 -> WAVE_TWO_HORDE; + case 2 -> WAVE_THREE_HORDE; + default -> FINAL_HORDE; + }; + } + + private static ResourceLocation hordeId(String path) { + return new ResourceLocation(Antarchy.MODID, path); + } + + private static void warnHercules(ServerLevel level, BlockPos center, List targets) { + level.playSound(null, center, AntarchySoundEvents.HERCULES_BEETLE_CRY.get(), SoundSource.HOSTILE, 2.0F, 0.65F); + for (ServerPlayer player : targets) { + HerculesBeetleImpactShakeSync.send(player, 35); + } + } + + private static boolean hordesEnabled(ServerLevel level) { + return level.getGameRules().getBoolean(AntarchyGameRules.RULE_DO_CAVARYN_HORDES); + } + + private static boolean mobSpawningEnabled(ServerLevel level) { + return level.getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_DOMOBSPAWNING); + } + + private static void clearDisabledState(ServerLevel level, HordeData data) { + boolean dirty = false; + if (!data.encounters.isEmpty()) { + data.encounters.clear(); + dirty = true; + } + for (ServerPlayer player : level.players()) { + HordeIntensitySync.send(player, 0.0F); + } + if (dirty) { + data.setDirty(); + } + } + + private static boolean isPlayerInActiveEncounter(ServerLevel level, ServerPlayer player) { + HordeData data = get(level); + Encounter encounter = findNearbyEncounter(data, player.blockPosition()); + return encounter != null && encounter.phase != Phase.RECOVERY; + } + + @Nullable + private static Encounter findNearbyEncounter(HordeData data, BlockPos pos) { + for (Encounter encounter : data.encounters) { + if (encounter.center.distSqr(pos) <= GROUP_RADIUS_BLOCKS * GROUP_RADIUS_BLOCKS) { + return encounter; + } + } + return null; + } + + private static List targetsFor(ServerLevel level, Encounter encounter) { + List targets = new ArrayList<>(); + for (ServerPlayer player : level.players()) { + if (!isValidHordeTarget(player) || !isHordeBiome(level, player.blockPosition())) { + continue; + } + if (player.blockPosition().distSqr(encounter.center) <= GROUP_RADIUS_BLOCKS * GROUP_RADIUS_BLOCKS) { + targets.add(player); + encounter.targets.add(player.getUUID()); + } + } + return targets; + } + + private static boolean isValidHordeTarget(ServerPlayer player) { + return player.isAlive() && !player.isCreative() && !player.isSpectator(); + } + + private static BlockPos averageBlockPos(List players) { + int x = 0; + int y = 0; + int z = 0; + for (ServerPlayer player : players) { + x += player.blockPosition().getX(); + y += player.blockPosition().getY(); + z += player.blockPosition().getZ(); + } + int count = Math.max(1, players.size()); + return new BlockPos(x / count, y / count, z / count); + } + + private static void fadeAttentionNear(HordeData data, BlockPos center, int amount) { + for (PlayerAttention attention : data.players.values()) { + if (BlockPos.of(attention.areaKey).distSqr(center) <= GROUP_RADIUS_BLOCKS * GROUP_RADIUS_BLOCKS) { + attention.attention = Math.max(0, attention.attention - amount); + attention.areaTicks = 0; + } + } + } + + private static long areaKey(BlockPos pos) { + return BlockPos.asLong( + Math.floorDiv(pos.getX(), GROUP_RADIUS_BLOCKS) * GROUP_RADIUS_BLOCKS, + Math.floorDiv(pos.getY(), GROUP_RADIUS_BLOCKS) * GROUP_RADIUS_BLOCKS, + Math.floorDiv(pos.getZ(), GROUP_RADIUS_BLOCKS) * GROUP_RADIUS_BLOCKS + ); + } + + private static boolean isEggOrNest(BlockState state) { + ResourceLocation id = BuiltInRegistries.BLOCK.getKey(state.getBlock()); + String path = id.getPath(); + return id.getNamespace().equals(Antarchy.MODID) && (path.contains("egg") || path.contains("nest")); + } + + private static HordeData get(ServerLevel level) { + return level.getDataStorage().computeIfAbsent( + HordeData::load, + HordeData::create, + DATA_ID + ); + } + + private enum Phase { + AWAKENING, + SWARMING, + HERCULES, + RECOVERY + } + + private record TargetedSpawnChoice(CavarynHordeDefinitions.SpawnChoice choice, ServerPlayer target) { + } + + public static final class HordeData extends SavedData { + private static final String PLAYERS_KEY = "Players"; + private static final String ENCOUNTERS_KEY = "Encounters"; + private static final String AREA_SPAWN_COOLDOWNS_KEY = "AreaSpawnCooldowns"; + + private final Map players = new HashMap<>(); + private final List encounters = new ArrayList<>(); + private final Map areaSpawnCooldowns = new HashMap<>(); + + static HordeData create() { + return new HordeData(); + } + + static HordeData load(CompoundTag tag) { + HordeData data = new HordeData(); + for (net.minecraft.nbt.Tag rawEntry : tag.getList(PLAYERS_KEY, net.minecraft.nbt.Tag.TAG_COMPOUND)) { + CompoundTag entry = (CompoundTag) rawEntry; + data.players.put(entry.getUUID("Player"), PlayerAttention.load(entry)); + } + for (net.minecraft.nbt.Tag rawEntry : tag.getList(ENCOUNTERS_KEY, net.minecraft.nbt.Tag.TAG_COMPOUND)) { + data.encounters.add(Encounter.load((CompoundTag) rawEntry)); + } + for (net.minecraft.nbt.Tag rawEntry : tag.getList(AREA_SPAWN_COOLDOWNS_KEY, net.minecraft.nbt.Tag.TAG_COMPOUND)) { + CompoundTag entry = (CompoundTag) rawEntry; + data.areaSpawnCooldowns.put(entry.getLong("Area"), entry.getLong("NextSpawnTime")); + } + return data; + } + + @Override + public CompoundTag save(CompoundTag tag) { + ListTag playerList = new ListTag(); + for (Map.Entry entry : this.players.entrySet()) { + CompoundTag playerTag = entry.getValue().save(); + playerTag.putUUID("Player", entry.getKey()); + playerList.add(playerTag); + } + tag.put(PLAYERS_KEY, playerList); + + ListTag encounterList = new ListTag(); + for (Encounter encounter : this.encounters) { + encounterList.add(encounter.save()); + } + tag.put(ENCOUNTERS_KEY, encounterList); + + ListTag areaCooldownList = new ListTag(); + for (Map.Entry entry : this.areaSpawnCooldowns.entrySet()) { + CompoundTag areaTag = new CompoundTag(); + areaTag.putLong("Area", entry.getKey()); + areaTag.putLong("NextSpawnTime", entry.getValue()); + areaCooldownList.add(areaTag); + } + tag.put(AREA_SPAWN_COOLDOWNS_KEY, areaCooldownList); + return tag; + } + + private void prune(ServerLevel level, long gameTime) { + this.players.values().removeIf(attention -> attention.attention <= 0 && gameTime - attention.lastSeenGameTime > STALE_ATTENTION_PRUNE_TICKS); + this.areaSpawnCooldowns.entrySet().removeIf(entry -> gameTime - entry.getValue() > STALE_ATTENTION_PRUNE_TICKS); + for (Encounter encounter : this.encounters) { + encounter.hordeMobIds.removeIf(uuid -> { + Entity entity = level.getEntity(uuid); + return entity == null || entity.isRemoved(); + }); + } + this.setDirty(); + } + } + + private static final class PlayerAttention { + private int attention; + private int areaTicks; + private long areaKey; + private long lastSeenGameTime; + + private void add(int amount) { + this.attention = Mth.clamp(this.attention + amount, 0, ATTENTION_THRESHOLD); + } + + private void fade(int amount) { + this.attention = Math.max(0, this.attention - amount); + this.areaTicks = Math.max(0, this.areaTicks - PLAYER_CHECK_INTERVAL); + } + + private CompoundTag save() { + CompoundTag tag = new CompoundTag(); + tag.putInt("Attention", this.attention); + tag.putInt("AreaTicks", this.areaTicks); + tag.putLong("AreaKey", this.areaKey); + tag.putLong("LastSeenGameTime", this.lastSeenGameTime); + return tag; + } + + private static PlayerAttention load(CompoundTag tag) { + PlayerAttention attention = new PlayerAttention(); + attention.attention = tag.getInt("Attention"); + attention.areaTicks = tag.getInt("AreaTicks"); + attention.areaKey = tag.getLong("AreaKey"); + attention.lastSeenGameTime = tag.getLong("LastSeenGameTime"); + return attention; + } + } + + private static final class Encounter { + private UUID id = UUID.randomUUID(); + private Phase phase = Phase.AWAKENING; + private BlockPos center = BlockPos.ZERO; + private int wave; + private long startedAt; + private long nextPulseTime; + private long recoveryEndsAt; + private long abandonedSince; + private long herculesTimeoutAt; + private long nextSkirmishTime; + private final Set targets = new HashSet<>(); + private final Set hordeMobIds = new HashSet<>(); + private final Set herculesIds = new HashSet<>(); + + private CompoundTag save() { + CompoundTag tag = new CompoundTag(); + tag.putUUID("Id", this.id); + tag.putString("Phase", this.phase.name()); + tag.putLong("Center", this.center.asLong()); + tag.putInt("Wave", this.wave); + tag.putLong("StartedAt", this.startedAt); + tag.putLong("NextPulseTime", this.nextPulseTime); + tag.putLong("RecoveryEndsAt", this.recoveryEndsAt); + tag.putLong("AbandonedSince", this.abandonedSince); + tag.putLong("HerculesTimeoutAt", this.herculesTimeoutAt); + tag.putLong("NextSkirmishTime", this.nextSkirmishTime); + tag.put("Targets", uuidList(this.targets)); + tag.put("HordeMobs", uuidList(this.hordeMobIds)); + tag.put("Hercules", uuidList(this.herculesIds)); + return tag; + } + + private static Encounter load(CompoundTag tag) { + Encounter encounter = new Encounter(); + encounter.id = tag.getUUID("Id"); + encounter.phase = Phase.valueOf(tag.getString("Phase")); + encounter.center = BlockPos.of(tag.getLong("Center")); + encounter.wave = tag.getInt("Wave"); + encounter.startedAt = tag.getLong("StartedAt"); + encounter.nextPulseTime = tag.getLong("NextPulseTime"); + encounter.recoveryEndsAt = tag.getLong("RecoveryEndsAt"); + encounter.abandonedSince = tag.getLong("AbandonedSince"); + encounter.herculesTimeoutAt = tag.getLong("HerculesTimeoutAt"); + encounter.nextSkirmishTime = tag.getLong("NextSkirmishTime"); + readUuidList(tag.getList("Targets", net.minecraft.nbt.Tag.TAG_COMPOUND), encounter.targets); + readUuidList(tag.getList("HordeMobs", net.minecraft.nbt.Tag.TAG_COMPOUND), encounter.hordeMobIds); + readUuidList(tag.getList("Hercules", net.minecraft.nbt.Tag.TAG_COMPOUND), encounter.herculesIds); + return encounter; + } + + private static ListTag uuidList(Set uuids) { + ListTag list = new ListTag(); + for (UUID uuid : uuids) { + CompoundTag tag = new CompoundTag(); + tag.putUUID("Id", uuid); + list.add(tag); + } + return list; + } + + private static void readUuidList(ListTag list, Set uuids) { + for (net.minecraft.nbt.Tag rawEntry : list) { + uuids.add(((CompoundTag) rawEntry).getUUID("Id")); + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalBlockItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalBlockItem.java new file mode 100644 index 00000000..2dc8d1ef --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalBlockItem.java @@ -0,0 +1,24 @@ +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 AntimetalBlockItem extends BlockItem { + public AntimetalBlockItem(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.antimetal_inversion").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/AntimetalScaffoldingItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalScaffoldingItem.java new file mode 100644 index 00000000..472bfca1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalScaffoldingItem.java @@ -0,0 +1,76 @@ +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 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; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +public class AntimetalScaffoldingItem extends ScaffoldingBlockItem { + public AntimetalScaffoldingItem(Block block, Item.Properties properties) { + 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) { + BlockPos clickedPos = context.getClickedPos(); + Level level = context.getLevel(); + BlockState clickedState = level.getBlockState(clickedPos); + Block block = this.getBlock(); + boolean inverted = context.getPlayer() != null && AntarchyGravityApi.isGravityInverted(context.getPlayer()); + + if (!clickedState.is(block)) { + return AntimetalScaffoldingBlock.getDistance(level, clickedPos, inverted) == 7 ? null : context; + } + + Direction awayFromSupport = inverted ? Direction.DOWN : Direction.UP; + Direction direction; + if (context.isSecondaryUseActive()) { + direction = context.isInside() ? context.getClickedFace().getOpposite() : context.getClickedFace(); + } else { + direction = context.getClickedFace() == awayFromSupport ? context.getHorizontalDirection() : awayFromSupport; + } + + int steps = 0; + BlockPos.MutableBlockPos cursor = clickedPos.mutable().move(direction); + + while (steps < 7) { + if (!level.isClientSide && !level.isInWorldBounds(cursor)) { + break; + } + + BlockState state = level.getBlockState(cursor); + if (!state.is(block)) { + if (state.canBeReplaced(context)) { + return BlockPlaceContext.at(context, cursor, direction); + } + break; + } + + cursor.move(direction); + if (direction.getAxis().isHorizontal()) { + steps++; + } + } + + return null; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterItem.java new file mode 100644 index 00000000..23e58e8a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterItem.java @@ -0,0 +1,87 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attributes; +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.item.UseAnim; +import net.minecraft.world.level.Level; + +public class AttitudeAdjusterItem extends SwordItem { + private static final float ATTACK_SPEED = -3.6F; + private static final int USE_DURATION = 12; + private final Tier tier; + + public AttitudeAdjusterItem(Tier tier, Item.Properties properties) { + super(tier, (int) Math.round(AntarchySettings.attitudeAdjusterBaseDamage()), ATTACK_SPEED, properties); + this.tier = tier; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.attitude_adjuster.grounded").withStyle(ChatFormatting.DARK_GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.attitude_adjuster.slam").withStyle(ChatFormatting.YELLOW)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + boolean hurt = super.hurtEnemy(stack, target, attacker); + if (!hurt || !(attacker instanceof Player player) || attacker.level().isClientSide || player.getMainHandItem() != stack || !(attacker.level() instanceof ServerLevel serverLevel)) { + return hurt; + } + if (!AttitudeAdjusterSlamManager.consumeSpecialHit(player)) { + return hurt; + } + if (target.onGround()) { + AttitudeAdjusterSlamManager.onGroundedHit(serverLevel, player, target); + } else { + AttitudeAdjusterSlamManager.onAirborneHit(serverLevel, player, target); + } + return hurt; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (!(player instanceof ServerPlayer serverPlayer) || serverPlayer.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.pass(stack); + } + if (!AttitudeAdjusterSlamManager.tryStartPlayerSlam(serverPlayer, hand)) { + return InteractionResultHolder.pass(stack); + } + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public boolean canAttackBlock(net.minecraft.world.level.block.state.BlockState state, Level level, net.minecraft.core.BlockPos pos, Player miner) { + return !miner.isCreative(); + } + + @Override + public int getUseDuration(ItemStack stack) { + return USE_DURATION; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.SPEAR; + } +} 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 new file mode 100644 index 00000000..8e3d47f3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java @@ -0,0 +1,333 @@ +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 java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.BlockParticleOption; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.core.particles.ParticleTypes; +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.util.Mth; +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.Projectile; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.joml.Vector3f; + +public final class AttitudeAdjusterSlamManager { + private static final int SLAM_TIMEOUT_TICKS = 40; + private static final int PLAYER_SLAM_COOLDOWN_TICKS = 28; + private static final double GROUNDED_VERTICAL_KNOCKBACK = 1.35D; + private static final double GROUNDED_HORIZONTAL_KNOCKBACK = 0.5D; + private static final double AIRBORNE_SLAM_DOWNWARD_VELOCITY = -1.8D; + private static final double SLAM_BONUS_DAMAGE_SCALE = 10.0D; + private static final double SLAM_MAX_BONUS_DAMAGE = 18.0D; + private static final double SLAM_IMPACT_RADIUS = 3.75D; + private static final double SLAM_RADIAL_KNOCKBACK = 0.55D; + private static final double PLAYER_SLAM_START_VELOCITY = -2.15D; + private static final double PLAYER_SLAM_RADIUS = 4.75D; + private static final double PLAYER_SLAM_BASE_DAMAGE = 12.0D; + private static final double PLAYER_SLAM_DAMAGE_SCALE = 0.85D; + private static final double PLAYER_SLAM_MAX_DAMAGE = 24.0D; + private static final double PLAYER_SLAM_UPWARD_KNOCKBACK = 0.9D; + private static final double PLAYER_SLAM_HORIZONTAL_KNOCKBACK = 0.9D; + private static final float NORMAL_SHAKE_INTENSITY = 0.5F; + private static final int NORMAL_SHAKE_DURATION = 10; + private static final float ENEMY_SLAM_SHAKE_INTENSITY = 0.95F; + private static final int ENEMY_SLAM_SHAKE_DURATION = 16; + private static final float PLAYER_SLAM_SHAKE_INTENSITY = 1.2F; + private static final int PLAYER_SLAM_SHAKE_DURATION = 20; + private static final float IMPACT_SHAKE_RADIUS = 24.0F; + private static final float NORMAL_BREAK_HARDNESS_LIMIT = 6.0F; + private static final int MAX_BROKEN_BLOCKS = 9; + private static final Map SLAMMED_TARGETS = new HashMap<>(); + private static final Map PLAYER_SLAMS = new HashMap<>(); + private static final Map SPECIAL_HIT_MARKS = new HashMap<>(); + + private AttitudeAdjusterSlamManager() { + } + + public static void markSpecialHit(Player player) { + SPECIAL_HIT_MARKS.put(player.getUUID(), player.level().getGameTime()); + } + + public static boolean consumeSpecialHit(Player player) { + Long markedTime = SPECIAL_HIT_MARKS.get(player.getUUID()); + if (markedTime == null || markedTime != player.level().getGameTime()) { + return false; + } + SPECIAL_HIT_MARKS.remove(player.getUUID()); + return true; + } + + public static void onGroundedHit(ServerLevel level, Player attacker, LivingEntity target) { + Vec3 push = horizontalAway(attacker.position(), target.position(), attacker.getLookAngle()).scale(GROUNDED_HORIZONTAL_KNOCKBACK); + double resistanceScale = resistanceScale(target); + Vec3 motion = target.getDeltaMovement().add(push.x * resistanceScale, Math.max(GROUNDED_VERTICAL_KNOCKBACK * resistanceScale, 0.45D), push.z * resistanceScale); + target.setDeltaMovement(motion); + target.hurtMarked = true; + playNormalImpact(level, target.position().add(0.0D, target.getBbHeight() * 0.5D, 0.0D), target.getOnPosLegacy()); + } + + public static void onAirborneHit(ServerLevel level, Player attacker, LivingEntity target) { + Vec3 push = horizontalAway(attacker.position(), target.position(), attacker.getLookAngle()).scale(0.18D); + target.setDeltaMovement(push.x, Math.min(target.getDeltaMovement().y, AIRBORNE_SLAM_DOWNWARD_VELOCITY), push.z); + target.hurtMarked = true; + SLAMMED_TARGETS.put(target.getUUID(), new SlammedTargetState( + target.getUUID(), + attacker.getUUID(), + level.dimension().location().toString(), + level.getGameTime() + SLAM_TIMEOUT_TICKS, + target.getDeltaMovement().y, + target.fallDistance + )); + level.playSound(null, target.getX(), target.getY(), target.getZ(), SoundEvents.ANVIL_LAND, SoundSource.PLAYERS, 1.0F, 0.7F); + } + + public static boolean tryStartPlayerSlam(ServerPlayer player, net.minecraft.world.InteractionHand hand) { + if (player.onGround() || player.isInWaterOrBubble() || player.isInLava() || player.isFallFlying() || player.getAbilities().flying || PLAYER_SLAMS.containsKey(player.getUUID())) { + 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; + 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)); + player.hurtMarked = true; + player.fallDistance = 0.0F; + player.swing(hand, true); + player.serverLevel().playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.PLAYER_ATTACK_KNOCKBACK, SoundSource.PLAYERS, 1.0F, 0.8F); + return true; + } + + public static void tick(ServerLevel level) { + tickSlammedTargets(level); + tickPlayerSlams(level); + } + + private static void tickSlammedTargets(ServerLevel level) { + Iterator iterator = SLAMMED_TARGETS.values().iterator(); + while (iterator.hasNext()) { + SlammedTargetState state = iterator.next(); + if (!state.dimensionId.equals(level.dimension().location().toString())) { + continue; + } + Entity entity = level.getEntity(state.targetId); + if (!(entity instanceof LivingEntity target) || !target.isAlive() || level.getGameTime() > state.expiresAt || target.isInWaterOrBubble() || target.isInLava() || target.isFallFlying() || (target instanceof Player player && player.getAbilities().flying)) { + iterator.remove(); + continue; + } + if (!target.onGround()) { + continue; + } + Player attacker = level.getPlayerByUUID(state.attackerId); + double impactSpeed = Math.max(Math.abs(Math.min(target.getDeltaMovement().y, state.startDownwardVelocity)), Math.max(0.0D, target.fallDistance * 0.125D)); + float bonusDamage = (float) Mth.clamp(impactSpeed * SLAM_BONUS_DAMAGE_SCALE, 4.0D, SLAM_MAX_BONUS_DAMAGE); + if (attacker != null) { + target.hurt(level.damageSources().playerAttack(attacker), bonusDamage); + } else { + target.hurt(level.damageSources().generic(), bonusDamage); + } + Vec3 impactPos = target.position(); + BlockPos groundPos = target.getOnPosLegacy(); + playSlamImpact(level, impactPos, groundPos, true); + knockbackNearby(level, impactPos, target, SLAM_IMPACT_RADIUS, SLAM_RADIAL_KNOCKBACK, 0.3D); + iterator.remove(); + } + } + + private static void tickPlayerSlams(ServerLevel level) { + Iterator iterator = PLAYER_SLAMS.values().iterator(); + while (iterator.hasNext()) { + PlayerSlamState state = iterator.next(); + if (!state.dimensionId.equals(level.dimension().location().toString())) { + continue; + } + Player entity = level.getPlayerByUUID(state.playerId); + if (!(entity instanceof ServerPlayer player) || !player.isAlive() || level.getGameTime() > state.expiresAt || player.isInWaterOrBubble() || player.isInLava() || player.isFallFlying() || player.getAbilities().flying) { + iterator.remove(); + continue; + } + player.fallDistance = 0.0F; + if (!player.onGround()) { + continue; + } + Direction gravityDown = AntarchyGravityRotationUtil.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 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); + Vec3 awayFromSurface = new Vec3(-gravityDown.getStepX(), -gravityDown.getStepY(), -gravityDown.getStepZ()); + for (LivingEntity target : level.getEntitiesOfClass(LivingEntity.class, area, candidate -> candidate.isAlive() && candidate != player)) { + if (!target.hurt(level.damageSources().playerAttack(player), damage)) { + continue; + } + Vec3 away = horizontalAway(impactPos, target.position(), player.getLookAngle()).scale(PLAYER_SLAM_HORIZONTAL_KNOCKBACK); + double resistanceScale = resistanceScale(target); + double surfaceKnockback = Math.max(PLAYER_SLAM_UPWARD_KNOCKBACK * resistanceScale, 0.35D); + target.setDeltaMovement(target.getDeltaMovement().add( + away.x * resistanceScale + awayFromSurface.x * surfaceKnockback, + away.y * resistanceScale + awayFromSurface.y * surfaceKnockback, + away.z * resistanceScale + awayFromSurface.z * surfaceKnockback + )); + target.hurtMarked = true; + } + playSlamImpact(level, impactPos, groundPos, false); + if (AntarchySettings.attitudeAdjusterBreaksBlocks()) { + breakBlocks(level, player, groundPos, gravityDown); + } + if (player.getMainHandItem().getItem() instanceof AttitudeAdjusterItem item) { + player.getCooldowns().addCooldown(item, PLAYER_SLAM_COOLDOWN_TICKS); + } + iterator.remove(); + } + } + + private static BlockPos getSlamSurfacePos(Entity entity, Direction gravityDown) { + if (gravityDown == Direction.UP) { + return BlockPos.containing(entity.getX(), entity.getBoundingBox().maxY + 0.05D, entity.getZ()); + } + return entity.getOnPosLegacy(); + } + + private static void breakBlocks(ServerLevel level, ServerPlayer player, BlockPos center, Direction gravityDown) { + int broken = 0; + int minY = gravityDown == Direction.UP ? 0 : -1; + int maxY = gravityDown == Direction.UP ? 1 : 0; + Direction supportFace = gravityDown.getOpposite(); + for (int y = minY; y <= maxY && broken < MAX_BROKEN_BLOCKS; y++) { + for (int x = -1; x <= 1 && broken < MAX_BROKEN_BLOCKS; x++) { + for (int z = -1; z <= 1 && broken < MAX_BROKEN_BLOCKS; z++) { + BlockPos pos = center.offset(x, y, z); + BlockState state = level.getBlockState(pos); + BlockEntity blockEntity = level.getBlockEntity(pos); + if (state.isAir() || blockEntity != null || state.getDestroySpeed(level, pos) < 0.0F || state.getDestroySpeed(level, pos) > NORMAL_BREAK_HARDNESS_LIMIT) { + continue; + } + if (!state.isFaceSturdy(level, pos, supportFace) && pos.getY() != center.getY()) { + continue; + } + if (player.gameMode.destroyBlock(pos)) { + broken++; + } + } + } + } + } + + private static void playNormalImpact(ServerLevel level, Vec3 impactPos, BlockPos groundPos) { + level.playSound(null, impactPos.x, impactPos.y, impactPos.z, SoundEvents.GENERIC_BIG_FALL, SoundSource.PLAYERS, 0.95F, 0.75F); + spawnImpactParticles(level, impactPos, groundPos, 10, 20); + shake(level, impactPos, NORMAL_SHAKE_INTENSITY, NORMAL_SHAKE_DURATION); + } + + private static void playSlamImpact(ServerLevel level, Vec3 impactPos, BlockPos groundPos, boolean enemySlam) { + level.playSound(null, impactPos.x, impactPos.y, impactPos.z, enemySlam ? SoundEvents.GENERIC_EXPLODE : SoundEvents.GENERIC_BIG_FALL, SoundSource.PLAYERS, enemySlam ? 1.2F : 1.35F, enemySlam ? 0.65F : 0.55F); + spawnImpactParticles(level, impactPos, groundPos, enemySlam ? 20 : 28, enemySlam ? 32 : 42); + spawnShockwaveParticles(level, impactPos, enemySlam ? 18 : 28); + shake(level, impactPos, enemySlam ? ENEMY_SLAM_SHAKE_INTENSITY : PLAYER_SLAM_SHAKE_INTENSITY, enemySlam ? ENEMY_SLAM_SHAKE_DURATION : PLAYER_SLAM_SHAKE_DURATION); + level.gameEvent(GameEvent.EXPLODE, impactPos, GameEvent.Context.of(level.getBlockState(groundPos))); + } + + private static void spawnImpactParticles(ServerLevel level, Vec3 impactPos, BlockPos groundPos, int dustCount, int debrisCount) { + level.sendParticles(new DustParticleOptions(new Vector3f(1.00F, 0.92F, 0.18F), 1.35F), impactPos.x, impactPos.y + 0.1D, impactPos.z, dustCount, 0.45D, 0.15D, 0.45D, 0.035D); + BlockState groundState = level.getBlockState(groundPos); + if (!groundState.isAir()) { + level.sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, groundState), impactPos.x, impactPos.y + 0.05D, impactPos.z, debrisCount, 0.7D, 0.15D, 0.7D, 0.06D); + } + level.sendParticles(ParticleTypes.POOF, impactPos.x, impactPos.y + 0.2D, impactPos.z, 8, 0.45D, 0.05D, 0.45D, 0.02D); + } + + private static void spawnShockwaveParticles(ServerLevel level, Vec3 impactPos, int count) { + for (int i = 0; i < count; i++) { + double angle = (Math.PI * 2.0D * i) / count; + double x = impactPos.x + Math.cos(angle) * 0.6D; + double z = impactPos.z + Math.sin(angle) * 0.6D; + double dx = Math.cos(angle) * 0.18D; + double dz = Math.sin(angle) * 0.18D; + level.sendParticles(new DustParticleOptions(new Vector3f(1.00F, 0.85F, 0.22F), 0.95F), x, impactPos.y + 0.05D, z, 1, dx, 0.01D, dz, 0.0D); + } + } + + private static void knockbackNearby(ServerLevel level, Vec3 center, LivingEntity ignored, double radius, double horizontalStrength, double verticalStrength) { + AABB area = new AABB(center.x - radius, center.y - 1.5D, center.z - radius, center.x + radius, center.y + 2.5D, center.z + radius); + for (LivingEntity entity : level.getEntitiesOfClass(LivingEntity.class, area, candidate -> candidate.isAlive() && candidate != ignored)) { + Vec3 away = horizontalAway(center, entity.position(), entity.getLookAngle()).scale(horizontalStrength); + double resistanceScale = resistanceScale(entity); + entity.setDeltaMovement(entity.getDeltaMovement().add(away.x * resistanceScale, Math.max(verticalStrength * resistanceScale, 0.1D), away.z * resistanceScale)); + entity.hurtMarked = true; + } + } + + 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); + } + } + } + + private static Vec3 horizontalAway(Vec3 from, Vec3 to, Vec3 fallback) { + Vec3 horizontal = to.subtract(from).multiply(1.0D, 0.0D, 1.0D); + if (horizontal.lengthSqr() < 1.0E-4D) { + horizontal = fallback.multiply(1.0D, 0.0D, 1.0D); + } + return horizontal.lengthSqr() < 1.0E-4D ? new Vec3(1.0D, 0.0D, 0.0D) : horizontal.normalize(); + } + + private static double resistanceScale(LivingEntity entity) { + return Mth.clamp(1.0D - entity.getAttributeValue(net.minecraft.world.entity.ai.attributes.Attributes.KNOCKBACK_RESISTANCE), 0.15D, 1.0D); + } + + private static final class SlammedTargetState { + private final UUID targetId; + private final UUID attackerId; + private final String dimensionId; + private final long expiresAt; + private final double startDownwardVelocity; + private final float startFallDistance; + + private SlammedTargetState(UUID targetId, UUID attackerId, String dimensionId, long expiresAt, double startDownwardVelocity, float startFallDistance) { + this.targetId = targetId; + this.attackerId = attackerId; + this.dimensionId = dimensionId; + this.expiresAt = expiresAt; + this.startDownwardVelocity = startDownwardVelocity; + this.startFallDistance = startFallDistance; + } + } + + private static final class PlayerSlamState { + private final UUID playerId; + private final String dimensionId; + private final long expiresAt; + private final float startFallDistance; + + private PlayerSlamState(UUID playerId, String dimensionId, long expiresAt, float startFallDistance) { + this.playerId = playerId; + this.dimensionId = dimensionId; + this.expiresAt = expiresAt; + this.startFallDistance = startFallDistance; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BasiliskDaggerItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BasiliskDaggerItem.java new file mode 100644 index 00000000..032e057c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BasiliskDaggerItem.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +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; +import net.minecraft.world.item.SwordItem; +import net.minecraft.world.item.Tier; + +public class BasiliskDaggerItem extends SwordItem { + private final Tier tier; + private final int attackDamage; + private final float attackSpeed; + + public BasiliskDaggerItem(Tier tier, Item.Properties properties, int attackDamage, float attackSpeed) { + super(tier, (int) Math.round(AntarchySettings.basiliskDaggerAttackDamage()), (float) AntarchySettings.basiliskDaggerAttackSpeed(), properties); + this.tier = tier; + this.attackDamage = attackDamage; + this.attackSpeed = attackSpeed; + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + boolean didHurt = super.hurtEnemy(stack, target, attacker); + if (didHurt && !target.level().isClientSide()) { + target.addEffect(new MobEffectInstance( + MobEffects.POISON, + AntarchySettings.basiliskDaggerPoisonDurationTicks(), + AntarchySettings.basiliskDaggerPoisonAmplifier() + )); + } + return didHurt; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BattleAxeItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BattleAxeItem.java new file mode 100644 index 00000000..260d58f9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BattleAxeItem.java @@ -0,0 +1,76 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; +import java.util.function.Consumer; +import java.util.function.DoubleSupplier; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.AxeItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Tier; +import software.bernie.geckolib.animatable.GeoItem; +import com.craisinlord.antarchy.content.client.AntarchyGeoItemRenderer; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import software.bernie.geckolib.renderer.GeoItemRenderer; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class BattleAxeItem extends AxeItem implements GeoItem, com.craisinlord.antarchy.content.client.AntarchyGeoItem { + private static final ResourceLocation MODEL_LOCATION = new ResourceLocation("antarchy", "geo/battle_axe.geo.json"); + private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation("antarchy", "textures/item/battle_axe/battle_axe.png"); + private static final ResourceLocation ANIMATION_LOCATION = new ResourceLocation("antarchy", "animations/static_item.animation.json"); + private final Tier tier; + private final DoubleSupplier attackDamage; + private final float attackSpeed; + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public BattleAxeItem(Tier tier, Item.Properties properties, DoubleSupplier attackDamage, float attackSpeed) { + super(tier, (float) attackDamage.getAsDouble(), (float) AntarchySettings.battleAxeAttackSpeed(), properties); + this.tier = tier; + this.attackDamage = attackDamage; + this.attackSpeed = attackSpeed; + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + public void createRenderer(Consumer consumer) { + consumer.accept(new AntarchyGeoItemRenderer() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getCustomRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(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/BigBerthaItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java new file mode 100644 index 00000000..eabd0260 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java @@ -0,0 +1,679 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyObjects; +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.antarchy.config.AntarchySettings; +import java.util.List; +import java.util.function.Consumer; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +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.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.entity.projectile.ProjectileUtil; +import net.minecraft.stats.Stats; +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.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.LightningBolt; +import net.minecraft.world.entity.ai.attributes.Attributes; +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.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.animatable.GeoItem; +import com.craisinlord.antarchy.content.client.AntarchyGeoItemRenderer; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import software.bernie.geckolib.renderer.GeoItemRenderer; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class BigBerthaItem extends SwordItem implements GeoItem, com.craisinlord.antarchy.content.client.AntarchyGeoItem { + private static final ResourceLocation MODEL_LOCATION = new ResourceLocation("antarchy", "geo/big_bertha.geo.json"); + 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"; + 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"; + private static final String TORETERROR_JUMPING_TAG = "antarchy.toreterror_jumping"; + private static final String TORETERROR_LAUNCHED_TAG = "antarchy.toreterror_launched"; + private static final int TORETERROR_LANDING_RADIUS = 6; + 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 final Tier tier; + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public BigBerthaItem(Tier tier, Item.Properties properties) { + super(tier, (int) Math.round(AntarchySettings.bigBerthaAttackDamage()), (float) AntarchySettings.bigBerthaAttackSpeed(), properties); + this.tier = tier; + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + BossMode mode = getMode(stack); + tooltipComponents.add(Component.translatable("tooltip.antarchy.big_bertha.mode", Component.translatable(mode.translationKey)).withStyle(ChatFormatting.GOLD)); + tooltipComponents.add(Component.translatable(mode.tooltipKey).withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.big_bertha.toggle_mode").withStyle(ChatFormatting.DARK_GRAY)); + } + + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { + return slotChanged || !ItemStack.isSameItem(oldStack, newStack); + } + + @Override + 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); + } + + BossMode mode = getMode(stack); + + if (mode == BossMode.BASILISK) { + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(stack); + } + applyBasiliskRightClick(level, player, stack); + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + } + + if (mode == BossMode.TORETERROR) { + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(stack); + } + startToreterrorJump(level, player, stack); + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + } + + if (mode != BossMode.MOLEVORE) { + return InteractionResultHolder.pass(stack); + } + + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(stack); + } + + startMolevoreSpin(level, player, stack); + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + boolean didHurt = super.hurtEnemy(stack, target, attacker); + if (!didHurt || attacker.level().isClientSide || !(attacker instanceof Player player) || player.getMainHandItem() != stack) { + return didHurt; + } + + if (!(attacker.level() instanceof ServerLevel serverLevel)) { + return didHurt; + } + + switch (getMode(stack)) { + case NONE -> applyNoneHit(player, target); + case BASILISK -> applyBasiliskHit(target, serverLevel); + case LUCID -> applyLucidHit(target, player, serverLevel); + case NIGHTMARE -> applyNightmareHit(player, target, serverLevel); + case KRAKEN -> applyKrakenHit(player, target, serverLevel); + case HERCULES -> applyHerculesHit(player, target, serverLevel); + case MOLEVORE, TORETERROR -> { + } + } + + return didHurt; + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + super.inventoryTick(stack, level, entity, slotId, isSelected); + if (!(entity instanceof Player player)) { + return; + } + + // Toreterror jump tracking + if (isToreterrorJumping(stack) && player.getMainHandItem() == stack) { + player.fallDistance = 0.0F; // prevent fall damage during the crash-down + 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)); + } + if (launched && player.onGround()) { + com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> { + tag.remove(TORETERROR_JUMPING_TAG); + tag.remove(TORETERROR_LAUNCHED_TAG); + }); + if (!level.isClientSide && player instanceof ServerPlayer serverPlayer) { + applyToreterrorLanding((ServerLevel) level, serverPlayer); + } + if (level.isClientSide) { + clientShakeTicks = TORETERROR_SHAKE_TICKS; + } + } + } + + // Tick client shake counter + if (level.isClientSide && clientShakeTicks > 0) { + clientShakeTicks--; + } + + int spinTicks = getSpinTicks(stack); + if (spinTicks <= 0) { + return; + } + + if (player.getMainHandItem() != stack) { + if (!level.isClientSide) { + clearSpinState(stack); + } + return; + } + + alignPlayerToSpinDirection(player, getStoredSpinDirection(stack)); + if (!level.isClientSide && player instanceof ServerPlayer serverPlayer) { + tickMolevoreSpin((ServerLevel) level, serverPlayer, stack, spinTicks); + } + } + + private void applyBasiliskRightClick(Level level, Player player, ItemStack stack) { + if (!level.isClientSide) { + double range = 3.0 + AntarchySettings.bigBerthaReachBonus() + 1.0; + Vec3 eyePos = player.getEyePosition(); + Vec3 lookDir = player.getLookAngle(); + Vec3 endPos = eyePos.add(lookDir.scale(range)); + AABB searchBox = player.getBoundingBox().expandTowards(lookDir.scale(range)).inflate(1.0); + EntityHitResult hit = ProjectileUtil.getEntityHitResult( + player, eyePos, endPos, searchBox, + e -> e != player && !e.isSpectator() && e instanceof LivingEntity, + range * range); + if (hit != null && hit.getEntity() instanceof LivingEntity target) { + if (!target.getType().is(AntarchyTags.Entities.PARALYSIS_IMMUNE)) { + level.playSound(null, target.getX(), target.getY(), target.getZ(), + SoundEvents.SPIDER_AMBIENT, SoundSource.HOSTILE, 1.2F, 0.6F); + target.addEffect(new MobEffectInstance( + AntarchyObjects.PARALYZED_EFFECT.get(), + AntarchySettings.bigBerthaBasiliskParalyzeDurationTicks(), + 0, + false, + true, + true)); + } + } + } + int cooldownTicks = Math.round((float) (AntarchySettings.bigBerthaBasiliskCooldownSeconds() * 20)); + player.getCooldowns().addCooldown(this, cooldownTicks); + player.awardStat(Stats.ITEM_USED.get(this)); + } + + private void applyBasiliskHit(LivingEntity target, ServerLevel level) { + target.addEffect(new MobEffectInstance( + MobEffects.POISON, + AntarchySettings.basiliskDaggerPoisonDurationTicks(), + AntarchySettings.basiliskDaggerPoisonAmplifier() + )); + target.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 60, 0)); + level.sendParticles(ParticleTypes.SNEEZE, target.getX(), target.getY(0.7D), target.getZ(), 10, 0.25D, 0.2D, 0.25D, 0.02D); + } + + private void applyLucidHit(LivingEntity target, Player player, ServerLevel level) { + int effectDurationTicks = (int) Math.round(AntarchySettings.bigBerthaLucidInvertedDurationSeconds() * 20.0D); + if (effectDurationTicks > 0 + && LucidBoltEntity.invertedEffectSupplier != null + && !target.getType().is(AntarchyTags.Entities.INVERTED_IMMUNE)) { + target.addEffect(new MobEffectInstance( + LucidBoltEntity.invertedEffectSupplier.get(), + effectDurationTicks, + 0, + false, + true, + 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)) { + return; + } + + double bonusPercent = AntarchySettings.bigBerthaLucidInvertedDamageBonusPercent(); + if (bonusPercent <= 0.0D) { + return; + } + + float bonusDamage = (float) (player.getAttributeValue(Attributes.ATTACK_DAMAGE) * (bonusPercent / 100.0D)); + if (bonusDamage <= 0.0F) { + return; + } + + target.hurt(player.damageSources().playerAttack(player), bonusDamage); + target.setDeltaMovement(target.getDeltaMovement().add(0.0D, 0.08D, 0.0D)); + target.hurtMarked = true; + } + + private void applyNoneHit(Player attacker, LivingEntity target) { + double bonusPercent = AntarchySettings.bigBerthaNoneModeDamageBonusPercent(); + if (bonusPercent <= 0.0D) { + return; + } + + float bonusDamage = (float) (attacker.getAttributeValue(Attributes.ATTACK_DAMAGE) * (bonusPercent / 100.0D)); + if (bonusDamage <= 0.0F) { + return; + } + + target.invulnerableTime = 0; + target.hurt(attacker.damageSources().playerAttack(attacker), bonusDamage); + target.hurtMarked = true; + } + + private void applyNightmareHit(Player attacker, LivingEntity target, ServerLevel level) { + if (target instanceof Player) { + target.addEffect(new MobEffectInstance(AntarchyObjects.DREAD.get(), AntarchySettings.nightmareDreadTicks(), 0)); + } + target.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, AntarchySettings.nightmareWeaknessTicks(), 0)); + + double bonusPercent = AntarchySettings.bigBerthaNightmareDamageBonusPercent(); + if (bonusPercent > 0.0D) { + float bonusDamage = (float) (attacker.getAttributeValue(Attributes.ATTACK_DAMAGE) * (bonusPercent / 100.0D)); + if (bonusDamage > 0.0F) { + target.invulnerableTime = 0; + target.hurt(attacker.damageSources().playerAttack(attacker), bonusDamage); + target.hurtMarked = true; + } + } + + level.sendParticles(ParticleTypes.SOUL_FIRE_FLAME, target.getX(), target.getY(0.8D), target.getZ(), 12, 0.3D, 0.3D, 0.3D, 0.01D); + level.sendParticles(ParticleTypes.SMOKE, target.getX(), target.getY(0.8D), target.getZ(), 6, 0.2D, 0.2D, 0.2D, 0.02D); + } + + private void applyKrakenHit(Player attacker, LivingEntity target, ServerLevel level) { + 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); + } + if (push.lengthSqr() >= 1.0E-4D) { + Vec3 normalized = push.normalize(); + target.setDeltaMovement(target.getDeltaMovement().add(normalized.x * 1.5D, 0.35D, normalized.z * 1.5D)); + target.hurtMarked = true; + } + + LightningBolt lightningBolt = new LightningBolt(net.minecraft.world.entity.EntityType.LIGHTNING_BOLT, level); + lightningBolt.moveTo(target.getX(), target.getY(), target.getZ()); + lightningBolt.setVisualOnly(true); + level.addFreshEntity(lightningBolt); + + target.hurt(attacker.damageSources().lightningBolt(), (float) AntarchySettings.krakenLightningDamagePhaseOne()); + target.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, AntarchySettings.bigBerthaKrakenSlowTicks(), 1)); + level.sendParticles(ParticleTypes.SPLASH, target.getX(), target.getY(0.7D), target.getZ(), 16, 0.35D, 0.3D, 0.35D, 0.08D); + level.sendParticles(ParticleTypes.ELECTRIC_SPARK, target.getX(), target.getY(0.7D), target.getZ(), 10, 0.25D, 0.25D, 0.25D, 0.02D); + com.craisinlord.antarchy.content.entity.kraken.TentacleEntity.spawnAt(level, target.position(), attacker); + } + + private void applyHerculesHit(Player attacker, LivingEntity target, ServerLevel level) { + float bonusDamage = (float) (attacker.getAttributeValue(Attributes.ATTACK_DAMAGE) * 0.5D); + 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); + } + + if (bonusDamage > 0.0F) { + target.invulnerableTime = 0; + target.hurt(attacker.damageSources().playerAttack(attacker), bonusDamage); + } + + if (push.lengthSqr() >= 1.0E-4D) { + Vec3 normalized = push.normalize(); + Vec3 motion = target.getDeltaMovement(); + target.setDeltaMovement(motion.x + normalized.x * 0.55D, Math.max(motion.y, 1.35D), motion.z + normalized.z * 0.55D); + } else { + Vec3 motion = target.getDeltaMovement(); + target.setDeltaMovement(motion.x, Math.max(motion.y, 1.35D), motion.z); + } + target.hurtMarked = true; + level.sendParticles(ParticleTypes.CRIT, target.getX(), target.getY(0.7D), target.getZ(), 12, 0.3D, 0.35D, 0.3D, 0.04D); + level.playSound(null, target.blockPosition(), SoundEvents.IRON_GOLEM_ATTACK, SoundSource.PLAYERS, 1.0F, 0.8F); + } + + private void cycleMode(Level level, Player player, ItemStack stack) { + BossMode nextMode = getMode(stack).next(); + setMode(stack, nextMode); + clearSpinState(stack); + if (!level.isClientSide) { + player.displayClientMessage( + Component.translatable("message.antarchy.big_bertha.mode", Component.translatable(nextMode.translationKey)), + true + ); + } + } + + public boolean tryCycleModeWhileCoolingDown(Level level, Player player, ItemStack stack) { + if (player.getMainHandItem() != stack || !player.isShiftKeyDown() || !player.getCooldowns().isOnCooldown(this)) { + return false; + } + + cycleMode(level, player, stack); + return true; + } + + private void startMolevoreSpin(Level level, Player player, ItemStack stack) { + Vec3 direction = player.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + if (direction.lengthSqr() < 1.0E-4D) { + direction = Vec3.directionFromRotation(0.0F, player.getYRot()).multiply(1.0D, 0.0D, 1.0D); + } + if (direction.lengthSqr() < 1.0E-4D) { + direction = new Vec3(0.0D, 0.0D, 1.0D); + } + + Vec3 normalized = direction.normalize(); + com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> { + tag.putInt(SPIN_TICKS_TAG, AntarchySettings.molevoreSpinTicks()); + tag.putDouble(SPIN_DIRECTION_X_TAG, normalized.x); + tag.putDouble(SPIN_DIRECTION_Z_TAG, normalized.z); + }); + + player.getCooldowns().addCooldown(this, AntarchySettings.molevoreCooldownTicks()); + player.awardStat(Stats.ITEM_USED.get(this)); + level.playSound(null, player.blockPosition(), AntarchySoundEvents.MOLEVORE_ATTACK.get(), SoundSource.PLAYERS, 1.0F, 0.9F); + if (!level.isClientSide) { + stack.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(EquipmentSlot.MAINHAND)); + } + } + + private void startToreterrorJump(Level level, Player player, ItemStack stack) { + com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> { + tag.putInt(TORETERROR_JUMPING_TAG, 1); + tag.remove(TORETERROR_LAUNCHED_TAG); + }); + player.setDeltaMovement(player.getDeltaMovement().x, 1.5D, player.getDeltaMovement().z); + player.hasImpulse = true; + player.fallDistance = 0.0F; + player.getCooldowns().addCooldown(this, TORETERROR_COOLDOWN_TICKS); + player.awardStat(Stats.ITEM_USED.get(this)); + level.playSound(null, player.blockPosition(), AntarchySoundEvents.TORETERROR_JUMP_UP.get(), SoundSource.PLAYERS, 1.2F, 0.9F); + } + + private void applyToreterrorLanding(ServerLevel level, ServerPlayer player) { + ItemStack heldStack = player.getMainHandItem(); + float damage = (float) (player.getAttributeValue(Attributes.ATTACK_DAMAGE) * 2.0D); + AABB aoe = player.getBoundingBox().inflate(TORETERROR_LANDING_RADIUS, 3.0D, TORETERROR_LANDING_RADIUS); + for (LivingEntity victim : level.getEntitiesOfClass(LivingEntity.class, aoe, + e -> e.isAlive() && e != player && !e.isSpectator())) { + victim.hurt(player.damageSources().playerAttack(player), damage); + Vec3 knockDir = victim.position().subtract(player.position()).multiply(1.0D, 0.0D, 1.0D); + if (knockDir.lengthSqr() < 1.0E-4D) knockDir = player.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + Vec3 normalized = knockDir.normalize(); + victim.push(normalized.x * 2.5D, 0.6D, normalized.z * 2.5D); + victim.hurtMarked = true; + } + level.playSound(null, player.blockPosition(), AntarchySoundEvents.TORETERROR_JUMP_LAND.get(), SoundSource.PLAYERS, 1.2F, 0.9F); + level.sendParticles(ParticleTypes.EXPLOSION, player.getX(), player.getY() + 0.5D, player.getZ(), 4, 1.5D, 0.3D, 1.5D, 0.0D); + level.sendParticles(ParticleTypes.SPLASH, player.getX(), player.getY() + 0.5D, player.getZ(), 60, 3.0D, 0.5D, 3.0D, 0.2D); + level.sendParticles(ParticleTypes.CRIT, player.getX(), player.getY() + 0.5D, player.getZ(), 20, 2.0D, 0.5D, 2.0D, 0.1D); + heldStack.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(EquipmentSlot.MAINHAND)); + } + + private static boolean isToreterrorJumping(ItemStack stack) { + return readInt(stack, TORETERROR_JUMPING_TAG) == 1; + } + + private void tickMolevoreSpin(ServerLevel level, ServerPlayer player, ItemStack stack, int spinTicks) { + Vec3 direction = getStoredSpinDirection(stack); + double verticalBoost = player.onGround() ? 0.08D : Math.max(-0.08D, player.getDeltaMovement().y); + Vec3 motion = direction.scale(AntarchySettings.molevoreChargeSpeed()).add(0.0D, verticalBoost, 0.0D); + player.setDeltaMovement(motion); + player.hasImpulse = true; + player.hurtMarked = true; + player.fallDistance = 0.0F; + alignPlayerToSpinDirection(player, direction); + + if ((spinTicks & 1) == 0) { + dealSpinDamage(level, player, direction); + } + boolean brokeBlocks = breakDrillBlocks(level, player, direction); + if (player.horizontalCollision && !brokeBlocks) { + clearSpinState(stack); + return; + } + level.sendParticles(ParticleTypes.CLOUD, player.getX(), player.getY(0.35D), player.getZ(), 6, 0.35D, 0.1D, 0.35D, 0.01D); + level.sendParticles(ParticleTypes.CRIT, player.getX(), player.getY(0.7D), player.getZ(), 4, 0.25D, 0.2D, 0.25D, 0.02D); + + if (spinTicks <= 1) { + clearSpinState(stack); + return; + } + + setSpinTicks(stack, spinTicks - 1); + } + + private void dealSpinDamage(ServerLevel level, ServerPlayer player, Vec3 direction) { + AABB hitBox = player.getBoundingBox().inflate(0.7D).expandTowards(direction.scale(0.9D)); + float spinDamage = (float) (player.getAttributeValue(Attributes.ATTACK_DAMAGE) * 1.35D); + for (LivingEntity target : level.getEntitiesOfClass( + LivingEntity.class, + hitBox, + entity -> entity.isAlive() && entity != player && !entity.isSpectator() + )) { + if (!target.hurt(player.damageSources().playerAttack(player), spinDamage)) { + continue; + } + + target.push(direction.x * 1.1D, 0.3D, direction.z * 1.1D); + target.hurtMarked = true; + } + } + + private boolean breakDrillBlocks(ServerLevel level, ServerPlayer player, Vec3 direction) { + Vec3 forward = direction.normalize(); + Vec3 center = player.position() + .add(forward.scale(AntarchySettings.molevoreBreakRange() * 0.5D)) + .add(0.0D, player.getBbHeight() * 0.4D, 0.0D); + BlockPos min = BlockPos.containing( + center.x - AntarchySettings.molevoreBreakHalfWidth(), + center.y - AntarchySettings.molevoreBreakVerticalRange() * 0.5D, + center.z - AntarchySettings.molevoreBreakHalfWidth() + ); + BlockPos max = BlockPos.containing( + center.x + AntarchySettings.molevoreBreakHalfWidth(), + center.y + AntarchySettings.molevoreBreakVerticalRange() * 0.5D, + center.z + AntarchySettings.molevoreBreakHalfWidth() + ); + ItemStack stack = player.getMainHandItem(); + Vec3 horizontalForward = forward.multiply(1.0D, 0.0D, 1.0D); + boolean broke = false; + + for (BlockPos pos : BlockPos.betweenClosed(min, max)) { + BlockState state = level.getBlockState(pos); + if (!canDrillBlock(level, player, stack, pos, state)) { + continue; + } + + if (horizontalForward.lengthSqr() > 1.0E-4D) { + Vec3 toBlock = Vec3.atCenterOf(pos).subtract(player.position()).multiply(1.0D, 0.0D, 1.0D); + if (toBlock.lengthSqr() > 1.0E-4D && horizontalForward.normalize().dot(toBlock.normalize()) < -0.15D) { + continue; + } + } + + if (player.gameMode.destroyBlock(pos)) { + broke = true; + } + } + + return broke; + } + + private boolean canDrillBlock(ServerLevel level, ServerPlayer player, ItemStack stack, BlockPos pos, BlockState state) { + if (!level.isLoaded(pos) + || state.isAir() + || state.hasBlockEntity() + || state.getDestroySpeed(level, pos) < 0.0F + || !state.is(AntarchyTags.Blocks.MOLEVORE_BREAKABLE_BLOCKS) + || !player.mayUseItemAt(pos, Direction.UP, stack) + || player.blockActionRestricted(level, pos, player.gameMode.getGameModeForPlayer())) { + return false; + } + + return true; + } + + private void alignPlayerToSpinDirection(Player player, Vec3 direction) { + float yaw = (float)(Math.toDegrees(Math.atan2(direction.z, direction.x)) - 90.0D); + player.setYRot(yaw); + player.setYHeadRot(yaw); + player.setYBodyRot(yaw); + } + + private static BossMode getMode(ItemStack stack) { + return BossMode.fromId(readInt(stack, MODE_TAG)); + } + + private static void setMode(ItemStack stack, BossMode mode) { + com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> { + if (mode == BossMode.NONE) { + tag.remove(MODE_TAG); + } else { + tag.putInt(MODE_TAG, mode.id); + } + }); + } + + private static int getSpinTicks(ItemStack stack) { + return Math.max(0, readInt(stack, SPIN_TICKS_TAG)); + } + + private static void setSpinTicks(ItemStack stack, int ticks) { + com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> { + if (ticks <= 0) { + tag.remove(SPIN_TICKS_TAG); + } else { + tag.putInt(SPIN_TICKS_TAG, ticks); + } + }); + } + + private static Vec3 getStoredSpinDirection(ItemStack stack) { + double x = readDouble(stack, SPIN_DIRECTION_X_TAG); + double z = readDouble(stack, SPIN_DIRECTION_Z_TAG); + Vec3 direction = new Vec3(x, 0.0D, z); + return direction.lengthSqr() < 1.0E-4D ? new Vec3(0.0D, 0.0D, 1.0D) : direction.normalize(); + } + + private static void clearSpinState(ItemStack stack) { + com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> { + tag.remove(SPIN_TICKS_TAG); + tag.remove(SPIN_DIRECTION_X_TAG); + tag.remove(SPIN_DIRECTION_Z_TAG); + }); + } + + private static int readInt(ItemStack stack, String tagName) { + return com.craisinlord.antarchy.content.component.AntarchyItemTag.getOrEmpty(stack).getInt(tagName); + } + + private static double readDouble(ItemStack stack, String tagName) { + return com.craisinlord.antarchy.content.component.AntarchyItemTag.getOrEmpty(stack).getDouble(tagName); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + public void createRenderer(Consumer consumer) { + consumer.accept(new AntarchyGeoItemRenderer() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getCustomRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(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; + } + + private enum BossMode { + NONE(0, "tooltip.antarchy.big_bertha.mode.none", "message.antarchy.big_bertha.mode.none"), + BASILISK(7, "tooltip.antarchy.big_bertha.mode.basilisk", "message.antarchy.big_bertha.mode.basilisk"), + NIGHTMARE(1, "tooltip.antarchy.big_bertha.mode.nightmare", "message.antarchy.big_bertha.mode.nightmare"), + KRAKEN(2, "tooltip.antarchy.big_bertha.mode.kraken", "message.antarchy.big_bertha.mode.kraken"), + 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"), + HERCULES(6, "tooltip.antarchy.big_bertha.mode.hercules", "message.antarchy.big_bertha.mode.hercules"); + + private final int id; + private final String tooltipKey; + private final String translationKey; + + BossMode(int id, String tooltipKey, String translationKey) { + this.id = id; + this.tooltipKey = tooltipKey; + this.translationKey = translationKey; + } + + private BossMode next() { + return switch (this) { + case NONE -> BASILISK; + case BASILISK -> LUCID; + case LUCID -> NIGHTMARE; + case NIGHTMARE -> KRAKEN; + case KRAKEN -> HERCULES; + case HERCULES -> MOLEVORE; + case MOLEVORE -> TORETERROR; + case TORETERROR -> NONE; + }; + } + + private static BossMode fromId(int id) { + for (BossMode mode : values()) { + if (mode.id == id) { + return mode; + } + } + return NONE; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalAppleItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalAppleItem.java new file mode 100644 index 00000000..48f28632 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalAppleItem.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.effect.MobEffectInstance; +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.TooltipFlag; +import net.minecraft.world.level.Level; + +public class BloodCrystalAppleItem extends Item { + public BloodCrystalAppleItem(Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity entity) { + ItemStack result = super.finishUsingItem(stack, level, entity); + if (!level.isClientSide() && entity instanceof Player player) { + int amplifier = AntarchySettings.bloodCrystalAppleShieldCount() - 1; + int duration = AntarchySettings.bloodCrystalAppleDurationTicks(); + player.addEffect(new MobEffectInstance(AntarchyObjects.BLOODGLASS_WARD.get(), duration, amplifier, false, true, true)); + } + return result; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("item.antarchy.blood_crystal_apple.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/BloodCrystalArmorItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalArmorItem.java new file mode 100644 index 00000000..c4f1d9cb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalArmorItem.java @@ -0,0 +1,100 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.google.common.collect.ImmutableMultimap; +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.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.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; + +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))); + this.armorType = type; + } + + @Override + public int getDefense() { + return switch (this.armorType) { + case HELMET -> AntarchySettings.bloodCrystalHelmetDefense(); + case CHESTPLATE -> AntarchySettings.bloodCrystalChestplateDefense(); + case LEGGINGS -> AntarchySettings.bloodCrystalLeggingsDefense(); + case BOOTS -> AntarchySettings.bloodCrystalBootsDefense(); + }; + } + + @Override + public float getToughness() { + return (float) AntarchySettings.bloodCrystalArmorToughness(); + } + + private static int resolveDurability(Type type) { + return switch (type) { + case HELMET -> AntarchySettings.bloodCrystalHelmetDurability(); + case CHESTPLATE -> AntarchySettings.bloodCrystalChestplateDurability(); + case LEGGINGS -> AntarchySettings.bloodCrystalLeggingsDurability(); + case BOOTS -> AntarchySettings.bloodCrystalBootsDurability(); + }; + } + + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != this.armorType.getSlot()) { + return super.getDefaultAttributeModifiers(slot); + } + + String prefix = "blood_crystal_" + 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 + ) + ); + builder.put( + AntarchyObjects.BLOODGLASS_MAX_HEARTS.get().value(), + new AttributeModifier( + UUID.nameUUIDFromBytes((prefix + "_bloodglass_max").getBytes()), + prefix + "_bloodglass_max", + 1.0, + AttributeModifier.Operation.ADDITION + ) + ); + return builder.build(); + } + + @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)); + if (this.armorType == Type.BOOTS) { + tooltipComponents.add(Component.translatable("item.antarchy.blood_crystal_boots.tooltip2").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/BloodCrystalKatanaItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalKatanaItem.java new file mode 100644 index 00000000..0c017a98 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalKatanaItem.java @@ -0,0 +1,68 @@ +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.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.SwordItem; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.phys.Vec3; +import com.craisinlord.antarchy.config.AntarchySettings; + +public class BloodCrystalKatanaItem extends SwordItem { + @FunctionalInterface + public interface TrailCallback { + void trigger(ServerPlayer player, int durationTicks); + } + + private static TrailCallback trailCallback = (player, durationTicks) -> {}; + + private final Tier tier; + private final int attackDamage; + private final float attackSpeed; + + public BloodCrystalKatanaItem(Tier tier, Item.Properties properties, int attackDamage, float attackSpeed) { + super(tier, attackDamage, attackSpeed, properties); + this.tier = tier; + this.attackDamage = attackDamage; + this.attackSpeed = attackSpeed; + } + + public static void setTrailCallback(TrailCallback callback) { + trailCallback = callback == null ? (player, durationTicks) -> {} : callback; + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + boolean result = super.hurtEnemy(stack, target, attacker); + if (!(attacker instanceof ServerPlayer player)) { + return result; + } + + Vec3 look = player.getLookAngle(); + Vec3 horizontal = new Vec3(look.x, 0.0D, look.z); + if (horizontal.lengthSqr() < 1.0E-6D) { + horizontal = Vec3.directionFromRotation(0.0F, player.getYRot()); + } + + Vec3 launch = horizontal.normalize().scale(AntarchySettings.bloodCrystalKatanaLaunchStrength()) + .add(0.0D, 0.12D, 0.0D); + player.setDeltaMovement(player.getDeltaMovement().add(launch)); + player.hasImpulse = true; + player.hurtMarked = true; + trailCallback.trigger(player, AntarchySettings.bloodCrystalKatanaTrailDurationTicks()); + return result; + } + + @Override + public void appendHoverText(ItemStack stack, 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.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 new file mode 100644 index 00000000..8ede5110 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BloodCrystalShardItem.java @@ -0,0 +1,63 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.bloodglass.BloodglassAccess; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +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 java.util.function.Consumer; + +public class BloodCrystalShardItem extends Item { + public static Consumer SYNC_BLOODGLASS = p -> {}; + + private static final int COOLDOWN_TICKS = 60; + + public BloodCrystalShardItem(Properties properties) { + super(properties); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + + if (level.isClientSide()) { + return InteractionResultHolder.success(stack); + } + + BloodglassAccess access = (BloodglassAccess) player; + int armorLost = access.antarchy$getArmorShieldLostCount(); + int appleLost = access.antarchy$getAppleShieldLostCount(); + + if (armorLost <= 0 && appleLost <= 0) { + 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); + if (armorLost - 1 == 0) { + access.antarchy$setArmorRechargeTimer(0); + } + } else { + access.antarchy$setAppleShieldsActive(access.antarchy$getAppleShieldsActive() + 1); + access.antarchy$setAppleShieldLostCount(appleLost - 1); + if (appleLost - 1 == 0) { + access.antarchy$setAppleRechargeTimer(0); + } + } + + player.getCooldowns().addCooldown(this, COOLDOWN_TICKS); + SYNC_BLOODGLASS.accept((ServerPlayer) player); + + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + + return InteractionResultHolder.success(stack); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BluestoneDustItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BluestoneDustItem.java new file mode 100644 index 00000000..51d82368 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BluestoneDustItem.java @@ -0,0 +1,63 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.block.BluestoneWireBlock; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; + +public class BluestoneDustItem extends Item { + private final BluestoneWireBlock wireBlock; + + public BluestoneDustItem(BluestoneWireBlock wireBlock, Properties properties) { + super(properties); + this.wireBlock = wireBlock; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.bluestone_placement").withStyle(ChatFormatting.DARK_AQUA)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + if (context.getClickedFace() != net.minecraft.core.Direction.DOWN) { + return InteractionResult.FAIL; + } + + Level level = context.getLevel(); + BlockPos targetPos = context.getClickedPos().relative(context.getClickedFace()); + BlockState existing = level.getBlockState(targetPos); + if (!existing.canBeReplaced() && !existing.isAir()) { + return InteractionResult.FAIL; + } + + BlockPlaceContext placeContext = BlockPlaceContext.at(new BlockPlaceContext(context), targetPos, context.getClickedFace()); + BlockState placeState = this.wireBlock.getStateForPlacement(placeContext); + if (placeState == null) { + return InteractionResult.FAIL; + } + + if (!level.setBlock(targetPos, placeState, 11)) { + return InteractionResult.FAIL; + } + + SoundType soundType = placeState.getSoundType(); + level.playSound(context.getPlayer(), targetPos, soundType.getPlaceSound(), SoundSource.BLOCKS, (soundType.getVolume() + 1.0F) / 2.0F, soundType.getPitch() * 0.8F); + if (context.getPlayer() == null || !context.getPlayer().getAbilities().instabuild) { + context.getItemInHand().shrink(1); + } + return InteractionResult.sidedSuccess(level.isClientSide); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BrutalflyElytraFlightHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BrutalflyElytraFlightHelper.java new file mode 100644 index 00000000..6ec87e59 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BrutalflyElytraFlightHelper.java @@ -0,0 +1,76 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.util.Mth; + +public final class BrutalflyElytraFlightHelper { + public static final int FLAP_CHARGE_TICKS_MAX = 20; + public static final int IDEAL_RELEASE_TICK = 18; + public static final int PERFECT_WINDOW_TICKS = 2; + public static final int GOOD_WINDOW_TICKS = 5; + public static final int FLAP_COOLDOWN_TICKS = 12; + public static final float WEAK_LIFT = 0.12F; + public static final float BASE_LIFT = 0.25F; + public static final float GOOD_LIFT = 0.45F; + public static final float PERFECT_LIFT = 0.70F; + public static final float FORWARD_BOOST = 0.15F; + public static final float GOOD_FORWARD_BOOST = 0.25F; + public static final float PERFECT_FORWARD_BOOST = 0.35F; + public static final int ANIMATION_TICKS = 10; + + private BrutalflyElytraFlightHelper() { + } + + public static int clampChargeTicks(int chargeTicks) { + return Mth.clamp(chargeTicks, 0, FLAP_CHARGE_TICKS_MAX); + } + + public static FlapTier resolveFlapTier(int chargeTicks) { + if (chargeTicks <= 0) { + return FlapTier.FAIL; + } + + int clampedCharge = clampChargeTicks(chargeTicks); + int distance = Math.abs(clampedCharge - IDEAL_RELEASE_TICK); + if (distance <= PERFECT_WINDOW_TICKS) { + return FlapTier.PERFECT; + } + if (distance <= GOOD_WINDOW_TICKS) { + return FlapTier.GOOD; + } + return FlapTier.WEAK; + } + + public static float liftFor(FlapTier tier) { + return switch (tier) { + case PERFECT -> PERFECT_LIFT; + case GOOD -> GOOD_LIFT; + case WEAK -> BASE_LIFT; + case FAIL -> 0.0F; + }; + } + + public static float forwardBoostFor(FlapTier tier) { + return switch (tier) { + case PERFECT -> PERFECT_FORWARD_BOOST; + case GOOD -> GOOD_FORWARD_BOOST; + case WEAK -> FORWARD_BOOST; + case FAIL -> 0.0F; + }; + } + + public static int animationTicksFor(FlapTier tier) { + return switch (tier) { + case PERFECT -> ANIMATION_TICKS; + case GOOD -> 9; + case WEAK -> 7; + case FAIL -> 0; + }; + } + + public enum FlapTier { + FAIL, + WEAK, + GOOD, + PERFECT + } +} 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 new file mode 100644 index 00000000..1d254270 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/BrutalflyElytraItem.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.Optional; +import java.util.List; +import java.util.function.Supplier; +import net.minecraft.world.level.Level; +import net.minecraft.ChatFormatting; +import net.minecraft.core.registries.BuiltInRegistries; +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.item.ElytraItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +public final class BrutalflyElytraItem extends ElytraItem { + private static final ResourceLocation REPAIR_MATERIAL_ID = new ResourceLocation("antarchy", "brutalfly_wing"); + + // 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) { + super(properties); + } + + public static boolean isWearingBrutalflyElytra(LivingEntity entity) { + return entity != null && entity.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof BrutalflyElytraItem; + } + + @Override + public boolean isValidRepairItem(ItemStack toRepair, ItemStack repair) { + Optional repairMaterial = BuiltInRegistries.ITEM.getOptional(REPAIR_MATERIAL_ID); + return repairMaterial.isPresent() && repair.is(repairMaterial.get()); + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return 1; + } + + @Override + public void appendHoverText(ItemStack stack, 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/CeilingCompatiblePlacementTooltipBlockItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CeilingCompatiblePlacementTooltipBlockItem.java new file mode 100644 index 00000000..83c695ea --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CeilingCompatiblePlacementTooltipBlockItem.java @@ -0,0 +1,23 @@ +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 CeilingCompatiblePlacementTooltipBlockItem extends BlockItem { + public CeilingCompatiblePlacementTooltipBlockItem(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.ceiling_compatible_placement").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/CeilingPlacementTooltipBlockItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CeilingPlacementTooltipBlockItem.java new file mode 100644 index 00000000..fba7ab92 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CeilingPlacementTooltipBlockItem.java @@ -0,0 +1,23 @@ +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 CeilingPlacementTooltipBlockItem extends BlockItem { + public CeilingPlacementTooltipBlockItem(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.bluestone_placement").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/CeilingPlacementTooltipItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CeilingPlacementTooltipItem.java new file mode 100644 index 00000000..82d02201 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CeilingPlacementTooltipItem.java @@ -0,0 +1,21 @@ +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.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; + +public class CeilingPlacementTooltipItem extends Item { + public CeilingPlacementTooltipItem(Properties properties) { + super(properties); + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.bluestone_placement").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/CloudBucketItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CloudBucketItem.java new file mode 100644 index 00000000..e020291a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CloudBucketItem.java @@ -0,0 +1,86 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.List; +import net.minecraft.Util; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BlockItem; +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.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; + +public final class CloudBucketItem extends BlockItem { + public CloudBucketItem(Block block, Properties properties) { + super(block, properties.stacksTo(1)); + } + + @Override + public String getDescriptionId() { + return Util.makeDescriptionId("item", BuiltInRegistries.ITEM.getKey(this)); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + Vec3 target = player.getEyePosition().add(player.getLookAngle().scale(2.0D)); + BlockPos placePos = BlockPos.containing(target); + + if (!level.getBlockState(placePos).canBeReplaced() || !player.mayUseItemAt(placePos, player.getDirection(), stack)) { + return InteractionResultHolder.pass(stack); + } + + BlockState placeState = getBlock().defaultBlockState(); + if (!level.isClientSide()) { + level.setBlock(placePos, placeState, 11); + level.playSound(null, placePos, placeState.getSoundType().getPlaceSound(), SoundSource.BLOCKS, 1.0F, 1.0F); + if (!player.getAbilities().instabuild) { + player.setItemInHand(hand, new ItemStack(Items.BUCKET)); + } + } + + return InteractionResultHolder.sidedSuccess(player.getItemInHand(hand), level.isClientSide()); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + BlockPos clickedPos = context.getClickedPos(); + BlockPos placePos = level.getBlockState(clickedPos).canBeReplaced() ? clickedPos : clickedPos.relative(context.getClickedFace()); + Player player = context.getPlayer(); + + if (!level.getBlockState(placePos).canBeReplaced() || (player != null && !player.mayUseItemAt(placePos, context.getClickedFace(), context.getItemInHand()))) { + return InteractionResult.FAIL; + } + + BlockState placeState = getBlock().defaultBlockState(); + if (!level.isClientSide()) { + level.setBlock(placePos, placeState, 11); + level.playSound(null, placePos, placeState.getSoundType().getPlaceSound(), SoundSource.BLOCKS, 1.0F, 1.0F); + } + + if (player != null && !player.getAbilities().instabuild && !level.isClientSide()) { + player.setItemInHand(context.getHand(), new ItemStack(Items.BUCKET)); + } + + return InteractionResult.sidedSuccess(level.isClientSide()); + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.cloud_bucket.midair").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} 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 new file mode 100644 index 00000000..fdd46d54 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CloudSharkFinSoupItem.java @@ -0,0 +1,22 @@ +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/CorneaEarItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CorneaEarItem.java new file mode 100644 index 00000000..d2b52ccc --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CorneaEarItem.java @@ -0,0 +1,89 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.block.CorneaStalkBlock; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionResult; +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.TooltipFlag; +import net.minecraft.world.item.context.UseOnContext; +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; + +public final class CorneaEarItem extends Item { + public CorneaEarItem(Properties properties) { + super(properties); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + Direction clickedFace = context.getClickedFace(); + if (clickedFace != Direction.UP && clickedFace != Direction.DOWN) { + return InteractionResult.PASS; + } + + BlockPos supportPos = context.getClickedPos(); + BlockPos plantPos = supportPos.relative(clickedFace); + boolean hanging = clickedFace == Direction.DOWN; + BlockState supportState = level.getBlockState(supportPos); + if (!supportState.is(AntarchyTags.Blocks.CORNEA_STALK_PLANTABLE)) { + return InteractionResult.PASS; + } + + BlockState stalkState = BuiltInRegistries.BLOCK.getOptional(new ResourceLocation("antarchy", "cornea_stalk")) + .map(block -> block.defaultBlockState().setValue(CorneaStalkBlock.HANGING, hanging)) + .orElse(Blocks.AIR.defaultBlockState()); + if (stalkState.isAir() || !level.getBlockState(plantPos).isAir() || !stalkState.canSurvive(level, plantPos)) { + return InteractionResult.FAIL; + } + + if (level.isClientSide) { + return InteractionResult.SUCCESS; + } + + level.setBlock(plantPos, stalkState, Block.UPDATE_ALL); + level.playSound(null, plantPos, stalkState.getSoundType().getPlaceSound(), SoundSource.BLOCKS, 1.0F, 1.0F); + ItemStack stack = context.getItemInHand(); + Player player = context.getPlayer(); + if (player == null || !player.getAbilities().instabuild) { + stack.shrink(1); + } + if (player != null) { + player.awardStat(Stats.ITEM_USED.get(this)); + } + return InteractionResult.CONSUME; + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) { + ItemStack result = super.finishUsingItem(stack, level, livingEntity); + int durationTicks = Math.max(0, AntarchySettings.corneaEarNightVisionSeconds()) * 20; + if (!level.isClientSide && durationTicks > 0) { + livingEntity.addEffect(new MobEffectInstance(MobEffects.NIGHT_VISION, durationTicks, 0)); + } + return result; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.cornea_ear.vision", AntarchySettings.corneaEarNightVisionSeconds()).withStyle(ChatFormatting.DARK_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 new file mode 100644 index 00000000..e2802d58 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/CritterCageItem.java @@ -0,0 +1,351 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.block.entity.CritterCageBlockEntity; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +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.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.SpawnEggItem; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +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.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraft.tags.TagKey; + +public class CritterCageItem extends Item { + public static final String ENTITY_DATA_TAG = "EntityData"; + private static final TagKey> BOSS_TAG = TagKey.create(Registries.ENTITY_TYPE, new ResourceLocation("bosses")); + private static final int EMPTY_STATE = 0; + private static final int FILLED_PLAIN_STATE = 1; + private static final int FILLED_COLORED_STATE = 2; + + public CritterCageItem(Properties properties) { + super(properties); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (!this.isFilled(stack)) { + if (!level.isClientSide) { + this.launchProjectile(level, player, hand, stack); + } + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + } + + if (level.isClientSide) { + return InteractionResultHolder.success(stack); + } + + if (!(level instanceof ServerLevel serverLevel)) { + return InteractionResultHolder.pass(stack); + } + + return this.releaseAtLookTarget(serverLevel, player, hand, stack) + ? InteractionResultHolder.consume(player.getItemInHand(hand)) + : InteractionResultHolder.fail(stack); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + ItemStack stack = context.getItemInHand(); + if (!this.isFilled(stack)) { + return InteractionResult.PASS; + } + + Player player = context.getPlayer(); + if (player != null && player.isShiftKeyDown()) { + return this.placeBlock(context) ? InteractionResult.CONSUME : InteractionResult.FAIL; + } + + if (context.getLevel().isClientSide) { + return InteractionResult.SUCCESS; + } + + if (!(context.getLevel() instanceof ServerLevel serverLevel)) { + return InteractionResult.PASS; + } + + return this.releaseAtBlockHit(serverLevel, context) + ? InteractionResult.CONSUME + : InteractionResult.FAIL; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltip, TooltipFlag flag) { + if (!this.isFilled(stack)) { + tooltip.add(Component.translatable("tooltip.antarchy.critter_cage.empty").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, level, tooltip, flag); + return; + } + + tooltip.add(Component.translatable("tooltip.antarchy.critter_cage.contains", this.getDisplayName(stack)).withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.translatable("tooltip.antarchy.critter_cage.release").withStyle(ChatFormatting.DARK_GRAY)); + tooltip.add(Component.translatable("tooltip.antarchy.critter_cage.place").withStyle(ChatFormatting.DARK_GRAY)); + super.appendHoverText(stack, level, tooltip, flag); + } + + public boolean isFilled(ItemStack stack) { + return this.getEntityTypeId(stack) != null && this.getEntityData(stack) != null; + } + + public int getItemState(ItemStack stack) { + if (!this.isFilled(stack)) { + return EMPTY_STATE; + } + return this.hasSpawnEggColors(stack) ? FILLED_COLORED_STATE : FILLED_PLAIN_STATE; + } + + public ResourceLocation getEntityTypeId(ItemStack stack) { + return AntarchyObjects.CRITTER_CAGE_ENTITY_TYPE_COMPONENT.get(stack); + } + + public CompoundTag getEntityData(ItemStack stack) { + CompoundTag tag = com.craisinlord.antarchy.content.component.AntarchyItemTag.getOrEmpty(stack); + if (!tag.contains(ENTITY_DATA_TAG, Tag.TAG_COMPOUND)) { + return null; + } + return tag.getCompound(ENTITY_DATA_TAG).copy(); + } + + public int getPrimaryColor(ItemStack stack) { + return AntarchyObjects.CRITTER_CAGE_PRIMARY_COLOR_COMPONENT.getOrDefault(stack, -1); + } + + public int getSecondaryColor(ItemStack stack) { + return AntarchyObjects.CRITTER_CAGE_SECONDARY_COLOR_COMPONENT.getOrDefault(stack, -1); + } + + public Component getDisplayName(ItemStack stack) { + if (stack.hasCustomHoverName()) { + return stack.getHoverName(); + } + + EntityType type = this.getEntityType(stack); + return type != null ? type.getDescription() : Component.literal("Unknown"); + } + + public EntityType getEntityType(ItemStack stack) { + ResourceLocation id = this.getEntityTypeId(stack); + return id == null ? null : BuiltInRegistries.ENTITY_TYPE.getOptional(id).orElse(null); + } + + public static ItemStack createFilledStack(Entity entity) { + ItemStack stack = new ItemStack(AntarchyObjects.CRITTER_CAGE.get()); + if (entity == null) { + return stack; + } + + EntityType type = entity.getType(); + ResourceLocation typeId = BuiltInRegistries.ENTITY_TYPE.getKey(type); + if (typeId != null) { + AntarchyObjects.CRITTER_CAGE_ENTITY_TYPE_COMPONENT.set(stack, typeId); + } + + CompoundTag entityData = new CompoundTag(); + entity.saveWithoutId(entityData); + com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> tag.put(ENTITY_DATA_TAG, entityData)); + + if (entity.hasCustomName()) { + stack.setHoverName(entity.getCustomName()); + } + + applySpawnEggColors(stack, type); + return stack; + } + + public static boolean canCapture(Entity entity) { + if (entity == null || !entity.isAlive()) { + return false; + } + if (entity instanceof Player) { + return false; + } + if (entity.getType().is(BOSS_TAG)) { + return false; + } + if (entity.isPassenger() || entity.isVehicle() || !entity.getPassengers().isEmpty()) { + return false; + } + if (entity.getType().is(AntarchyTags.Entities.CRITTER_CAGE_BLACKLIST)) { + return false; + } + + AABB box = entity.getBoundingBox(); + return box.getXsize() <= AntarchySettings.critterCageMaxCapturableWidth() + && box.getZsize() <= AntarchySettings.critterCageMaxCapturableWidth() + && box.getYsize() <= AntarchySettings.critterCageMaxCapturableHeight(); + } + + public static void applySpawnEggColors(ItemStack stack, EntityType entityType) { + SpawnEggItem egg = findSpawnEgg(entityType); + if (egg == null) { + AntarchyObjects.CRITTER_CAGE_PRIMARY_COLOR_COMPONENT.remove(stack); + AntarchyObjects.CRITTER_CAGE_SECONDARY_COLOR_COMPONENT.remove(stack); + return; + } + + AntarchyObjects.CRITTER_CAGE_PRIMARY_COLOR_COMPONENT.set(stack, egg.getColor(0)); + AntarchyObjects.CRITTER_CAGE_SECONDARY_COLOR_COMPONENT.set(stack, egg.getColor(1)); + } + + private static SpawnEggItem findSpawnEgg(EntityType entityType) { + @SuppressWarnings("unchecked") + EntityType livingType = (EntityType) entityType; + return livingType == null ? null : SpawnEggItem.byId(livingType); + } + + private boolean releaseAtLookTarget(ServerLevel level, Player player, InteractionHand hand, ItemStack stack) { + HitResult hitResult = player.pick(5.0D, 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)); + return this.releaseAtPosition(level, player, hand, stack, target); + } + + private boolean releaseAtBlockHit(ServerLevel level, UseOnContext context) { + BlockPos targetPos = context.getClickedPos().relative(context.getClickedFace()); + Vec3 target = Vec3.atCenterOf(targetPos); + return this.releaseAtPosition(level, context.getPlayer(), context.getHand(), context.getItemInHand(), target); + } + + private boolean releaseAtPosition(ServerLevel level, Player player, InteractionHand hand, ItemStack stack, Vec3 position) { + EntityType type = this.getEntityType(stack); + if (type == null) { + return false; + } + + if (!level.getWorldBorder().isWithinBounds(BlockPos.containing(position))) { + return false; + } + + CompoundTag entityData = this.getEntityData(stack); + if (entityData == null) { + return false; + } + + CompoundTag savedData = entityData.copy(); + ResourceLocation entityId = BuiltInRegistries.ENTITY_TYPE.getKey(type); + if (entityId != null) { + savedData.putString("id", entityId.toString()); + } + + Entity entity = EntityType.loadEntityRecursive(savedData, level, loaded -> loaded); + if (entity == null) { + return false; + } + + entity.setUUID(java.util.UUID.randomUUID()); + entity.moveTo(position.x, position.y, position.z, player != null ? player.getYRot() : 0.0F, 0.0F); + if (!level.noCollision(entity)) { + return false; + } + + level.addFreshEntity(entity); + this.replaceFilledWithEmpty(player, hand, stack); + return true; + } + + private void replaceFilledWithEmpty(Player player, InteractionHand hand, ItemStack stack) { + if (player != null && player.getAbilities().instabuild) { + return; + } + + ItemStack emptyCage = new ItemStack(AntarchyObjects.CRITTER_CAGE.get()); + if (stack.getCount() <= 1) { + if (player != null) { + player.setItemInHand(hand, emptyCage); + } + return; + } + + stack.shrink(1); + if (player == null || !player.getInventory().add(emptyCage)) { + if (player != null) { + player.drop(emptyCage, false); + } + } + } + + private boolean placeBlock(UseOnContext context) { + if (!(context.getLevel() instanceof ServerLevel serverLevel)) { + return false; + } + + Player player = context.getPlayer(); + if (player == null) { + return false; + } + + BlockPos placePos = context.getClickedPos().relative(context.getClickedFace()); + if (!serverLevel.getBlockState(placePos).canBeReplaced()) { + return false; + } + + BlockState state = AntarchyObjects.CRITTER_CAGE_BLOCK.get().defaultBlockState(); + if (!serverLevel.setBlock(placePos, state, Block.UPDATE_ALL)) { + return false; + } + + BlockEntity blockEntity = serverLevel.getBlockEntity(placePos); + if (!(blockEntity instanceof CritterCageBlockEntity critterCageBlockEntity)) { + serverLevel.setBlock(placePos, Blocks.AIR.defaultBlockState(), Block.UPDATE_ALL); + return false; + } + + critterCageBlockEntity.loadFromItem(context.getItemInHand(), context.getLevel().registryAccess()); + if (!player.getAbilities().instabuild) { + context.getItemInHand().shrink(1); + } + return true; + } + + private boolean hasSpawnEggColors(ItemStack stack) { + return this.getPrimaryColor(stack) >= 0 && this.getSecondaryColor(stack) >= 0; + } + + private void launchProjectile(Level level, Player player, InteractionHand hand, ItemStack stack) { + var projectileType = AntarchyObjects.CRITTER_CAGE_PROJECTILE.get(); + var projectile = projectileType.create(level); + com.craisinlord.antarchy.content.entity.CritterCageProjectileEntity critterCageProjectile = projectile; + if (critterCageProjectile == null) { + return; + } + + critterCageProjectile.setOwner(player); + critterCageProjectile.setPos(player.getX(), player.getEyeY() - 0.1D, player.getZ()); + critterCageProjectile.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, 1.5F, 1.0F); + level.addFreshEntity(critterCageProjectile); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + player.awardStat(Stats.ITEM_USED.get(this)); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DiamondMinecartItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DiamondMinecartItem.java new file mode 100644 index 00000000..8e6932c9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DiamondMinecartItem.java @@ -0,0 +1,81 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import java.util.function.Supplier; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.EntityType; +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 net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseRailBlock; +import net.minecraft.world.level.block.Blocks; +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.level.gameevent.GameEvent; + +public class DiamondMinecartItem extends Item { + private final Supplier> entityTypeSupplier; + + public DiamondMinecartItem(Supplier> entityTypeSupplier, Properties properties) { + super(properties); + this.entityTypeSupplier = entityTypeSupplier; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + BlockPos clickedPos = context.getClickedPos(); + BlockState clickedState = level.getBlockState(clickedPos); + if (!BaseRailBlock.isRail(clickedState)) { + return InteractionResult.FAIL; + } + BlockPos cartPos = clickedPos; + + if (!(level instanceof ServerLevel serverLevel)) { + return InteractionResult.SUCCESS; + } + + ItemStack stack = context.getItemInHand(); + Player player = context.getPlayer(); + + BlockState railState = serverLevel.getBlockState(cartPos); + RailShape railShape = railState.getBlock() instanceof BaseRailBlock railBlock + ? railState.getValue(railBlock.getShapeProperty()) + : RailShape.NORTH_SOUTH; + double yOffset = railShape.isAscending() ? 0.5625D : 0.0625D; + + DiamondMinecartEntity minecart = new DiamondMinecartEntity( + this.entityTypeSupplier.get(), + serverLevel, + cartPos.getX() + 0.5D, + cartPos.getY() + yOffset, + cartPos.getZ() + 0.5D, + this + ); + if (stack.hasCustomHoverName()) { + minecart.setCustomName(stack.getHoverName()); + } + + serverLevel.addFreshEntity(minecart); + level.gameEvent(GameEvent.ENTITY_PLACE, cartPos, GameEvent.Context.of(player, railState)); + if (player == null || !player.getAbilities().instabuild) { + stack.shrink(1); + } + return InteractionResult.CONSUME; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DreamTorchItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DreamTorchItem.java new file mode 100644 index 00000000..e314b77e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DreamTorchItem.java @@ -0,0 +1,69 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.Map; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +public class DreamTorchItem extends BlockItem { + private final Block standingBlock; + private final Block wallBlock; + private final Block ceilingBlock; + + public DreamTorchItem(Block standingBlock, Block wallBlock, Block ceilingBlock, Item.Properties properties) { + super(standingBlock, properties); + this.standingBlock = standingBlock; + this.wallBlock = wallBlock; + this.ceilingBlock = ceilingBlock; + } + + @Override + protected BlockState getPlacementState(BlockPlaceContext context) { + Direction clickedFace = context.getClickedFace(); + LevelReader level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + + if (clickedFace == Direction.DOWN) { + BlockState ceilingState = this.ceilingBlock.defaultBlockState(); + if (ceilingState.canSurvive(level, pos)) { + return ceilingState; + } + } + + if (clickedFace == Direction.UP) { + BlockState standingState = this.standingBlock.defaultBlockState(); + if (standingState.canSurvive(level, pos)) { + return standingState; + } + } + + BlockState wallState = this.wallBlock.getStateForPlacement(context); + if (wallState != null && wallState.canSurvive(level, pos)) { + return wallState; + } + + BlockState standingState = this.standingBlock.defaultBlockState(); + if (standingState.canSurvive(level, pos)) { + return standingState; + } + + BlockState ceilingState = this.ceilingBlock.defaultBlockState(); + if (ceilingState.canSurvive(level, pos)) { + return ceilingState; + } + + return null; + } + + @Override + public void registerBlocks(Map blockToItemMap, Item item) { + super.registerBlocks(blockToItemMap, item); + blockToItemMap.put(this.wallBlock, item); + blockToItemMap.put(this.ceilingBlock, item); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DuctTapeBlockItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DuctTapeBlockItem.java new file mode 100644 index 00000000..5f94491c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/DuctTapeBlockItem.java @@ -0,0 +1,84 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.ArrayList; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +public class DuctTapeBlockItem extends BlockItem { + public DuctTapeBlockItem(Block block, Properties properties) { + super(block, properties); + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("item.antarchy.duct_tape.tooltip")); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } + + @Override + public BlockPlaceContext updatePlacementContext(BlockPlaceContext context) { + BlockPlaceContext updatedContext = super.updatePlacementContext(context); + if (updatedContext == null) { + return null; + } + + Level level = updatedContext.getLevel(); + BlockPos clickedPos = updatedContext.getClickedPos(); + BlockState clickedState = level.getBlockState(clickedPos); + if (!clickedState.is(this.getBlock())) { + return updatedContext; + } + + for (Direction direction : getSpreadDirections(updatedContext)) { + BlockPos targetPos = clickedPos.relative(direction); + BlockState targetState = level.getBlockState(targetPos); + if (canSpreadTo(targetState)) { + return BlockPlaceContext.at(updatedContext, targetPos, updatedContext.getClickedFace()); + } + } + + return null; + } + + private boolean canSpreadTo(BlockState state) { + return !state.is(this.getBlock()) && (state.isAir() || state.canBeReplaced()); + } + + private Direction[] getSpreadDirections(BlockPlaceContext context) { + Direction preferredDirection = getPreferredDirection(context); + List directions = new ArrayList<>(4); + directions.add(preferredDirection); + directions.add(preferredDirection.getClockWise()); + directions.add(preferredDirection.getCounterClockWise()); + directions.add(preferredDirection.getOpposite()); + return directions.toArray(Direction[]::new); + } + + private Direction getPreferredDirection(BlockPlaceContext context) { + if (context.getClickedFace().getAxis().isHorizontal()) { + return context.getClickedFace(); + } + + Vec3 hitLocation = context.getClickLocation(); + BlockPos clickedPos = context.getClickedPos(); + double offsetX = hitLocation.x - (clickedPos.getX() + 0.5D); + double offsetZ = hitLocation.z - (clickedPos.getZ() + 0.5D); + if (Math.abs(offsetX) > Math.abs(offsetZ)) { + return offsetX >= 0.0D ? Direction.EAST : Direction.WEST; + } + + return offsetZ >= 0.0D ? Direction.SOUTH : Direction.NORTH; + } +} 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 new file mode 100644 index 00000000..d54c72f9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/FallenKingCrownItem.java @@ -0,0 +1,70 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.google.common.collect.ImmutableMultimap; +import java.util.List; +import java.util.UUID; +import net.minecraft.world.level.Level; +import net.minecraft.core.Holder; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +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.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; + +public final class FallenKingCrownItem extends ArmorItem { + + public FallenKingCrownItem(ArmorMaterial material, Properties properties) { + super(material, Type.HELMET, properties.stacksTo(1).durability(77)); + } + + @Override + public int getDefense() { + return AntarchySettings.fallenKingCrownArmorValue(); + } + + @Override + public float getToughness() { + return (float) AntarchySettings.fallenKingCrownArmorToughness(); + } + + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != Type.HELMET.getSlot()) { + return super.getDefaultAttributeModifiers(slot); + } + + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put( + Attributes.ARMOR, + new AttributeModifier( + UUID.nameUUIDFromBytes("fallen_king_crown_armor".getBytes()), + "fallen_king_crown_armor", + getDefense(), + AttributeModifier.Operation.ADDITION + ) + ); + builder.put( + Attributes.ARMOR_TOUGHNESS, + new AttributeModifier( + UUID.nameUUIDFromBytes("fallen_king_crown_armor_toughness".getBytes()), + "fallen_king_crown_armor_toughness", + getToughness(), + AttributeModifier.Operation.ADDITION + ) + ); + return builder.build(); + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.fallen_king_crown.hero").withStyle(ChatFormatting.GOLD)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantLilyPadItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantLilyPadItem.java new file mode 100644 index 00000000..745b112a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GiantLilyPadItem.java @@ -0,0 +1,58 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.block.GiantLilyPadBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +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.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.phys.BlockHitResult; + +public final class GiantLilyPadItem extends BlockItem { + public GiantLilyPadItem(Block block, Properties properties) { + super(block, properties); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + BlockHitResult hitResult = getPlayerPOVHitResult(level, player, ClipContext.Fluid.SOURCE_ONLY); + if (hitResult.getType() != net.minecraft.world.phys.HitResult.Type.BLOCK) { + return InteractionResultHolder.pass(stack); + } + + BlockPos fluidPos = hitResult.getBlockPos(); + BlockPos centerPos = fluidPos.above(); + if (!level.mayInteract(player, fluidPos) || !player.mayUseItemAt(centerPos, Direction.UP, stack)) { + return InteractionResultHolder.fail(stack); + } + if (!GiantLilyPadBlock.canPlaceStructure(level, centerPos)) { + return InteractionResultHolder.fail(stack); + } + + if (!level.isClientSide) { + GiantLilyPadBlock.placeStructure(level, centerPos, GiantLilyPadBlock.rotationForPlacement(centerPos)); + level.playSound(null, centerPos, SoundEvents.LILY_PAD_PLACE, SoundSource.BLOCKS, 1.0F, 1.0F); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + player.awardStat(Stats.ITEM_USED.get(this)); + } + + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + } + + @Override + public net.minecraft.world.InteractionResult useOn(UseOnContext context) { + return this.use(context.getLevel(), context.getPlayer(), context.getHand()).getResult(); + } +} 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 new file mode 100644 index 00000000..2267fc92 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java @@ -0,0 +1,100 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.advancement.AntarchyAdvancements; +import com.craisinlord.antarchy.content.client.particle.GlimmerParticles; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerCompanionSavedData; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; +import java.util.List; +import net.minecraft.network.chat.Component; +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.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +public class GlimmerBottleItem extends Item { + private static final String ABILITY_COOLDOWN_TAG = "AbilityCooldown"; + + public GlimmerBottleItem() { + super(new Item.Properties().stacksTo(1)); + } + + public static ItemStack create(GlimmerVariant variant) { + return create(variant, 0); + } + + public static ItemStack create(GlimmerVariant variant, int abilityCooldown) { + 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)); + } + return stack; + } + + @Nullable + public static GlimmerVariant getVariant(ItemStack stack) { + return AntarchyObjects.GLIMMER_VARIANT_COMPONENT.get(stack); + } + + public static int getStoredAbilityCooldown(ItemStack stack) { + return com.craisinlord.antarchy.content.component.AntarchyItemTag.getOrEmpty(stack).getInt(ABILITY_COOLDOWN_TAG); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + GlimmerVariant variant = getVariant(stack); + if (variant == null) { + return InteractionResultHolder.fail(stack); + } + + if (level.isClientSide) { + return InteractionResultHolder.consume(stack); + } + + GlimmerEntity glimmer = AntarchyObjects.GLIMMER.get().create(level); + if (glimmer == null) { + return InteractionResultHolder.fail(stack); + } + + glimmer.moveTo(player.getX(), player.getY(), player.getZ(), player.getYRot(), 0.0F); + glimmer.lockVariant(variant); + glimmer.tame(player); + glimmer.setOrderedToSit(false); + glimmer.setAbilityCooldown(getStoredAbilityCooldown(stack)); + level.addFreshEntity(glimmer); + GlimmerCompanionSavedData.replaceCompanion(((ServerLevel) level).getServer(), player.getUUID(), glimmer.getUUID()); + GlimmerParticles.tickBurst(glimmer); + level.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.BOTTLE_EMPTY, SoundSource.PLAYERS, 1.0F, 1.0F); + + if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { + AntarchyAdvancements.award(serverPlayer, variant.tameAdvancementId()); + } + + ItemStack result = ItemUtils.createFilledResult(stack, player, new ItemStack(Items.GLASS_BOTTLE)); + return InteractionResultHolder.success(result); + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltip, TooltipFlag flag) { + super.appendHoverText(stack, level, tooltip, flag); + GlimmerVariant variant = getVariant(stack); + if (variant != null) { + tooltip.add(Component.translatable("item.antarchy.glimmer_bottle.contains", variant.displayName())); + String key = variant.name().toLowerCase(java.util.Locale.ROOT); + tooltip.add(Component.translatable("item.antarchy.glimmer_bottle.passive." + key).withStyle(net.minecraft.ChatFormatting.GRAY)); + tooltip.add(Component.translatable("item.antarchy.glimmer_bottle.ability." + key).withStyle(net.minecraft.ChatFormatting.DARK_GRAY)); + } + } +} 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 new file mode 100644 index 00000000..4b86150f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/GravityGunItem.java @@ -0,0 +1,747 @@ +package com.craisinlord.antarchy.content.item; + +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 it.unimi.dsi.fastutil.longs.Long2BooleanMap; +import it.unimi.dsi.fastutil.longs.Long2BooleanOpenHashMap; +import it.unimi.dsi.fastutil.longs.Long2IntMap; +import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap; +import java.util.List; +import java.util.UUID; +import java.util.function.Consumer; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.ProjectileUtil; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.item.context.UseOnContext; +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.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.animatable.GeoItem; +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.core.animation.AnimationController; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.constant.DataTickets; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import software.bernie.geckolib.renderer.GeoItemRenderer; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class GravityGunItem extends Item implements GeoItem, com.craisinlord.antarchy.content.client.AntarchyGeoItem { + public static final String GRAVITY_GUN_CARRIED_BLOCK_TAG = "antarchy.gravity_gun_carried_block"; + private static final String LOOP_CONTROLLER = "loop_controller"; + private static final String TRANSITION_CONTROLLER = "transition_controller"; + private static final int TRANSITION_TICKS = 8; + private static final String OFF_ANIMATION = "off"; + private static final String ON_ANIMATION = "on"; + private static final String TOGGLE_ON_ANIMATION = "toggle_on"; + private static final String TOGGLE_OFF_ANIMATION = "toggle_off"; + private static final String HELD_TARGET_UUID_TAG = "antarchy.gravity_gun_held_target_uuid"; + private static final String HELD_DISTANCE_TAG = "antarchy.gravity_gun_held_distance"; + private static final double DEFAULT_HOLD_DISTANCE = 3.0D; + private static final double MIN_HOLD_DISTANCE = 1.5D; + private static final int HOLD_LOOP_INTERVAL_TICKS = 26; + private static final ResourceLocation MODEL_LOCATION = new ResourceLocation("antarchy", "geo/gravity_gun.geo.json"); + private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation("antarchy", "textures/models/item/gravity_gun.png"); + private static final ResourceLocation ANIMATION_LOCATION = new ResourceLocation("antarchy", "animations/gravity_gun.animation.json"); + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private final Long2BooleanMap animationActiveStates = new Long2BooleanOpenHashMap(); + private final Long2BooleanMap animationTransitionTargets = new Long2BooleanOpenHashMap(); + private final Long2IntMap animationTransitionTicks = new Long2IntOpenHashMap(); + private final Long2IntMap animationObservedLoopStates = new Long2IntOpenHashMap(); + private int holdLoopCooldown = 0; + + public GravityGunItem(Properties properties) { + super(properties); + GeoItem.registerSyncedAnimatable(this); + this.animationObservedLoopStates.defaultReturnValue(Integer.MIN_VALUE); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + ItemStack stack = player.getItemInHand(usedHand); + if (!AntarchySettings.gravityGunEnabled()) { + return InteractionResultHolder.fail(stack); + } + + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(stack); + } + + if (level.isClientSide) { + return InteractionResultHolder.consume(stack); + } + + ServerLevel serverLevel = (ServerLevel) level; + if (hasHeldTarget(stack)) { + if (releaseHeldTarget(serverLevel, player, stack, false)) { + finishAction(serverLevel, player, stack, usedHand); + return InteractionResultHolder.consume(stack); + } + } + + if (!tryCaptureEntity(serverLevel, player, stack)) { + return InteractionResultHolder.pass(stack); + } + + finishAction(serverLevel, player, stack, usedHand); + return InteractionResultHolder.consume(stack); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + Player player = context.getPlayer(); + ItemStack stack = context.getItemInHand(); + if (!AntarchySettings.gravityGunEnabled()) { + return InteractionResult.FAIL; + } + + if (player == null) { + return InteractionResult.PASS; + } + + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResult.FAIL; + } + + if (!level.isClientSide) { + if (!tryCaptureBlock((ServerLevel) level, player, stack, context.getClickedPos())) { + return InteractionResult.PASS; + } + + finishAction((ServerLevel) level, player, stack, context.getHand()); + } + + return InteractionResult.CONSUME; + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + super.inventoryTick(stack, level, entity, slotId, isSelected); + if (!(entity instanceof Player player)) { + return; + } + + long animatableId = level instanceof ServerLevel serverLevelForId + ? GeoItem.getOrAssignId(stack, serverLevelForId) + : GeoItem.getId(stack); + this.tickAnimationState(level, player, stack, animatableId); + + if (!(level instanceof ServerLevel serverLevel)) { + return; + } + + this.clearLegacyAnimationData(stack); + + UUID heldTargetId = getHeldTargetId(stack); + if (heldTargetId == null) { + return; + } + + if (!isStackInPlayerHands(player, stack)) { + releaseHeldTarget(serverLevel, player, stack, false); + return; + } + + Entity heldTarget = serverLevel.getEntity(heldTargetId); + if (heldTarget == null || !heldTarget.isAlive()) { + clearHeldTarget(stack); + this.holdLoopCooldown = 0; + return; + } + + maintainHeldTarget(serverLevel, player, stack, heldTarget); + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(net.minecraft.network.chat.Component.translatable("tooltip.antarchy.gravity_gun.primary").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(net.minecraft.network.chat.Component.translatable("tooltip.antarchy.gravity_gun.secondary").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(net.minecraft.network.chat.Component.translatable("tooltip.antarchy.gravity_gun.scroll").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(net.minecraft.network.chat.Component.translatable("tooltip.antarchy.gravity_gun.blacklist").withStyle(ChatFormatting.DARK_GRAY)); + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.NONE; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, LOOP_CONTROLLER, state -> { + ItemStack stack = state.getData(DataTickets.ITEMSTACK); + long animatableId = stack == null ? Long.MAX_VALUE : GeoItem.getId(stack); + if (animatableId != Long.MAX_VALUE && this.isAnimationTransitioning(animatableId)) { + this.observeLoopControllerState(animatableId, "transition_stop", stack); + return PlayState.STOP; + } + + boolean active = animatableId != Long.MAX_VALUE && this.isAnimationActive(animatableId); + this.observeLoopControllerState(animatableId, active ? ON_ANIMATION : OFF_ANIMATION, stack); + return state.setAndContinue(RawAnimation.begin().thenLoop(active ? ON_ANIMATION : OFF_ANIMATION)); + })); + controllers.add(new AnimationController<>(this, TRANSITION_CONTROLLER, state -> PlayState.STOP) + .triggerableAnim(TOGGLE_ON_ANIMATION, RawAnimation.begin().thenPlay(TOGGLE_ON_ANIMATION)) + .triggerableAnim(TOGGLE_OFF_ANIMATION, RawAnimation.begin().thenPlay(TOGGLE_OFF_ANIMATION))); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + public void createRenderer(Consumer consumer) { + consumer.accept(new AntarchyGeoItemRenderer() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getCustomRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(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; + } + + private boolean tryCaptureEntity(ServerLevel level, Player player, ItemStack stack) { + if (!AntarchySettings.gravityGunEntitiesEnabled() || hasHeldTarget(stack)) { + return false; + } + + EntityHitResult hitResult = findEntityTarget(level, player); + if (hitResult == null) { + return false; + } + + Entity target = hitResult.getEntity(); + if (!canCaptureEntity(target)) { + return false; + } + + setHeldTarget(stack, target.getUUID()); + setHeldDistance(stack, DEFAULT_HOLD_DISTANCE); + target.setDeltaMovement(Vec3.ZERO); + target.setNoGravity(true); + target.hurtMarked = true; + this.beginAnimationTransition(level, player, stack, GeoItem.getOrAssignId(stack, level), true); + playGravityGunSound(level, player, AntarchySoundEvents.GRAVITY_GUN_PICKUP.get(), 0.20F, 1.0F); + return true; + } + + private boolean tryCaptureBlock(ServerLevel level, Player player, ItemStack stack, BlockPos clickedPos) { + if (!AntarchySettings.gravityGunBlocksEnabled() || hasHeldTarget(stack)) { + return false; + } + + if (!level.isLoaded(clickedPos)) { + return false; + } + + CarriedBlockCapture capture = this.resolveCarriedBlockCapture(level, clickedPos); + if (capture == null || !canCaptureBlock(level, capture.basePos(), capture.baseState())) { + return false; + } + + BlockEntity blockEntity = level.getBlockEntity(capture.basePos()); + CompoundTag blockEntityData = null; + if (blockEntity != null) { + blockEntityData = blockEntity.saveWithId(); + level.removeBlockEntity(capture.basePos()); + } + + if (capture.upperPos() != null) { + level.removeBlock(capture.upperPos(), false); + } + + FallingBlockEntity fallingBlock = FallingBlockEntity.fall(level, capture.basePos(), capture.baseState()); + if (fallingBlock == null) { + return false; + } + + if (blockEntityData != null) { + fallingBlock.blockData = blockEntityData; + } + fallingBlock.addTag(GRAVITY_GUN_CARRIED_BLOCK_TAG); + + setHeldTarget(stack, fallingBlock.getUUID()); + setHeldDistance(stack, DEFAULT_HOLD_DISTANCE); + fallingBlock.setDeltaMovement(Vec3.ZERO); + fallingBlock.setNoGravity(true); + fallingBlock.setHurtsEntities(1.0F, 40); + fallingBlock.hurtMarked = true; + this.beginAnimationTransition(level, player, stack, GeoItem.getOrAssignId(stack, level), true); + playGravityGunSound(level, player, AntarchySoundEvents.GRAVITY_GUN_PICKUP.get(), 0.20F, 1.0F); + return true; + } + + private boolean throwHeldTarget(ServerLevel level, Player player, ItemStack stack) { + UUID heldTargetId = getHeldTargetId(stack); + if (heldTargetId == null) { + return false; + } + + Entity heldTarget = level.getEntity(heldTargetId); + if (heldTarget == null || !heldTarget.isAlive()) { + clearHeldTarget(stack); + return false; + } + + Vec3 launch = getLaunchVector(player).scale(AntarchySettings.gravityGunThrowStrength()); + heldTarget.setNoGravity(false); + heldTarget.setDeltaMovement(launch); + heldTarget.hurtMarked = true; + clearHeldTarget(stack); + this.beginAnimationTransition(level, player, stack, GeoItem.getOrAssignId(stack, level), false); + this.holdLoopCooldown = 0; + playGravityGunSound(level, player, AntarchySoundEvents.GRAVITY_GUN_LAUNCH.get(), 0.14F, 0.9F); + return true; + } + + public boolean firePrimary(ServerLevel level, Player player, ItemStack stack) { + if (!AntarchySettings.gravityGunEnabled() || player.getCooldowns().isOnCooldown(this) || player.getMainHandItem() != stack) { + return false; + } + + if (!throwHeldTarget(level, player, stack)) { + blastEntities(level, player, stack); + playGravityGunSound(level, player, AntarchySoundEvents.GRAVITY_GUN_DRYFIRE.get(), 0.16F, 1.0F); + } + + finishAction(level, player, stack, InteractionHand.MAIN_HAND); + return true; + } + + private void blastEntities(ServerLevel level, Player player, ItemStack stack) { + Vec3 look = getLaunchVector(player); + double range = AntarchySettings.gravityGunRange(); + AABB searchBox = player.getBoundingBox().inflate(range).expandTowards(look.scale(range)); + for (Entity target : level.getEntities(player, searchBox, entity -> canBlastEntity(player, stack, entity))) { + Vec3 away = target.position().subtract(player.position()).multiply(1.0D, 0.0D, 1.0D); + if (away.lengthSqr() < 1.0E-4D) { + away = look; + } + + double alignment = away.normalize().dot(look); + if (alignment < 0.15D) { + continue; + } + + double distance = Math.max(0.75D, target.distanceTo(player)); + Vec3 push = away.normalize().scale(AntarchySettings.gravityGunBlastStrength() / distance) + .add(0.0D, 0.22D, 0.0D); + target.setDeltaMovement(target.getDeltaMovement().add(push)); + target.hurtMarked = true; + } + } + + private void maintainHeldTarget(ServerLevel level, Player player, ItemStack stack, Entity heldTarget) { + Vec3 currentPosition = heldTarget.position(); + Vec3 holdPosition = player.getEyePosition().add(getHoldVector(player).scale(getHeldDistance(stack))); + Vec3 movement = holdPosition.subtract(currentPosition); + 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); + } else { + Vec3 holdVelocity = movement.scale(0.45D); + double maxSpeed = 1.35D; + if (holdVelocity.lengthSqr() > maxSpeed * maxSpeed) { + holdVelocity = holdVelocity.normalize().scale(maxSpeed); + } + heldTarget.setDeltaMovement(holdVelocity); + } + heldTarget.setYRot(holdRotation.x); + heldTarget.setXRot(holdRotation.y); + heldTarget.hurtMarked = true; + tickHoldLoopSound(level, player); + } + + private boolean releaseHeldTarget(ServerLevel level, Player player, ItemStack stack, boolean throwIt) { + UUID heldTargetId = getHeldTargetId(stack); + if (heldTargetId == null) { + return false; + } + + Entity heldTarget = level.getEntity(heldTargetId); + if (heldTarget != null) { + heldTarget.setNoGravity(false); + if (throwIt) { + heldTarget.setDeltaMovement(getLaunchVector(player).scale(AntarchySettings.gravityGunThrowStrength())); + heldTarget.hurtMarked = true; + } + } + + clearHeldTarget(stack); + this.beginAnimationTransition(level, player, stack, GeoItem.getOrAssignId(stack, level), false); + this.holdLoopCooldown = 0; + if (!throwIt) { + playGravityGunSound(level, player, AntarchySoundEvents.GRAVITY_GUN_DROP.get(), 0.18F, 1.0F); + } + return true; + } + + public static boolean adjustHeldDistance(ItemStack stack, double delta) { + if (!hasHeldTarget(stack)) { + return false; + } + + double currentDistance = getHeldDistance(stack); + double maxDistance = AntarchySettings.gravityGunMaxHoldDistance(); + double newDistance = Mth.clamp(currentDistance + delta, MIN_HOLD_DISTANCE, maxDistance); + if (Math.abs(newDistance - currentDistance) < 1.0E-4D) { + return false; + } + + setHeldDistance(stack, newDistance); + return true; + } + + private boolean canCaptureEntity(Entity entity) { + if (entity instanceof Player) { + return false; + } + + return !entity.getType().is(AntarchyTags.Entities.GRAVITY_GUN_BLACKLIST); + } + + private boolean canCaptureBlock(Level level, BlockPos pos, BlockState state) { + if (state.isAir() || state.is(AntarchyTags.Blocks.GRAVITY_GUN_BLACKLIST)) { + return false; + } + + if (state.hasProperty(BlockStateProperties.DOUBLE_BLOCK_HALF)) { + if (state.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) != DoubleBlockHalf.LOWER) { + return false; + } + + BlockPos upperPos = pos.above(); + BlockState upperState = level.getBlockState(upperPos); + if (!upperState.is(state.getBlock()) + || !upperState.hasProperty(BlockStateProperties.DOUBLE_BLOCK_HALF) + || upperState.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) != DoubleBlockHalf.UPPER) { + return false; + } + } + + return state.getDestroySpeed(level, pos) >= 0.0F; + } + + private CarriedBlockCapture resolveCarriedBlockCapture(Level level, BlockPos clickedPos) { + BlockState clickedState = level.getBlockState(clickedPos); + if (!clickedState.hasProperty(BlockStateProperties.DOUBLE_BLOCK_HALF)) { + return new CarriedBlockCapture(clickedPos, clickedState, null); + } + + DoubleBlockHalf half = clickedState.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF); + BlockPos basePos = half == DoubleBlockHalf.UPPER ? clickedPos.below() : clickedPos; + BlockPos upperPos = basePos.above(); + BlockState baseState = level.getBlockState(basePos); + BlockState upperState = level.getBlockState(upperPos); + if (!baseState.is(clickedState.getBlock()) + || !baseState.hasProperty(BlockStateProperties.DOUBLE_BLOCK_HALF) + || baseState.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) != DoubleBlockHalf.LOWER + || !upperState.is(clickedState.getBlock()) + || !upperState.hasProperty(BlockStateProperties.DOUBLE_BLOCK_HALF) + || upperState.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) != DoubleBlockHalf.UPPER) { + return null; + } + + return new CarriedBlockCapture(basePos, baseState, upperPos); + } + + private boolean canBlastEntity(Player player, ItemStack stack, Entity entity) { + return entity.isAlive() + && entity != player + && entity != player.getVehicle() + && !entity.getUUID().equals(getHeldTargetId(stack)) + && !entity.getType().is(AntarchyTags.Entities.GRAVITY_GUN_BLACKLIST); + } + + private EntityHitResult findEntityTarget(ServerLevel level, Player player) { + Vec3 eyePosition = player.getEyePosition(); + Vec3 viewVector = player.getViewVector(1.0F); + double reach = AntarchySettings.gravityGunRange(); + Vec3 end = eyePosition.add(viewVector.scale(reach)); + AABB searchBox = player.getBoundingBox().expandTowards(viewVector.scale(reach)).inflate(1.0D); + return ProjectileUtil.getEntityHitResult( + level, + player, + eyePosition, + end, + searchBox, + entity -> entity.isPickable() && canCaptureEntity(entity) + ); + } + + private static boolean isStackInPlayerHands(Player player, ItemStack stack) { + return player.getMainHandItem() == stack || player.getOffhandItem() == stack; + } + + private static Vec3 getLaunchVector(Player player) { + Vec3 look = player.getViewVector(1.0F); + if (look.lengthSqr() < 1.0E-4D) { + look = getRawLookVector(player); + } + return look.lengthSqr() < 1.0E-4D ? getRawLookVector(player) : look.normalize(); + } + + private static Vec3 getHoldVector(Player player) { + Vec3 look = getRawLookVector(player); + if (!AntarchyGravityApi.isGravityInverted(player)) { + return look; + } + + return AntarchyGravityRotationUtil.vecWorldToPlayer(look, AntarchyGravityApi.getGravityDirection(player)); + } + + private static Vec3 getRawLookVector(Player player) { + Vec3 look = player.getLookAngle(); + return look.lengthSqr() < 1.0E-4D ? Vec3.directionFromRotation(player.getXRot(), player.getYRot()) : look.normalize(); + } + + private static Vec2 getHoldRotation(Player player) { + if (!AntarchyGravityApi.isGravityInverted(player)) { + return new Vec2(player.getYRot(), player.getXRot()); + } + + return AntarchyGravityRotationUtil.rotWorldToPlayer( + player.getYRot(), + player.getXRot(), + AntarchyGravityApi.getGravityDirection(player) + ); + } + + private static UUID getHeldTargetId(ItemStack stack) { + CompoundTag tag = com.craisinlord.antarchy.content.component.AntarchyItemTag.getOrEmpty(stack); + return tag.hasUUID(HELD_TARGET_UUID_TAG) ? tag.getUUID(HELD_TARGET_UUID_TAG) : null; + } + + public static boolean hasHeldTarget(ItemStack stack) { + return getHeldTargetId(stack) != null; + } + + public static double getHeldDistance(ItemStack stack) { + CompoundTag tag = com.craisinlord.antarchy.content.component.AntarchyItemTag.getOrEmpty(stack); + double maxDistance = Math.max(MIN_HOLD_DISTANCE, AntarchySettings.gravityGunMaxHoldDistance()); + if (!tag.contains(HELD_DISTANCE_TAG)) { + return Mth.clamp(DEFAULT_HOLD_DISTANCE, MIN_HOLD_DISTANCE, maxDistance); + } + + return Mth.clamp(tag.getDouble(HELD_DISTANCE_TAG), MIN_HOLD_DISTANCE, maxDistance); + } + + private static void setHeldTarget(ItemStack stack, UUID targetId) { + com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> tag.putUUID(HELD_TARGET_UUID_TAG, targetId)); + } + + private static void setHeldDistance(ItemStack stack, double distance) { + double maxDistance = Math.max(MIN_HOLD_DISTANCE, AntarchySettings.gravityGunMaxHoldDistance()); + double clampedDistance = Mth.clamp(distance, MIN_HOLD_DISTANCE, maxDistance); + com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> tag.putDouble(HELD_DISTANCE_TAG, clampedDistance)); + } + + private static void clearHeldTarget(ItemStack stack) { + com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, tag -> { + tag.remove(HELD_TARGET_UUID_TAG); + tag.remove(HELD_DISTANCE_TAG); + }); + } + + private boolean isAnimationActive(long animatableId) { + return this.animationActiveStates.get(animatableId); + } + + private void setAnimationActive(long animatableId, boolean active) { + if (active) { + this.animationActiveStates.put(animatableId, true); + } else { + this.animationActiveStates.remove(animatableId); + } + } + + private boolean isAnimationTransitioning(long animatableId) { + return this.getAnimationTransitionTicks(animatableId) > 0; + } + + private boolean getAnimationTransitionTarget(long animatableId) { + return this.animationTransitionTargets.get(animatableId); + } + + private void setAnimationTransitionTarget(long animatableId, boolean targetActive) { + this.animationTransitionTargets.put(animatableId, targetActive); + } + + private void clearAnimationTransitionTarget(long animatableId) { + this.animationTransitionTargets.remove(animatableId); + } + + private int getAnimationTransitionTicks(long animatableId) { + return Math.max(0, this.animationTransitionTicks.get(animatableId)); + } + + private void setAnimationTransitionTicks(long animatableId, int ticks) { + if (ticks > 0) { + this.animationTransitionTicks.put(animatableId, ticks); + } else { + this.animationTransitionTicks.remove(animatableId); + } + } + + private void finishAction(ServerLevel level, Player player, ItemStack stack, InteractionHand hand) { + stack.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(hand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND)); + player.awardStat(Stats.ITEM_USED.get(this)); + double cooldownSeconds = AntarchySettings.gravityGunCooldownSeconds(); + if (cooldownSeconds > 0.0D) { + player.getCooldowns().addCooldown(this, (int) (cooldownSeconds * 20.0D)); + } + } + + private void tickAnimationState(Level level, Player player, ItemStack stack, long animatableId) { + if (animatableId == Long.MAX_VALUE) { + return; + } + + int transitionTicks = this.getAnimationTransitionTicks(animatableId); + if (transitionTicks > 0) { + transitionTicks--; + this.setAnimationTransitionTicks(animatableId, transitionTicks); + if (transitionTicks == 0) { + this.setAnimationActive(animatableId, this.getAnimationTransitionTarget(animatableId)); + this.clearAnimationTransitionTarget(animatableId); + } + return; + } + + boolean hasHeldTarget = hasHeldTarget(stack); + boolean active = this.isAnimationActive(animatableId); + if (hasHeldTarget && !active) { + this.beginAnimationTransition(level, player, stack, animatableId, true); + } else if (!hasHeldTarget && active) { + this.beginAnimationTransition(level, player, stack, animatableId, false); + } else if (!hasHeldTarget) { + this.clearAnimationRuntimeState(animatableId); + } + } + + private void beginAnimationTransition(Level level, Player player, ItemStack stack, long animatableId, boolean targetActive) { + if (animatableId == Long.MAX_VALUE || this.getAnimationTransitionTicks(animatableId) > 0 || this.isAnimationActive(animatableId) == targetActive) { + return; + } + + this.setAnimationTransitionTarget(animatableId, targetActive); + this.setAnimationTransitionTicks(animatableId, TRANSITION_TICKS); + if (level instanceof ServerLevel) { + triggerAnim(player, animatableId, TRANSITION_CONTROLLER, targetActive ? TOGGLE_ON_ANIMATION : TOGGLE_OFF_ANIMATION); + } + } + + private void clearAnimationRuntimeState(long animatableId) { + this.animationActiveStates.remove(animatableId); + this.animationTransitionTargets.remove(animatableId); + this.animationTransitionTicks.remove(animatableId); + this.animationObservedLoopStates.remove(animatableId); + } + + private void clearLegacyAnimationData(ItemStack stack) { + CompoundTag tag = com.craisinlord.antarchy.content.component.AntarchyItemTag.getOrEmpty(stack); + if (!tag.contains("antarchy.gravity_gun_anim_active") + && !tag.contains("antarchy.gravity_gun_anim_target_active") + && !tag.contains("antarchy.gravity_gun_anim_transition_ticks")) { + return; + } + + com.craisinlord.antarchy.content.component.AntarchyItemTag.update(stack, customData -> { + customData.remove("antarchy.gravity_gun_anim_active"); + customData.remove("antarchy.gravity_gun_anim_target_active"); + customData.remove("antarchy.gravity_gun_anim_transition_ticks"); + }); + } + + private void tickHoldLoopSound(ServerLevel level, Player player) { + if (this.holdLoopCooldown > 0) { + this.holdLoopCooldown--; + return; + } + + playGravityGunSound(level, player, AntarchySoundEvents.GRAVITY_GUN_HOLD_LOOP.get(), 0.06F, 0.95F + level.getRandom().nextFloat() * 0.1F); + this.holdLoopCooldown = HOLD_LOOP_INTERVAL_TICKS; + } + + private static void playGravityGunSound(Level level, Player player, SoundEvent sound, float volume, float pitch) { + level.playSound(null, player.getX(), player.getY(), player.getZ(), sound, SoundSource.PLAYERS, volume, pitch); + } + + private void observeLoopControllerState(long animatableId, String stateName, ItemStack stack) { + if (animatableId == Long.MAX_VALUE) { + return; + } + + int encodedState = this.encodeObservedLoopState(stateName); + if (this.animationObservedLoopStates.get(animatableId) == encodedState) { + return; + } + + this.animationObservedLoopStates.put(animatableId, encodedState); + } + + private int encodeObservedLoopState(String stateName) { + return switch (stateName) { + case OFF_ANIMATION -> 0; + case ON_ANIMATION -> 1; + case "transition_stop" -> 2; + default -> 3; + }; + } + + private record CarriedBlockCapture(BlockPos basePos, BlockState baseState, BlockPos upperPos) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/HighFructoseCornSyrupItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/HighFructoseCornSyrupItem.java new file mode 100644 index 00000000..0b560d15 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/HighFructoseCornSyrupItem.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.advancements.CriteriaTriggers; +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.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.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.level.Level; + +public class HighFructoseCornSyrupItem extends Item { + public HighFructoseCornSyrupItem(Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) { + ItemStack result = super.finishUsingItem(stack, level, livingEntity); + if (!level.isClientSide) { + livingEntity.addEffect(new MobEffectInstance(MobEffects.CONFUSION, 80, 0)); + } + + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.GLASS_BOTTLE); + } + + if (livingEntity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack bottle = new ItemStack(Items.GLASS_BOTTLE); + if (!player.getInventory().add(bottle)) { + player.drop(bottle, false); + } + } + + return result; + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/InnateEnchantmentHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/InnateEnchantmentHelper.java new file mode 100644 index 00000000..268d1d4a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/InnateEnchantmentHelper.java @@ -0,0 +1,76 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import java.util.HashMap; +import java.util.Map; +import net.minecraft.util.Mth; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; + +public final class InnateEnchantmentHelper { + private InnateEnchantmentHelper() { + } + + public static boolean hasInnateNonCurseEnchantments(ItemStack stack) { + for (Map.Entry entry : EnchantmentHelper.getEnchantments(stack).entrySet()) { + Enchantment enchantment = entry.getKey(); + if (!enchantment.isCurse() && isInnateEnchantment(stack, enchantment, entry.getValue())) { + return true; + } + } + return false; + } + + public static boolean hasRemovableNonCurseEnchantments(ItemStack stack) { + for (Map.Entry entry : EnchantmentHelper.getEnchantments(stack).entrySet()) { + Enchantment enchantment = entry.getKey(); + if (!enchantment.isCurse() && !isInnateEnchantment(stack, enchantment, entry.getValue())) { + return true; + } + } + return false; + } + + public static ItemStack stripOnlyRemovableNonCurseEnchantments(ItemStack stack) { + Map enchantments = new HashMap<>(EnchantmentHelper.getEnchantments(stack)); + enchantments.keySet().removeIf(enchantment -> + !enchantment.isCurse() + && !isInnateEnchantment(stack, enchantment, enchantments.get(enchantment))); + EnchantmentHelper.setEnchantments(enchantments, stack); + return stack; + } + + private static boolean isInnateEnchantment(ItemStack stack, Enchantment enchantment, int level) { + if (level <= 0) { + return false; + } + + if (stack.getItem() instanceof UltimateArmorItem) { + return AntarchySettings.ultimateArmorComesEnchanted() + && level == 5 + && (enchantment == Enchantments.ALL_DAMAGE_PROTECTION + || enchantment == Enchantments.FIRE_PROTECTION + || enchantment == Enchantments.PROJECTILE_PROTECTION + || enchantment == Enchantments.BLAST_PROTECTION); + } + + if (stack.getItem() instanceof UltimateBowItem) { + return AntarchySettings.ultimateBowComesEnchantedWithFlame() + && level == 1 + && enchantment == Enchantments.FLAMING_ARROWS; + } + + if (stack.getItem() instanceof KrakensGraspItem) { + int desiredLevel = Mth.clamp(AntarchySettings.krakensGraspInnateLoyaltyLevel(), 1, 3); + return AntarchySettings.krakensGraspInnateLoyalty() + && level == desiredLevel + && enchantment == Enchantments.LOYALTY; + } + + return false; + } +} 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 new file mode 100644 index 00000000..e1799721 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JerryNucleusItem.java @@ -0,0 +1,99 @@ +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.JerryEggBlock; +import com.craisinlord.antarchy.content.block.JumpyBugEggBlock; +import com.craisinlord.antarchy.content.block.LurkingTerrorEggBlock; +import com.craisinlord.antarchy.content.block.SpitBugEggBlock; +import java.util.List; +import net.minecraft.world.level.Level; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.Turtle; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.TurtleEggBlock; +import net.minecraft.world.level.block.state.BlockState; + +public class JerryNucleusItem extends Item { + public JerryNucleusItem(Properties properties) { + super(properties); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + 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 SpitBugEggBlock + || block instanceof JerryEggBlock + || block instanceof TurtleEggBlock; + if (!handled) { + return super.useOn(context); + } + + if (!(context.getLevel() instanceof ServerLevel serverLevel)) { + return InteractionResult.SUCCESS; + } + + BlockPos pos = context.getClickedPos(); + if (block instanceof BedBugEggBlock eggBlock) { + eggBlock.hatchWithNucleus(serverLevel, pos, state); + } else if (block instanceof CreepingHorrorEggBlock eggBlock) { + eggBlock.hatchWithNucleus(serverLevel, pos, state); + } else if (block instanceof LurkingTerrorEggBlock eggBlock) { + eggBlock.hatchWithNucleus(serverLevel, pos, state); + } else if (block instanceof JumpyBugEggBlock eggBlock) { + eggBlock.hatchWithNucleus(serverLevel, pos); + } else if (block instanceof SpitBugEggBlock eggBlock) { + eggBlock.hatchWithNucleus(serverLevel, pos); + } else if (block instanceof JerryEggBlock eggBlock) { + eggBlock.hatchWithNucleus(serverLevel, pos); + } else if (block instanceof TurtleEggBlock) { + hatchTurtleEggs(serverLevel, pos, state); + } + + if (context.getPlayer() == null || !context.getPlayer().getAbilities().instabuild) { + context.getItemInHand().shrink(1); + } + return InteractionResult.CONSUME; + } + + private static void hatchTurtleEggs(ServerLevel level, BlockPos pos, BlockState state) { + int eggs = state.getValue(TurtleEggBlock.EGGS); + level.removeBlock(pos, false); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + level.random.nextFloat() * 0.1F); + + for (int i = 0; i < eggs; i++) { + Turtle turtle = EntityType.TURTLE.create(level); + if (turtle == null) { + continue; + } + turtle.setAge(-24000); + turtle.setHomePos(pos); + double spawnX = pos.getX() + 0.3D + level.random.nextDouble() * 0.4D; + double spawnZ = pos.getZ() + 0.3D + level.random.nextDouble() * 0.4D; + turtle.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, level.random.nextFloat() * 360.0F, 0.0F); + level.addFreshEntity(turtle); + } + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.jerry_nucleus.hatch").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} 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 new file mode 100644 index 00000000..db801b58 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java @@ -0,0 +1,20 @@ +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:jumpy_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 new file mode 100644 index 00000000..61cc24b3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java @@ -0,0 +1,34 @@ +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.jumpy_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/KrakensGraspItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/KrakensGraspItem.java new file mode 100644 index 00000000..afaaaff4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/KrakensGraspItem.java @@ -0,0 +1,142 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.google.common.collect.ImmutableMultimap; +import java.util.UUID; +import net.minecraft.core.HolderLookup; +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.stats.Stats; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LightningBolt; +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.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TridentItem; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.Level; +import net.minecraft.world.entity.Entity; + +public class KrakensGraspItem extends TridentItem { + private static final String ATTACK_DAMAGE_MODIFIER_ID = "krakens_grasp_attack_damage"; + private static final String ATTACK_SPEED_MODIFIER_ID = "krakens_grasp_attack_speed"; + + public KrakensGraspItem(Item.Properties properties) { + super(properties); + } + + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != EquipmentSlot.MAINHAND) { + return super.getDefaultAttributeModifiers(slot); + } + + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier( + UUID.nameUUIDFromBytes(ATTACK_DAMAGE_MODIFIER_ID.getBytes()), + ATTACK_DAMAGE_MODIFIER_ID, + AntarchySettings.krakensGraspAttackDamage(), + AttributeModifier.Operation.ADDITION)); + builder.put(Attributes.ATTACK_SPEED, new AttributeModifier( + UUID.nameUUIDFromBytes(ATTACK_SPEED_MODIFIER_ID.getBytes()), + ATTACK_SPEED_MODIFIER_ID, + AntarchySettings.krakensGraspAttackSpeed(), + AttributeModifier.Operation.ADDITION)); + return builder.build(); + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + super.inventoryTick(stack, level, entity, slotId, isSelected); + if (!level.isClientSide) { + ensureInnateLoyalty(stack, level.registryAccess()); + } + } + + private static void ensureInnateLoyalty(ItemStack stack, HolderLookup.Provider registries) { + if (!AntarchySettings.krakensGraspInnateLoyalty()) { + return; + } + + Enchantment loyalty = Enchantments.LOYALTY; + int desiredLevel = net.minecraft.util.Mth.clamp(AntarchySettings.krakensGraspInnateLoyaltyLevel(), 1, 3); + if (EnchantmentHelper.getItemEnchantmentLevel(loyalty, stack) >= desiredLevel) { + return; + } + + java.util.Map enchantments = new java.util.HashMap<>(EnchantmentHelper.getEnchantments(stack)); + enchantments.put(loyalty, desiredLevel); + EnchantmentHelper.setEnchantments(enchantments, stack); + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + boolean didHurt = super.hurtEnemy(stack, target, attacker); + if (didHurt && attacker.level() instanceof ServerLevel serverLevel) { + strikeLightning(target, serverLevel); + com.craisinlord.antarchy.content.entity.kraken.TentacleEntity.spawnAt(serverLevel, + new net.minecraft.world.phys.Vec3(target.getX(), target.getY(), target.getZ()), attacker); + } + return didHurt; + } + + public static void strikeLightning(LivingEntity target, ServerLevel level) { + strikeLightningAt(level, target.getX(), target.getY(), target.getZ()); + level.sendParticles(ParticleTypes.ELECTRIC_SPARK, target.getX(), target.getY(0.7D), target.getZ(), 10, 0.25D, 0.25D, 0.25D, 0.02D); + } + + public static void strikeLightningAt(ServerLevel level, double x, double y, double z) { + LightningBolt lightningBolt = new LightningBolt(net.minecraft.world.entity.EntityType.LIGHTNING_BOLT, level); + lightningBolt.moveTo(x, y, z); + level.addFreshEntity(lightningBolt); + level.sendParticles(ParticleTypes.ELECTRIC_SPARK, x, y + 0.2D, z, 10, 0.25D, 0.25D, 0.25D, 0.02D); + } + + @Override + public void releaseUsing(ItemStack stack, Level level, LivingEntity user, int timeLeft) { + if (!(user instanceof Player player)) { + return; + } + + int useTime = this.getUseDuration(stack) - timeLeft; + if (useTime < 10) { + return; + } + + int riptideLevel = EnchantmentHelper.getRiptide(stack); + if (riptideLevel > 0 && player.isInWaterOrRain()) { + super.releaseUsing(stack, level, user, timeLeft); + return; + } + + if (stack.getDamageValue() >= stack.getMaxDamage() - 1) { + return; + } + + if (!level.isClientSide) { + stack.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(user.getUsedItemHand())); + com.craisinlord.antarchy.content.entity.kraken.KrakensGraspThrownTrident trident = + new com.craisinlord.antarchy.content.entity.kraken.KrakensGraspThrownTrident(AntarchyObjects.KRAKENS_GRASP_TRIDENT.get(), player, level, stack.copy()); + trident.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, 2.5F, 1.0F); + if (player.getAbilities().instabuild) { + trident.pickup = net.minecraft.world.entity.projectile.AbstractArrow.Pickup.CREATIVE_ONLY; + } + level.addFreshEntity(trident); + level.playSound(null, trident, SoundEvents.TRIDENT_THROW, SoundSource.PLAYERS, 1.0F, 1.0F); + if (!player.getAbilities().instabuild) { + player.getInventory().removeItem(stack); + } + } + + player.awardStat(Stats.ITEM_USED.get(this)); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/LucidAnchorBlockItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/LucidAnchorBlockItem.java new file mode 100644 index 00000000..27fd4d60 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/LucidAnchorBlockItem.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; + +public class LucidAnchorBlockItem extends BlockItem { + public LucidAnchorBlockItem(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.lucid_anchor.pyramid").withStyle(ChatFormatting.DARK_RED)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.lucid_anchor.path").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/LucidEyeItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/LucidEyeItem.java new file mode 100644 index 00000000..90e47855 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/LucidEyeItem.java @@ -0,0 +1,10 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.world.item.Item; + +public class LucidEyeItem extends Item { + + public LucidEyeItem(Properties properties) { + super(properties); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/LucidPearlItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/LucidPearlItem.java new file mode 100644 index 00000000..3d7508ed --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/LucidPearlItem.java @@ -0,0 +1,66 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.EntityType; +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 net.minecraft.world.level.Level; + +import java.util.List; +import java.util.function.Supplier; + +public class LucidPearlItem extends Item { + + private final Supplier> projectileType; + + public LucidPearlItem(Properties properties, + Supplier> projectileType) { + super(properties); + this.projectileType = projectileType; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + ItemStack itemStack = player.getItemInHand(usedHand); + + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(itemStack); + } + + level.playSound(null, player.getX(), player.getY(), player.getZ(), + SoundEvents.ENDER_PEARL_THROW, SoundSource.NEUTRAL, + 0.5F, 0.4F / (level.getRandom().nextFloat() * 0.4F + 0.8F)); + + if (!level.isClientSide) { + LucidEyeProjectileEntity projectile = new LucidEyeProjectileEntity( + projectileType.get(), player, level); + projectile.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, 1.5F, 1.0F); + level.addFreshEntity(projectile); + + if (!player.getAbilities().instabuild) { + itemStack.shrink(1); + } + } + + player.awardStat(Stats.ITEM_USED.get(this)); + player.getCooldowns().addCooldown(this, 20); + + return InteractionResultHolder.consume(itemStack); + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.lucid_pearl").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.lucid_pearl.detail").withStyle(ChatFormatting.DARK_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 new file mode 100644 index 00000000..0210f038 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MantisClawItem.java @@ -0,0 +1,37 @@ +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; +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; + +public class MantisClawItem extends SwordItem { + public static final double WALL_CLING_FALL_SPEED = -0.02D; + public static final double WALL_CLIMB_JUMP_VELOCITY = 0.42D; + private static final int DEFAULT_ATTACK_DAMAGE = 7; + private static final float DEFAULT_ATTACK_SPEED = -2.4F; + + private final Tier tier; + + public MantisClawItem(Tier tier, Item.Properties properties) { + super(tier, DEFAULT_ATTACK_DAMAGE, DEFAULT_ATTACK_SPEED, properties); + this.tier = tier; + } + + public static boolean isDualWielding(LivingEntity entity) { + return entity.getMainHandItem().getItem() instanceof MantisClawItem + && entity.getOffhandItem().getItem() instanceof MantisClawItem; + } + + @Override + public void appendHoverText(ItemStack stack, 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/MinersDreamCaveGenerator.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamCaveGenerator.java new file mode 100644 index 00000000..4aa42bac --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamCaveGenerator.java @@ -0,0 +1,173 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyTags; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.state.BlockState; + +public final class MinersDreamCaveGenerator { + private static final double MIN_HORIZONTAL_RADIUS = 2.0D; + private static final double MAX_HORIZONTAL_RADIUS = 5.0D; + private static final double MIN_VERTICAL_RADIUS = 1.5D; + private static final double MAX_VERTICAL_RADIUS = 4.0D; + private static final double MAX_VERTICAL_DEVIATION = 8.0D; + private static final double SOFT_VERTICAL_DEVIATION = 4.0D; + private static final int WORLD_MARGIN = 3; + + private MinersDreamCaveGenerator() { + } + + public record CaveNode(BlockPos center, double horizontalRadius, double verticalRadius) { + } + + public record CaveGenerationResult(List nodes, Set torchCheckpoints) { + } + + public static CaveGenerationResult generate(BlockPos start, Direction initialDirection, int length, + int torchSpacing, int minBuildHeight, int maxBuildHeight, RandomSource random) { + List nodes = new ArrayList<>(length); + Set torchCheckpoints = new HashSet<>(); + + double x = start.getX() + 0.5D; + double y = start.getY() + 0.5D; + double z = start.getZ() + 0.5D; + double startY = y; + + double headingX = initialDirection.getStepX(); + double headingZ = initialDirection.getStepZ(); + if (headingX == 0.0D && headingZ == 0.0D) { + headingX = 1.0D; + } + + double verticalVelocity = 0.0D; + double horizontalRadius = 3.0D; + double verticalRadius = 2.0D; + int minY = minBuildHeight + WORLD_MARGIN; + int maxY = maxBuildHeight - WORLD_MARGIN; + + int spacing = Math.max(4, torchSpacing); + int traveledSinceTorch = 0; + int nextTorchDistance = spacing + random.nextInt(5) - 2; + + for (int i = 0; i < length; i++) { + BlockPos center = BlockPos.containing(x, Mth.clamp(y, minY, maxY), z); + nodes.add(new CaveNode(center, horizontalRadius, verticalRadius)); + + traveledSinceTorch++; + if (traveledSinceTorch >= Math.max(1, nextTorchDistance)) { + torchCheckpoints.add(i); + traveledSinceTorch = 0; + nextTorchDistance = spacing + random.nextInt(5) - 2; + } + + double turnDegrees = random.nextGaussian() * 8.0D; + if (random.nextFloat() < 0.1F) { + turnDegrees = random.nextGaussian() * 15.0D; + } + turnDegrees = Mth.clamp(turnDegrees, -25.0D, 25.0D); + double turnRadians = Math.toRadians(turnDegrees); + double cos = Math.cos(turnRadians); + double sin = Math.sin(turnRadians); + double newHeadingX = headingX * cos - headingZ * sin; + double newHeadingZ = headingX * sin + headingZ * cos; + double headingLength = Math.sqrt(newHeadingX * newHeadingX + newHeadingZ * newHeadingZ); + headingX = newHeadingX / headingLength; + headingZ = newHeadingZ / headingLength; + + verticalVelocity += random.nextGaussian() * 0.15D; + double deviation = y - startY; + verticalVelocity -= deviation * 0.06D; + if (deviation > SOFT_VERTICAL_DEVIATION) { + verticalVelocity -= 0.08D; + } else if (deviation < -SOFT_VERTICAL_DEVIATION) { + verticalVelocity += 0.08D; + } + verticalVelocity = Mth.clamp(verticalVelocity, -0.6D, 0.6D); + + x += headingX; + z += headingZ; + y = Mth.clamp(y + verticalVelocity, startY - MAX_VERTICAL_DEVIATION, startY + MAX_VERTICAL_DEVIATION); + + horizontalRadius = Mth.clamp(horizontalRadius + random.nextGaussian() * 0.15D, MIN_HORIZONTAL_RADIUS, MAX_HORIZONTAL_RADIUS); + verticalRadius = Mth.clamp(verticalRadius + random.nextGaussian() * 0.12D, MIN_VERTICAL_RADIUS, MAX_VERTICAL_RADIUS); + if (random.nextFloat() < 0.05F) { + horizontalRadius = Mth.clamp(horizontalRadius + 0.6D, MIN_HORIZONTAL_RADIUS, MAX_HORIZONTAL_RADIUS); + verticalRadius = Mth.clamp(verticalRadius + 0.5D, MIN_VERTICAL_RADIUS, MAX_VERTICAL_RADIUS); + } + } + + return new CaveGenerationResult(nodes, torchCheckpoints); + } + + public static void collectNodeCandidates(ServerLevel level, CaveNode node, LongOpenHashSet visited, RandomSource random, List out) { + BlockPos center = node.center(); + int hr = Mth.ceil(node.horizontalRadius()); + double upExtent = node.verticalRadius() * 1.25D; + double downExtent = node.verticalRadius() * 0.65D; + int upR = Mth.ceil(upExtent); + int downR = Mth.ceil(downExtent); + int minBuildHeight = level.getMinBuildHeight(); + int maxBuildHeight = level.getMaxBuildHeight(); + + for (int dy = -downR; dy <= upR; dy++) { + double vExtent = dy >= 0 ? upExtent : downExtent; + if (vExtent <= 0.0D) { + continue; + } + double vTerm = (dy * dy) / (vExtent * vExtent); + if (vTerm > 1.05D) { + continue; + } + + for (int dx = -hr; dx <= hr; dx++) { + double hxTerm = (dx * dx) / (node.horizontalRadius() * node.horizontalRadius()); + for (int dz = -hr; dz <= hr; dz++) { + double hzTerm = (dz * dz) / (node.horizontalRadius() * node.horizontalRadius()); + double distance = hxTerm + vTerm + hzTerm; + if (distance > 1.0D) { + continue; + } + if (distance > 0.7D) { + double edgeChance = (1.0D - distance) / 0.3D * 0.85D; + if (random.nextFloat() > edgeChance) { + continue; + } + } + + BlockPos pos = center.offset(dx, dy, dz); + if (pos.getY() < minBuildHeight || pos.getY() >= maxBuildHeight) { + continue; + } + + long packed = pos.asLong(); + if (visited.contains(packed)) { + continue; + } + + BlockState state = level.getBlockState(pos); + if (!state.is(AntarchyTags.Blocks.MINERS_DREAM_CARVABLE)) { + continue; + } + if (level.getBlockEntity(pos) != null) { + continue; + } + + visited.add(packed); + out.add(pos); + } + } + } + } + + public static boolean isChunkLoaded(ServerLevel level, BlockPos pos) { + return level.isLoaded(pos); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavation.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavation.java new file mode 100644 index 00000000..6d7e01a0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavation.java @@ -0,0 +1,152 @@ +package com.craisinlord.antarchy.content.item; + +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.BlockParticleOption; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import org.joml.Vector3f; + +public final class MinersDreamExcavation { + private static final Vector3f TRIFFID_GOO_COLOR = new Vector3f(0.35F, 0.85F, 0.4F); + private static final int SLICES_BETWEEN_RUMBLE = 4; + + private final UUID owner; + private final ResourceKey dimension; + private final List nodes; + private final Set torchCheckpoints; + private final LongOpenHashSet visited = new LongOpenHashSet(); + + private int nodeIndex = 0; + private List currentNodePositions = null; + private int positionCursor = 0; + private int slicesSinceRumble = 0; + private boolean finished = false; + + public MinersDreamExcavation(UUID owner, ResourceKey dimension, List nodes, Set torchCheckpoints) { + this.owner = owner; + this.dimension = dimension; + this.nodes = nodes; + this.torchCheckpoints = torchCheckpoints; + } + + public UUID owner() { + return owner; + } + + public ResourceKey dimension() { + return dimension; + } + + public boolean isFinished() { + return finished; + } + + public void tick(ServerLevel level, int blockBudget) { + RandomSource random = level.getRandom(); + int remaining = blockBudget; + + while (remaining > 0 && !finished) { + if (currentNodePositions == null) { + if (nodeIndex >= nodes.size()) { + finished = true; + playCompletionSound(level); + return; + } + + MinersDreamCaveGenerator.CaveNode node = nodes.get(nodeIndex); + if (!MinersDreamCaveGenerator.isChunkLoaded(level, node.center())) { + advanceNode(level, node); + continue; + } + + currentNodePositions = new ArrayList<>(); + MinersDreamCaveGenerator.collectNodeCandidates(level, node, visited, random, currentNodePositions); + positionCursor = 0; + } + + if (currentNodePositions.isEmpty()) { + MinersDreamCaveGenerator.CaveNode node = nodes.get(nodeIndex); + advanceNode(level, node); + continue; + } + + int endIndex = Math.min(currentNodePositions.size(), positionCursor + remaining); + for (; positionCursor < endIndex; positionCursor++) { + BlockPos pos = currentNodePositions.get(positionCursor); + BlockState removedState = level.getBlockState(pos); + if (removedState.isAir()) { + continue; + } + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 3); + remaining--; + if (random.nextFloat() < 0.12F) { + spawnBreakParticles(level, pos, removedState, random); + } + } + + if (positionCursor >= currentNodePositions.size()) { + MinersDreamCaveGenerator.CaveNode node = nodes.get(nodeIndex); + advanceNode(level, node); + } + } + } + + private void advanceNode(ServerLevel level, MinersDreamCaveGenerator.CaveNode node) { + RandomSource random = level.getRandom(); + spawnFrontDust(level, node, random); + slicesSinceRumble++; + if (slicesSinceRumble >= SLICES_BETWEEN_RUMBLE) { + slicesSinceRumble = 0; + playRumble(level, node); + } + + if (torchCheckpoints.contains(nodeIndex)) { + MinersDreamTorchPlacer.tryPlaceTorch(level, node.center(), random); + } + + currentNodePositions = null; + positionCursor = 0; + nodeIndex++; + } + + private void spawnBreakParticles(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + level.sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, state), + pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, 2, 0.25D, 0.25D, 0.25D, 0.02D); + if (random.nextFloat() < 0.2F) { + level.sendParticles(new DustParticleOptions(TRIFFID_GOO_COLOR, 1.0F), + pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, 1, 0.2D, 0.2D, 0.2D, 0.0D); + } + } + + private void spawnFrontDust(ServerLevel level, MinersDreamCaveGenerator.CaveNode node, RandomSource random) { + BlockPos center = node.center(); + level.sendParticles(ParticleTypes.CLOUD, center.getX() + 0.5D, center.getY() + 0.5D, center.getZ() + 0.5D, + 3, node.horizontalRadius() * 0.4D, node.verticalRadius() * 0.3D, node.horizontalRadius() * 0.4D, 0.01D); + } + + private void playRumble(ServerLevel level, MinersDreamCaveGenerator.CaveNode node) { + BlockPos center = node.center(); + level.playSound(null, center, SoundEvents.STONE_BREAK, SoundSource.BLOCKS, 0.5F, 0.7F); + } + + private void playCompletionSound(ServerLevel level) { + if (nodes.isEmpty()) { + return; + } + BlockPos center = nodes.get(nodes.size() - 1).center(); + level.playSound(null, center, SoundEvents.BEACON_ACTIVATE, SoundSource.PLAYERS, 0.4F, 1.4F); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavationManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavationManager.java new file mode 100644 index 00000000..4effa987 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavationManager.java @@ -0,0 +1,81 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.Iterator; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; + +public final class MinersDreamExcavationManager { + private static final int MAX_ACTIVE_TASKS = 8; + private static final int SAFE_MIN_RANGE = 8; + private static final int SAFE_MAX_RANGE = 256; + private static final Map ACTIVE = new ConcurrentHashMap<>(); + + private MinersDreamExcavationManager() { + } + + public static boolean hasActiveExcavation(UUID owner) { + return ACTIVE.containsKey(owner); + } + + public static MinersDreamExcavation tryStart(ServerLevel level, UUID owner, BlockPos startPos, Direction direction) { + if (ACTIVE.containsKey(owner) || ACTIVE.size() >= MAX_ACTIVE_TASKS) { + return null; + } + + int minRange = Mth.clamp(AntarchySettings.minersDreamMinimumRange(), SAFE_MIN_RANGE, SAFE_MAX_RANGE); + int maxRange = Mth.clamp(AntarchySettings.minersDreamMaximumRange(), SAFE_MIN_RANGE, SAFE_MAX_RANGE); + if (minRange > maxRange) { + int swap = minRange; + minRange = maxRange; + maxRange = swap; + } + + RandomSource random = level.getRandom(); + int length = minRange == maxRange ? minRange : minRange + random.nextInt(maxRange - minRange + 1); + + MinersDreamCaveGenerator.CaveGenerationResult result = MinersDreamCaveGenerator.generate( + startPos, + direction, + length, + AntarchySettings.minersDreamTorchSpacing(), + level.getMinBuildHeight(), + level.getMaxBuildHeight(), + random + ); + + if (result.nodes().isEmpty()) { + return null; + } + + MinersDreamExcavation excavation = new MinersDreamExcavation(owner, level.dimension(), result.nodes(), result.torchCheckpoints()); + ACTIVE.put(owner, excavation); + return excavation; + } + + public static void tick(ServerLevel level) { + if (ACTIVE.isEmpty()) { + return; + } + + int budget = Math.max(1, AntarchySettings.minersDreamBlocksPerTick()); + Iterator> iterator = ACTIVE.entrySet().iterator(); + while (iterator.hasNext()) { + MinersDreamExcavation excavation = iterator.next().getValue(); + if (!excavation.dimension().equals(level.dimension())) { + continue; + } + + excavation.tick(level, budget); + if (excavation.isFinished()) { + iterator.remove(); + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamItem.java new file mode 100644 index 00000000..d736aeea --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamItem.java @@ -0,0 +1,79 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionResult; +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 net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; + +public final class MinersDreamItem extends Item { + public MinersDreamItem(Properties properties) { + super(properties); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + Player player = context.getPlayer(); + if (player == null) { + return InteractionResult.PASS; + } + + if (!AntarchySettings.minersDreamEnabled()) { + if (!level.isClientSide()) { + player.displayClientMessage(Component.translatable("message.antarchy.miners_dream_disabled"), true); + } + return InteractionResult.FAIL; + } + + if (level.isClientSide()) { + return InteractionResult.SUCCESS; + } + + ServerLevel serverLevel = (ServerLevel) level; + BlockPos clickedPos = context.getClickedPos(); + Direction clickedFace = context.getClickedFace(); + Direction travelDirection = clickedFace.getAxis().isHorizontal() ? clickedFace : player.getDirection(); + BlockPos startPos = clickedPos.relative(travelDirection); + + if (!serverLevel.isInWorldBounds(startPos) || !MinersDreamCaveGenerator.isChunkLoaded(serverLevel, startPos)) { + return InteractionResult.FAIL; + } + + if (MinersDreamExcavationManager.hasActiveExcavation(player.getUUID())) { + player.displayClientMessage(Component.translatable("message.antarchy.miners_dream_busy"), true); + return InteractionResult.FAIL; + } + + MinersDreamExcavation excavation = MinersDreamExcavationManager.tryStart(serverLevel, player.getUUID(), startPos, travelDirection); + if (excavation == null) { + return InteractionResult.FAIL; + } + + serverLevel.playSound(null, clickedPos, SoundEvents.TNT_PRIMED, SoundSource.PLAYERS, 0.8F, 1.1F); + + if (!player.getAbilities().instabuild) { + context.getItemInHand().shrink(1); + } + + return InteractionResult.CONSUME; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.miners_dream.line1").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.miners_dream.line2").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamTorchPlacer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamTorchPlacer.java new file mode 100644 index 00000000..08e8f78b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamTorchPlacer.java @@ -0,0 +1,89 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.List; +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.RandomSource; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; + +public final class MinersDreamTorchPlacer { + private MinersDreamTorchPlacer() { + } + + public static void tryPlaceTorch(ServerLevel level, BlockPos center, RandomSource random) { + BlockPos floorSpot = findFloorSpot(level, center); + boolean floorFirst = random.nextBoolean(); + + if (floorFirst) { + if (floorSpot != null && placeFloorTorch(level, floorSpot)) { + return; + } + placeWallTorch(level, center, random); + return; + } + + if (placeWallTorch(level, center, random)) { + return; + } + if (floorSpot != null) { + placeFloorTorch(level, floorSpot); + } + } + + private static BlockPos findFloorSpot(ServerLevel level, BlockPos center) { + for (int dy = -2; dy <= 1; dy++) { + BlockPos candidate = center.offset(0, dy, 0); + if (!isOpenForTorch(level, candidate)) { + continue; + } + BlockState below = level.getBlockState(candidate.below()); + if (below.isFaceSturdy(level, candidate.below(), Direction.UP)) { + return candidate; + } + } + return null; + } + + private static boolean placeFloorTorch(ServerLevel level, BlockPos pos) { + if (!isOpenForTorch(level, pos)) { + return false; + } + BlockState state = Blocks.TORCH.defaultBlockState(); + if (!state.canSurvive(level, pos)) { + return false; + } + level.setBlock(pos, state, 3); + level.playSound(null, pos, state.getSoundType().getPlaceSound(), SoundSource.BLOCKS, 1.0F, 1.0F); + return true; + } + + private static boolean placeWallTorch(ServerLevel level, BlockPos center, RandomSource random) { + List order = Direction.Plane.HORIZONTAL.shuffledCopy(random); + for (int dy = -1; dy <= 1; dy++) { + BlockPos candidate = center.offset(0, dy, 0); + if (!isOpenForTorch(level, candidate)) { + continue; + } + for (Direction wallSide : order) { + Direction facing = wallSide.getOpposite(); + BlockState state = Blocks.WALL_TORCH.defaultBlockState().setValue(BlockStateProperties.HORIZONTAL_FACING, facing); + if (!state.canSurvive(level, candidate)) { + continue; + } + level.setBlock(candidate, state, 3); + level.playSound(null, candidate, state.getSoundType().getPlaceSound(), SoundSource.BLOCKS, 1.0F, 1.0F); + return true; + } + } + return false; + } + + private static boolean isOpenForTorch(ServerLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return (state.isAir() || state.canBeReplaced()) && level.getFluidState(pos).isEmpty(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MobComingSoonTooltipItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MobComingSoonTooltipItem.java new file mode 100644 index 00000000..22fc0ba5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MobComingSoonTooltipItem.java @@ -0,0 +1,21 @@ +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.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; + +public class MobComingSoonTooltipItem extends Item { + public MobComingSoonTooltipItem(Properties properties) { + super(properties); + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.mob_coming_soon").withStyle(ChatFormatting.RED)); + 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 new file mode 100644 index 00000000..71ba9d85 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MogglesCaveDetector.java @@ -0,0 +1,114 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; + +import java.util.ArrayDeque; +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; + private static int cooldown = 0; + + private MogglesCaveDetector() {} + + public static BlockPos getCaveTarget() { + 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; + caveTarget = scan(player, level); + } + + public static void clear() { + caveTarget = null; + cooldown = 0; + } + + 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 + for (BlockPos seed : new BlockPos[]{origin, eyePos}) { + if (level.isLoaded(seed) && level.getBlockState(seed).isAir()) { + long key = seed.asLong(); + if (playerSpace.add(key)) queue.add(seed); + } + } + + while (!queue.isEmpty()) { + BlockPos pos = queue.poll(); + for (Direction dir : Direction.values()) { + BlockPos next = pos.relative(dir); + if (origin.distManhattan(next) > PLAYER_SPACE_LIMIT) continue; + long key = next.asLong(); + if (playerSpace.contains(key)) continue; + if (!level.isLoaded(next)) continue; + if (!level.getBlockState(next).isAir()) continue; + playerSpace.add(key); + queue.add(next); + } + } + + // 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(); + + for (int dx = -r; dx <= r; dx++) { + for (int dy = -r; dy <= r; dy++) { + for (int dz = -r; dz <= r; dz++) { + if (dx * dx + dy * dy + dz * dz > r * r) continue; + BlockPos pos = origin.offset(dx, dy, dz); + long key = pos.asLong(); + if (playerSpace.contains(key)) continue; + if (!level.isLoaded(pos)) continue; + if (!level.getBlockState(pos).isAir()) continue; + if (level.canSeeSky(pos)) continue; // ignore surface air + + int airNeighbors = 0; + for (Direction dir : Direction.values()) { + BlockPos n = pos.relative(dir); + if (level.isLoaded(n) && level.getBlockState(n).isAir()) airNeighbors++; + } + if (airNeighbors < MIN_AIR_NEIGHBORS) continue; + + double distSq = origin.distSqr(pos); + if (distSq < nearestDistSq) { + nearestDistSq = distSq; + nearest = pos.immutable(); + } + } + } + } + + return nearest; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MogglesItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MogglesItem.java new file mode 100644 index 00000000..1774bfec --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MogglesItem.java @@ -0,0 +1,56 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.core.Holder; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.network.chat.Component; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ArmorMaterials; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +public final class MogglesItem extends ArmorItem { + public MogglesItem(Properties properties) { + this(ArmorMaterials.GOLD, properties); + } + + public MogglesItem(ArmorMaterial material, Properties properties) { + super(material, Type.HELMET, properties); + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + super.inventoryTick(stack, level, entity, slotId, isSelected); + if (level.isClientSide || !(entity instanceof Player player)) { + return; + } + + if (player.getItemBySlot(EquipmentSlot.HEAD) != stack) { + return; + } + + if (level.canSeeSky(player.blockPosition())) { + return; + } + + MobEffectInstance existing = player.getEffect(MobEffects.NIGHT_VISION); + if (existing == null || existing.getDuration() <= 220) { + player.addEffect(new MobEffectInstance(MobEffects.NIGHT_VISION, 240, 0, true, false, true)); + } + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.moggles.reveal").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.moggles.underground").withStyle(ChatFormatting.DARK_GRAY)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MogglesLogic.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MogglesLogic.java new file mode 100644 index 00000000..966b1f3c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MogglesLogic.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Player; + +public final class MogglesLogic { + private MogglesLogic() {} + + public static boolean isWearingMoggles(Player player) { + return player.getItemBySlot(EquipmentSlot.HEAD).is(AntarchyObjects.MOGGLES.get()); + } +} 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 new file mode 100644 index 00000000..c708049b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/MucusBlockItem.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; + +public class MucusBlockItem extends BlockItem { + public MucusBlockItem(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.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/NadirBoatOnlyItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NadirBoatOnlyItem.java new file mode 100644 index 00000000..18d6f990 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NadirBoatOnlyItem.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.NadirBoatEntity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import java.util.function.Supplier; + +public class NadirBoatOnlyItem extends OuranwoodBoatItem { + private final Supplier> entityType; + + public NadirBoatOnlyItem(Supplier> entityType, Properties properties) { + super(properties); + this.entityType = entityType; + } + + @Override + protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { + Vec3 pos = hitResult.getLocation(); + NadirBoatEntity boat = new NadirBoatEntity(this.entityType.get(), level); + boat.setPos(pos.x, pos.y, pos.z); + boat.xo = pos.x; + boat.yo = pos.y; + boat.zo = pos.z; + this.applyDefaultStackConfig(level, stack, player, boat); + return boat; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NadirChestBoatItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NadirChestBoatItem.java new file mode 100644 index 00000000..97645bd8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NadirChestBoatItem.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.NadirChestBoatEntity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import java.util.function.Supplier; + +public class NadirChestBoatItem extends OuranwoodBoatItem { + private final Supplier> entityType; + + public NadirChestBoatItem(Supplier> entityType, Properties properties) { + super(properties); + this.entityType = entityType; + } + + @Override + protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { + Vec3 pos = hitResult.getLocation(); + NadirChestBoatEntity boat = new NadirChestBoatEntity(this.entityType.get(), level); + boat.setPos(pos.x, pos.y, pos.z); + boat.xo = pos.x; + boat.yo = pos.y; + boat.zo = pos.z; + this.applyDefaultStackConfig(level, stack, player, boat); + return boat; + } +} 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 new file mode 100644 index 00000000..b1024962 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java @@ -0,0 +1,154 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.google.common.collect.ImmutableMultimap; +import java.util.List; +import java.util.UUID; +import net.minecraft.core.Holder; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +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.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.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; + +public class NightmareArmorItem extends ArmorItem { + private final Type armorType; + + public NightmareArmorItem(ArmorMaterial material, Type type, Properties properties) { + super(material, type, properties); + this.armorType = type; + } + + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != this.armorType.getSlot()) { + return super.getDefaultAttributeModifiers(slot); + } + + String prefix = "nightmare_" + 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.nightmareArmorKnockbackResistance(); + 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(); + } + + private double getDoubleDamageChance() { + return switch (this.armorType) { + case HELMET -> AntarchySettings.nightmareHelmetDoubleDamageChance(); + case CHESTPLATE -> AntarchySettings.nightmareChestplateDoubleDamageChance(); + case LEGGINGS -> AntarchySettings.nightmareLeggingsDoubleDamageChance(); + case BOOTS -> AntarchySettings.nightmareBootsDoubleDamageChance(); + }; + } + + @Override + public int getDefense() { + return switch (this.armorType) { + case HELMET -> AntarchySettings.nightmareHelmetArmorValue(); + case CHESTPLATE -> AntarchySettings.nightmareChestplateArmorValue(); + case LEGGINGS -> AntarchySettings.nightmareLeggingsArmorValue(); + case BOOTS -> AntarchySettings.nightmareBootsArmorValue(); + }; + } + + @Override + public float getToughness() { + return (float) switch (this.armorType) { + case HELMET -> AntarchySettings.nightmareHelmetArmorToughness(); + case CHESTPLATE -> AntarchySettings.nightmareChestplateArmorToughness(); + case LEGGINGS -> AntarchySettings.nightmareLeggingsArmorToughness(); + case BOOTS -> AntarchySettings.nightmareBootsArmorToughness(); + }; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + super.inventoryTick(stack, level, entity, slotId, isSelected); + if (level.isClientSide || !(entity instanceof LivingEntity livingEntity)) { + return; + } + + if (livingEntity.getItemBySlot(this.armorType.getSlot()) != stack || !isWearingFullSet(livingEntity)) { + return; + } + + livingEntity.removeEffect(MobEffects.WITHER); + livingEntity.removeEffect(AntarchyObjects.DREAD.get()); + } + + @Override + public void appendHoverText(ItemStack stack, 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.DARK_PURPLE)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.nightmare_armor_set_bonus").withStyle(ChatFormatting.DARK_RED)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } + + public static boolean isWearingFullSet(LivingEntity livingEntity) { + for (ItemStack armorStack : livingEntity.getArmorSlots()) { + if (!(armorStack.getItem() instanceof NightmareArmorItem)) { + return false; + } + } + return true; + } +} 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 new file mode 100644 index 00000000..ad9919d6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareSwordItem.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.client.NightmareSwordTooltipHelper; +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; +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; + +public class NightmareSwordItem extends SwordItem { + private final Tier tier; + private final float attackSpeed; + + public NightmareSwordItem(Tier tier, Item.Properties properties, float attackSpeed) { + super(tier, (int) Math.round(AntarchySettings.nightmareSwordBaseDamage()), (float) AntarchySettings.nightmareSwordAttackSpeed(), properties); + this.tier = tier; + this.attackSpeed = attackSpeed; + } + + public static float calculateDamage(LivingEntity attacker) { + float baseDamage = (float) AntarchySettings.nightmareSwordBaseDamage(); + float maxHealth = attacker.getMaxHealth(); + if (maxHealth <= 0.0F) { + return baseDamage; + } + + float missingFraction = (maxHealth - attacker.getHealth()) / maxHealth; + float scalingFactor = (float) AntarchySettings.nightmareSwordScalingFactor(); + return baseDamage + missingFraction * scalingFactor * baseDamage; + } + + @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.nightmare_sword").withStyle(ChatFormatting.DARK_RED)); + tooltipComponents.add(NightmareSwordTooltipHelper.damageLine()); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/OuranwoodBoatItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/OuranwoodBoatItem.java new file mode 100644 index 00000000..f73f0e2a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/OuranwoodBoatItem.java @@ -0,0 +1,75 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.function.Predicate; + +import net.minecraft.server.level.ServerLevel; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntitySelector; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +public abstract class OuranwoodBoatItem extends Item { + private static final Predicate ENTITY_PREDICATE = EntitySelector.NO_SPECTATORS.and(Entity::isPickable); + + protected OuranwoodBoatItem(Properties properties) { + super(properties); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + BlockHitResult hitResult = getPlayerPOVHitResult(level, player, ClipContext.Fluid.ANY); + if (hitResult.getType() == HitResult.Type.MISS) { + return InteractionResultHolder.pass(stack); + } + + Vec3 viewVector = player.getViewVector(1.0F); + for (Entity entity : level.getEntities(player, player.getBoundingBox().expandTowards(viewVector.scale(5.0D)).inflate(1.0D), ENTITY_PREDICATE)) { + if (entity.getBoundingBox().inflate(entity.getPickRadius()).contains(player.getEyePosition())) { + return InteractionResultHolder.pass(stack); + } + } + + if (hitResult.getType() != HitResult.Type.BLOCK) { + return InteractionResultHolder.pass(stack); + } + + Boat boat = this.createBoat(level, hitResult, stack, player); + boat.setYRot(player.getYRot()); + if (!level.noCollision(boat, boat.getBoundingBox())) { + return InteractionResultHolder.fail(stack); + } + + if (!level.isClientSide) { + level.addFreshEntity(boat); + level.gameEvent(player, GameEvent.ENTITY_PLACE, hitResult.getLocation()); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + } + + player.awardStat(Stats.ITEM_USED.get(this)); + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide()); + } + + protected abstract Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player); + + protected void applyDefaultStackConfig(Level level, ItemStack stack, Player player, Boat boat) { + if (level instanceof ServerLevel serverLevel) { + EntityType.createDefaultStackConfig(serverLevel, stack, player).accept(boat); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/OuranwoodBoatOnlyItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/OuranwoodBoatOnlyItem.java new file mode 100644 index 00000000..a872a0fb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/OuranwoodBoatOnlyItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +public class OuranwoodBoatOnlyItem extends OuranwoodBoatItem { + private final java.util.function.Supplier> entityType; + + public OuranwoodBoatOnlyItem(java.util.function.Supplier> entityType, Properties properties) { + super(properties); + this.entityType = entityType; + } + + @Override + protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { + Vec3 pos = hitResult.getLocation(); + OuranwoodBoatEntity boat = new OuranwoodBoatEntity(this.entityType.get(), level); + boat.setPos(pos.x, pos.y, pos.z); + boat.xo = pos.x; + boat.yo = pos.y; + boat.zo = pos.z; + this.applyDefaultStackConfig(level, stack, player, boat); + return boat; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/OuranwoodChestBoatItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/OuranwoodChestBoatItem.java new file mode 100644 index 00000000..1189f2d9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/OuranwoodChestBoatItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +public class OuranwoodChestBoatItem extends OuranwoodBoatItem { + private final java.util.function.Supplier> entityType; + + public OuranwoodChestBoatItem(java.util.function.Supplier> entityType, Properties properties) { + super(properties); + this.entityType = entityType; + } + + @Override + protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { + Vec3 pos = hitResult.getLocation(); + OuranwoodChestBoatEntity boat = new OuranwoodChestBoatEntity(this.entityType.get(), level); + boat.setPos(pos.x, pos.y, pos.z); + boat.xo = pos.x; + boat.yo = pos.y; + boat.zo = pos.z; + this.applyDefaultStackConfig(level, stack, player, boat); + return boat; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PeachBoatOnlyItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PeachBoatOnlyItem.java new file mode 100644 index 00000000..5af5abd9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PeachBoatOnlyItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.PeachBoatEntity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +public class PeachBoatOnlyItem extends OuranwoodBoatItem { + private final java.util.function.Supplier> entityType; + + public PeachBoatOnlyItem(java.util.function.Supplier> entityType, Properties properties) { + super(properties); + this.entityType = entityType; + } + + @Override + protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { + Vec3 pos = hitResult.getLocation(); + PeachBoatEntity boat = new PeachBoatEntity(this.entityType.get(), level); + boat.setPos(pos.x, pos.y, pos.z); + boat.xo = pos.x; + boat.yo = pos.y; + boat.zo = pos.z; + this.applyDefaultStackConfig(level, stack, player, boat); + return boat; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PeachChestBoatItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PeachChestBoatItem.java new file mode 100644 index 00000000..938bc66a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PeachChestBoatItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.PeachChestBoatEntity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +public class PeachChestBoatItem extends OuranwoodBoatItem { + private final java.util.function.Supplier> entityType; + + public PeachChestBoatItem(java.util.function.Supplier> entityType, Properties properties) { + super(properties); + this.entityType = entityType; + } + + @Override + protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { + Vec3 pos = hitResult.getLocation(); + PeachChestBoatEntity boat = new PeachChestBoatEntity(this.entityType.get(), level); + boat.setPos(pos.x, pos.y, pos.z); + boat.xo = pos.x; + boat.yo = pos.y; + boat.zo = pos.z; + this.applyDefaultStackConfig(level, stack, player, boat); + return boat; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java new file mode 100644 index 00000000..d18a8fbb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item; + +public class PeachItem extends Item { + public PeachItem() { + super(new Item.Properties().food(new FoodProperties.Builder() + .nutrition(4) + .saturationMod(2.4F) + .build())); + } +} 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 new file mode 100644 index 00000000..607085ea --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java @@ -0,0 +1,157 @@ +package com.craisinlord.antarchy.content.item; + +import com.google.common.collect.ImmutableMultimap; +import java.util.List; +import java.util.Locale; +import java.util.UUID; +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; +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.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; + +public class PrimordialArmorItem extends ArmorItem { + private final Type armorType; + + public PrimordialArmorItem(ArmorMaterial material, Type type, Properties properties) { + super(material, type, properties.stacksTo(1).durability(resolveDurability(type))); + this.armorType = type; + } + + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != this.armorType.getSlot()) { + return super.getDefaultAttributeModifiers(slot); + } + + String prefix = "primordial_" + 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 + ) + ); + + double knockbackResistance = getKnockbackResistance(this.armorType); + if (knockbackResistance > 0.0D) { + builder.put( + Attributes.KNOCKBACK_RESISTANCE, + new AttributeModifier( + UUID.nameUUIDFromBytes((prefix + "_knockback_resistance").getBytes()), + prefix + "_knockback_resistance", + knockbackResistance, + AttributeModifier.Operation.ADDITION + ) + ); + } + + builder.put( + Attributes.ATTACK_KNOCKBACK, + new AttributeModifier( + UUID.nameUUIDFromBytes((prefix + "_attack_knockback").getBytes()), + prefix + "_attack_knockback", + AntarchySettings.primordialArmorKnockbackPerPiece(), + AttributeModifier.Operation.ADDITION + ) + ); + + return builder.build(); + } + + @Override + public int getDefense() { + return super.getDefense(); + } + + @Override + public float getToughness() { + return super.getToughness(); + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + if (!level.isClientSide && this.armorType == Type.HELMET && entity instanceof LivingEntity living) { + if (living.getItemBySlot(EquipmentSlot.HEAD) == stack) { + living.addEffect(new MobEffectInstance(MobEffects.WATER_BREATHING, 40, 0, false, false, true)); + } + } + super.inventoryTick(stack, level, entity, slotId, isSelected); + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + if (this.armorType == Type.HELMET) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.primordial_helmet_water_breathing").withStyle(ChatFormatting.AQUA)); + } + String knockbackDealt = String.format(Locale.ROOT, "%.1f", AntarchySettings.primordialArmorKnockbackPerPiece()); + tooltipComponents.add(Component.translatable("tooltip.antarchy.primordial_armor_knockback_dealt", knockbackDealt).withStyle(ChatFormatting.YELLOW)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.primordial_armor_set_bonus").withStyle(ChatFormatting.DARK_GREEN)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } + + public static double getKnockbackDealtBonus(LivingEntity entity) { + int pieces = 0; + for (ItemStack armorStack : entity.getArmorSlots()) { + if (armorStack.getItem() instanceof PrimordialArmorItem) { + pieces++; + } + } + return pieces * AntarchySettings.primordialArmorKnockbackPerPiece(); + } + + public static boolean hasFullSet(LivingEntity entity) { + return entity.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof PrimordialArmorItem + && entity.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof PrimordialArmorItem + && entity.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof PrimordialArmorItem + && entity.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof PrimordialArmorItem; + } + + private static double getKnockbackResistance(Type armorType) { + return switch (armorType) { + case HELMET -> 0.20D; + case CHESTPLATE -> 0.30D; + case LEGGINGS -> 0.30D; + case BOOTS -> 0.20D; + }; + } + + private static int resolveDurability(Type armorType) { + return switch (armorType) { + case HELMET -> 407; + case CHESTPLATE -> 592; + case LEGGINGS -> 555; + case BOOTS -> 481; + }; + } +} 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 new file mode 100644 index 00000000..3d896651 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RainbowSugarItem.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.ant.AntTeleportHelper; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +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; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +public class RainbowSugarItem extends Item { + private static final String INFINITY_NAMESPACE = "infinity"; + private static final int NAUSEA_DURATION_TICKS = 100; + private static final int POISON_DURATION_TICKS = 80; + + public RainbowSugarItem(Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) { + ItemStack result = super.finishUsingItem(stack, level, livingEntity); + + livingEntity.addEffect(new MobEffectInstance(MobEffects.CONFUSION, NAUSEA_DURATION_TICKS, 0)); + livingEntity.addEffect(new MobEffectInstance(MobEffects.POISON, POISON_DURATION_TICKS, 0)); + + 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); + } + + return result; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.rainbow_sugar").withStyle(ChatFormatting.LIGHT_PURPLE)); + } + + private static boolean isInInfinityDimension(ServerLevel level) { + return INFINITY_NAMESPACE.equals(level.dimension().location().getNamespace()); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ReverieBottleItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ReverieBottleItem.java new file mode 100644 index 00000000..8caac901 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ReverieBottleItem.java @@ -0,0 +1,184 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.network.chat.Component; +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.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +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.Items; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; + +public class ReverieBottleItem extends Item { + private static final String STORED_REVERIE_TAG = "StoredReverie"; + + public ReverieBottleItem(Properties properties) { + super(properties); + } + + @Override + public ItemStack getDefaultInstance() { + ItemStack stack = super.getDefaultInstance(); + this.writeDefaultReverieData(stack); + return stack; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + this.ensureStoredReverie(stack); + + if (level.isClientSide) { + return InteractionResultHolder.success(stack); + } + + if (!(level instanceof ServerLevel serverLevel)) { + return InteractionResultHolder.pass(stack); + } + + if (!this.releaseReverie(serverLevel, player, stack, hand)) { + return InteractionResultHolder.fail(stack); + } + + return InteractionResultHolder.consume(player.getItemInHand(hand)); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + ItemStack stack = context.getItemInHand(); + Player player = context.getPlayer(); + if (player == null) { + return InteractionResult.PASS; + } + + this.ensureStoredReverie(stack); + + if (context.getLevel().isClientSide) { + return InteractionResult.SUCCESS; + } + + if (!(context.getLevel() instanceof ServerLevel serverLevel)) { + return InteractionResult.PASS; + } + + return this.releaseReverie(serverLevel, player, stack, context.getHand()) + ? InteractionResult.CONSUME + : InteractionResult.FAIL; + } + + @Override + public InteractionResult interactLivingEntity(ItemStack stack, Player player, LivingEntity target, InteractionHand hand) { + this.ensureStoredReverie(stack); + + if (player.level().isClientSide) { + return InteractionResult.SUCCESS; + } + + if (!(player.level() instanceof ServerLevel serverLevel)) { + return InteractionResult.PASS; + } + + return this.releaseReverie(serverLevel, player, stack, hand) + ? InteractionResult.CONSUME + : InteractionResult.FAIL; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.reverie_bottle.capture").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.reverie_bottle.release").withStyle(ChatFormatting.DARK_GRAY)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } + + private boolean releaseReverie(ServerLevel serverLevel, Player player, ItemStack stack, InteractionHand hand) { + CompoundTag entityTag = this.getStoredReverieTag(stack); + if (entityTag == null) { + return false; + } + + ReverieEntity reverie = AntarchyObjects.REVERIE.get().create(serverLevel); + if (reverie == null) { + return false; + } + + reverie.readAdditionalSaveData(entityTag); + Vec3 spawnPos = player.position().add(player.getLookAngle().scale(1.25D)).add(0.0D, 0.15D, 0.0D); + reverie.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, player.getYRot(), player.getXRot()); + reverie.setDeltaMovement(player.getDeltaMovement().scale(0.25D)); + if (stack.hasCustomHoverName()) { + reverie.setCustomName(stack.getHoverName()); + } + + serverLevel.addFreshEntity(reverie); + serverLevel.playSound(null, player.blockPosition(), SoundEvents.BOTTLE_EMPTY, SoundSource.PLAYERS, 1.0F, 1.0F); + player.awardStat(net.minecraft.stats.Stats.ITEM_USED.get(this)); + this.clearStoredReverie(stack); + this.returnGlassBottle(player, stack, hand); + return true; + } + + private void returnGlassBottle(Player player, ItemStack stack, InteractionHand hand) { + if (player.getAbilities().instabuild) { + player.setItemInHand(hand, new ItemStack(Items.GLASS_BOTTLE)); + return; + } + + ItemStack glassBottle = new ItemStack(Items.GLASS_BOTTLE); + if (stack.getCount() <= 1) { + player.setItemInHand(hand, glassBottle); + return; + } + + stack.shrink(1); + if (!player.getInventory().add(glassBottle)) { + player.drop(glassBottle, false); + } + } + + private boolean hasStoredReverie(ItemStack stack) { + return this.getStoredReverieTag(stack) != null; + } + + private CompoundTag getStoredReverieTag(ItemStack stack) { + CompoundTag tag = stack.hasTag() ? stack.getTag() : new CompoundTag(); + if (!tag.contains(STORED_REVERIE_TAG, Tag.TAG_COMPOUND)) { + return null; + } + return tag.getCompound(STORED_REVERIE_TAG).copy(); + } + + private void ensureStoredReverie(ItemStack stack) { + if (this.hasStoredReverie(stack)) { + return; + } + + this.writeDefaultReverieData(stack); + } + + private void clearStoredReverie(ItemStack stack) { + if (stack.hasTag()) { + stack.getTag().remove(STORED_REVERIE_TAG); + } + } + + private void writeDefaultReverieData(ItemStack stack) { + CompoundTag tag = stack.getOrCreateTag(); + if (!tag.contains(STORED_REVERIE_TAG, Tag.TAG_COMPOUND)) { + tag.put(STORED_REVERIE_TAG, new CompoundTag()); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RootBeerItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RootBeerItem.java new file mode 100644 index 00000000..91734b48 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RootBeerItem.java @@ -0,0 +1,59 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.advancements.CriteriaTriggers; +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.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.level.Level; + +public class RootBeerItem extends Item { + public RootBeerItem(Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) { + ItemStack result = super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.GLASS_BOTTLE); + } + + if (livingEntity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack bottle = new ItemStack(Items.GLASS_BOTTLE); + if (!player.getInventory().add(bottle)) { + player.drop(bottle, false); + } + } + + return result; + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } +} 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 new file mode 100644 index 00000000..739c0016 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java @@ -0,0 +1,194 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +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.client.renderer.AnimatedHeldItemRenderer; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import java.util.function.Consumer; +import java.util.function.Predicate; +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.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ProjectileWeaponItem; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.animatable.GeoItem; +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.core.animation.AnimationController; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class RpoLauncherItem extends ProjectileWeaponItem implements GeoItem, com.craisinlord.antarchy.content.client.AntarchyGeoItem { + private static final String FIRE_CONTROLLER = "fire_controller"; + private static final String FIRE_ANIMATION = "rpo_launcher_recoil"; + private static final Predicate NO_PROJECTILES = stack -> false; + private static final ResourceLocation MODEL_LOCATION = new ResourceLocation("antarchy", "geo/rpo_launcher.geo.json"); + private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation("antarchy", "textures/models/item/rpo_launcher.png"); + private static final ResourceLocation ANIMATION_LOCATION = new ResourceLocation("antarchy", "animations/rpo_launcher.animation.json"); + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public RpoLauncherItem(Properties properties) { + super(properties); + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + ItemStack itemStack = player.getItemInHand(usedHand); + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(itemStack); + } + + if (!level.isClientSide()) { + fireOctopusBomb(level, player, 0.0F); + if (hasMultishot(itemStack)) { + fireOctopusBomb(level, player, -10.0F); + fireOctopusBomb(level, player, 10.0F); + } + spawnFireParticles((ServerLevel) level, player); + itemStack.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(usedHand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND)); + triggerFireAnimation((ServerLevel) level, player, itemStack); + } + + level.playSound( + null, + player.getX(), + player.getY(), + player.getZ(), + AntarchySoundEvents.SQUIDZOOKA_FIRE.get(), + SoundSource.PLAYERS, + 1.15F, + 1.0F / (level.getRandom().nextFloat() * 0.4F + 1.2F) + 0.5F + ); + player.awardStat(Stats.ITEM_USED.get(this)); + double cooldownSeconds = AntarchySettings.rpoLauncherCooldownSeconds(); + if (cooldownSeconds > 0) { + player.getCooldowns().addCooldown(this, (int) (cooldownSeconds * 20)); + } + return InteractionResultHolder.consume(itemStack); + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.NONE; + } + + @Override + public Predicate getSupportedHeldProjectiles() { + return NO_PROJECTILES; + } + + @Override + public Predicate getAllSupportedProjectiles() { + return NO_PROJECTILES; + } + + @Override + public int getDefaultProjectileRange() { + return 0; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return 1; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, FIRE_CONTROLLER, state -> PlayState.STOP) + .triggerableAnim(FIRE_ANIMATION, RawAnimation.begin().thenPlay(FIRE_ANIMATION))); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + public void createRenderer(Consumer consumer) { + consumer.accept(new AntarchyGeoItemRenderer() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getCustomRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(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; + } + + private void triggerFireAnimation(ServerLevel level, LivingEntity livingEntity, ItemStack stack) { + long animatableId = GeoItem.getOrAssignId(stack, level); + triggerAnim(livingEntity, animatableId, FIRE_CONTROLLER, FIRE_ANIMATION); + } + + private static void fireOctopusBomb(Level level, Player player, float yawOffset) { + OctopusBombEntity projectileBomb = AntarchyObjects.OCTOPUS_BOMB.get().create(level); + if (projectileBomb == null) { + return; + } + + 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())); + level.addFreshEntity(projectileBomb); + } + + private static boolean hasMultishot(ItemStack stack) { + return net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, stack) > 0; + } + + private static void spawnFireParticles(ServerLevel level, Player player) { + double lookX = player.getLookAngle().x; + double lookY = player.getLookAngle().y; + double lookZ = player.getLookAngle().z; + double originX = player.getX() + lookX * 0.65D; + double originY = player.getEyeY() - 0.15D + lookY * 0.15D; + double originZ = player.getZ() + lookZ * 0.65D; + + level.sendParticles(ParticleTypes.SMOKE, originX, originY, originZ, 12, 0.18D, 0.12D, 0.18D, 0.02D); + level.sendParticles(ParticleTypes.CLOUD, originX, originY - 0.05D, originZ, 8, 0.16D, 0.1D, 0.16D, 0.01D); + } +} 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 new file mode 100644 index 00000000..c39395ed --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ScorpionWhipItem.java @@ -0,0 +1,68 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.List; +import net.minecraft.ChatFormatting; +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.SoundSource; +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 net.minecraft.world.level.Level; +import net.minecraft.core.particles.ParticleTypes; + +public final class ScorpionWhipItem extends SwordItem { + private static final ResourceLocation ATTACK_RANGE_MODIFIER_ID = new ResourceLocation("antarchy", "scorpion_whip_attack_range"); + private final Tier tier; + + public ScorpionWhipItem(Tier tier, Item.Properties properties) { + super(tier, (int) Math.round(AntarchySettings.scorpionWhipBaseDamage()), -2.6F, properties); + this.tier = tier; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (!(player instanceof ServerPlayer serverPlayer)) { + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide()); + } + + boolean pulled = ScorpionWhipTetherManager.pullAndDetach(serverPlayer); + return pulled ? InteractionResultHolder.sidedSuccess(stack, false) : InteractionResultHolder.pass(stack); + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + boolean didHurt = super.hurtEnemy(stack, target, attacker); + if (!didHurt || target.level().isClientSide() || !(attacker instanceof ServerPlayer serverPlayer)) { + return didHurt; + } + + target.addEffect(new MobEffectInstance(MobEffects.POISON, AntarchySettings.scorpionWhipPoisonDurationTicks(), 0)); + if (!ScorpionWhipTetherManager.hasTether(serverPlayer) && ScorpionWhipTetherManager.canTether(target)) { + ScorpionWhipTetherManager.attach(serverPlayer, target); + ServerLevel level = serverPlayer.serverLevel(); + level.sendParticles(ParticleTypes.CRIT, target.getX(), target.getY(0.5D), target.getZ(), 6, 0.2D, 0.2D, 0.2D, 0.0D); + level.playSound(null, target.blockPosition(), net.minecraft.sounds.SoundEvents.FISHING_BOBBER_THROW, SoundSource.PLAYERS, 0.8F, 0.65F); + } + return true; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.scorpion_whip.lash").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.scorpion_whip.reel").withStyle(ChatFormatting.DARK_GRAY)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ScorpionWhipTetherManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ScorpionWhipTetherManager.java new file mode 100644 index 00000000..a38382be --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ScorpionWhipTetherManager.java @@ -0,0 +1,191 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +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.damagesource.DamageSource; +import net.minecraft.world.phys.Vec3; + +public final class ScorpionWhipTetherManager { + private static final int DEFAULT_TETHER_DURATION_TICKS = 200; + private static final double BREAK_RANGE_MULTIPLIER = 3.0D; + private static final Map TETHERS = new ConcurrentHashMap<>(); + + private ScorpionWhipTetherManager() { + } + + public static boolean hasTether(Player player) { + return TETHERS.containsKey(player.getUUID()); + } + + public static boolean isTetheredTo(Player player, Entity entity) { + TetherState state = TETHERS.get(player.getUUID()); + return state != null && entity.getUUID().equals(state.targetUuid); + } + + public static Entity getTarget(ServerPlayer player) { + TetherState state = TETHERS.get(player.getUUID()); + return state == null ? null : player.serverLevel().getEntity(state.targetUuid); + } + + public static boolean canTether(LivingEntity target) { + return !(target instanceof Player) + && !target.getType().is(AntarchyTags.Entities.SCORPION_WHIP_BLACKLIST) + && !target.getType().is(AntarchyTags.Entities.SCORPION_WHIP_IMMUNE); + } + + public static void attach(ServerPlayer player, LivingEntity target) { + clear(player); + TetherState state = new TetherState(target.getUUID()); + state.marked = target.hasEffect(MobEffects.POISON); + TETHERS.put(player.getUUID(), state); + ScorpionWhipTetherSync.send(player, target.getId()); + } + + public static void clear(ServerPlayer player) { + TetherState removed = TETHERS.remove(player.getUUID()); + if (removed == null) { + return; + } + ScorpionWhipTetherSync.send(player, -1); + } + + public static boolean pullAndDetach(ServerPlayer player) { + TetherState state = TETHERS.get(player.getUUID()); + if (state == null) { + return false; + } + + Entity targetEntity = player.serverLevel().getEntity(state.targetUuid); + if (!(targetEntity instanceof LivingEntity target) || !isValid(player, target, state)) { + clear(player); + return false; + } + + Vec3 toPlayer = player.position().subtract(target.position()); + double distance = toPlayer.length(); + if (distance < 0.001D) { + return false; + } + + Vec3 direction = toPlayer.scale(1.0D / distance); + boolean heavy = isHeavy(target); + double pullStrength = heavy ? AntarchySettings.scorpionWhipHeavyPullMultiplier() : AntarchySettings.scorpionWhipPullStrength(); + Vec3 targetVelocity = target.getDeltaMovement().add(direction.scale(pullStrength)); + targetVelocity = new Vec3(targetVelocity.x, Mth.clamp(targetVelocity.y + 0.08D, -0.35D, 0.35D), targetVelocity.z); + target.setDeltaMovement(targetVelocity); + target.hurtMarked = true; + + if (heavy) { + Vec3 playerVelocity = player.getDeltaMovement().add(direction.scale(-AntarchySettings.scorpionWhipSelfPullMultiplier())); + player.setDeltaMovement(playerVelocity.x, Mth.clamp(playerVelocity.y + 0.04D, -0.35D, 0.35D), playerVelocity.z); + player.hurtMarked = true; + } + + double damage = AntarchySettings.scorpionWhipSnapBonusDamage(); + if (state.marked) { + damage += Math.max(2.0D, AntarchySettings.scorpionWhipSnapBonusDamage() * 0.25D); + } + target.hurt(player.damageSources().playerAttack(player), (float) damage); + + Vec3 ripBack = direction.scale(-0.4D); + target.setDeltaMovement(target.getDeltaMovement().add(ripBack.x, 0.12D, ripBack.z)); + target.hurtMarked = true; + + player.level().playSound(null, player.blockPosition(), SoundEvents.FISHING_BOBBER_RETRIEVE, SoundSource.PLAYERS, 0.85F, 0.7F); + clear(player); + return true; + } + + public static void tick(ServerPlayer player) { + TetherState state = TETHERS.get(player.getUUID()); + if (state == null) { + return; + } + + state.remainingTicks--; + + Entity targetEntity = player.serverLevel().getEntity(state.targetUuid); + if (!(targetEntity instanceof LivingEntity target) || !isValid(player, target, state)) { + clear(player); + return; + } + + applyTautTether(player, target); + + if (state.remainingTicks % 20 == 0) { + ScorpionWhipTetherSync.send(player, targetEntity.getId()); + } + } + + private static boolean isValid(ServerPlayer player, LivingEntity target, TetherState state) { + double maxRange = AntarchySettings.scorpionWhipTetherMaxRange(); + double breakRange = maxRange * BREAK_RANGE_MULTIPLIER; + return player.isAlive() + && target.isAlive() + && !target.isRemoved() + && player.level() == target.level() + && state.remainingTicks > 0 + && isHoldingWhip(player) + && player.distanceToSqr(target) <= breakRange * breakRange + && !target.getType().is(AntarchyTags.Entities.SCORPION_WHIP_IMMUNE) + && !target.getType().is(AntarchyTags.Entities.SCORPION_WHIP_BLACKLIST); + } + + private static void applyTautTether(ServerPlayer player, LivingEntity target) { + double maxRange = AntarchySettings.scorpionWhipTetherMaxRange(); + Vec3 toPlayer = player.position().subtract(target.position()); + double distance = toPlayer.length(); + if (distance <= maxRange || distance < 0.001D) { + return; + } + + Vec3 direction = toPlayer.scale(1.0D / distance); + double overshoot = distance - maxRange; + boolean heavy = isHeavy(target); + double pullStrength = heavy + ? AntarchySettings.scorpionWhipHeavyPullMultiplier() + : AntarchySettings.scorpionWhipPullStrength(); + double leashPull = Mth.clamp(overshoot * 0.18D, 0.08D, pullStrength); + + Vec3 targetVelocity = target.getDeltaMovement().add(direction.scale(leashPull)); + targetVelocity = new Vec3(targetVelocity.x, Mth.clamp(targetVelocity.y + 0.04D, -0.3D, 0.3D), targetVelocity.z); + target.setDeltaMovement(targetVelocity); + target.hurtMarked = true; + + if (heavy) { + Vec3 playerVelocity = player.getDeltaMovement().add(direction.scale(-AntarchySettings.scorpionWhipSelfPullMultiplier() * 0.5D)); + player.setDeltaMovement(playerVelocity.x, Mth.clamp(playerVelocity.y + 0.02D, -0.3D, 0.3D), playerVelocity.z); + player.hurtMarked = true; + } + } + + private static boolean isHoldingWhip(Player player) { + return player.getMainHandItem().getItem() instanceof ScorpionWhipItem + || player.getOffhandItem().getItem() instanceof ScorpionWhipItem; + } + + private static boolean isHeavy(LivingEntity target) { + return target.getMaxHealth() >= 80.0D || target.getBbWidth() >= 2.0F; + } + + public static final class TetherState { + private final UUID targetUuid; + private int remainingTicks = DEFAULT_TETHER_DURATION_TICKS; + private boolean marked = false; + + private TetherState(UUID targetUuid) { + this.targetUuid = targetUuid; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ScorpionWhipTetherSync.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ScorpionWhipTetherSync.java new file mode 100644 index 00000000..016c0d41 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ScorpionWhipTetherSync.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.function.BiConsumer; +import net.minecraft.server.level.ServerPlayer; + +public final class ScorpionWhipTetherSync { + private static final BiConsumer NOOP = (player, targetId) -> { + }; + + private static volatile BiConsumer sink = NOOP; + + private ScorpionWhipTetherSync() { + } + + public static void setSink(BiConsumer sink) { + ScorpionWhipTetherSync.sink = sink == null ? NOOP : sink; + } + + public static void send(ServerPlayer player, int targetId) { + sink.accept(player, targetId); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SignalSavingBulbItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SignalSavingBulbItem.java new file mode 100644 index 00000000..900025f4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SignalSavingBulbItem.java @@ -0,0 +1,23 @@ +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 final class SignalSavingBulbItem extends BlockItem { + public SignalSavingBulbItem(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.signal_saving_bulb").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SimpleToolTier.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SimpleToolTier.java new file mode 100644 index 00000000..502b3f31 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SimpleToolTier.java @@ -0,0 +1,44 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.function.Supplier; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.crafting.Ingredient; + +public record SimpleToolTier( + int uses, + float speed, + float attackDamageBonus, + int level, + int enchantmentValue, + Supplier repairIngredient +) implements Tier { + @Override + public int getUses() { + return uses; + } + + @Override + public float getSpeed() { + return speed; + } + + @Override + public float getAttackDamageBonus() { + return attackDamageBonus; + } + + @Override + public int getLevel() { + return level; + } + + @Override + public int getEnchantmentValue() { + return enchantmentValue; + } + + @Override + public Ingredient getRepairIngredient() { + return repairIngredient.get(); + } +} 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 new file mode 100644 index 00000000..94e55cd7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SizeRayItem.java @@ -0,0 +1,263 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import java.util.List; +import java.util.function.Predicate; +import java.util.function.Supplier; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ProjectileWeaponItem; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.level.Level; +import software.bernie.geckolib.animatable.GeoItem; +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.core.animation.Animation; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.core.animation.RawAnimation; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import software.bernie.geckolib.renderer.GeoItemRenderer; +import software.bernie.geckolib.util.GeckoLibUtil; + +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; + private static final int MAX_USE_DURATION = 72000; + private static final Predicate NO_PROJECTILES = stack -> false; + private final Supplier> projectileType; + private final SizeRayProjectileEntity.SizeRayType rayType; + private final ResourceLocation geoModelLocation; + private final ResourceLocation geoTextureLocation; + private final ResourceLocation geoAnimationLocation; + private final String fireAnimationName; + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public SizeRayItem( + Item.Properties properties, + Supplier> projectileType, + SizeRayProjectileEntity.SizeRayType rayType, + ResourceLocation geoModelLocation, + ResourceLocation geoTextureLocation, + ResourceLocation geoAnimationLocation, + String fireAnimationName + ) { + super(properties); + this.projectileType = projectileType; + this.rayType = rayType; + this.geoModelLocation = geoModelLocation; + this.geoTextureLocation = geoTextureLocation; + this.geoAnimationLocation = geoAnimationLocation; + this.fireAnimationName = fireAnimationName; + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + ItemStack itemStack = player.getItemInHand(usedHand); + if (!AntarchySettings.sizeChangingRaysEnabled()) { + return InteractionResultHolder.fail(itemStack); + } + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(itemStack); + } + + player.startUsingItem(usedHand); + return InteractionResultHolder.consume(itemStack); + } + + @Override + public void releaseUsing(ItemStack stack, Level level, LivingEntity livingEntity, int timeLeft) { + if (!(livingEntity instanceof Player player)) { + return; + } + + if (!AntarchySettings.sizeChangingRaysEnabled() || player.getCooldowns().isOnCooldown(this)) { + return; + } + + int useTicks = this.getUseDuration(stack) - timeLeft; + int chargeLevel = getChargeLevel(useTicks); + + if (!level.isClientSide()) { + SizeRayProjectileEntity projectile = this.createProjectile(level, player, stack, chargeLevel); + projectile.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, 3.0F, 0.0F); + level.addFreshEntity(projectile); + stack.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(player.getUsedItemHand() == InteractionHand.MAIN_HAND + ? EquipmentSlot.MAINHAND + : EquipmentSlot.OFFHAND)); + triggerFireAnimation((ServerLevel) level, player, stack); + level.playSound( + null, + player.getX(), + player.getY(), + player.getZ(), + this.getFireSound(), + SoundSource.PLAYERS, + 1.0F, + 0.95F + 0.12F * (chargeLevel - 1) + 1.0F / (level.getRandom().nextFloat() * 0.4F + 1.2F) + ); + player.awardStat(Stats.ITEM_USED.get(this)); + double cooldownSeconds = AntarchySettings.sizeRayCooldownSeconds(); + if (cooldownSeconds > 0) { + player.getCooldowns().addCooldown(this, (int) (cooldownSeconds * 20)); + } + } + } + + @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; + } + + @Override + public int getUseDuration(ItemStack stack) { + return MAX_USE_DURATION; + } + + @Override + public Predicate getSupportedHeldProjectiles() { + return NO_PROJECTILES; + } + + @Override + public Predicate getAllSupportedProjectiles() { + return NO_PROJECTILES; + } + + @Override + public int getDefaultProjectileRange() { + return 0; + } + + public SizeRayProjectileEntity createProjectile(Level level, LivingEntity livingEntity, ItemStack weaponStack) { + return this.createProjectile(level, livingEntity, weaponStack, 1); + } + + public SizeRayProjectileEntity createProjectile(Level level, LivingEntity livingEntity, ItemStack weaponStack, int chargeLevel) { + SizeRayProjectileEntity projectile = new SizeRayProjectileEntity(this.projectileType.get(), livingEntity, level, weaponStack.copy(), this.rayType); + projectile.setChargeLevel(chargeLevel); + return projectile; + } + + public SizeRayProjectileEntity createProjectile(Level level, ItemStack weaponStack) { + SizeRayProjectileEntity projectile = new SizeRayProjectileEntity(this.projectileType.get(), level, this.rayType); + projectile.setChargeLevel(1); + return projectile; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + String tooltipKey = this.rayType == SizeRayProjectileEntity.SizeRayType.SHRINK + ? "tooltip.antarchy.shrink_ray" + : "tooltip.antarchy.growth_ray"; + tooltipComponents.add(Component.translatable(tooltipKey).withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.size_ray_milk_reset").withStyle(ChatFormatting.GRAY)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, FIRE_CONTROLLER, state -> PlayState.STOP) + .triggerableAnim(this.fireAnimationName, RawAnimation.begin().then(this.fireAnimationName, Animation.LoopType.PLAY_ONCE))); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + public void createRenderer(Consumer consumer) { + consumer.accept(new AntarchyGeoItemRenderer() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getCustomRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(new ResourceBackedGeoItemModel<>(geoModelLocation, geoTextureLocation, geoAnimationLocation)); + } + + 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; + } + + private void triggerFireAnimation(ServerLevel level, LivingEntity livingEntity, ItemStack stack) { + long animatableId = GeoItem.getOrAssignId(stack, level); + triggerAnim(livingEntity, animatableId, FIRE_CONTROLLER, this.fireAnimationName); + } + + public SoundEvent getChargeSound() { + return AntarchySoundEvents.SIZE_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(); + } + + private static int getChargeLevel(int useTicks) { + return Math.max(1, 1 + useTicks / CHARGE_TICKS_PER_LEVEL); + } +} 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 new file mode 100644 index 00000000..2ff08835 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyObjects; +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.entity.LivingEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; + +import java.util.List; + +public class SpiritAppleItem extends Item { + public static final int GLIMMERING_DURATION_TICKS = 20 * 8; + + public SpiritAppleItem(Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) { + 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)); + } + return result; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.spirit_apple").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.spirit_apple.eaten").withStyle(ChatFormatting.GRAY)); + 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 new file mode 100644 index 00000000..3402f079 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java @@ -0,0 +1,195 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +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 java.util.function.Consumer; +import java.util.function.Predicate; +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.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ProjectileWeaponItem; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.animatable.GeoItem; +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.core.animation.AnimationController; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.core.animation.RawAnimation; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import software.bernie.geckolib.renderer.GeoItemRenderer; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem, com.craisinlord.antarchy.content.client.AntarchyGeoItem { + private static final String FIRE_CONTROLLER = "fire_controller"; + private static final String FIRE_ANIMATION = "squidzooka_recoil"; + private static final Predicate NO_PROJECTILES = stack -> false; + private static final ResourceLocation MODEL_LOCATION = new ResourceLocation("antarchy", "geo/squidzooka.geo.json"); + private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation("antarchy", "textures/models/item/squidzooka.png"); + private static final ResourceLocation ANIMATION_LOCATION = new ResourceLocation("antarchy", "animations/squidzooka.animation.json"); + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public SquidzookaItem(Properties properties) { + super(properties); + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + ItemStack itemStack = player.getItemInHand(usedHand); + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(itemStack); + } + + if (!level.isClientSide()) { + fireSquid(level, player, 0.0F); + if (hasMultishot(itemStack)) { + fireSquid(level, player, -10.0F); + fireSquid(level, player, 10.0F); + } + spawnFireParticles((ServerLevel) level, player); + itemStack.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(usedHand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND)); + triggerFireAnimation((ServerLevel) level, player, itemStack); + } + + level.playSound( + null, + player.getX(), + player.getY(), + player.getZ(), + AntarchySoundEvents.SQUIDZOOKA_FIRE.get(), + SoundSource.PLAYERS, + 1.15F, + 1.0F / (level.getRandom().nextFloat() * 0.4F + 1.2F) + 0.5F + ); + player.awardStat(Stats.ITEM_USED.get(this)); + double cooldownSeconds = AntarchySettings.squidzookaCooldownSeconds(); + if (cooldownSeconds > 0) { + player.getCooldowns().addCooldown(this, (int) (cooldownSeconds * 20)); + } + return InteractionResultHolder.consume(itemStack); + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.NONE; + } + + @Override + public Predicate getSupportedHeldProjectiles() { + return NO_PROJECTILES; + } + + @Override + public Predicate getAllSupportedProjectiles() { + return NO_PROJECTILES; + } + + @Override + public int getDefaultProjectileRange() { + return 0; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return 1; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, FIRE_CONTROLLER, state -> PlayState.STOP) + .triggerableAnim(FIRE_ANIMATION, RawAnimation.begin().thenPlay(FIRE_ANIMATION))); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + public void createRenderer(Consumer consumer) { + consumer.accept(new AntarchyGeoItemRenderer() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getCustomRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(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; + } + + private void triggerFireAnimation(ServerLevel level, LivingEntity livingEntity, ItemStack stack) { + long animatableId = GeoItem.getOrAssignId(stack, level); + triggerAnim(livingEntity, animatableId, FIRE_CONTROLLER, FIRE_ANIMATION); + } + + private static void fireSquid(Level level, Player player, float yawOffset) { + MissileSquidEntity projectileSquid = AntarchyObjects.MISSILE_SQUID.get().create(level); + if (projectileSquid == null) { + return; + } + + 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())); + level.addFreshEntity(projectileSquid); + } + + private static boolean hasMultishot(ItemStack stack) { + return net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, stack) > 0; + } + + private static void spawnFireParticles(ServerLevel level, Player player) { + double lookX = player.getLookAngle().x; + double lookY = player.getLookAngle().y; + double lookZ = player.getLookAngle().z; + double originX = player.getX() + lookX * 0.65D; + double originY = player.getEyeY() - 0.15D + lookY * 0.15D; + double originZ = player.getZ() + lookZ * 0.65D; + + level.sendParticles(ParticleTypes.SPLASH, originX, originY, originZ, 12, 0.18D, 0.12D, 0.18D, 0.02D); + level.sendParticles(ParticleTypes.BUBBLE, originX, originY - 0.05D, originZ, 8, 0.16D, 0.1D, 0.16D, 0.01D); + } +} 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 new file mode 100644 index 00000000..5e397006 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.client.TigerEyeClientHooks; +import java.util.List; +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; + +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))); + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.passive").withStyle(ChatFormatting.GOLD)); + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.full_set").withStyle(ChatFormatting.YELLOW)); + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.activate", TigerEyeClientHooks.camouflageKeyText()).withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.active_bonus").withStyle(ChatFormatting.DARK_AQUA)); + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + } + + private static int resolveDurability(Type armorType) { + return switch (armorType) { + case HELMET -> 11 * BASE_DURABILITY_MULTIPLIER; + case CHESTPLATE -> 16 * BASE_DURABILITY_MULTIPLIER; + case LEGGINGS -> 15 * BASE_DURABILITY_MULTIPLIER; + case BOOTS -> 13 * BASE_DURABILITY_MULTIPLIER; + }; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorUtil.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorUtil.java new file mode 100644 index 00000000..789d5d67 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorUtil.java @@ -0,0 +1,126 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageAccess; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.EmptyBlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.phys.Vec3; + +public final class TigerEyeArmorUtil { + public static final double DETECTION_REDUCTION_PER_PIECE = 0.10D; + public static final double MAX_PASSIVE_REDUCTION = 0.40D; + public static final double WALKING_MULTIPLIER = 0.50D; + public static final double SPRINTING_MULTIPLIER = 0.25D; + public static final double ACTIVE_CAMOUFLAGE_MULTIPLIER = 2.0D; + public static final double MAX_ACTIVE_REDUCTION = 0.80D; + private static final double STATIONARY_HORIZONTAL_SPEED_SQR = 0.0009D; + + private TigerEyeArmorUtil() { + } + + public static int countEquippedPieces(Player player) { + int count = 0; + for (EquipmentSlot slot : new EquipmentSlot[]{EquipmentSlot.HEAD, EquipmentSlot.CHEST, EquipmentSlot.LEGS, EquipmentSlot.FEET}) { + if (player.getItemBySlot(slot).is(AntarchyTags.Items.TIGER_EYE_ARMOR)) { + count++; + } + } + return count; + } + + public static boolean hasFullSet(Player player) { + return player.getItemBySlot(EquipmentSlot.HEAD).is(AntarchyTags.Items.TIGER_EYE_ARMOR) + && player.getItemBySlot(EquipmentSlot.CHEST).is(AntarchyTags.Items.TIGER_EYE_ARMOR) + && player.getItemBySlot(EquipmentSlot.LEGS).is(AntarchyTags.Items.TIGER_EYE_ARMOR) + && player.getItemBySlot(EquipmentSlot.FEET).is(AntarchyTags.Items.TIGER_EYE_ARMOR); + } + + public static double getPassiveMaximumReduction(Player player) { + return Math.min(MAX_PASSIVE_REDUCTION, countEquippedPieces(player) * DETECTION_REDUCTION_PER_PIECE); + } + + public static double getMovementMultiplier(Player player) { + if (player.isCrouching()) { + return 1.0D; + } + + Vec3 delta = player.getDeltaMovement(); + double horizontalSpeedSqr = delta.x * delta.x + delta.z * delta.z; + if (horizontalSpeedSqr < STATIONARY_HORIZONTAL_SPEED_SQR) { + return 1.0D; + } + + if (player.isSprinting()) { + return SPRINTING_MULTIPLIER; + } + + return WALKING_MULTIPLIER; + } + + public static double getDetectionReduction(Player player) { + double reduction = getPassiveMaximumReduction(player) * getMovementMultiplier(player); + if (isAdaptiveCamouflageActive(player)) { + reduction = Math.min(MAX_ACTIVE_REDUCTION, reduction * ACTIVE_CAMOUFLAGE_MULTIPLIER); + } + return reduction; + } + + public static boolean mayActivateAdaptiveCamouflage(Player player) { + return hasFullSet(player) && !player.isSpectator() && player.isAlive(); + } + + public static boolean isAdaptiveCamouflageActive(Player player) { + return player instanceof TigerEyeCamouflageAccess access && access.antarchy$isTigerEyeCamouflageActive(); + } + + public static boolean isValidCamouflageBlock(BlockState state) { + if (state.isAir() || state.is(AntarchyTags.Blocks.TIGER_EYE_CAMOUFLAGE_BLACKLIST)) { + return false; + } + if (state.getRenderShape() == RenderShape.INVISIBLE) { + return false; + } + if (state.is(Blocks.BARRIER) || state.is(Blocks.STRUCTURE_VOID) || state.is(Blocks.LIGHT)) { + return false; + } + if (state.is(Blocks.NETHER_PORTAL) || state.is(Blocks.END_PORTAL) || state.is(Blocks.END_GATEWAY)) { + return false; + } + if (!Block.isShapeFullBlock(state.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))) { + return false; + } + + FluidState fluidState = state.getFluidState(); + return fluidState == null || fluidState.isEmpty(); + } + + public static boolean shouldReduceDetection(Mob observer, Player player) { + if (countEquippedPieces(player) <= 0) { + return false; + } + if (observer.getType().is(AntarchyTags.Entities.TIGER_EYE_DETECTION_IMMUNE)) { + return false; + } + if (observer.getTarget() == player || observer.getLastHurtByMob() == player) { + return false; + } + if (observer instanceof net.minecraft.world.entity.NeutralMob neutralMob && neutralMob.isAngryAt(player)) { + return false; + } + return observer.canAttack(player); + } + + public static BlockPos getCamouflageSamplePos(Player player) { + double centerX = (player.getBoundingBox().minX + player.getBoundingBox().maxX) * 0.5D; + double centerZ = (player.getBoundingBox().minZ + player.getBoundingBox().maxZ) * 0.5D; + return BlockPos.containing(centerX, player.getBoundingBox().minY - 0.05D, centerZ); + } +} 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 new file mode 100644 index 00000000..e486fd53 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/TriffidGooBlockItem.java @@ -0,0 +1,23 @@ +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/WaterCannonItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/WaterCannonItem.java new file mode 100644 index 00000000..4d104e5d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/WaterCannonItem.java @@ -0,0 +1,145 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ProjectileWeaponItem; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.level.Level; +import software.bernie.geckolib.animatable.GeoItem; +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.core.animation.AnimationController; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.core.animation.RawAnimation; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.function.Consumer; +import java.util.function.Predicate; + +public class WaterCannonItem extends ProjectileWeaponItem implements GeoItem, com.craisinlord.antarchy.content.client.AntarchyGeoItem { + + private static final String FIRE_CONTROLLER = "fire_controller"; + private static final String FIRE_ANIMATION = "water_cannon_fire"; + private static final Predicate NO_PROJECTILES = stack -> false; + private static final int FIRE_INTERVAL_TICKS = 8; + private static final ResourceLocation MODEL_LOCATION = new ResourceLocation("antarchy", "geo/water_cannon.geo.json"); + private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation("antarchy", "textures/models/item/water_cannon.png"); + private static final ResourceLocation ANIMATION_LOCATION = new ResourceLocation("antarchy", "animations/water_cannon.animation.json"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public WaterCannonItem(Properties properties) { + super(properties); + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public int getUseDuration(ItemStack stack) { + return 72000; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + player.startUsingItem(usedHand); + return InteractionResultHolder.consume(player.getItemInHand(usedHand)); + } + + @Override + public void onUseTick(Level level, LivingEntity livingEntity, ItemStack stack, int remainingUseTicks) { + if (!(livingEntity instanceof Player player)) return; + int usedTicks = getUseDuration(stack) - remainingUseTicks; + if (usedTicks % FIRE_INTERVAL_TICKS != 0) return; + + level.playSound(null, player.getX(), player.getY(), player.getZ(), + AntarchySoundEvents.WATER_CANNON_FIRE.get(), SoundSource.PLAYERS, + 0.22F, 0.9F + level.getRandom().nextFloat() * 0.2F); + + if (!level.isClientSide()) { + WaterBombEntity bomb = new WaterBombEntity(level, player); + bomb.moveTo(player.getX(), player.getEyeY() - 0.1D, player.getZ(), player.getYRot(), player.getXRot()); + bomb.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, 1.5F, 1.0F); + level.addFreshEntity(bomb); + stack.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(player.getUsedItemHand() == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND)); + if (level instanceof ServerLevel serverLevel) { + triggerFireAnimation(serverLevel, player, stack); + } + } + + player.awardStat(Stats.ITEM_USED.get(this)); + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.NONE; + } + + @Override + public Predicate getSupportedHeldProjectiles() { + return NO_PROJECTILES; + } + + @Override + public Predicate getAllSupportedProjectiles() { + return NO_PROJECTILES; + } + + @Override + public int getDefaultProjectileRange() { + return 0; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, FIRE_CONTROLLER, state -> PlayState.STOP) + .triggerableAnim(FIRE_ANIMATION, RawAnimation.begin().thenPlay(FIRE_ANIMATION))); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + public void createRenderer(Consumer consumer) { + consumer.accept(new AntarchyGeoItemRenderer() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getCustomRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(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; + } + + private void triggerFireAnimation(ServerLevel level, LivingEntity livingEntity, ItemStack stack) { + long animatableId = GeoItem.getOrAssignId(stack, level); + triggerAnim(livingEntity, animatableId, FIRE_CONTROLLER, FIRE_ANIMATION); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateArmorItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateArmorItem.java new file mode 100644 index 00000000..f320f160 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateArmorItem.java @@ -0,0 +1,110 @@ +package com.craisinlord.antarchy.content.item.ultimate; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.google.common.collect.ImmutableMultimap; +import java.util.UUID; +import net.minecraft.core.Holder; +import net.minecraft.world.entity.Entity; +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.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +public class UltimateArmorItem extends ArmorItem { + private final Type armorType; + + public UltimateArmorItem(ArmorMaterial material, Type type, Properties properties) { + super(material, type, properties); + this.armorType = type; + } + + @Override + public com.google.common.collect.Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { + if (slot != this.armorType.getSlot()) { + return super.getDefaultAttributeModifiers(slot); + } + + String prefix = 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.ultimateArmorKnockbackResistance(); + if (knockbackResistance > 0.0F) { + builder.put( + Attributes.KNOCKBACK_RESISTANCE, + new AttributeModifier( + UUID.nameUUIDFromBytes((prefix + "_armor_knockback_resistance").getBytes()), + prefix + "_armor_knockback_resistance", + knockbackResistance, + AttributeModifier.Operation.ADDITION + ) + ); + } + + return builder.build(); + } + + @Override + public int getDefense() { + return switch (this.armorType) { + case HELMET -> AntarchySettings.ultimateHelmetArmorValue(); + case CHESTPLATE -> AntarchySettings.ultimateChestplateArmorValue(); + case LEGGINGS -> AntarchySettings.ultimateLeggingsArmorValue(); + case BOOTS -> AntarchySettings.ultimateBootsArmorValue(); + }; + } + + @Override + public float getToughness() { + return (float) switch (this.armorType) { + case HELMET -> AntarchySettings.ultimateHelmetArmorToughness(); + case CHESTPLATE -> AntarchySettings.ultimateChestplateArmorToughness(); + case LEGGINGS -> AntarchySettings.ultimateLeggingsArmorToughness(); + case BOOTS -> AntarchySettings.ultimateBootsArmorToughness(); + }; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return AntarchySettings.ultimateArmorEnchantability(); + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + super.inventoryTick(stack, level, entity, slotId, isSelected); + UltimateGearHelper.ensureUltimateArmorEnchantments(stack, level.registryAccess()); + } + + @Override + public void onCraftedBy(ItemStack stack, Level level, Player player) { + super.onCraftedBy(stack, level, player); + UltimateGearHelper.ensureUltimateArmorEnchantments(stack, level.registryAccess()); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateAxeItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateAxeItem.java new file mode 100644 index 00000000..a4cd9514 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateAxeItem.java @@ -0,0 +1,87 @@ +package com.craisinlord.antarchy.content.item.ultimate; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.List; +import java.util.function.DoubleSupplier; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.AxeItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +public class UltimateAxeItem extends AxeItem { + private final Tier tier; + private final DoubleSupplier attackDamage; + private final float attackSpeed; + + public UltimateAxeItem(Tier tier, Item.Properties properties, DoubleSupplier attackDamage, float attackSpeed) { + super(tier, (float) attackDamage.getAsDouble(), (float) AntarchySettings.ultimateAxeAttackSpeed(), properties); + this.tier = tier; + this.attackDamage = attackDamage; + this.attackSpeed = attackSpeed; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + UltimateToolHelper.appendThreeByThreeTooltip(tooltipComponents); + } + + @Override + public float getDestroySpeed(ItemStack stack, BlockState state) { + return UltimateToolHelper.getDestroySpeed( + UltimateToolHelper.ToolKind.AXE, + this.tier, + stack, + state, + super.getDestroySpeed(stack, state) + ); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + InteractionResultHolder toggleResult = UltimateToolHelper.handleToggleUse(level, player, hand); + return toggleResult.getResult() == InteractionResult.PASS ? super.use(level, player, hand) : toggleResult; + } + + @Override + public InteractionResult useOn(UseOnContext context) { + InteractionResult toggleResult = UltimateToolHelper.handleToggleUseOn(context); + if (toggleResult != InteractionResult.PASS) { + return toggleResult; + } + + InteractionResult result = super.useOn(context); + if (result.consumesAction()) { + UltimateToolHelper.handleAreaUseOn(context, areaContext -> super.useOn(areaContext)); + } + return result; + } + + @Override + public boolean mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity miningEntity) { + boolean result = super.mineBlock(stack, level, state, pos, miningEntity); + UltimateToolHelper.handleAreaMining(UltimateToolHelper.ToolKind.AXE, stack, level, state, pos, miningEntity); + return result; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return AntarchySettings.ultimateToolEnchantability(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateBowItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateBowItem.java new file mode 100644 index 00000000..fa884b5c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateBowItem.java @@ -0,0 +1,131 @@ +package com.craisinlord.antarchy.content.item.ultimate; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.List; +import net.minecraft.core.HolderLookup; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +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.AbstractArrow; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.item.BowItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +public class UltimateBowItem extends BowItem { + private static final double VANILLA_FULL_DRAW_ARROW_DAMAGE = 6.0D; + + public UltimateBowItem(Item.Properties properties) { + super(properties); + } + + @Override + public void releaseUsing(ItemStack stack, Level level, LivingEntity livingEntity, int timeLeft) { + if (!(livingEntity instanceof Player player)) { + return; + } + + boolean hasInfinity = player.getAbilities().instabuild + || net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel( + net.minecraft.world.item.enchantment.Enchantments.INFINITY_ARROWS, stack) > 0; + ItemStack projectileStack = player.getProjectile(stack); + if (projectileStack.isEmpty() && !hasInfinity) { + return; + } + if (projectileStack.isEmpty()) { + projectileStack = new ItemStack(net.minecraft.world.item.Items.ARROW); + } + + int useTicks = this.getUseDuration(stack) - timeLeft; + int adjustedUseTicks = Math.max(1, (int) Math.round(useTicks * AntarchySettings.ultimateBowDrawSpeedMultiplier())); + float power = BowItem.getPowerForTime(adjustedUseTicks); + if (power < 0.1F) { + return; + } + + if (level instanceof ServerLevel serverLevel) { + net.minecraft.world.item.ArrowItem arrowItem = projectileStack.getItem() instanceof net.minecraft.world.item.ArrowItem ai + ? ai + : (net.minecraft.world.item.ArrowItem) net.minecraft.world.item.Items.ARROW; + AbstractArrow arrow = arrowItem.createArrow(serverLevel, projectileStack, player); + arrow.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, power * 3.0F, 1.0F); + if (power == 1.0F) { + arrow.setCritArrow(true); + } + + int punchLevel = net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel( + net.minecraft.world.item.enchantment.Enchantments.PUNCH_ARROWS, stack); + if (punchLevel > 0) { + arrow.setKnockback(punchLevel); + } + if (net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel( + net.minecraft.world.item.enchantment.Enchantments.FLAMING_ARROWS, stack) > 0) { + arrow.setSecondsOnFire(100); + } + + scaleArrowDamage(arrow); + UltimateGearHelper.tagUltimateBowArrow(arrow); + + stack.hurtAndBreak(1, player, e -> e.broadcastBreakEvent(player.getUsedItemHand())); + + if (player.getAbilities().instabuild || (hasInfinity && projectileStack.is(net.minecraft.world.item.Items.ARROW))) { + arrow.pickup = AbstractArrow.Pickup.CREATIVE_ONLY; + } else if (!player.getAbilities().instabuild) { + projectileStack.shrink(1); + if (projectileStack.isEmpty()) { + player.getInventory().removeItem(projectileStack); + } + } + + serverLevel.addFreshEntity(arrow); + } + + level.playSound( + null, + player.getX(), + player.getY(), + player.getZ(), + SoundEvents.ARROW_SHOOT, + SoundSource.PLAYERS, + 1.0F, + 1.0F / (level.getRandom().nextFloat() * 0.4F + 1.2F) + power * 0.5F + ); + player.awardStat(Stats.ITEM_USED.get(this)); + } + + private static void scaleArrowDamage(AbstractArrow arrow) { + double multiplier = AntarchySettings.ultimateBowAttackDamage() / VANILLA_FULL_DRAW_ARROW_DAMAGE; + arrow.setBaseDamage(arrow.getBaseDamage() * multiplier); + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + super.inventoryTick(stack, level, entity, slotId, isSelected); + ensureConfiguredEnchantments(stack, level.registryAccess()); + } + + @Override + public void onCraftedBy(ItemStack stack, Level level, Player player) { + super.onCraftedBy(stack, level, player); + ensureConfiguredEnchantments(stack, level.registryAccess()); + } + + private static void ensureConfiguredEnchantments(ItemStack stack, HolderLookup.Provider registries) { + UltimateGearHelper.ensureUltimateBowEnchantments(stack, registries); + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return AntarchySettings.ultimateBowEnchantability(); + } +} 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 new file mode 100644 index 00000000..561d2aa0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateCrossbowItem.java @@ -0,0 +1,263 @@ +package com.craisinlord.antarchy.content.item.ultimate; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.ChatFormatting; +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.sounds.SoundSource; +import net.minecraft.util.Mth; +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.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.TooltipFlag; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.Level; + +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 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 PROJECTILE_ITEM_TAG = "Item"; + + public UltimateCrossbowItem(Item.Properties properties) { + super(properties); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + + if (CrossbowItem.isCharged(stack)) { + if (!level.isClientSide) { + fireOneShot(level, player, stack); + } + player.getCooldowns().addCooldown(this, FIRE_COOLDOWN_TICKS); + return InteractionResultHolder.consume(stack); + } + + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(stack); + } + + level.playSound(null, player.getX(), player.getY(), player.getZ(), + SoundEvents.CROSSBOW_LOADING_START, SoundSource.PLAYERS, 1.0F, 1.0F); + player.startUsingItem(hand); + return InteractionResultHolder.consume(stack); + } + + @Override + public void releaseUsing(ItemStack stack, Level level, LivingEntity livingEntity, int timeLeft) { + if (!(livingEntity instanceof Player player)) return; + if (CrossbowItem.isCharged(stack)) return; + + int useTicks = getUseDuration(stack) - timeLeft; + int maxTicks = getAdjustedChargeDuration(stack); + + int arrowsToLoad = Mth.clamp( + (int) Math.floor((double) useTicks / maxTicks * MAX_ARROWS), 0, MAX_ARROWS); + if (arrowsToLoad == 0) return; + + ItemStack ammoType = player.getProjectile(stack); + if (ammoType.isEmpty()) return; + + int available = player.getAbilities().instabuild ? MAX_ARROWS : countMatchingArrows(player, ammoType); + int toLoad = Math.min(arrowsToLoad, available); + if (toLoad == 0) return; + + if (!player.getAbilities().instabuild) { + consumeArrows(player, ammoType, toLoad); + } + + List projectiles = getLoadedProjectiles(stack); + for (int i = 0; i < toLoad && projectiles.size() < MAX_ARROWS; 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; + } + + ItemStack arrowStack = loaded.remove(0); + List toFire = new ArrayList<>(); + if (hasMultishot(stack)) { + toFire.add(arrowStack); + toFire.add(arrowStack.copy()); + toFire.add(arrowStack.copy()); + } else { + toFire.add(arrowStack); + } + + 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); + } + + 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()); + } + + private void shootArrow(Level level, Player player, ItemStack arrowStack, float angleOffset, boolean disallowPickup) { + if (!(arrowStack.getItem() instanceof ArrowItem arrowItem)) { + return; + } + + 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; + } + UltimateGearHelper.tagUltimateCrossbowProjectile(arrow); + level.addFreshEntity(arrow); + } + + private static void scaleArrowDamage(AbstractArrow arrow) { + double multiplier = AntarchySettings.ultimateCrossbowAttackDamage() / VANILLA_CROSSBOW_ARROW_DAMAGE; + arrow.setBaseDamage(arrow.getBaseDamage() * multiplier); + } + + @Override + public int getUseDuration(ItemStack stack) { + return getAdjustedChargeDuration(stack) + 3; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + List loadedProjectiles = getLoadedProjectiles(stack); + if (!loadedProjectiles.isEmpty()) { + int count = loadedProjectiles.size(); + Component arrowName = loadedProjectiles.get(0).getHoverName(); + tooltipComponents.add(Component.translatable("item.antarchy.ultimate_crossbow.arrows_remaining", count, arrowName) + .withStyle(ChatFormatting.GRAY)); + } + tooltipComponents.add(Component.translatable("item.antarchy.ultimate_crossbow.capacity") + .withStyle(ChatFormatting.GRAY)); + } + + private int getAdjustedChargeDuration(ItemStack stack) { + int vanillaChargeDuration = CrossbowItem.getChargeDuration(stack); + double multiplier = AntarchySettings.ultimateCrossbowChargeSpeedMultiplier(); + return Math.max(1, Mth.floor((float) (vanillaChargeDuration / multiplier))); + } + + private boolean hasMultishot(ItemStack stack) { + return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, stack) > 0; + } + + private int countMatchingArrows(Player player, ItemStack ammoType) { + int count = 0; + for (ItemStack slot : player.getInventory().offhand) { + if (ItemStack.isSameItemSameTags(slot, ammoType)) { + count += slot.getCount(); + } + } + for (ItemStack slot : player.getInventory().items) { + if (ItemStack.isSameItemSameTags(slot, ammoType)) { + count += slot.getCount(); + } + } + return count; + } + + private void consumeArrows(Player player, ItemStack ammoType, int amount) { + int remaining = amount; + for (int i = 0; i < player.getInventory().offhand.size() && remaining > 0; i++) { + ItemStack slot = player.getInventory().offhand.get(i); + if (remaining <= 0) break; + if (ItemStack.isSameItemSameTags(slot, ammoType)) { + int take = Math.min(remaining, slot.getCount()); + slot.shrink(take); + remaining -= take; + if (slot.isEmpty()) { + player.getInventory().offhand.set(i, ItemStack.EMPTY); + } + } + } + for (int i = 0; i < player.getInventory().items.size() && remaining > 0; i++) { + ItemStack slot = player.getInventory().items.get(i); + if (remaining <= 0) break; + if (ItemStack.isSameItemSameTags(slot, ammoType)) { + int take = Math.min(remaining, slot.getCount()); + slot.shrink(take); + remaining -= take; + if (slot.isEmpty()) { + player.getInventory().items.set(i, ItemStack.EMPTY); + } + } + } + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return AntarchySettings.ultimateCrossbowEnchantability(); + } + + 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)); + if (!projectile.isEmpty()) { + projectiles.add(projectile.copyWithCount(1)); + } + } + return projectiles; + } + + private static void saveLoadedProjectiles(ItemStack crossbow, List projectiles) { + List sanitizedProjectiles = projectiles.stream() + .filter(projectile -> !projectile.isEmpty()) + .limit(MAX_ARROWS) + .map(projectile -> projectile.copyWithCount(1)) + .toList(); + + if (sanitizedProjectiles.isEmpty()) { + if (crossbow.hasTag()) { + crossbow.getTag().remove(LOADED_PROJECTILES_TAG); + } + return; + } + + ListTag loaded = new ListTag(); + for (ItemStack projectile : sanitizedProjectiles) { + CompoundTag entry = new CompoundTag(); + entry.put(PROJECTILE_ITEM_TAG, projectile.save(new CompoundTag())); + loaded.add(entry); + } + + crossbow.getOrCreateTag().put(LOADED_PROJECTILES_TAG, loaded); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateGearHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateGearHelper.java new file mode 100644 index 00000000..f9e84544 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateGearHelper.java @@ -0,0 +1,77 @@ +package com.craisinlord.antarchy.content.item.ultimate; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.HashMap; +import java.util.Map; +import net.minecraft.core.HolderLookup; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; + +public final class UltimateGearHelper { + public static final String ULTIMATE_BOW_ARROW_TAG = Antarchy.MODID + ".ultimate_bow_arrow"; + public static final String ULTIMATE_CROSSBOW_PROJECTILE_TAG = Antarchy.MODID + ".ultimate_crossbow_projectile"; + + private UltimateGearHelper() { + } + + public static ItemStack createUltimateArmorStack(net.minecraft.world.item.Item item, HolderLookup.Provider registries) { + ItemStack stack = new ItemStack(item); + ensureUltimateArmorEnchantments(stack, registries); + return stack; + } + + public static ItemStack createUltimateBowStack(net.minecraft.world.item.Item item, HolderLookup.Provider registries) { + ItemStack stack = new ItemStack(item); + ensureUltimateBowEnchantments(stack, registries); + return stack; + } + + public static void ensureUltimateArmorEnchantments(ItemStack stack, HolderLookup.Provider registries) { + if (!AntarchySettings.ultimateArmorComesEnchanted()) { + return; + } + Map enchantments = new HashMap<>(EnchantmentHelper.getEnchantments(stack)); + setEnchantmentLevel(enchantments, Enchantments.ALL_DAMAGE_PROTECTION, 5); + setEnchantmentLevel(enchantments, Enchantments.FIRE_PROTECTION, 5); + setEnchantmentLevel(enchantments, Enchantments.PROJECTILE_PROTECTION, 5); + setEnchantmentLevel(enchantments, Enchantments.BLAST_PROTECTION, 5); + EnchantmentHelper.setEnchantments(enchantments, stack); + } + + public static void ensureUltimateBowEnchantments(ItemStack stack, HolderLookup.Provider registries) { + if (!AntarchySettings.ultimateBowComesEnchantedWithFlame()) { + return; + } + + Map enchantments = new HashMap<>(EnchantmentHelper.getEnchantments(stack)); + setEnchantmentLevel(enchantments, Enchantments.FLAMING_ARROWS, 1); + EnchantmentHelper.setEnchantments(enchantments, stack); + } + + private static void setEnchantmentLevel(Map enchantments, Enchantment enchantment, int level) { + if (enchantments.getOrDefault(enchantment, 0) < level) { + enchantments.put(enchantment, level); + } + } + + public static void tagUltimateBowArrow(AbstractArrow arrow) { + arrow.addTag(ULTIMATE_BOW_ARROW_TAG); + } + + public static boolean isUltimateBowArrow(Entity entity) { + return entity != null && entity.getTags().contains(ULTIMATE_BOW_ARROW_TAG); + } + + public static void tagUltimateCrossbowProjectile(Entity projectile) { + projectile.addTag(ULTIMATE_CROSSBOW_PROJECTILE_TAG); + } + + public static boolean isUltimateCrossbowProjectile(Entity entity) { + return entity != null && entity.getTags().contains(ULTIMATE_CROSSBOW_PROJECTILE_TAG); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateHoeItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateHoeItem.java new file mode 100644 index 00000000..fb737915 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateHoeItem.java @@ -0,0 +1,87 @@ +package com.craisinlord.antarchy.content.item.ultimate; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.List; +import java.util.function.DoubleSupplier; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.HoeItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +public class UltimateHoeItem extends HoeItem { + private final Tier tier; + private final DoubleSupplier attackDamage; + private final float attackSpeed; + + public UltimateHoeItem(Tier tier, Item.Properties properties, DoubleSupplier attackDamage, float attackSpeed) { + super(tier, (int) Math.round(attackDamage.getAsDouble()), (float) AntarchySettings.ultimateHoeAttackSpeed(), properties); + this.tier = tier; + this.attackDamage = attackDamage; + this.attackSpeed = attackSpeed; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + UltimateToolHelper.appendThreeByThreeTooltip(tooltipComponents); + } + + @Override + public float getDestroySpeed(ItemStack stack, BlockState state) { + return UltimateToolHelper.getDestroySpeed( + UltimateToolHelper.ToolKind.HOE, + this.tier, + stack, + state, + super.getDestroySpeed(stack, state) + ); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + InteractionResultHolder toggleResult = UltimateToolHelper.handleToggleUse(level, player, hand); + return toggleResult.getResult() == InteractionResult.PASS ? super.use(level, player, hand) : toggleResult; + } + + @Override + public InteractionResult useOn(UseOnContext context) { + InteractionResult toggleResult = UltimateToolHelper.handleToggleUseOn(context); + if (toggleResult != InteractionResult.PASS) { + return toggleResult; + } + + InteractionResult result = super.useOn(context); + if (result.consumesAction()) { + UltimateToolHelper.handleAreaUseOn(context, areaContext -> super.useOn(areaContext)); + } + return result; + } + + @Override + public boolean mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity miningEntity) { + boolean result = super.mineBlock(stack, level, state, pos, miningEntity); + UltimateToolHelper.handleAreaMining(UltimateToolHelper.ToolKind.HOE, stack, level, state, pos, miningEntity); + return result; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return AntarchySettings.ultimateToolEnchantability(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateMaceItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateMaceItem.java new file mode 100644 index 00000000..6cc29b58 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateMaceItem.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.content.item.ultimate; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +public class UltimateMaceItem extends Item { + public UltimateMaceItem(Item.Properties properties) { + super(properties); + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return AntarchySettings.ultimateMaceEnchantability(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimatePickaxeItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimatePickaxeItem.java new file mode 100644 index 00000000..0b306189 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimatePickaxeItem.java @@ -0,0 +1,79 @@ +package com.craisinlord.antarchy.content.item.ultimate; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.List; +import java.util.function.DoubleSupplier; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +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.PickaxeItem; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +public class UltimatePickaxeItem extends PickaxeItem { + private final Tier tier; + private final DoubleSupplier attackDamage; + private final float attackSpeed; + + public UltimatePickaxeItem(Tier tier, Item.Properties properties, DoubleSupplier attackDamage, float attackSpeed) { + super(tier, (int) Math.round(attackDamage.getAsDouble()), (float) AntarchySettings.ultimatePickaxeAttackSpeed(), properties); + this.tier = tier; + this.attackDamage = attackDamage; + this.attackSpeed = attackSpeed; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + UltimateToolHelper.appendThreeByThreeTooltip(tooltipComponents); + } + + @Override + public float getDestroySpeed(ItemStack stack, BlockState state) { + return UltimateToolHelper.getDestroySpeed( + UltimateToolHelper.ToolKind.PICKAXE, + this.tier, + stack, + state, + super.getDestroySpeed(stack, state) + ); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + InteractionResultHolder toggleResult = UltimateToolHelper.handleToggleUse(level, player, hand); + return toggleResult.getResult() == InteractionResult.PASS ? super.use(level, player, hand) : toggleResult; + } + + @Override + public InteractionResult useOn(UseOnContext context) { + InteractionResult toggleResult = UltimateToolHelper.handleToggleUseOn(context); + return toggleResult == InteractionResult.PASS ? super.useOn(context) : toggleResult; + } + + @Override + public boolean mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity miningEntity) { + boolean result = super.mineBlock(stack, level, state, pos, miningEntity); + UltimateToolHelper.handleAreaMining(UltimateToolHelper.ToolKind.PICKAXE, stack, level, state, pos, miningEntity); + return result; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return AntarchySettings.ultimateToolEnchantability(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateSwordItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateSwordItem.java new file mode 100644 index 00000000..9eec0d49 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateSwordItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item.ultimate; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.function.DoubleSupplier; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.SwordItem; +import net.minecraft.world.item.Tier; + +public class UltimateSwordItem extends SwordItem { + private final Tier tier; + private final DoubleSupplier attackDamage; + private final float attackSpeed; + + public UltimateSwordItem(Tier tier, Item.Properties properties, DoubleSupplier attackDamage, float attackSpeed) { + super(tier, (int) Math.round(attackDamage.getAsDouble()), (float) AntarchySettings.ultimateSwordAttackSpeed(), properties); + this.tier = tier; + this.attackDamage = attackDamage; + this.attackSpeed = attackSpeed; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return AntarchySettings.ultimateToolEnchantability(); + } +} 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 new file mode 100644 index 00000000..663c0671 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateToolHelper.java @@ -0,0 +1,328 @@ +package com.craisinlord.antarchy.content.item.ultimate; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +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.Tier; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; + +public final class UltimateToolHelper { + private static final String THREE_BY_THREE_TAG = "antarchy.ultimate_three_by_three"; + private static final ThreadLocal BREAKING_EXTRA_BLOCKS = ThreadLocal.withInitial(() -> false); + private static final float GENERAL_MINING_MULTIPLIER = 1.1F; + private static final float ULTIMATE_SHOVEL_MINING_SPEED = 24.0F; + + private UltimateToolHelper() { + } + + public static InteractionResultHolder handleToggleUse(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (!AntarchySettings.ultimateToolsThreeByThreeEnabled() || !player.isShiftKeyDown()) { + return InteractionResultHolder.pass(stack); + } + + toggleThreeByThree(level, player, stack); + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + } + + public static InteractionResult handleToggleUseOn(UseOnContext context) { + Player player = context.getPlayer(); + if (!AntarchySettings.ultimateToolsThreeByThreeEnabled() || player == null || !player.isShiftKeyDown()) { + return InteractionResult.PASS; + } + + toggleThreeByThree(context.getLevel(), player, context.getItemInHand()); + return InteractionResult.sidedSuccess(context.getLevel().isClientSide); + } + + public static boolean isThreeByThreeEnabled(ItemStack stack) { + return stack.hasTag() && stack.getTag().getBoolean(THREE_BY_THREE_TAG); + } + + public static float getDestroySpeed(ToolKind toolKind, Tier tier, ItemStack stack, BlockState state, float defaultSpeed) { + if (matchesToolKind(toolKind, state)) { + float base = Math.max(defaultSpeed, tier.getSpeed()); + if (toolKind == ToolKind.SHOVEL) { + return Math.max(base * GENERAL_MINING_MULTIPLIER, ULTIMATE_SHOVEL_MINING_SPEED); + } + return base * GENERAL_MINING_MULTIPLIER; + } + if (defaultSpeed <= 1.0F) { + return defaultSpeed; + } + return defaultSpeed * GENERAL_MINING_MULTIPLIER; + } + + public static void appendThreeByThreeTooltip(List tooltip) { + if (!AntarchySettings.ultimateToolsThreeByThreeEnabled()) { + return; + } + tooltip.add(Component.translatable("tooltip.antarchy.ultimate_tools_3x3").withStyle(ChatFormatting.GRAY)); + } + + public static void handleAreaMining(ToolKind toolKind, ItemStack stack, Level level, BlockState originState, BlockPos origin, LivingEntity entity) { + if (!AntarchySettings.ultimateToolsThreeByThreeEnabled() + || level.isClientSide + || BREAKING_EXTRA_BLOCKS.get() + || !isThreeByThreeEnabled(stack) + || !(entity instanceof ServerPlayer player)) { + return; + } + + if (!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)) { + if (!canBreak(toolKind, player, stack, level, targetPos, level.getBlockState(targetPos))) { + continue; + } + + player.gameMode.destroyBlock(targetPos); + if (level instanceof ServerLevel serverLevel) { + serverLevel.destroyBlockProgress(syntheticBreakerId(player.getId(), targetPos), targetPos, -1); + } + if (stack.isEmpty()) { + break; + } + } + } finally { + BREAKING_EXTRA_BLOCKS.set(false); + } + } + + + public static void broadcastAreaMiningProgress(ServerPlayer player, ServerLevel level, BlockPos origin, int stage) { + if (!AntarchySettings.ultimateToolsThreeByThreeEnabled()) { + return; + } + + ItemStack stack = player.getMainHandItem(); + if (stack.isEmpty() || !isThreeByThreeEnabled(stack)) { + return; + } + + ToolKind kind = toolKindOf(stack.getItem()); + if (kind == null) { + return; + } + + BlockState originState = level.getBlockState(origin); + if (!matchesToolKind(kind, originState)) { + return; + } + + Direction face = resolveMiningFace(player, origin); + for (BlockPos targetPos : getPlane(origin, face)) { + BlockState state = level.getBlockState(targetPos); + if (state.isAir() || state.hasBlockEntity() || state.getDestroySpeed(level, targetPos) < 0.0F) { + continue; + } + if (!matchesToolKind(kind, state)) { + continue; + } + level.destroyBlockProgress(syntheticBreakerId(player.getId(), targetPos), targetPos, stage); + } + } + + private static int syntheticBreakerId(int playerId, BlockPos pos) { + int hash = pos.hashCode() ^ (playerId * 8191); + return hash | 0x80000000; + } + + private static ToolKind toolKindOf(Item item) { + if (item instanceof UltimatePickaxeItem) return ToolKind.PICKAXE; + if (item instanceof UltimateAxeItem) return ToolKind.AXE; + if (item instanceof UtlimateShovelItem) return ToolKind.SHOVEL; + if (item instanceof UltimateHoeItem) return ToolKind.HOE; + return null; + } + + public static void handleAreaUseOn(UseOnContext context, Function action) { + if (!AntarchySettings.ultimateToolsThreeByThreeEnabled() + || context.getLevel().isClientSide + || !isThreeByThreeEnabled(context.getItemInHand())) { + return; + } + + Player player = context.getPlayer(); + if (player == null) { + return; + } + + for (BlockPos targetPos : getPlane(context.getClickedPos(), context.getClickedFace())) { + if (!canModify(player, context.getLevel(), targetPos, context.getClickedFace(), context.getItemInHand())) { + continue; + } + + UseOnContext areaContext = new UseOnContext( + player, + context.getHand(), + new BlockHitResult(Vec3.atCenterOf(targetPos), context.getClickedFace(), targetPos, context.isInside()) + ); + action.apply(areaContext); + if (context.getItemInHand().isEmpty()) { + break; + } + } + } + + public enum ToolKind { + PICKAXE, + AXE, + SHOVEL, + HOE + } + + private static void toggleThreeByThree(Level level, Player player, ItemStack stack) { + boolean enabled = !isThreeByThreeEnabled(stack); + if (enabled) { + stack.getOrCreateTag().putBoolean(THREE_BY_THREE_TAG, true); + } else if (stack.hasTag()) { + stack.getTag().remove(THREE_BY_THREE_TAG); + } + + if (!level.isClientSide) { + player.displayClientMessage( + Component.translatable( + enabled + ? "message.antarchy.ultimate_tool.mode_3x3" + : "message.antarchy.ultimate_tool.mode_default" + ), + true + ); + } + } + + private static boolean canModify(Player player, Level level, BlockPos pos, Direction face, ItemStack stack) { + if (!level.isLoaded(pos) || !player.mayUseItemAt(pos, face, stack)) { + return false; + } + + if (player instanceof ServerPlayer serverPlayer + && serverPlayer.blockActionRestricted(level, pos, serverPlayer.gameMode.getGameModeForPlayer())) { + return false; + } + + return true; + } + + private static boolean canBreak(ToolKind toolKind, ServerPlayer player, ItemStack stack, Level level, BlockPos pos, BlockState state) { + if (!level.isLoaded(pos) + || state.isAir() + || state.hasBlockEntity() + || state.getDestroySpeed(level, pos) < 0.0F + || !player.mayUseItemAt(pos, Direction.UP, stack) + || player.blockActionRestricted(level, pos, player.gameMode.getGameModeForPlayer())) { + return false; + } + + if (!matchesToolKind(toolKind, state)) { + return false; + } + + if (stack.getDestroySpeed(state) <= 1.0F) { + return false; + } + + return !state.requiresCorrectToolForDrops() || stack.isCorrectToolForDrops(state); + } + + public static boolean matchesToolKind(ToolKind toolKind, BlockState state) { + return switch (toolKind) { + case PICKAXE -> state.is(BlockTags.MINEABLE_WITH_PICKAXE); + case AXE -> state.is(BlockTags.MINEABLE_WITH_AXE); + case SHOVEL -> state.is(BlockTags.MINEABLE_WITH_SHOVEL); + case HOE -> state.is(BlockTags.MINEABLE_WITH_HOE); + }; + } + + + private static Direction resolveMiningFace(ServerPlayer player, BlockPos pos) { + Vec3 eye = player.getEyePosition(1.0F); + Vec3 blockCenter = Vec3.atCenterOf(pos); + Vec3 delta = eye.subtract(blockCenter); + + if (delta.lengthSqr() < 1.0E-4) { + return player.getDirection().getOpposite(); + } + + Direction best = Direction.UP; + double bestDot = -Double.MAX_VALUE; + for (Direction d : Direction.values()) { + double dot = delta.x * d.getStepX() + delta.y * d.getStepY() + delta.z * d.getStepZ(); + if (dot > bestDot) { + bestDot = dot; + best = d; + } + } + 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); + switch (face.getAxis()) { + case Y -> { + for (int x = -1; x <= 1; x++) { + for (int z = -1; z <= 1; z++) { + if (x == 0 && z == 0) { + continue; + } + + positions.add(center.offset(x, 0, z)); + } + } + } + case X -> { + for (int y = -1; y <= 1; y++) { + for (int z = -1; z <= 1; z++) { + if (y == 0 && z == 0) { + continue; + } + + positions.add(center.offset(0, y, z)); + } + } + } + case Z -> { + for (int x = -1; x <= 1; x++) { + for (int y = -1; y <= 1; y++) { + if (x == 0 && y == 0) { + continue; + } + + positions.add(center.offset(x, y, 0)); + } + } + } + } + + return positions; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UtlimateShovelItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UtlimateShovelItem.java new file mode 100644 index 00000000..3fb3bc68 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UtlimateShovelItem.java @@ -0,0 +1,102 @@ +package com.craisinlord.antarchy.content.item.ultimate; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.List; +import java.util.function.DoubleSupplier; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +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.ShovelItem; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +public class UtlimateShovelItem extends ShovelItem { + private final Tier tier; + private final DoubleSupplier attackDamage; + private final float attackSpeed; + + public UtlimateShovelItem(Tier tier, Item.Properties properties, DoubleSupplier attackDamage, float attackSpeed) { + super(tier, (float) attackDamage.getAsDouble(), (float) AntarchySettings.ultimateShovelAttackSpeed(), properties); + this.tier = tier; + this.attackDamage = attackDamage; + this.attackSpeed = attackSpeed; + } + + @Override + public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { + super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); + UltimateToolHelper.appendThreeByThreeTooltip(tooltipComponents); + } + + @Override + public float getDestroySpeed(ItemStack stack, BlockState state) { + float vanillaSpeed = super.getDestroySpeed(stack, state); + float finalSpeed = UltimateToolHelper.getDestroySpeed( + UltimateToolHelper.ToolKind.SHOVEL, + this.tier, + stack, + state, + vanillaSpeed + ); + + Antarchy.LOGGER.info( + "Ultimate shovel speed block={} vanillaSpeed={} finalSpeed={} tierSpeed={} mineableWithShovel={}", + BuiltInRegistries.BLOCK.getKey(state.getBlock()), + vanillaSpeed, + finalSpeed, + this.tier.getSpeed(), + state.is(BlockTags.MINEABLE_WITH_SHOVEL) + ); + + return finalSpeed; + } + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + InteractionResultHolder toggleResult = UltimateToolHelper.handleToggleUse(level, player, hand); + return toggleResult.getResult() == InteractionResult.PASS ? super.use(level, player, hand) : toggleResult; + } + + @Override + public InteractionResult useOn(UseOnContext context) { + InteractionResult toggleResult = UltimateToolHelper.handleToggleUseOn(context); + if (toggleResult != InteractionResult.PASS) { + return toggleResult; + } + + InteractionResult result = super.useOn(context); + if (result.consumesAction()) { + UltimateToolHelper.handleAreaUseOn(context, areaContext -> super.useOn(areaContext)); + } + return result; + } + + + @Override + public boolean mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity miningEntity) { + boolean result = super.mineBlock(stack, level, state, pos, miningEntity); + UltimateToolHelper.handleAreaMining(UltimateToolHelper.ToolKind.SHOVEL, stack, level, state, pos, miningEntity); + return result; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return AntarchySettings.ultimateToolEnchantability(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/menu/DorrieInventoryMenu.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/menu/DorrieInventoryMenu.java new file mode 100644 index 00000000..7fe61a7d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/menu/DorrieInventoryMenu.java @@ -0,0 +1,127 @@ +package com.craisinlord.antarchy.content.menu; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import net.minecraft.world.Container; +import net.minecraft.world.SimpleContainer; +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.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import org.jetbrains.annotations.Nullable; + +public class DorrieInventoryMenu extends AbstractContainerMenu { + public static final int SADDLE_SLOT = 0; + public static final int STORAGE_COLUMNS = 5; + public static final int STORAGE_ROWS = 3; + public static final int DORRIE_SLOT_COUNT = 1 + STORAGE_COLUMNS * STORAGE_ROWS; + private static final int PLAYER_INV_Y = 84; + private static final int PLAYER_HOTBAR_Y = 142; + + private final Container dorrieInventory; + @Nullable + private final DorrieEntity dorrie; + + public DorrieInventoryMenu(int containerId, Inventory playerInventory) { + this(containerId, playerInventory, new SimpleContainer(DORRIE_SLOT_COUNT), null); + } + + public DorrieInventoryMenu(int containerId, Inventory playerInventory, Container dorrieInventory, @Nullable DorrieEntity dorrie) { + super(AntarchyObjects.DORRIE_INVENTORY_MENU.get(), containerId); + checkContainerSize(dorrieInventory, DORRIE_SLOT_COUNT); + this.dorrieInventory = dorrieInventory; + this.dorrie = dorrie; + dorrieInventory.startOpen(playerInventory.player); + + this.addSlot(new Slot(dorrieInventory, SADDLE_SLOT, 8, 18) { + @Override + public boolean mayPlace(ItemStack stack) { + return stack.is(Items.SADDLE) && !this.hasItem(); + } + + @Override + public int getMaxStackSize() { + return 1; + } + }); + + for (int row = 0; row < STORAGE_ROWS; row++) { + for (int col = 0; col < STORAGE_COLUMNS; col++) { + this.addSlot(new Slot(dorrieInventory, 1 + col + row * STORAGE_COLUMNS, 80 + col * 18, 18 + row * 18)); + } + } + + for (int row = 0; row < 3; row++) { + for (int col = 0; col < 9; col++) { + this.addSlot(new Slot(playerInventory, col + row * 9 + 9, 8 + col * 18, PLAYER_INV_Y + row * 18)); + } + } + + for (int col = 0; col < 9; col++) { + this.addSlot(new Slot(playerInventory, col, 8 + col * 18, PLAYER_HOTBAR_Y)); + } + } + + public Container dorrieInventory() { + return this.dorrieInventory; + } + + @Nullable + public DorrieEntity dorrie() { + return this.dorrie; + } + + @Override + public boolean stillValid(Player player) { + return this.dorrieInventory.stillValid(player) + && (this.dorrie == null || this.dorrie.isAlive() && this.dorrie.distanceTo(player) < 8.0F); + } + + @Override + public ItemStack quickMoveStack(Player player, int index) { + ItemStack quickMoved = ItemStack.EMPTY; + Slot slot = this.slots.get(index); + if (!slot.hasItem()) { + return ItemStack.EMPTY; + } + + ItemStack stack = slot.getItem(); + quickMoved = stack.copy(); + int dorrieEnd = DORRIE_SLOT_COUNT; + int playerStart = dorrieEnd; + int playerEnd = this.slots.size(); + + if (index < dorrieEnd) { + if (!this.moveItemStackTo(stack, playerStart, playerEnd, true)) { + return ItemStack.EMPTY; + } + } else if (stack.is(Items.SADDLE)) { + if (!this.moveItemStackTo(stack, SADDLE_SLOT, SADDLE_SLOT + 1, false)) { + return ItemStack.EMPTY; + } + } else if (!this.moveItemStackTo(stack, 1, dorrieEnd, false)) { + return ItemStack.EMPTY; + } + + if (stack.isEmpty()) { + slot.setByPlayer(ItemStack.EMPTY); + } else { + slot.setChanged(); + } + + if (stack.getCount() == quickMoved.getCount()) { + return ItemStack.EMPTY; + } + + slot.onTake(player, stack); + return quickMoved; + } + + @Override + public void removed(Player player) { + super.removed(player); + this.dorrieInventory.stopOpen(player); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalDismountHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalDismountHelper.java new file mode 100644 index 00000000..1acb191c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalDismountHelper.java @@ -0,0 +1,66 @@ +package com.craisinlord.antarchy.content.minecart; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.vehicle.AbstractMinecart; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +public final class AntimetalDismountHelper { + private static final Vec3[] SEARCH_OFFSETS = new Vec3[]{ + new Vec3(-1, -1, 0), + new Vec3(1, -1, 0), + new Vec3(0, -1, -1), + new Vec3(0, -1, 1), + new Vec3(-1, -1, -1), + new Vec3(-1, -1, 1), + new Vec3(1, -1, -1), + new Vec3(1, -1, 1), + new Vec3(0, -1.6, 0) + }; + + private AntimetalDismountHelper() { + } + + public static Vec3 findDismountPosition(AbstractMinecart cart, LivingEntity passenger) { + Level level = cart.level(); + Vec3 cartPos = cart.position(); + double width = Math.max(passenger.getBbWidth(), 0.6D); + double height = passenger.getBbHeight(); + + for (Vec3 offset : SEARCH_OFFSETS) { + Vec3 candidate = cartPos.add(offset); + if (isClear(level, candidate, width, height)) { + return candidate; + } + } + return cartPos.add(0, -1.0D, 0); + } + + private static boolean isClear(Level level, Vec3 pos, double width, double height) { + AABB box = new AABB( + pos.x - width / 2.0D, pos.y, pos.z - width / 2.0D, + pos.x + width / 2.0D, pos.y + height, pos.z + width / 2.0D + ); + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + int minX = net.minecraft.util.Mth.floor(box.minX); + int maxX = net.minecraft.util.Mth.floor(box.maxX); + int minY = net.minecraft.util.Mth.floor(box.minY); + int maxY = net.minecraft.util.Mth.floor(box.maxY); + int minZ = net.minecraft.util.Mth.floor(box.minZ); + int maxZ = net.minecraft.util.Mth.floor(box.maxZ); + + for (int x = minX; x <= maxX; x++) { + for (int y = minY; y <= maxY; y++) { + for (int z = minZ; z <= maxZ; z++) { + mutable.set(x, y, z); + if (!level.getBlockState(mutable).getCollisionShape(level, mutable).isEmpty()) { + return false; + } + } + } + } + return true; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalMinecartAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalMinecartAccess.java new file mode 100644 index 00000000..e051bfb5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalMinecartAccess.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.content.minecart; + +import net.minecraft.core.BlockPos; +import org.jetbrains.annotations.Nullable; + +public interface AntimetalMinecartAccess { + boolean antarchy$isOnAntimetalRail(); + + void antarchy$setOnAntimetalRail(boolean value); + + @Nullable + BlockPos antarchy$getAntimetalRailPos(); + + void antarchy$setAntimetalRailPos(@Nullable BlockPos pos); +} 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 new file mode 100644 index 00000000..51dc3cdd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalMinecartPhysics.java @@ -0,0 +1,339 @@ +package com.craisinlord.antarchy.content.minecart; + +import com.craisinlord.antarchy.content.block.AbstractAntimetalRailBlock; +import com.craisinlord.antarchy.content.block.AntimetalActivatorRailBlock; +import com.craisinlord.antarchy.content.block.AntimetalPoweredRailBlock; +import com.mojang.datafixers.util.Pair; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.AbstractMinecart; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +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; + private static final double RAIL_ACCELERATION = 0.06D; + private static final double HITBOX_DROP = 0.4625D; + + private AntimetalMinecartPhysics() { + } + + @Nullable + public static BlockPos findCell(Level level, double x, double y, double z) { + int i = Mth.floor(x); + int j = Mth.floor(y); + int k = Mth.floor(z); + BlockPos direct = new BlockPos(i, j, k); + if (isAntimetalRailAt(level, direct)) { + return direct; + } + BlockPos above = direct.above(); + return isAntimetalRailAt(level, above) ? above : null; + } + + public static boolean isAntimetalRailAt(Level level, BlockPos pos) { + return AbstractAntimetalRailBlock.isAntimetalRail(level.getBlockState(pos)); + } + + private static boolean isAntimetalRailAt(Level level, int x, int y, int z) { + return isAntimetalRailAt(level, new BlockPos(x, y, z)); + } + + @Nullable + private static Vec3 ascendingPosition(RailShape shape, BlockPos cell, double x, double z) { + double baseY = AntimetalRailHelper.attachY(cell.getY(), 0); + double centerX = cell.getX() + 0.5D; + double centerZ = cell.getZ() + 0.5D; + return switch (shape) { + case ASCENDING_EAST -> { + double t = Mth.clamp(cell.getX() + 1.0D - x, 0.0D, 1.0D); + yield new Vec3(cell.getX() + 1.0D - t, baseY - t, centerZ); + } + case ASCENDING_WEST -> { + double t = Mth.clamp(x - cell.getX(), 0.0D, 1.0D); + yield new Vec3(cell.getX() + t, baseY - t, centerZ); + } + case ASCENDING_NORTH -> { + double t = Mth.clamp(z - cell.getZ(), 0.0D, 1.0D); + yield new Vec3(centerX, baseY - t, cell.getZ() + t); + } + case ASCENDING_SOUTH -> { + double t = Mth.clamp(cell.getZ() + 1.0D - z, 0.0D, 1.0D); + yield new Vec3(centerX, baseY - t, cell.getZ() + 1.0D - t); + } + default -> null; + }; + } + + public static void moveAlongTrack(AbstractMinecart cart, BlockPos railPos, BlockState railState) { + cart.resetFallDistance(); + double x = cart.getX(); + double y = cart.getY(); + double z = cart.getZ(); + Vec3 before = getPos(cart, x, y, z); + double targetY = AntimetalRailHelper.attachY(railPos.getY(), 0); + + boolean poweredOn = false; + boolean unpoweredBraking = false; + if (railState.getBlock() instanceof AntimetalPoweredRailBlock) { + poweredOn = railState.getValue(AntimetalPoweredRailBlock.POWERED); + unpoweredBraking = !poweredOn; + } + + RailShape shape = railState.getValue(((AbstractAntimetalRailBlock) railState.getBlock()).getShapeProperty()); + Vec3 motion = cart.getDeltaMovement(); + switch (shape) { + case ASCENDING_EAST -> cart.setDeltaMovement(motion.add(-SLOPE_ACCEL, 0.0D, 0.0D)); + case ASCENDING_WEST -> cart.setDeltaMovement(motion.add(SLOPE_ACCEL, 0.0D, 0.0D)); + case ASCENDING_NORTH -> cart.setDeltaMovement(motion.add(0.0D, 0.0D, SLOPE_ACCEL)); + case ASCENDING_SOUTH -> cart.setDeltaMovement(motion.add(0.0D, 0.0D, -SLOPE_ACCEL)); + default -> { + } + } + + motion = cart.getDeltaMovement(); + Pair exits = AntimetalRailHelper.getExits(shape); + Vec3i exitA = exits.getFirst(); + Vec3i exitB = exits.getSecond(); + double dx = exitB.getX() - exitA.getX(); + double dz = exitB.getZ() - exitA.getZ(); + double dirLength = Math.sqrt(dx * dx + dz * dz); + double alignment = motion.x * dx + motion.z * dz; + if (alignment < 0.0D) { + dx = -dx; + dz = -dz; + } + + double speed = Math.min(2.0D, motion.horizontalDistance()); + motion = new Vec3(speed * dx / dirLength, motion.y, speed * dz / dirLength); + cart.setDeltaMovement(motion); + + Entity firstPassenger = cart.getFirstPassenger(); + if (firstPassenger instanceof Player) { + Vec3 riderMotion = firstPassenger.getDeltaMovement(); + double riderSpeedSq = riderMotion.horizontalDistanceSqr(); + double cartSpeedSq = cart.getDeltaMovement().horizontalDistanceSqr(); + if (riderSpeedSq > 1.0E-4D && cartSpeedSq < 0.01D) { + cart.setDeltaMovement(cart.getDeltaMovement().add(riderMotion.x * 0.1D, 0.0D, riderMotion.z * 0.1D)); + unpoweredBraking = false; + } + } + + if (unpoweredBraking) { + double brakingSpeed = cart.getDeltaMovement().horizontalDistance(); + if (brakingSpeed < 0.03D) { + cart.setDeltaMovement(Vec3.ZERO); + } else { + cart.setDeltaMovement(cart.getDeltaMovement().multiply(0.5D, 0.0D, 0.5D)); + } + } + + Vec3 ascendingPos = shape.isAscending() ? ascendingPosition(shape, railPos, x, z) : null; + if (ascendingPos != null) { + x = ascendingPos.x; + targetY = ascendingPos.y; + z = ascendingPos.z; + } else { + double startX = railPos.getX() + 0.5D + exitA.getX() * 0.5D; + double startZ = railPos.getZ() + 0.5D + exitA.getZ() * 0.5D; + double endX = railPos.getX() + 0.5D + exitB.getX() * 0.5D; + double endZ = railPos.getZ() + 0.5D + exitB.getZ() * 0.5D; + dx = endX - startX; + dz = endZ - startZ; + double s; + if (dx == 0.0D) { + s = z - railPos.getZ(); + } else if (dz == 0.0D) { + s = x - railPos.getX(); + } else { + double px = x - startX; + double pz = z - startZ; + s = (px * dx + pz * dz) * 2.0D; + } + x = startX + dx * s; + z = startZ + dz * s; + } + cart.setPos(x, targetY, z); + cart.setBoundingBox(cart.getBoundingBox().move(0.0D, -HITBOX_DROP, 0.0D)); + + double passengerFactor = cart.isVehicle() ? 0.75D : 1.0D; + motion = cart.getDeltaMovement(); + Vec3 clampedMotion = new Vec3( + Mth.clamp(passengerFactor * motion.x, -MAX_RAIL_SPEED, MAX_RAIL_SPEED), + 0.0D, + Mth.clamp(passengerFactor * motion.z, -MAX_RAIL_SPEED, MAX_RAIL_SPEED) + ); + if (shape.isAscending()) { + cart.setPos(cart.getX() + clampedMotion.x, cart.getY(), cart.getZ() + clampedMotion.z); + } else { + cart.move(MoverType.SELF, clampedMotion); + } + + if (exitA.getY() != 0 && Mth.floor(cart.getX()) - railPos.getX() == exitA.getX() && Mth.floor(cart.getZ()) - railPos.getZ() == exitA.getZ()) { + cart.setPos(cart.getX(), cart.getY() + exitA.getY(), cart.getZ()); + } else if (exitB.getY() != 0 && Mth.floor(cart.getX()) - railPos.getX() == exitB.getX() && Mth.floor(cart.getZ()) - railPos.getZ() == exitB.getZ()) { + cart.setPos(cart.getX(), cart.getY() + exitB.getY(), cart.getZ()); + } + + applyNaturalSlowdown(cart); + + Vec3 after = getPos(cart, cart.getX(), cart.getY(), cart.getZ()); + if (after != null && before != null) { + double slopeDelta = (before.y - after.y) * 0.05D; + Vec3 currentMotion = cart.getDeltaMovement(); + double horizontalSpeed = currentMotion.horizontalDistance(); + if (horizontalSpeed > 0.0D) { + cart.setDeltaMovement(currentMotion.multiply((horizontalSpeed + slopeDelta) / horizontalSpeed, 1.0D, (horizontalSpeed + slopeDelta) / horizontalSpeed)); + } + cart.setPos(cart.getX(), after.y, cart.getZ()); + } + + int cellX = Mth.floor(cart.getX()); + int cellZ = Mth.floor(cart.getZ()); + if (cellX != railPos.getX() || cellZ != railPos.getZ()) { + Vec3 currentMotion = cart.getDeltaMovement(); + double horizontalSpeed = currentMotion.horizontalDistance(); + cart.setDeltaMovement(horizontalSpeed * (cellX - railPos.getX()), currentMotion.y, horizontalSpeed * (cellZ - railPos.getZ())); + } + + cart.setBoundingBox(cart.getBoundingBox().move(0.0D, -HITBOX_DROP, 0.0D)); + + if (poweredOn) { + Vec3 currentMotion = cart.getDeltaMovement(); + double horizontalSpeed = currentMotion.horizontalDistance(); + if (horizontalSpeed > 0.01D) { + cart.setDeltaMovement(currentMotion.add(currentMotion.x / horizontalSpeed * RAIL_ACCELERATION, 0.0D, currentMotion.z / horizontalSpeed * RAIL_ACCELERATION)); + } else if (shape == RailShape.EAST_WEST) { + Vec3 currentMotion2 = cart.getDeltaMovement(); + double nudgeX = currentMotion2.x; + if (isRedstoneConductor(cart.level(), railPos.west())) { + nudgeX = 0.02D; + } else if (isRedstoneConductor(cart.level(), railPos.east())) { + nudgeX = -0.02D; + } + cart.setDeltaMovement(nudgeX, currentMotion2.y, currentMotion2.z); + } else if (shape == RailShape.NORTH_SOUTH) { + Vec3 currentMotion2 = cart.getDeltaMovement(); + double nudgeZ = currentMotion2.z; + if (isRedstoneConductor(cart.level(), railPos.north())) { + nudgeZ = 0.02D; + } else if (isRedstoneConductor(cart.level(), railPos.south())) { + nudgeZ = -0.02D; + } + cart.setDeltaMovement(currentMotion2.x, currentMotion2.y, nudgeZ); + } + } + + if (railState.getBlock() instanceof AntimetalActivatorRailBlock && railState.getValue(AntimetalActivatorRailBlock.POWERED)) { + cart.activateMinecart(railPos.getX(), railPos.getY(), railPos.getZ(), true); + } + } + + private static boolean isRedstoneConductor(Level level, BlockPos pos) { + return level.getBlockState(pos).isRedstoneConductor(level, pos); + } + + private static void applyNaturalSlowdown(AbstractMinecart cart) { + double drag = cart.isVehicle() ? 0.997D : 0.96D; + Vec3 motion = cart.getDeltaMovement(); + cart.setDeltaMovement(motion.multiply(drag, 0.0D, drag)); + } + + @Nullable + public static Vec3 getPosOffs(AbstractMinecart cart, double x, double y, double z, double offset) { + BlockPos cell = findCell(cart.level(), x, y, z); + if (cell == null) { + return null; + } + BlockState state = cart.level().getBlockState(cell); + RailShape shape = state.getValue(((AbstractAntimetalRailBlock) state.getBlock()).getShapeProperty()); + double targetY = AntimetalRailHelper.attachY(cell.getY(), 0); + + Pair exits = AntimetalRailHelper.getExits(shape); + Vec3i exitA = exits.getFirst(); + Vec3i exitB = exits.getSecond(); + double dx = exitB.getX() - exitA.getX(); + double dz = exitB.getZ() - exitA.getZ(); + double length = Math.sqrt(dx * dx + dz * dz); + dx /= length; + dz /= length; + x += dx * offset; + z += dz * offset; + if (exitA.getY() != 0 && Mth.floor(x) - cell.getX() == exitA.getX() && Mth.floor(z) - cell.getZ() == exitA.getZ()) { + targetY += exitA.getY(); + } else if (exitB.getY() != 0 && Mth.floor(x) - cell.getX() == exitB.getX() && Mth.floor(z) - cell.getZ() == exitB.getZ()) { + targetY += exitB.getY(); + } + Vec3 result = getPos(cart, x, targetY, z); + if (result != null && (shape == RailShape.ASCENDING_NORTH || shape == RailShape.ASCENDING_SOUTH)) { + double baseY = AntimetalRailHelper.attachY(cell.getY(), 0); + double mirroredY = 2.0D * (baseY - 0.5D) - result.y; + result = new Vec3(result.x, mirroredY, result.z); + } + return result; + } + + @Nullable + public static Vec3 getPos(AbstractMinecart cart, double x, double y, double z) { + BlockPos cell = findCell(cart.level(), x, y, z); + if (cell == null) { + return null; + } + BlockState state = cart.level().getBlockState(cell); + RailShape shape = state.getValue(((AbstractAntimetalRailBlock) state.getBlock()).getShapeProperty()); + + Vec3 ascendingPos = shape.isAscending() ? ascendingPosition(shape, cell, x, z) : null; + if (ascendingPos != null) { + return ascendingPos; + } + + Pair exits = AntimetalRailHelper.getExits(shape); + Vec3i exitA = exits.getFirst(); + Vec3i exitB = exits.getSecond(); + + double startX = cell.getX() + 0.5D + exitA.getX() * 0.5D; + double startY = AntimetalRailHelper.attachY(cell.getY(), 0) + exitA.getY() * 0.5D; + double startZ = cell.getZ() + 0.5D + exitA.getZ() * 0.5D; + double endX = cell.getX() + 0.5D + exitB.getX() * 0.5D; + double endY = AntimetalRailHelper.attachY(cell.getY(), 0) + exitB.getY() * 0.5D; + double endZ = cell.getZ() + 0.5D + exitB.getZ() * 0.5D; + + double dx = endX - startX; + double dy = (endY - startY) * 2.0D; + double dz = endZ - startZ; + double s; + if (dx == 0.0D) { + s = z - cell.getZ(); + } else if (dz == 0.0D) { + s = x - cell.getX(); + } else { + double px = x - startX; + double pz = z - startZ; + s = (px * dx + pz * dz) * 2.0D; + } + + x = startX + dx * s; + y = startY + dy * s; + z = startZ + dz * s; + return new Vec3(x, y, z); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalRailHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalRailHelper.java new file mode 100644 index 00000000..c9425141 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/minecart/AntimetalRailHelper.java @@ -0,0 +1,122 @@ +package com.craisinlord.antarchy.content.minecart; + +import com.craisinlord.antarchy.content.block.AbstractAntimetalRailBlock; +import com.mojang.datafixers.util.Pair; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.RailShape; + +import java.util.EnumMap; +import java.util.Map; + +public final class AntimetalRailHelper { + public static final double RAIL_TOP_OFFSET = 0.0625D; + public static final double CART_MODEL_HEIGHT = 0.7D; + public static final double CART_HANG_OFFSET = CART_MODEL_HEIGHT - 0.1875D; + public static final double CART_MODEL_PIVOT_Y = CART_MODEL_HEIGHT / 2.0D; + + private static final Map> ANTIMETAL_EXITS = new EnumMap<>(RailShape.class); + + static { + ANTIMETAL_EXITS.put(RailShape.NORTH_SOUTH, Pair.of(new Vec3i(0, 0, -1), new Vec3i(0, 0, 1))); + ANTIMETAL_EXITS.put(RailShape.EAST_WEST, Pair.of(new Vec3i(-1, 0, 0), new Vec3i(1, 0, 0))); + ANTIMETAL_EXITS.put(RailShape.ASCENDING_EAST, Pair.of(new Vec3i(-1, -1, 0), new Vec3i(1, 0, 0))); + ANTIMETAL_EXITS.put(RailShape.ASCENDING_WEST, Pair.of(new Vec3i(-1, 0, 0), new Vec3i(1, -1, 0))); + ANTIMETAL_EXITS.put(RailShape.ASCENDING_NORTH, Pair.of(new Vec3i(0, 0, -1), new Vec3i(0, -1, 1))); + ANTIMETAL_EXITS.put(RailShape.ASCENDING_SOUTH, Pair.of(new Vec3i(0, -1, -1), new Vec3i(0, 0, 1))); + ANTIMETAL_EXITS.put(RailShape.SOUTH_EAST, Pair.of(new Vec3i(0, 0, 1), new Vec3i(1, 0, 0))); + ANTIMETAL_EXITS.put(RailShape.SOUTH_WEST, Pair.of(new Vec3i(0, 0, 1), new Vec3i(-1, 0, 0))); + ANTIMETAL_EXITS.put(RailShape.NORTH_WEST, Pair.of(new Vec3i(0, 0, -1), new Vec3i(-1, 0, 0))); + ANTIMETAL_EXITS.put(RailShape.NORTH_EAST, Pair.of(new Vec3i(0, 0, -1), new Vec3i(1, 0, 0))); + } + + private AntimetalRailHelper() { + } + + public static Pair getExits(RailShape shape) { + return ANTIMETAL_EXITS.get(shape); + } + + public static double attachY(int railY, int exitDy) { + return railY + exitDy + 1.0D - RAIL_TOP_OFFSET - CART_HANG_OFFSET; + } + + private static boolean isRail(LevelReader level, BlockPos pos) { + return AbstractAntimetalRailBlock.isAntimetalRail(level.getBlockState(pos)); + } + + private static RailShape computeShape(AbstractAntimetalRailBlock block, LevelReader level, BlockPos pos, Direction.Axis fallbackAxis) { + boolean northDown = isRail(level, pos.north().below()); + boolean southDown = isRail(level, pos.south().below()); + boolean eastDown = isRail(level, pos.east().below()); + boolean westDown = isRail(level, pos.west().below()); + + boolean north = isRail(level, pos.north()) || isRail(level, pos.north().above()) || northDown; + boolean south = isRail(level, pos.south()) || isRail(level, pos.south().above()) || southDown; + boolean east = isRail(level, pos.east()) || isRail(level, pos.east().above()) || eastDown; + boolean west = isRail(level, pos.west()) || isRail(level, pos.west().above()) || westDown; + + if (block.isStraight()) { + if (northDown) return RailShape.ASCENDING_SOUTH; + if (southDown) return RailShape.ASCENDING_NORTH; + if (eastDown) return RailShape.ASCENDING_WEST; + if (westDown) return RailShape.ASCENDING_EAST; + if ((east || west) && !(north || south)) return RailShape.EAST_WEST; + if ((north || south) && !(east || west)) return RailShape.NORTH_SOUTH; + return fallbackAxis == Direction.Axis.X ? RailShape.EAST_WEST : RailShape.NORTH_SOUTH; + } + + if (northDown) return RailShape.ASCENDING_SOUTH; + if (southDown) return RailShape.ASCENDING_NORTH; + if (eastDown) return RailShape.ASCENDING_WEST; + if (westDown) return RailShape.ASCENDING_EAST; + + if (south && east && !north && !west) return RailShape.SOUTH_EAST; + if (south && west && !north && !east) return RailShape.SOUTH_WEST; + if (north && west && !south && !east) return RailShape.NORTH_WEST; + if (north && east && !south && !west) return RailShape.NORTH_EAST; + + if ((east || west) && !(north || south)) return RailShape.EAST_WEST; + if ((north || south) && !(east || west)) return RailShape.NORTH_SOUTH; + return fallbackAxis == Direction.Axis.X ? RailShape.EAST_WEST : RailShape.NORTH_SOUTH; + } + + public static BlockState getStateForPlacement(AbstractAntimetalRailBlock block, BlockPlaceContext context) { + Direction.Axis axis = context.getHorizontalDirection().getAxis(); + RailShape shape = computeShape(block, context.getLevel(), context.getClickedPos(), axis); + return block.defaultBlockState().setValue(block.getShapeProperty(), shape); + } + + public static void updateConnections(AbstractAntimetalRailBlock block, BlockState state, LevelAccessor level, BlockPos pos) { + if (!(level instanceof Level realLevel) || realLevel.isClientSide()) { + return; + } + RailShape shape = computeShape(block, realLevel, pos, Direction.Axis.Z); + if (state.getValue(block.getShapeProperty()) != shape) { + realLevel.setBlock(pos, state.setValue(block.getShapeProperty(), shape), 3); + } + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos horizontalPos = pos.relative(direction); + recomputeIfRail(realLevel, horizontalPos); + recomputeIfRail(realLevel, horizontalPos.above()); + recomputeIfRail(realLevel, horizontalPos.below()); + } + } + + private static void recomputeIfRail(Level level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + if (state.getBlock() instanceof AbstractAntimetalRailBlock block) { + RailShape shape = computeShape(block, level, pos, Direction.Axis.Z); + if (state.getValue(block.getShapeProperty()) != shape) { + level.setBlock(pos, state.setValue(block.getShapeProperty(), shape), 3); + } + } + } + +} 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 new file mode 100644 index 00000000..d4bc5187 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/movement/DreamSandLowGravityAccess.java @@ -0,0 +1,21 @@ +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/BigBerthaModeCyclePayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BigBerthaModeCyclePayload.java new file mode 100644 index 00000000..26bd4786 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BigBerthaModeCyclePayload.java @@ -0,0 +1,17 @@ +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 net.minecraft.resources.ResourceLocation; + +public record BigBerthaModeCyclePayload() implements CustomPacketPayload { + public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "big_bertha_mode_cycle")); + public static final StreamCodec STREAM_CODEC = StreamCodec.unit(new BigBerthaModeCyclePayload()); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..ff6df3e9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BloodCrystalKatanaTrailPayload.java @@ -0,0 +1,23 @@ +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 BloodCrystalKatanaTrailPayload(int entityId, int durationTicks) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "blood_crystal_katana_trail")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT, BloodCrystalKatanaTrailPayload::entityId, + ByteBufCodecs.VAR_INT, BloodCrystalKatanaTrailPayload::durationTicks, + BloodCrystalKatanaTrailPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..aa189059 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BloodglassStatePayload.java @@ -0,0 +1,23 @@ +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 BloodglassStatePayload(int shieldsActive, int shieldsMax) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "bloodglass_state")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT, BloodglassStatePayload::shieldsActive, + ByteBufCodecs.VAR_INT, BloodglassStatePayload::shieldsMax, + BloodglassStatePayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..7203a34a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BrutalflyElytraAnimationPayload.java @@ -0,0 +1,24 @@ +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 BrutalflyElytraAnimationPayload(int entityId, int durationTicks, float strength) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "brutalfly_elytra_animation")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT, BrutalflyElytraAnimationPayload::entityId, + ByteBufCodecs.VAR_INT, BrutalflyElytraAnimationPayload::durationTicks, + ByteBufCodecs.FLOAT, BrutalflyElytraAnimationPayload::strength, + BrutalflyElytraAnimationPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..a4ee29a3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/BrutalflyElytraFlapPayload.java @@ -0,0 +1,20 @@ +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 BrutalflyElytraFlapPayload(int chargeTicks) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "brutalfly_elytra_flap")); + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.VAR_INT.map(BrutalflyElytraFlapPayload::new, BrutalflyElytraFlapPayload::chargeTicks); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..084da944 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DiamondMinecartInputPayload.java @@ -0,0 +1,31 @@ +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 DiamondMinecartInputPayload(byte inputFlags) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "diamond_minecart_input")); + + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.BYTE.map(DiamondMinecartInputPayload::new, DiamondMinecartInputPayload::inputFlags); + + public static final byte FLAG_FORWARD = 0x01; + public static final byte FLAG_BACK = 0x02; + public static final byte FLAG_LEFT = 0x04; + public static final byte FLAG_RIGHT = 0x08; + + public boolean isForward() { return (inputFlags & FLAG_FORWARD) != 0; } + public boolean isBack() { return (inputFlags & FLAG_BACK) != 0; } + public boolean isLeft() { return (inputFlags & FLAG_LEFT) != 0; } + public boolean isRight() { return (inputFlags & FLAG_RIGHT) != 0; } + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..e6b67505 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DorrieChargeJumpPayload.java @@ -0,0 +1,23 @@ +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 DorrieChargeJumpPayload(boolean pressing) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "dorrie_charge_jump_input")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.BOOL, DorrieChargeJumpPayload::pressing, + DorrieChargeJumpPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..684c1a87 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/DorrieJumpInputPayload.java @@ -0,0 +1,23 @@ +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 DorrieJumpInputPayload(boolean pressing) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "dorrie_jump_input")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.BOOL, DorrieJumpInputPayload::pressing, + DorrieJumpInputPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..7703e401 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityGunPrimaryPayload.java @@ -0,0 +1,17 @@ +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 net.minecraft.resources.ResourceLocation; + +public record GravityGunPrimaryPayload() implements CustomPacketPayload { + public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "gravity_gun_primary")); + public static final StreamCodec STREAM_CODEC = StreamCodec.unit(new GravityGunPrimaryPayload()); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..86065337 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityGunScrollPayload.java @@ -0,0 +1,22 @@ +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 GravityGunScrollPayload(double distanceDelta) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(new ResourceLocation(Antarchy.MODID, "gravity_gun_scroll")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.DOUBLE, + GravityGunScrollPayload::distanceDelta, + GravityGunScrollPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..eadc349a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/GravityStatePayload.java @@ -0,0 +1,52 @@ +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 new file mode 100644 index 00000000..1af45606 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleFlightTogglePayload.java @@ -0,0 +1,19 @@ +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 net.minecraft.resources.ResourceLocation; + +public record HerculesBeetleFlightTogglePayload() implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "hercules_beetle_flight_toggle")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.unit(new HerculesBeetleFlightTogglePayload()); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..96c8510b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakePayload.java @@ -0,0 +1,20 @@ +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 HerculesBeetleImpactShakePayload(int durationTicks) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "hercules_beetle_impact_shake")); + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.VAR_INT.map(HerculesBeetleImpactShakePayload::new, HerculesBeetleImpactShakePayload::durationTicks); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakeSync.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakeSync.java new file mode 100644 index 00000000..3f415f7c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakeSync.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 HerculesBeetleImpactShakeSync { + private static final BiConsumer NOOP = (player, ticks) -> { + }; + + private static volatile BiConsumer sink = NOOP; + + private HerculesBeetleImpactShakeSync() { + } + + public static void setSink(BiConsumer sink) { + HerculesBeetleImpactShakeSync.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/HerculesBeetleJumpInputPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleJumpInputPayload.java new file mode 100644 index 00000000..6386b63d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleJumpInputPayload.java @@ -0,0 +1,23 @@ +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 HerculesBeetleJumpInputPayload(boolean pressing) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "hercules_beetle_jump_input")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.BOOL, HerculesBeetleJumpInputPayload::pressing, + HerculesBeetleJumpInputPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..5dd66235 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedAttackPayload.java @@ -0,0 +1,19 @@ +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 net.minecraft.resources.ResourceLocation; + +public record HerculesBeetleMountedAttackPayload() implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "hercules_beetle_mounted_attack")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.unit(new HerculesBeetleMountedAttackPayload()); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..318f7cbb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedChargePayload.java @@ -0,0 +1,23 @@ +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 HerculesBeetleMountedChargePayload(boolean pressing) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "hercules_beetle_mounted_charge")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.BOOL, HerculesBeetleMountedChargePayload::pressing, + HerculesBeetleMountedChargePayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..1b2a2001 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HordeIntensityPayload.java @@ -0,0 +1,20 @@ +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 HordeIntensityPayload(float intensity) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "horde_intensity")); + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.FLOAT.map(HordeIntensityPayload::new, HordeIntensityPayload::intensity); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HordeIntensitySync.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HordeIntensitySync.java new file mode 100644 index 00000000..cfe66219 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/HordeIntensitySync.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 HordeIntensitySync { + private static final BiConsumer NOOP = (player, payload) -> { + }; + + private static volatile BiConsumer sink = NOOP; + + private HordeIntensitySync() { + } + + public static void setSink(BiConsumer sink) { + HordeIntensitySync.sink = sink == null ? NOOP : sink; + } + + public static void send(ServerPlayer player, float intensity) { + sink.accept(player, new HordeIntensityPayload(intensity)); + } +} 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 new file mode 100644 index 00000000..90599131 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakePayload.java @@ -0,0 +1,33 @@ +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 new file mode 100644 index 00000000..dbd437b9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakeSync.java @@ -0,0 +1,21 @@ +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 new file mode 100644 index 00000000..d876c759 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java @@ -0,0 +1,24 @@ +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, "jumpy_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/ScorpionWhipTetherPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ScorpionWhipTetherPayload.java new file mode 100644 index 00000000..651bb5ec --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ScorpionWhipTetherPayload.java @@ -0,0 +1,26 @@ +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 ScorpionWhipTetherPayload(int playerId, int targetId) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "scorpion_whip_tether")); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT, + ScorpionWhipTetherPayload::playerId, + ByteBufCodecs.VAR_INT, + ScorpionWhipTetherPayload::targetId, + ScorpionWhipTetherPayload::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 new file mode 100644 index 00000000..17330663 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ThoraxisWeatherPayload.java @@ -0,0 +1,46 @@ +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 new file mode 100644 index 00000000..ebcedf80 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java @@ -0,0 +1,24 @@ +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 TigerEyeCamouflageStatePayload(int entityId, boolean active, int blockStateId) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "tiger_eye_camouflage_state")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT, TigerEyeCamouflageStatePayload::entityId, + ByteBufCodecs.BOOL, TigerEyeCamouflageStatePayload::active, + ByteBufCodecs.VAR_INT, TigerEyeCamouflageStatePayload::blockStateId, + TigerEyeCamouflageStatePayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..6d3cae80 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java @@ -0,0 +1,19 @@ +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 net.minecraft.resources.ResourceLocation; + +public record ToggleTigerEyeCamouflagePayload() implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(new ResourceLocation(Antarchy.MODID, "toggle_tiger_eye_camouflage")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.unit(new ToggleTigerEyeCamouflagePayload()); + + @Override + public Type type() { + return TYPE; + } +} 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 new file mode 100644 index 00000000..9fc76074 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalManager.java @@ -0,0 +1,146 @@ +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; +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() { + } + + public static void handleSacrifice(LivingEntity entity) { + PermanentPortalType type = PermanentPortalType.fromSacrifice(entity); + if (type == null || !(entity.level() instanceof ServerLevel serverLevel)) { + return; + } + + PermanentPortalShape shape = findInactiveShape(serverLevel, entity.getBoundingBox(), type); + if (shape == null) { + return; + } + + activatePortal(serverLevel, type, shape, SoundEvents.END_PORTAL_SPAWN, 0.9F, 0.9F); + } + + public static boolean tryIgnitePortal(Level level, BlockPos triggerPos, PermanentPortalType type) { + PermanentPortalShape shape = PermanentPortalShape.findInactiveNear(level, triggerPos, type); + if (shape == null) { + return false; + } + + if (level instanceof ServerLevel serverLevel) { + activatePortal(serverLevel, type, shape, SoundEvents.FLINTANDSTEEL_USE, 0.9F, 1.0F); + } + 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); + } + + @Nullable + private static PermanentPortalShape findInactiveShape(ServerLevel level, AABB bounds, PermanentPortalType type) { + int minX = (int) Math.floor(bounds.minX + 0.001D) - ACTIVATION_SEARCH_RADIUS; + int minY = (int) Math.floor(bounds.minY + 0.001D) - ACTIVATION_SEARCH_RADIUS; + int minZ = (int) Math.floor(bounds.minZ + 0.001D) - ACTIVATION_SEARCH_RADIUS; + int maxX = (int) Math.floor(bounds.maxX - 0.001D) + ACTIVATION_SEARCH_RADIUS; + int maxY = (int) Math.floor(bounds.maxY - 0.001D) + ACTIVATION_SEARCH_RADIUS; + int maxZ = (int) Math.floor(bounds.maxZ - 0.001D) + ACTIVATION_SEARCH_RADIUS; + + for (int x = minX; x <= maxX; x++) { + for (int y = minY; y <= maxY; y++) { + for (int z = minZ; z <= maxZ; z++) { + BlockPos candidate = new BlockPos(x, y, z); + PermanentPortalShape xShape = PermanentPortalShape.findInactive(level, candidate, type, Direction.Axis.X); + if (xShape != null && xShape.intersects(bounds)) { + return xShape; + } + PermanentPortalShape zShape = PermanentPortalShape.findInactive(level, candidate, type, Direction.Axis.Z); + if (zShape != null && zShape.intersects(bounds)) { + return zShape; + } + } + } + } + + return null; + } + + private static void spawnActivationParticles(ServerLevel level, PermanentPortalType type, Vec3 center) { + switch (type) { + case ELYTHIA -> { + level.sendParticles(ParticleTypes.SPORE_BLOSSOM_AIR, center.x, center.y, center.z, 24, 0.8D, 1.2D, 0.8D, 0.02D); + level.sendParticles(ParticleTypes.HAPPY_VILLAGER, center.x, center.y, center.z, 12, 0.6D, 1.0D, 0.6D, 0.02D); + } + case THORAXIS -> { + level.sendParticles(ParticleTypes.PORTAL, center.x, center.y, center.z, 32, 0.8D, 1.2D, 0.8D, 0.15D); + level.sendParticles(ParticleTypes.REVERSE_PORTAL, center.x, center.y, center.z, 10, 0.5D, 0.8D, 0.5D, 0.01D); + } + case CAVARYN -> { + level.sendParticles(ParticleTypes.MYCELIUM, center.x, center.y, center.z, 24, 0.8D, 1.2D, 0.8D, 0.01D); + level.sendParticles(ParticleTypes.FALLING_SPORE_BLOSSOM, center.x, center.y, center.z, 16, 0.6D, 1.0D, 0.6D, 0.01D); + } + } + } + + private static void activatePortal(ServerLevel level, PermanentPortalType type, PermanentPortalShape shape, net.minecraft.sounds.SoundEvent sound, float volume, float pitch) { + shape.fill(level); + Vec3 center = shape.center(); + 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 new file mode 100644 index 00000000..244643da --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java @@ -0,0 +1,310 @@ +package com.craisinlord.antarchy.content.portal; + +import java.util.function.Consumer; +import java.util.function.Predicate; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.BlockGetter; +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.block.state.properties.BlockStateProperties; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +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; + private final Direction.Axis axis; + private final BlockPos bottomLeft; + private final int width; + private final int height; + + private PermanentPortalShape(TagKey frameTag, Block portalBlock, Direction.Axis axis, BlockPos bottomLeft, int width, int height) { + this.frameTag = frameTag; + this.portalBlock = portalBlock; + this.axis = axis; + this.bottomLeft = bottomLeft; + this.width = width; + this.height = height; + } + + @Nullable + public static PermanentPortalShape findInactive(BlockGetter level, BlockPos interiorPos, TagKey frameTag, Block portalBlock, Direction.Axis axis) { + return find(level, interiorPos, frameTag, portalBlock, axis, state -> state.isAir()); + } + + @Nullable + public static PermanentPortalShape findInactive(BlockGetter level, BlockPos interiorPos, PermanentPortalType type, Direction.Axis axis) { + return findInactive(level, interiorPos, type.frameTag(), type.portalBlock(), axis); + } + + @Nullable + public static PermanentPortalShape findInactiveNear(BlockGetter level, BlockPos center, TagKey frameTag, Block portalBlock) { + for (int x = center.getX() - 2; x <= center.getX() + 2; x++) { + for (int y = center.getY() - 2; y <= center.getY() + 2; y++) { + for (int z = center.getZ() - 2; z <= center.getZ() + 2; z++) { + BlockPos candidate = new BlockPos(x, y, z); + PermanentPortalShape xShape = findInactive(level, candidate, frameTag, portalBlock, Direction.Axis.X); + if (xShape != null) { + return xShape; + } + PermanentPortalShape zShape = findInactive(level, candidate, frameTag, portalBlock, Direction.Axis.Z); + if (zShape != null) { + return zShape; + } + } + } + } + return null; + } + + @Nullable + public static PermanentPortalShape findInactiveNear(BlockGetter level, BlockPos center, PermanentPortalType type) { + return findInactiveNear(level, center, type.frameTag(), type.portalBlock()); + } + + @Nullable + public static PermanentPortalShape findActive(BlockGetter level, BlockPos interiorPos, PermanentPortalType type, Direction.Axis axis) { + Block portalBlock = type.portalBlock(); + 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, + BlockPos interiorPos, + TagKey frameTag, + Block portalBlock, + Direction.Axis axis, + Predicate interiorPredicate + ) { + if (axis == Direction.Axis.Y || !interiorPredicate.test(level.getBlockState(interiorPos))) { + return null; + } + + Direction widthDirection = axis == Direction.Axis.X ? Direction.EAST : Direction.SOUTH; + Direction leftDirection = widthDirection.getOpposite(); + BlockPos cursor = interiorPos; + + for (int i = 0; i < MAX_SIZE && interiorPredicate.test(level.getBlockState(cursor.below())); i++) { + cursor = cursor.below(); + } + + for (int i = 0; i < MAX_SIZE && interiorPredicate.test(level.getBlockState(cursor.relative(leftDirection))); i++) { + cursor = cursor.relative(leftDirection); + } + + int width = measureWidth(level, cursor, widthDirection, frameTag, interiorPredicate); + if (width < MIN_WIDTH) { + return null; + } + + int height = measureHeight(level, cursor, widthDirection, width, frameTag, interiorPredicate); + if (height < MIN_HEIGHT) { + return null; + } + + return new PermanentPortalShape(frameTag, portalBlock, axis, cursor.immutable(), width, height); + } + + private static int measureWidth( + BlockGetter level, + BlockPos bottomLeft, + Direction widthDirection, + TagKey frameTag, + Predicate interiorPredicate + ) { + if (!level.getBlockState(bottomLeft.relative(widthDirection.getOpposite())).is(frameTag)) { + return 0; + } + + int width = 0; + while (width < MAX_SIZE && interiorPredicate.test(level.getBlockState(bottomLeft.relative(widthDirection, width)))) { + if (!level.getBlockState(bottomLeft.relative(widthDirection, width).below()).is(frameTag)) { + return 0; + } + width++; + } + + if (width < MIN_WIDTH || width > MAX_SIZE) { + return 0; + } + + return level.getBlockState(bottomLeft.relative(widthDirection, width)).is(frameTag) ? width : 0; + } + + private static int measureHeight( + BlockGetter level, + BlockPos bottomLeft, + Direction widthDirection, + int width, + TagKey frameTag, + Predicate interiorPredicate + ) { + BlockPos leftFrameBase = bottomLeft.relative(widthDirection.getOpposite()); + BlockPos rightFrameBase = bottomLeft.relative(widthDirection, width); + + for (int height = 0; height < MAX_SIZE; height++) { + for (int x = 0; x < width; x++) { + BlockPos interiorPos = bottomLeft.relative(widthDirection, x).above(height); + if (!interiorPredicate.test(level.getBlockState(interiorPos))) { + if (height < MIN_HEIGHT) { + return 0; + } + return hasTopFrame(level, bottomLeft, widthDirection, width, height, frameTag) ? height : 0; + } + } + + if (!level.getBlockState(leftFrameBase.above(height)).is(frameTag) + || !level.getBlockState(rightFrameBase.above(height)).is(frameTag)) { + return 0; + } + } + + return hasTopFrame(level, bottomLeft, widthDirection, width, MAX_SIZE, frameTag) ? MAX_SIZE : 0; + } + + private static boolean hasTopFrame( + BlockGetter level, + BlockPos bottomLeft, + Direction widthDirection, + int width, + int topY, + TagKey frameTag + ) { + for (int x = 0; x < width; x++) { + if (!level.getBlockState(bottomLeft.relative(widthDirection, x).above(topY)).is(frameTag)) { + return false; + } + } + return true; + } + + public void fill(ServerLevel level) { + BlockState portalState = this.portalBlock.defaultBlockState().setValue(BlockStateProperties.HORIZONTAL_AXIS, this.axis); + this.forEachInterior(pos -> level.setBlock(pos, portalState, Block.UPDATE_ALL)); + } + + @Nullable + public static PermanentPortalShape create(ServerLevel level, BlockPos bottomLeft, PermanentPortalType type, Direction.Axis axis) { + if (axis == Direction.Axis.Y || !canCreate(level, bottomLeft, type, axis)) { + return null; + } + + BlockState frameState = type.platformBlock().defaultBlockState(); + BlockState portalState = type.portalBlock().defaultBlockState().setValue(BlockStateProperties.HORIZONTAL_AXIS, axis); + Direction widthDirection = axis == Direction.Axis.X ? Direction.EAST : Direction.SOUTH; + + 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 { + level.setBlock(pos, portalState, Block.UPDATE_ALL); + } + } + } + + return new PermanentPortalShape(type.frameTag(), type.portalBlock(), axis, bottomLeft.immutable(), 2, 3); + } + + private static boolean canCreate(BlockGetter level, BlockPos bottomLeft, PermanentPortalType type, Direction.Axis axis) { + Direction widthDirection = axis == Direction.Axis.X ? Direction.EAST : Direction.SOUTH; + Block frameBlock = type.platformBlock(); + for (int y = -1; y <= 3; y++) { + for (int x = -1; x <= 2; x++) { + 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; + } + } else if (!state.isAir() && !state.canBeReplaced() && !state.is(Blocks.AIR)) { + return false; + } + } + } + return true; + } + + public boolean contains(BlockPos pos) { + if (pos.getY() < this.bottomLeft.getY() || pos.getY() >= this.bottomLeft.getY() + this.height) { + return false; + } + + if (this.axis == Direction.Axis.X) { + return pos.getZ() == this.bottomLeft.getZ() + && pos.getX() >= this.bottomLeft.getX() + && pos.getX() < this.bottomLeft.getX() + this.width; + } + + return pos.getX() == this.bottomLeft.getX() + && pos.getZ() >= this.bottomLeft.getZ() + && pos.getZ() < this.bottomLeft.getZ() + this.width; + } + + public boolean intersects(AABB box) { + final boolean[] intersects = {false}; + this.forEachInterior(pos -> { + if (box.intersects(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1.0D, pos.getY() + 1.0D, pos.getZ() + 1.0D)) { + intersects[0] = true; + } + }); + return intersects[0]; + } + + public void forEachInterior(Consumer consumer) { + Direction widthDirection = this.axis == Direction.Axis.X ? Direction.EAST : Direction.SOUTH; + for (int y = 0; y < this.height; y++) { + for (int x = 0; x < this.width; x++) { + consumer.accept(this.bottomLeft.relative(widthDirection, x).above(y)); + } + } + } + + public Vec3 center() { + if (this.axis == Direction.Axis.X) { + return new Vec3(this.bottomLeft.getX() + (this.width / 2.0D), this.bottomLeft.getY() + (this.height / 2.0D), this.bottomLeft.getZ() + 0.5D); + } + return new Vec3(this.bottomLeft.getX() + 0.5D, this.bottomLeft.getY() + (this.height / 2.0D), this.bottomLeft.getZ() + (this.width / 2.0D)); + } +} 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 new file mode 100644 index 00000000..8fdf23e2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalTeleporter.java @@ -0,0 +1,323 @@ +package com.craisinlord.antarchy.content.portal; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.LinkedHashSet; +import java.util.Set; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.vehicle.DismountHelper; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +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 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 PermanentPortalTeleporter() { + } + + public record Transition(ServerLevel newLevel, Vec3 pos, float yRot, float xRot) { + } + + public static void teleport(Entity entity, PermanentPortalType type) { + if (!(entity.level() instanceof ServerLevel sourceLevel) || !entity.isAlive()) { + return; + } + + Transition transition = createTransition(sourceLevel, entity, entity.blockPosition(), type); + Entity movedEntity = moveEntity(entity, transition); + if (movedEntity != null) { + movedEntity.setPortalCooldown(); + } + } + + 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()); + } + + Vec3 arrival = findArrivalPosition(entity, destination, portalPos, type); + return new Transition(destination, arrival, entity.getYRot(), entity.getXRot()); + } + + @Nullable + private static ServerLevel resolveDestination(ServerLevel sourceLevel, PermanentPortalType type) { + if (sourceLevel.dimension() == type.primaryDimension()) { + return sourceLevel.getServer().overworld(); + } + 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(); + } + + Vec3 safe = findSafeArrivalPosition(entity, destination, preferredPos); + 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(); + } + 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); + if (yRange != null) { + return findSafeArrivalPositionInYRange(entity, destination, preferredPos, yRange[0], yRange[1]); + } + + Set candidates = new LinkedHashSet<>(); + addCandidate(candidates, preferredPos); + + for (int radius = 0; radius <= 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; + } + + BlockPos horizontalPos = preferredPos.offset(xOff, 0, zOff); + addCandidate(candidates, destination.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, horizontalPos)); + 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)); + } + } + } + } + } + + for (BlockPos candidate : candidates) { + Vec3 safe = tryFindSafePosition(entity, destination, candidate); + if (safe != null) { + return safe; + } + } + + return null; + } + + @Nullable + private static Vec3 findSafeArrivalPositionInYRange(Entity entity, ServerLevel destination, BlockPos preferredPos, int minY, int maxY) { + for (int radius = 0; radius <= 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 = preferredPos.getX() + xOff; + int z = preferredPos.getZ() + zOff; + for (int y = maxY; y >= minY + 1; y--) { + Vec3 safePos = tryFindSafePosition(entity, destination, new BlockPos(x, y, z)); + if (safePos != null && safePos.y >= minY && safePos.y <= maxY) { + return safePos; + } + } + } + } + } + return null; + } + + private static void addCandidate(Set candidates, @Nullable BlockPos pos) { + if (pos == null) { + return; + } + + candidates.add(pos); + candidates.add(pos.above()); + if (pos.getY() > Integer.MIN_VALUE) { + candidates.add(pos.below()); + } + } + + @Nullable + private static Vec3 tryFindSafePosition(Entity entity, ServerLevel destination, BlockPos candidate) { + Vec3 safe = DismountHelper.findSafeDismountLocation(entity.getType(), destination, candidate, true); + if (safe != null && isValidArrivalPosition(destination, safe)) { + return safe; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + safe = DismountHelper.findSafeDismountLocation(entity.getType(), destination, candidate.relative(direction), true); + if (safe != null && isValidArrivalPosition(destination, safe)) { + return safe; + } + } + + return null; + } + + private static Vec3 createFallbackPortal(ServerLevel destination, BlockPos preferredPos, PermanentPortalType type) { + int minY = destination.getMinBuildHeight() + 2; + int maxY = destination.getMaxBuildHeight() - 4; + BlockPos center = new BlockPos(preferredPos.getX(), Mth.clamp(preferredPos.getY(), minY, maxY), preferredPos.getZ()); + BlockState platformState = type.platformBlock().defaultBlockState(); + + for (int dx = -2; dx <= 2; dx++) { + for (int dz = -2; dz <= 2; dz++) { + destination.setBlock(center.offset(dx, -1, dz), platformState, Block.UPDATE_ALL); + for (int dy = 0; dy <= 4; dy++) { + destination.removeBlock(center.offset(dx, dy, dz), false); + } + } + } + + PermanentPortalShape xShape = PermanentPortalShape.create(destination, center, type, Direction.Axis.X); + if (xShape != null) { + return xShape.center(); + } + + PermanentPortalShape zShape = PermanentPortalShape.create(destination, center, type, Direction.Axis.Z); + if (zShape != null) { + return zShape.center(); + } + + return Vec3.atBottomCenterOf(center); + } + + @Nullable + private static PermanentPortalShape createReturnPortal(ServerLevel destination, Vec3 safePos, PermanentPortalType type) { + BlockPos preferred = BlockPos.containing(safePos); + int minY = destination.getMinBuildHeight() + 2; + int maxY = destination.getMaxBuildHeight() - 4; + int startY = Mth.clamp(preferred.getY(), minY, maxY); + + for (int yOff = 0; yOff <= 6; yOff++) { + for (int y : new int[]{startY + yOff, startY - yOff}) { + if (y < minY || y > maxY) { + continue; + } + + for (int radius = 0; radius <= 4; 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; + } + + BlockPos anchor = new BlockPos(preferred.getX() + xOff, y, preferred.getZ() + zOff); + PermanentPortalShape xShape = PermanentPortalShape.create(destination, anchor, type, Direction.Axis.X); + if (xShape != null) { + return xShape; + } + PermanentPortalShape zShape = PermanentPortalShape.create(destination, anchor, type, Direction.Axis.Z); + if (zShape != null) { + return zShape; + } + } + } + } + } + } + + return null; + } + + @Nullable + private static int[] getDimensionYRange(ServerLevel destination) { + ResourceKey dim = destination.dimension(); + if (dim == AntarchySettings.termiteDestinationDimension()) { + return new int[]{100, 200}; + } + if (dim == AntarchySettings.brownAntDestinationDimension()) { + return new int[]{75, 120}; + } + return null; + } + + private static boolean isValidArrivalPosition(ServerLevel destination, Vec3 safePos) { + BlockPos standPos = BlockPos.containing(safePos); + if (destination.dimension() == AntarchySettings.termiteDestinationDimension() + || destination.dimension() == AntarchySettings.redAntDestinationDimension()) { + return !destination.getBlockState(standPos.below()).is(net.minecraft.world.level.block.Blocks.BEDROCK); + } + return true; + } + + @Nullable + private static Entity moveEntity(Entity entity, Transition transition) { + ServerLevel destination = transition.newLevel(); + Vec3 destinationPos = transition.pos(); + if (entity instanceof ServerPlayer player) { + player.teleportTo(destination, destinationPos.x, destinationPos.y, destinationPos.z, transition.yRot(), transition.xRot()); + return player; + } + + if (entity.level() == destination) { + entity.teleportTo(destinationPos.x, destinationPos.y, destinationPos.z); + return entity; + } + + return moveEntityToDimension(entity, destination, destinationPos, transition.yRot(), transition.xRot()); + } + + @Nullable + private static Entity moveEntityToDimension(Entity entity, ServerLevel destination, Vec3 pos, float yRot, float xRot) { + entity.unRide(); + Entity moved = entity.getType().create(destination); + if (moved == null) { + return null; + } + + moved.restoreFrom(entity); + moved.moveTo(pos.x, pos.y, pos.z, yRot, xRot); + moved.setDeltaMovement(Vec3.ZERO); + entity.discard(); + destination.addDuringTeleport(moved); + return moved; + } +} 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 new file mode 100644 index 00000000..3737126f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalType.java @@ -0,0 +1,111 @@ +package com.craisinlord.antarchy.content.portal; + +import com.craisinlord.antarchy.content.AntarchyTags; +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 java.util.Objects; +import java.util.function.Supplier; +import net.minecraft.resources.ResourceKey; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import org.jetbrains.annotations.Nullable; + +public enum PermanentPortalType { + ELYTHIA("elythia", AntarchySettings::brownAntDestinationDimension, AntarchySettings::elythiaPortalEnabled, AntarchyTags.Blocks.ELYTHIA_PORTAL_FRAMES) { + @Override + boolean matchesSacrifice(LivingEntity entity) { + return entity instanceof BrownAntEntity; + } + }, + THORAXIS("thoraxis", AntarchySettings::redAntDestinationDimension, AntarchySettings::thoraxisPortalEnabled, AntarchyTags.Blocks.THORAXIS_PORTAL_FRAMES) { + @Override + boolean matchesSacrifice(LivingEntity entity) { + return entity instanceof RedAntEntity; + } + }, + CAVARYN("cavaryn", AntarchySettings::termiteDestinationDimension, AntarchySettings::cavarynPortalEnabled, AntarchyTags.Blocks.CAVARYN_PORTAL_FRAMES) { + @Override + boolean matchesSacrifice(LivingEntity entity) { + return entity instanceof TermiteEntity; + } + }; + + private final String id; + private final Supplier> primaryDimensionSupplier; + private final Supplier enabledSupplier; + private final TagKey frameTag; + private Supplier platformBlockSupplier; + private Supplier portalBlockSupplier; + + PermanentPortalType(String id, Supplier> primaryDimensionSupplier, Supplier enabledSupplier, TagKey frameTag) { + this.id = id; + this.primaryDimensionSupplier = primaryDimensionSupplier; + this.enabledSupplier = enabledSupplier; + this.frameTag = frameTag; + } + + public static void bindBlocks( + Supplier elythiaPlatform, + Supplier elythiaPortal, + Supplier thoraxisPlatform, + Supplier thoraxisPortal, + Supplier cavarynPlatform, + Supplier cavarynPortal + ) { + ELYTHIA.bind(elythiaPlatform, elythiaPortal); + THORAXIS.bind(thoraxisPlatform, thoraxisPortal); + CAVARYN.bind(cavarynPlatform, cavarynPortal); + } + + public static boolean portalsEnabled() { + return AntarchySettings.permanentPortalsEnabled(); + } + + @Nullable + public static PermanentPortalType fromSacrifice(LivingEntity entity) { + if (!portalsEnabled()) { + return null; + } + for (PermanentPortalType type : values()) { + if (type.isEnabled() && type.matchesSacrifice(entity)) { + return type; + } + } + return null; + } + + private void bind(Supplier platformBlockSupplier, Supplier portalBlockSupplier) { + this.platformBlockSupplier = Objects.requireNonNull(platformBlockSupplier); + this.portalBlockSupplier = Objects.requireNonNull(portalBlockSupplier); + } + + public String id() { + return this.id; + } + + public boolean isEnabled() { + return portalsEnabled() && this.enabledSupplier.get(); + } + + public ResourceKey primaryDimension() { + return this.primaryDimensionSupplier.get(); + } + + public TagKey frameTag() { + return this.frameTag; + } + + public Block platformBlock() { + return Objects.requireNonNull(this.platformBlockSupplier, "Platform block supplier not bound for " + this.id).get(); + } + + public Block portalBlock() { + return Objects.requireNonNull(this.portalBlockSupplier, "Portal block supplier not bound for " + this.id).get(); + } + + abstract boolean matchesSacrifice(LivingEntity entity); +} 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 new file mode 100644 index 00000000..ff83f8d7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/portal/RainbowPortalIgniter.java @@ -0,0 +1,90 @@ +package com.craisinlord.antarchy.content.portal; + +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.level.block.Blocks; +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; + + private RainbowPortalIgniter() { + } + + public static boolean tryIgnite(ServerLevel level, AABB deathBounds, ResourceLocation dimensionId) { + PermanentPortalShape shape = findInactiveShape(level, deathBounds); + if (shape == null) { + return false; + } + + shape.fill(level); + BlockPos anyInteriorPos = firstInteriorPos(shape); + if (anyInteriorPos == null) { + return false; + } + + boolean created = InfinityCompat.get().createPhysicalPortal(level, anyInteriorPos, dimensionId); + if (!created) { + return false; + } + + Vec3 center = shape.center(); + level.playSound(null, center.x, center.y, center.z, SoundEvents.END_PORTAL_SPAWN, SoundSource.BLOCKS, 0.9F, 0.9F); + return true; + } + + @Nullable + private static PermanentPortalShape findInactiveShape(ServerLevel level, AABB bounds) { + int minX = (int) Math.floor(bounds.minX + 0.001D) - SEARCH_RADIUS; + int minY = (int) Math.floor(bounds.minY + 0.001D) - SEARCH_RADIUS; + int minZ = (int) Math.floor(bounds.minZ + 0.001D) - SEARCH_RADIUS; + int maxX = (int) Math.floor(bounds.maxX - 0.001D) + SEARCH_RADIUS; + int maxY = (int) Math.floor(bounds.maxY - 0.001D) + SEARCH_RADIUS; + int maxZ = (int) Math.floor(bounds.maxZ - 0.001D) + SEARCH_RADIUS; + + for (int x = minX; x <= maxX; x++) { + for (int y = minY; y <= maxY; y++) { + for (int z = minZ; z <= maxZ; z++) { + BlockPos candidate = new BlockPos(x, y, z); + PermanentPortalShape xShape = PermanentPortalShape.findInactive( + level, candidate, AntarchyTags.Blocks.RAINBOW_PORTAL_FRAMES, Blocks.NETHER_PORTAL, Direction.Axis.X); + if (xShape != null && xShape.intersects(bounds)) { + return xShape; + } + PermanentPortalShape zShape = PermanentPortalShape.findInactive( + level, candidate, AntarchyTags.Blocks.RAINBOW_PORTAL_FRAMES, Blocks.NETHER_PORTAL, Direction.Axis.Z); + if (zShape != null && zShape.intersects(bounds)) { + return zShape; + } + } + } + } + + return null; + } + + @Nullable + private static BlockPos firstInteriorPos(PermanentPortalShape shape) { + BlockPos[] holder = new BlockPos[1]; + shape.forEachInterior(pos -> { + if (holder[0] == null) { + holder[0] = pos; + } + }); + return holder[0]; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/recipe/AmericanizeRecipe.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/recipe/AmericanizeRecipe.java new file mode 100644 index 00000000..10c7d173 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/recipe/AmericanizeRecipe.java @@ -0,0 +1,115 @@ +package com.craisinlord.antarchy.content.recipe; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Unit; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; +import net.minecraft.world.item.crafting.CustomRecipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; +import net.minecraft.world.level.Level; + +public class AmericanizeRecipe extends CustomRecipe { + private static final ResourceLocation HIGH_FRUCTOSE_CORN_SYRUP_ID = new ResourceLocation("antarchy", "high_fructose_corn_syrup"); + + public static final RecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>(AmericanizeRecipe::new); + + public AmericanizeRecipe(ResourceLocation id, CraftingBookCategory category) { + super(id, category); + } + + @Override + public boolean matches(CraftingContainer input, Level level) { + return findFood(input) != null; + } + + @Override + public ItemStack assemble(CraftingContainer input, RegistryAccess registries) { + ItemStack food = findFood(input); + if (food == null) { + return ItemStack.EMPTY; + } + + ItemStack result = food.copyWithCount(1); + AntarchyObjects.AMERICAN_COMPONENT.set(result, Unit.INSTANCE); + return result; + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return width * height >= 2; + } + + @Override + public NonNullList getRemainingItems(CraftingContainer input) { + NonNullList remaining = NonNullList.withSize(input.getContainerSize(), ItemStack.EMPTY); + for (int i = 0; i < input.getContainerSize(); i++) { + if (isHighFructoseCornSyrup(input.getItem(i))) { + remaining.set(i, new ItemStack(Items.GLASS_BOTTLE)); + } + } + return remaining; + } + + @Override + public RecipeSerializer getSerializer() { + return SERIALIZER; + } + + private static ItemStack findFood(CraftingContainer input) { + ItemStack food = ItemStack.EMPTY; + ItemStack hfcs = ItemStack.EMPTY; + for (int i = 0; i < input.getContainerSize(); i++) { + ItemStack stack = input.getItem(i); + if (stack.isEmpty()) { + continue; + } + + if (isHighFructoseCornSyrup(stack)) { + if (!hfcs.isEmpty()) { + return null; + } + hfcs = stack; + } else { + if (!food.isEmpty()) { + return null; + } + food = stack; + } + } + + if (food.isEmpty() || hfcs.isEmpty() || !isEligibleFood(food)) { + return null; + } + + return food; + } + + public static boolean isEligibleFood(ItemStack stack) { + if (!AntarchySettings.americanizingEnabled()) { + return false; + } + if (stack.isEmpty() || isHighFructoseCornSyrup(stack)) { + return false; + } + if (AntarchyObjects.AMERICAN_COMPONENT.has(stack)) { + return false; + } + if (stack.is(AntarchyTags.Items.HFCS_CANNOT_AMERICANIZE)) { + return false; + } + return stack.getItem().isEdible(); + } + + public static boolean isHighFructoseCornSyrup(ItemStack stack) { + return !stack.isEmpty() && stack.is(BuiltInRegistries.ITEM.get(HIGH_FRUCTOSE_CORN_SYRUP_ID)); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/recipe/CustomBrewingRecipes.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/recipe/CustomBrewingRecipes.java new file mode 100644 index 00000000..2ecc1935 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/recipe/CustomBrewingRecipes.java @@ -0,0 +1,130 @@ +package com.craisinlord.antarchy.content.recipe; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; +import com.craisinlord.antarchy.content.item.GlimmerBottleItem; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.alchemy.PotionUtils; +import net.minecraft.world.item.alchemy.Potions; + +public final class CustomBrewingRecipes { + private static final ResourceLocation CORN_ID = new ResourceLocation("antarchy", "corn"); + private static final ResourceLocation HIGH_FRUCTOSE_CORN_SYRUP_ID = new ResourceLocation("antarchy", "high_fructose_corn_syrup"); + private static final ResourceLocation ROOT_BEER_ID = new ResourceLocation("antarchy", "root_beer"); + private static final TagKey ROOTS = TagKey.create(net.minecraft.core.registries.Registries.ITEM, new ResourceLocation("antarchy", "roots")); + + private CustomBrewingRecipes() { + } + + public static boolean hasMix(ItemStack input, ItemStack ingredient) { + return !getOutput(input, ingredient).isEmpty(); + } + + public static boolean isCustomIngredient(ItemStack stack) { + return stack.is(cornItem()) + || stack.is(ROOTS) + || stack.is(AntarchyTags.Items.GLIMMER_AUGMENT_APPLE_COW) + || stack.is(AntarchyTags.Items.GLIMMER_AUGMENT_OURANWOOD_DEER) + || stack.is(AntarchyTags.Items.GLIMMER_AUGMENT_FROG) + || stack.is(AntarchyTags.Items.GLIMMER_AUGMENT_ANT) + || stack.is(AntarchyTags.Items.GLIMMER_AUGMENT_ELKA); + } + + public static boolean isCustomContainer(ItemStack stack) { + return stack.is(highFructoseCornSyrupItem()) || stack.is(AntarchyObjects.GLIMMER_BOTTLE.get()); + } + + public static ItemStack getOutput(ItemStack input, ItemStack ingredient) { + if (input.isEmpty() || ingredient.isEmpty()) { + return ItemStack.EMPTY; + } + + if (matchesCornToSyrup(input, ingredient) || matchesCornToSyrup(ingredient, input)) { + return new ItemStack(highFructoseCornSyrupItem()); + } + + if (matchesSyrupToRootBeer(input, ingredient) || matchesSyrupToRootBeer(ingredient, input)) { + return new ItemStack(rootBeerItem()); + } + + ItemStack glimmerAugment = getGlimmerAugmentOutput(input, ingredient); + if (!glimmerAugment.isEmpty()) { + return glimmerAugment; + } + + return ItemStack.EMPTY; + } + + private static ItemStack getGlimmerAugmentOutput(ItemStack input, ItemStack ingredient) { + if (!input.is(AntarchyObjects.GLIMMER_BOTTLE.get())) { + return ItemStack.EMPTY; + } + + GlimmerVariant target = glimmerAugmentTarget(ingredient); + if (target == null || target == GlimmerBottleItem.getVariant(input)) { + return ItemStack.EMPTY; + } + + return GlimmerBottleItem.create(target); + } + + private static GlimmerVariant glimmerAugmentTarget(ItemStack ingredient) { + if (ingredient.is(AntarchyTags.Items.GLIMMER_AUGMENT_APPLE_COW)) { + return GlimmerVariant.APPLE_COW; + } + if (ingredient.is(AntarchyTags.Items.GLIMMER_AUGMENT_OURANWOOD_DEER)) { + return GlimmerVariant.OURANWOOD_DEER; + } + if (ingredient.is(AntarchyTags.Items.GLIMMER_AUGMENT_FROG)) { + return GlimmerVariant.FROG; + } + if (ingredient.is(AntarchyTags.Items.GLIMMER_AUGMENT_ANT)) { + return GlimmerVariant.ANT; + } + if (ingredient.is(AntarchyTags.Items.GLIMMER_AUGMENT_ELKA)) { + return GlimmerVariant.ELKA; + } + return null; + } + + private static boolean matchesCornToSyrup(ItemStack base, ItemStack ingredient) { + return isWaterBottle(base) && ingredient.is(cornItem()); + } + + private static boolean matchesSyrupToRootBeer(ItemStack base, ItemStack ingredient) { + return base.is(highFructoseCornSyrupItem()) && ingredient.is(ROOTS); + } + + private static boolean isWaterBottle(ItemStack stack) { + if (!stack.is(Items.POTION)) { + return false; + } + return PotionUtils.getPotion(stack) == Potions.WATER; + } + + public static Item cornItem() { + return BuiltInRegistries.ITEM.get(CORN_ID); + } + + public static Item highFructoseCornSyrupItem() { + return BuiltInRegistries.ITEM.get(HIGH_FRUCTOSE_CORN_SYRUP_ID); + } + + public static Item rootBeerItem() { + return BuiltInRegistries.ITEM.get(ROOT_BEER_ID); + } + + public static TagKey rootsTag() { + return ROOTS; + } + + public static ItemStack waterBottleStack() { + return PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageAccess.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageAccess.java new file mode 100644 index 00000000..c1b014b9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageAccess.java @@ -0,0 +1,11 @@ +package com.craisinlord.antarchy.content.tigereye; + +public interface TigerEyeCamouflageAccess { + boolean antarchy$isTigerEyeCamouflageActive(); + + void antarchy$setTigerEyeCamouflageActive(boolean active); + + int antarchy$getTigerEyeCamouflageBlockStateId(); + + void antarchy$setTigerEyeCamouflageBlockStateId(int blockStateId); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageController.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageController.java new file mode 100644 index 00000000..0d474c16 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageController.java @@ -0,0 +1,101 @@ +package com.craisinlord.antarchy.content.tigereye; + +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.BlockParticleOption; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; + +public final class TigerEyeCamouflageController { + public enum ToggleResult { + ACTIVATED, + DEACTIVATED, + FULL_SET_REQUIRED, + INVALID_BLOCK, + NO_CHANGE + } + + private TigerEyeCamouflageController() { + } + + public static ToggleResult toggle(ServerPlayer player) { + if (!(player instanceof TigerEyeCamouflageAccess access)) { + return ToggleResult.NO_CHANGE; + } + + if (access.antarchy$isTigerEyeCamouflageActive()) { + deactivate(player, true); + return ToggleResult.DEACTIVATED; + } + + if (!TigerEyeArmorUtil.mayActivateAdaptiveCamouflage(player)) { + return ToggleResult.FULL_SET_REQUIRED; + } + + BlockPos samplePos = TigerEyeArmorUtil.getCamouflageSamplePos(player); + BlockState state = player.level().getBlockState(samplePos); + if (!TigerEyeArmorUtil.isValidCamouflageBlock(state)) { + return ToggleResult.INVALID_BLOCK; + } + + access.antarchy$setTigerEyeCamouflageBlockStateId(Block.getId(state)); + access.antarchy$setTigerEyeCamouflageActive(true); + spawnEffects(player, state, true); + return ToggleResult.ACTIVATED; + } + + public static boolean validateOrDeactivate(ServerPlayer player) { + if (!(player instanceof TigerEyeCamouflageAccess access) || !access.antarchy$isTigerEyeCamouflageActive()) { + return false; + } + if (TigerEyeArmorUtil.hasFullSet(player)) { + return false; + } + deactivate(player, true); + return true; + } + + public static void deactivate(ServerPlayer player, boolean spawnEffects) { + if (!(player instanceof TigerEyeCamouflageAccess access)) { + return; + } + boolean wasActive = access.antarchy$isTigerEyeCamouflageActive(); + int blockStateId = access.antarchy$getTigerEyeCamouflageBlockStateId(); + access.antarchy$setTigerEyeCamouflageActive(false); + access.antarchy$setTigerEyeCamouflageBlockStateId(0); + if (spawnEffects && wasActive) { + spawnEffects(player, Block.stateById(blockStateId), false); + } + } + + private static void spawnEffects(ServerPlayer player, BlockState state, boolean activate) { + if (!(player.level() instanceof ServerLevel serverLevel)) { + return; + } + int count = activate ? 18 : 8; + serverLevel.sendParticles( + new BlockParticleOption(ParticleTypes.BLOCK, state), + player.getX(), + player.getY() + 1.0D, + player.getZ(), + count, + 0.35D, + 0.6D, + 0.35D, + 0.03D + ); + serverLevel.playSound( + null, + player.blockPosition(), + activate ? SoundEvents.AMETHYST_BLOCK_CHIME : SoundEvents.AMETHYST_BLOCK_HIT, + SoundSource.PLAYERS, + 0.8F, + activate ? 0.9F : 0.7F + ); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageSync.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageSync.java new file mode 100644 index 00000000..2d20353b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageSync.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content.tigereye; + +import com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import net.minecraft.server.level.ServerPlayer; + +public final class TigerEyeCamouflageSync { + private static BiConsumer sendToPlayer = (player, payload) -> {}; + private static Consumer syncSelfAndTracking = player -> {}; + + private TigerEyeCamouflageSync() { + } + + public static void setSendToPlayer(BiConsumer sender) { + sendToPlayer = sender; + } + + public static void setSyncSelfAndTracking(Consumer syncer) { + syncSelfAndTracking = syncer; + } + + public static void sync(ServerPlayer player) { + syncSelfAndTracking.accept(player); + } + + public static void syncTo(ServerPlayer viewer, ServerPlayer target) { + sendToPlayer.accept(viewer, payload(target)); + } + + public static TigerEyeCamouflageStatePayload payload(ServerPlayer player) { + if (player instanceof TigerEyeCamouflageAccess access) { + return new TigerEyeCamouflageStatePayload( + player.getId(), + access.antarchy$isTigerEyeCamouflageActive(), + access.antarchy$getTigerEyeCamouflageBlockStateId() + ); + } + return new TigerEyeCamouflageStatePayload(player.getId(), false, 0); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/util/AttributeRangeInit.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/util/AttributeRangeInit.java new file mode 100644 index 00000000..70e16a0f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/util/AttributeRangeInit.java @@ -0,0 +1,34 @@ +package com.craisinlord.antarchy.content.util; + +import com.craisinlord.antarchy.mixins.AccessorRangedAttribute; +import com.google.common.collect.ImmutableSet; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.RangedAttribute; + +import java.util.Set; + +public class AttributeRangeInit { + + private static final double MAX = 11_000_000D; + + private static final Set TARGETS = ImmutableSet.of( + new ResourceLocation("minecraft", "generic.max_health"), + new ResourceLocation("minecraft", "generic.armor"), + new ResourceLocation("minecraft", "generic.armor_toughness"), + new ResourceLocation("minecraft", "generic.attack_damage"), + new ResourceLocation("minecraft", "generic.attack_knockback") + ); + + public static void apply() { + for (ResourceLocation id : TARGETS) { + Attribute attribute = BuiltInRegistries.ATTRIBUTE.get(id); + if (attribute instanceof RangedAttribute ranged && ranged instanceof AccessorRangedAttribute accessor) { + if (ranged.getMaxValue() < MAX) { + accessor.antarchyAttributefix$setMaxValue(MAX); + } + } + } + } +} 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 new file mode 100644 index 00000000..073f5f59 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherKind.java @@ -0,0 +1,43 @@ +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 new file mode 100644 index 00000000..2f254a93 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherManager.java @@ -0,0 +1,304 @@ +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 new file mode 100644 index 00000000..69413172 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherSnapshot.java @@ -0,0 +1,15 @@ +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/ants/BaseAntNestFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/BaseAntNestFeature.java new file mode 100644 index 00000000..78d951d0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/BaseAntNestFeature.java @@ -0,0 +1,63 @@ +package com.craisinlord.antarchy.content.worldgen.ants; + +import com.craisinlord.antarchy.content.block.AntNestBlock; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +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.SimpleBlockConfiguration; + +public abstract class BaseAntNestFeature extends Feature { + protected BaseAntNestFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos nestPos = this.resolveNestPos(level, context.origin()); + BlockPos aboveNestPos = nestPos.above(); + BlockPos supportPos = nestPos.below(); + BlockState nestGroundState = level.getBlockState(nestPos); + BlockState supportState = level.getBlockState(supportPos); + + if (!level.getBlockState(aboveNestPos).canBeReplaced()) { + return false; + } + + if (!this.isValidNestGround(nestGroundState) || !nestGroundState.getFluidState().isEmpty()) { + return false; + } + + if (!supportState.isFaceSturdy(level, supportPos, Direction.UP) || !supportState.getFluidState().isEmpty()) { + return false; + } + + BlockState nestState = context.config().toPlace().getState(context.random(), nestPos); + if (nestState.hasProperty(AntNestBlock.FACING)) { + nestState = nestState.setValue(AntNestBlock.FACING, Direction.Plane.HORIZONTAL.getRandomDirection(context.random())); + } + + if (!nestState.canSurvive(level, nestPos)) { + return false; + } + + level.setBlock(nestPos, nestState, 2); + this.decorateAroundNest(level, nestPos, context.random()); + return true; + } + + protected BlockPos resolveNestPos(WorldGenLevel level, BlockPos origin) { + int y = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()) - 1; + return new BlockPos(origin.getX(), y, origin.getZ()); + } + + protected abstract boolean isValidNestGround(BlockState nestGroundState); + + protected abstract void decorateAroundNest(WorldGenLevel level, BlockPos center, RandomSource random); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/BrownAntNestFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/BrownAntNestFeature.java new file mode 100644 index 00000000..75861a28 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/BrownAntNestFeature.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.content.worldgen.ants; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +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.feature.configurations.SimpleBlockConfiguration; + +public class BrownAntNestFeature extends SurfaceAntNestFeature { + public BrownAntNestFeature(Codec codec) { + super(codec); + } + + @Override + protected boolean isValidNestGround(BlockState nestGroundState) { + return nestGroundState.is(BlockTags.DIRT) + || nestGroundState.is(Blocks.GRASS_BLOCK) + || nestGroundState.is(Blocks.MOSS_BLOCK) + || nestGroundState.is(Blocks.COARSE_DIRT); + } + + @Override + protected void decorateAroundNest(WorldGenLevel level, BlockPos center, RandomSource random) { + for (int xOffset = -1; xOffset <= 1; xOffset++) { + for (int zOffset = -1; zOffset <= 1; zOffset++) { + if (xOffset == 0 && zOffset == 0) { + continue; + } + + if (Math.abs(xOffset) == 1 && Math.abs(zOffset) == 1 && random.nextBoolean()) { + continue; + } + + BlockPos targetPos = center.offset(xOffset, 0, zOffset); + BlockState targetState = level.getBlockState(targetPos); + if (targetState.is(BlockTags.DIRT) || targetState.is(Blocks.GRASS_BLOCK) || targetState.is(Blocks.MOSS_BLOCK)) { + level.setBlock(targetPos, Blocks.COARSE_DIRT.defaultBlockState(), 2); + } + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/RainbowAntNestFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/RainbowAntNestFeature.java new file mode 100644 index 00000000..82ddf280 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/RainbowAntNestFeature.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.content.worldgen.ants; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +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.feature.configurations.SimpleBlockConfiguration; + +public class RainbowAntNestFeature extends SurfaceAntNestFeature { + public RainbowAntNestFeature(Codec codec) { + super(codec); + } + + @Override + protected boolean isValidNestGround(BlockState nestGroundState) { + return nestGroundState.is(BlockTags.DIRT) + || nestGroundState.is(Blocks.GRASS_BLOCK) + || nestGroundState.is(Blocks.MOSS_BLOCK) + || nestGroundState.is(Blocks.COARSE_DIRT); + } + + @Override + protected void decorateAroundNest(WorldGenLevel level, BlockPos center, RandomSource random) { + for (int xOffset = -1; xOffset <= 1; xOffset++) { + for (int zOffset = -1; zOffset <= 1; zOffset++) { + if (xOffset == 0 && zOffset == 0) { + continue; + } + + if (Math.abs(xOffset) == 1 && Math.abs(zOffset) == 1 && random.nextBoolean()) { + continue; + } + + BlockPos targetPos = center.offset(xOffset, 0, zOffset); + BlockState targetState = level.getBlockState(targetPos); + if (targetState.is(BlockTags.DIRT) || targetState.is(Blocks.GRASS_BLOCK) || targetState.is(Blocks.MOSS_BLOCK)) { + level.setBlock(targetPos, Blocks.COARSE_DIRT.defaultBlockState(), 2); + } + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/RedAntNestFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/RedAntNestFeature.java new file mode 100644 index 00000000..fda5f229 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/RedAntNestFeature.java @@ -0,0 +1,79 @@ +package com.craisinlord.antarchy.content.worldgen.ants; + +import com.craisinlord.antarchy.content.AntarchyObjects; +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.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; + +public class RedAntNestFeature extends BaseAntNestFeature { + public RedAntNestFeature(Codec codec) { + super(codec); + } + + @Override + protected BlockPos resolveNestPos(WorldGenLevel level, BlockPos origin) { + int startY = level.getHeight(net.minecraft.world.level.levelgen.Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, origin.getX(), origin.getZ()) - 1; + int minY = level.getMinBuildHeight() + 1; + + for (int y = startY; y >= minY; y--) { + BlockPos candidate = new BlockPos(origin.getX(), y, origin.getZ()); + BlockState surfaceState = level.getBlockState(candidate); + BlockState aboveState = level.getBlockState(candidate.above()); + BlockState supportState = level.getBlockState(candidate.below()); + + if (surfaceState.getFluidState().isEmpty() + && this.isValidNestGround(surfaceState) + && aboveState.canBeReplaced() + && aboveState.getFluidState().isEmpty() + && supportState.isFaceSturdy(level, candidate.below(), Direction.UP) + && supportState.getFluidState().isEmpty()) { + return candidate; + } + } + + return new BlockPos(origin.getX(), startY, origin.getZ()); + } + + @Override + protected boolean isValidNestGround(BlockState nestGroundState) { + return nestGroundState.is(BlockTags.BASE_STONE_NETHER) + || nestGroundState.is(Blocks.BLACKSTONE) + || nestGroundState.is(Blocks.SOUL_SAND) + || nestGroundState.is(Blocks.SOUL_SOIL) + || nestGroundState.is(Blocks.GRAVEL) + || nestGroundState.is(Blocks.MAGMA_BLOCK) + || nestGroundState.is(AntarchyObjects.NYXITE.get()); + } + + @Override + protected void decorateAroundNest(WorldGenLevel level, BlockPos center, RandomSource random) { + for (int xOffset = -1; xOffset <= 1; xOffset++) { + for (int zOffset = -1; zOffset <= 1; zOffset++) { + if (xOffset == 0 && zOffset == 0) { + continue; + } + + if (Math.abs(xOffset) == 1 && Math.abs(zOffset) == 1 && random.nextBoolean()) { + continue; + } + + BlockPos targetPos = center.offset(xOffset, 0, zOffset); + BlockState targetState = level.getBlockState(targetPos); + if (targetState.is(BlockTags.BASE_STONE_NETHER) + || targetState.is(Blocks.BLACKSTONE) + || targetState.is(Blocks.SOUL_SAND) + || targetState.is(Blocks.SOUL_SOIL) + || targetState.is(Blocks.GRAVEL) + || targetState.is(AntarchyObjects.NYXITE.get())) { + level.setBlock(targetPos, Blocks.MAGMA_BLOCK.defaultBlockState(), 2); + } + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/SurfaceAntNestFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/SurfaceAntNestFeature.java new file mode 100644 index 00000000..11f55550 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/SurfaceAntNestFeature.java @@ -0,0 +1,44 @@ +package com.craisinlord.antarchy.content.worldgen.ants; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +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.feature.configurations.SimpleBlockConfiguration; + +public abstract class SurfaceAntNestFeature extends BaseAntNestFeature { + protected SurfaceAntNestFeature(Codec codec) { + super(codec); + } + + @Override + protected boolean isValidNestGround(BlockState nestGroundState) { + return nestGroundState.is(BlockTags.DIRT) + || nestGroundState.is(Blocks.GRASS_BLOCK) + || nestGroundState.is(Blocks.MOSS_BLOCK); + } + + @Override + protected void decorateAroundNest(WorldGenLevel level, BlockPos center, RandomSource random) { + for (int xOffset = -1; xOffset <= 1; xOffset++) { + for (int zOffset = -1; zOffset <= 1; zOffset++) { + if (xOffset == 0 && zOffset == 0) { + continue; + } + + if (Math.abs(xOffset) == 1 && Math.abs(zOffset) == 1 && random.nextBoolean()) { + continue; + } + + BlockPos targetPos = center.offset(xOffset, 0, zOffset); + BlockState targetState = level.getBlockState(targetPos); + if (targetState.is(BlockTags.DIRT) || targetState.is(Blocks.GRASS_BLOCK) || targetState.is(Blocks.MOSS_BLOCK)) { + level.setBlock(targetPos, Blocks.ROOTED_DIRT.defaultBlockState(), 2); + } + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/TermiteNestFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/TermiteNestFeature.java new file mode 100644 index 00000000..f21f9441 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ants/TermiteNestFeature.java @@ -0,0 +1,90 @@ +package com.craisinlord.antarchy.content.worldgen.ants; + +import com.craisinlord.antarchy.Antarchy; +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.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; + +public class TermiteNestFeature extends SurfaceAntNestFeature { + private static final ResourceLocation MYRMITE_ID = new ResourceLocation(Antarchy.MODID, "myrmite"); + private static final ResourceLocation BROODSTONE_ID = new ResourceLocation(Antarchy.MODID, "broodstone"); + + public TermiteNestFeature(Codec codec) { + super(codec); + } + + @Override + protected boolean isValidNestGround(BlockState nestGroundState) { + return super.isValidNestGround(nestGroundState) + || nestGroundState.is(getBlock(MYRMITE_ID)) + || nestGroundState.is(getBlock(BROODSTONE_ID)); + } + + @Override + protected BlockPos resolveNestPos(WorldGenLevel level, BlockPos origin) { + int x = origin.getX(); + int z = origin.getZ(); + int startY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + int minY = level.getMinBuildHeight() + 1; + + for (int y = startY; y >= minY; y--) { + BlockPos candidatePos = new BlockPos(x, y, z); + BlockPos aboveCandidatePos = candidatePos.above(); + BlockPos supportPos = candidatePos.below(); + BlockState candidateState = level.getBlockState(candidatePos); + BlockState supportState = level.getBlockState(supportPos); + + if (!level.getBlockState(aboveCandidatePos).canBeReplaced()) { + continue; + } + + if (!this.isValidNestGround(candidateState) || !candidateState.getFluidState().isEmpty()) { + continue; + } + + if (!supportState.isFaceSturdy(level, supportPos, Direction.UP) || !supportState.getFluidState().isEmpty()) { + continue; + } + + return candidatePos; + } + + return super.resolveNestPos(level, origin); + } + + @Override + protected void decorateAroundNest(WorldGenLevel level, BlockPos center, RandomSource random) { + for (int xOffset = -1; xOffset <= 1; xOffset++) { + for (int zOffset = -1; zOffset <= 1; zOffset++) { + if (xOffset == 0 && zOffset == 0) { + continue; + } + + if (Math.abs(xOffset) == 1 && Math.abs(zOffset) == 1 && random.nextBoolean()) { + continue; + } + + BlockPos targetPos = center.offset(xOffset, 0, zOffset); + BlockState targetState = level.getBlockState(targetPos); + if (this.isValidNestGround(targetState)) { + level.setBlock(targetPos, Blocks.ROOTED_DIRT.defaultBlockState(), 2); + } + } + } + } + + 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/CavarynBileCystFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java new file mode 100644 index 00000000..9a995e96 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java @@ -0,0 +1,183 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +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.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +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.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.material.FluidState; + +public final class CavarynBileCystFeature extends Feature { + private static final ResourceLocation BILE_VEIN_ID = new ResourceLocation(Antarchy.MODID, "bile_vein"); + private static final ResourceLocation BILE_ID = new ResourceLocation(Antarchy.MODID, "bile"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 20; + private static final int VERTICAL_SCAN = 10; + private static final float OOZE_CHANCE = 0.02f; + + public CavarynBileCystFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block bileVeinBlock = getBlock(BILE_VEIN_ID); + Block bileBlock = getBlock(BILE_ID); + if (bileVeinBlock == null || bileBlock == null) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + + BlockPos center = findCenter(level, context.origin(), random); + if (center == null) { + return false; + } + + return placeCyst(level, center, bileVeinBlock, bileBlock, random); + } + + private static BlockPos findCenter(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; 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 y = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + y = Mth.clamp(y, level.getMinBuildHeight() + 6, level.getMaxBuildHeight() - 6); + mutable.set(x, y, z); + + if (!isSolid(level, mutable)) { + continue; + } + + Direction openDir = null; + for (Direction dir : Direction.values()) { + if (level.getBlockState(mutable.relative(dir)).canBeReplaced()) { + openDir = dir; + break; + } + } + if (openDir == null) { + continue; + } + + int depth = 1 + random.nextInt(2); + BlockPos candidate = mutable.immutable().relative(openDir.getOpposite(), depth); + if (isSolid(level, candidate)) { + return candidate; + } + } + return null; + } + + private boolean placeCyst(WorldGenLevel level, BlockPos center, Block veinBlock, Block bileBlock, RandomSource random) { + double rx = 1.5 + random.nextDouble() * 12.0; + double ry = 1.5 + random.nextDouble() * 12.0; + double rz = 1.5 + random.nextDouble() * 12.0; + + int stretchAxis = random.nextInt(3); + if (stretchAxis == 0) rx *= 1.3 + random.nextDouble() * 0.7; + else if (stretchAxis == 1) ry *= 1.3 + random.nextDouble() * 0.7; + else rz *= 1.3 + random.nextDouble() * 0.7; + + double f1x = 0.6 + random.nextDouble() * 1.2; + double f1z = 0.6 + random.nextDouble() * 1.2; + double f2y = 0.7 + random.nextDouble() * 1.0; + double f2x = 0.5 + random.nextDouble() * 0.9; + double f3z = 0.8 + random.nextDouble() * 1.1; + double f3y = 0.5 + random.nextDouble() * 0.8; + double wobbleAmp = 0.15 + random.nextDouble() * 0.2; + + int maxR = (int) Math.ceil(Math.max(Math.max(rx, ry), rz)) + 2; + List placed = new ArrayList<>(); + + for (int dx = -maxR; dx <= maxR; dx++) { + for (int dy = -maxR; dy <= maxR; dy++) { + for (int dz = -maxR; dz <= maxR; dz++) { + double baseDist = Math.sqrt( + (dx * dx) / (rx * rx) + + (dy * dy) / (ry * ry) + + (dz * dz) / (rz * rz)); + + double wobble = wobbleAmp * ( + 0.4 * Math.sin(dx * f1x + dz * f1z) + + 0.35 * Math.cos(dy * f2y + dx * f2x) + + 0.25 * Math.sin(dz * f3z + dy * f3y)); + + double distorted = baseDist + wobble; + if (distorted > 1.0) { + continue; + } + + BlockPos pos = center.offset(dx, dy, dz); + if (!isSolid(level, pos)) { + continue; + } + + if (distorted < 0.7) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + } else { + level.setBlock(pos, veinBlock.defaultBlockState(), 2); + placed.add(pos.immutable()); + } + } + } + } + + if (placed.isEmpty()) { + return false; + } + + if (random.nextFloat() >= 0.30f) { + return true; + } + + for (BlockPos cystPos : placed) { + for (Direction dir : Direction.values()) { + BlockPos adj = cystPos.relative(dir); + BlockState adjState = level.getBlockState(adj); + if ((adjState.isAir() || adjState.canBeReplaced()) + && !CavarynFoliageGuard.isFoliageNearby(level, adj) + && random.nextFloat() < OOZE_CHANCE) { + BlockState bileState = bileBlock.defaultBlockState(); + level.setBlock(adj, bileState, 2); + scheduleFluidTick(level, adj, bileState); + } + } + } + + return true; + } + + private static boolean isSolid(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.blocksMotion() && !state.is(Blocks.BEDROCK) && state.getFluidState().isEmpty() + && !CavarynFoliageGuard.isFoliageNearby(level, pos); + } + + 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 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/CavarynBileVeinFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java new file mode 100644 index 00000000..359edfc9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java @@ -0,0 +1,246 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; + +import java.util.*; + +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.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +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.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.material.FluidState; + +public final class CavarynBileVeinFeature extends Feature { + private static final ResourceLocation BILE_VEIN_ID = new ResourceLocation(Antarchy.MODID, "bile_vein"); + private static final ResourceLocation BILE_ID = new ResourceLocation(Antarchy.MODID, "bile"); + private static final int SEARCH_RADIUS = 10; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + private static final float BRANCH_CHANCE = 0.12f; + private static final float LIQUID_POCKET_CHANCE = 0.008f; + private static final int MAX_DISTANCE_FROM_START = 16; + private static final int MAX_DISTANCE_FROM_START_SQR = MAX_DISTANCE_FROM_START * MAX_DISTANCE_FROM_START; + + public CavarynBileVeinFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + try { + Block bileVeinBlock = getBlock(BILE_VEIN_ID); + Block bileBlock = getBlock(BILE_ID); + if (bileVeinBlock == null || !(bileBlock instanceof LiquidBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + + BlockPos start = findStart(level, context.origin(), random); + if (start == null) { + return false; + } + + return growVeinNetwork(level, start, bileVeinBlock, bileBlock, random); + } catch (RuntimeException exception) { + return false; + } + } + + private static BlockPos findStart(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; 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 y = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + y = Mth.clamp(y, level.getMinBuildHeight() + 2, level.getMaxBuildHeight() - 3); + mutable.set(x, y, z); + + if (!isVeinCandidate(level, mutable)) { + continue; + } + + for (Direction dir : Direction.values()) { + if (level.getBlockState(mutable.relative(dir)).canBeReplaced()) { + return mutable.immutable(); + } + } + } + return null; + } + + private boolean growVeinNetwork(WorldGenLevel level, BlockPos start, Block veinBlock, Block bileBlock, RandomSource random) { + Set visited = new HashSet<>(); + List pendingBranches = new ArrayList<>(); + boolean placedAny = false; + + Direction mainDir = Direction.values()[random.nextInt(6)]; + placedAny |= growArm(level, start, start, mainDir, 45 + random.nextInt(25), visited, pendingBranches, veinBlock, bileBlock, random); + + for (BranchStart branch : pendingBranches) { + Direction branchDir = perpendiculars(branch.dir())[random.nextInt(4)]; + int branchLen = 15 + random.nextInt(20); + growArm(level, start, branch.pos(), branchDir, branchLen, visited, null, veinBlock, bileBlock, random); + } + + return placedAny; + } + + private boolean growArm( + WorldGenLevel level, + BlockPos networkOrigin, + BlockPos start, + Direction initialDir, + int maxSteps, + Set visited, + List branches, + Block veinBlock, + Block bileBlock, + RandomSource random + ) { + BlockPos current = start; + Direction dir = initialDir; + boolean placedAny = false; + + for (int step = 0; step < maxSteps; step++) { + if (current.distSqr(networkOrigin) > MAX_DISTANCE_FROM_START_SQR) { + break; + } + + if (visited.contains(current)) { + current = current.relative(biasedNextDir(dir, random)); + continue; + } + + if (!isVeinCandidate(level, current)) { + BlockPos redirect = findSolidNeighbor(current, dir, visited, level, random); + if (redirect == null) { + break; + } + current = redirect; + if (!isVeinCandidate(level, current)) { + break; + } + } + + visited.add(current); + level.setBlock(current, veinBlock.defaultBlockState(), 2); + placedAny = true; + + if (random.nextFloat() < LIQUID_POCKET_CHANCE) { + tryPlaceLiquidPocket(level, current, bileBlock, visited, random); + } + + if (branches != null && random.nextFloat() < BRANCH_CHANCE) { + Direction[] perps = perpendiculars(dir); + branches.add(new BranchStart(current, perps[random.nextInt(perps.length)])); + } + + dir = biasedNextDir(dir, random); + current = current.relative(dir); + } + + return placedAny; + } + + private static Direction biasedNextDir(Direction current, RandomSource random) { + int roll = random.nextInt(10); + if (roll < 6) { + return current; + } + return perpendiculars(current)[roll - 6]; + } + + private static BlockPos findSolidNeighbor(BlockPos from, Direction preferredDir, Set visited, WorldGenLevel level, RandomSource random) { + Direction[] perps = perpendiculars(preferredDir); + for (int i = perps.length - 1; i > 0; i--) { + int j = random.nextInt(i + 1); + Direction tmp = perps[i]; + perps[i] = perps[j]; + perps[j] = tmp; + } + for (Direction d : perps) { + BlockPos candidate = from.relative(d); + if (!visited.contains(candidate) && isVeinCandidate(level, candidate)) { + return candidate; + } + } + return null; + } + + private static void tryPlaceLiquidPocket(WorldGenLevel level, BlockPos veinPos, Block bileBlock, Set visited, RandomSource random) { + Direction[] dirs = Direction.values().clone(); + for (int i = dirs.length - 1; i > 0; i--) { + int j = random.nextInt(i + 1); + Direction tmp = dirs[i]; + dirs[i] = dirs[j]; + dirs[j] = tmp; + } + for (Direction d : dirs) { + BlockPos candidate = veinPos.relative(d); + if (visited.contains(candidate)) { + continue; + } + if (!isVeinCandidate(level, candidate)) { + continue; + } + if (isEnclosed(level, candidate) || random.nextFloat() < 0.01f) { + BlockState bileState = bileBlock.defaultBlockState(); + level.setBlock(candidate, bileState, 2); + scheduleFluidTick(level, candidate, bileState); + visited.add(candidate); + return; + } + } + } + + private static boolean isEnclosed(WorldGenLevel level, BlockPos pos) { + for (Direction d : Direction.values()) { + BlockState neighbor = level.getBlockState(pos.relative(d)); + if (neighbor.isAir() || neighbor.canBeReplaced()) { + return false; + } + } + return true; + } + + private static boolean isVeinCandidate(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.blocksMotion() && !state.is(Blocks.BEDROCK) && state.getFluidState().isEmpty() + && !CavarynFoliageGuard.isFoliageNearby(level, pos); + } + + private static Direction[] perpendiculars(Direction dir) { + return switch (dir.getAxis()) { + case X -> new Direction[]{Direction.UP, Direction.DOWN, Direction.NORTH, Direction.SOUTH}; + case Z -> new Direction[]{Direction.UP, Direction.DOWN, Direction.EAST, Direction.WEST}; + case Y -> new Direction[]{Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST}; + }; + } + + 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 Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private record BranchStart(BlockPos pos, Direction dir) {} +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynCreepvineFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynCreepvineFeature.java new file mode 100644 index 00000000..b6c872a7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynCreepvineFeature.java @@ -0,0 +1,125 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; +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.VineBlock; +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 CavarynCreepvineFeature extends Feature { + private static final ResourceLocation CREEPVINE_ID = new ResourceLocation(Antarchy.MODID, "creepvine"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + + public CavarynCreepvineFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block creepvineBlock = getBlock(CREEPVINE_ID); + if (!(creepvineBlock instanceof VineBlock vineBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + Anchor anchor = findAnchor(level, context.origin(), random); + if (anchor == null) { + return false; + } + + return placeVineColumn(level, vineBlock, anchor, random); + } + + private static Anchor findAnchor(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; 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; + startY = Math.max(level.getMinBuildHeight() + 3, Math.min(level.getMaxBuildHeight() - 3, startY)); + + for (int y = startY; y >= Math.max(level.getMinBuildHeight() + 1, startY - VERTICAL_SCAN); y--) { + mutable.set(x, y, z); + if (!level.getBlockState(mutable).canBeReplaced()) { + continue; + } + if (AntarchyFluidChecks.hasBileNearby(level, mutable, 1)) { + continue; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos supportPos = mutable.relative(direction); + BlockState supportState = level.getBlockState(supportPos); + if (supportState.isFaceSturdy(level, supportPos, direction.getOpposite())) { + return new Anchor(mutable.immutable(), direction); + } + } + } + } + + return null; + } + + private static boolean placeVineColumn(WorldGenLevel level, VineBlock vineBlock, Anchor anchor, RandomSource random) { + boolean placedAny = false; + int length = 3 + random.nextInt(6); + + for (int offset = 0; offset < length; offset++) { + BlockPos vinePos = anchor.pos().below(offset); + if (vinePos.getY() <= level.getMinBuildHeight()) { + break; + } + + BlockState existing = level.getBlockState(vinePos); + if (!existing.canBeReplaced() && !existing.is(vineBlock)) { + break; + } + if (AntarchyFluidChecks.hasBileNearby(level, vinePos, 1)) { + break; + } + + BlockState vineState = createVineState(vineBlock, anchor.supportDirection()); + if (vineState == null || !vineState.canSurvive(level, vinePos)) { + break; + } + + level.setBlock(vinePos, vineState, 3); + placedAny = true; + } + + return placedAny; + } + + private static BlockState createVineState(VineBlock vineBlock, Direction attachedFace) { + BlockState state = vineBlock.defaultBlockState(); + return switch (attachedFace) { + case NORTH -> state.setValue(VineBlock.NORTH, Boolean.TRUE); + case SOUTH -> state.setValue(VineBlock.SOUTH, Boolean.TRUE); + case EAST -> state.setValue(VineBlock.EAST, Boolean.TRUE); + case WEST -> state.setValue(VineBlock.WEST, Boolean.TRUE); + default -> null; + }; + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private record Anchor(BlockPos pos, Direction supportDirection) { + } +} 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 new file mode 100644 index 00000000..0dc46511 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java @@ -0,0 +1,169 @@ +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.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +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.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +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.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class CavarynEggPatchFeature extends Feature { + private static final ResourceLocation AMBER_MOSS_BLOCK_ID = new ResourceLocation(Antarchy.MODID, "amber_moss_block"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + private static final int MAX_RADIUS_Y = 3; + + public CavarynEggPatchFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + Block amberMossBlock = getBlock(AMBER_MOSS_BLOCK_ID); + BlockPos center = findCavityCenter(level, origin, random); + if (center == null) { + return false; + } + + EggType eggType = random.nextBoolean() ? EggType.CREEPING_HORROR : EggType.LURKING_TERROR; + return carveCavityAndPlaceEggs(level, center, random, eggType, amberMossBlock); + } + + private static BlockPos findCavityCenter(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; 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 y = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + y = Mth.clamp(y, level.getMinBuildHeight() + MAX_RADIUS_Y + 2, level.getMaxBuildHeight() - MAX_RADIUS_Y - 2); + + mutable.set(x, y, z); + if (isSolidEnoughForCavity(level, mutable)) { + return mutable.immutable(); + } + } + return null; + } + + private static boolean isSolidEnoughForCavity(WorldGenLevel level, BlockPos center) { + BlockState centerState = level.getBlockState(center); + if (!centerState.blocksMotion() || centerState.is(Blocks.BEDROCK)) { + return false; + } + + int solidCount = 0; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int dx = -2; dx <= 2; dx += 2) { + for (int dy = -1; dy <= 1; dy++) { + for (int dz = -2; dz <= 2; dz += 2) { + mutable.set(center.getX() + dx, center.getY() + dy, center.getZ() + dz); + if (level.getBlockState(mutable).blocksMotion()) { + solidCount++; + } + } + } + } + return solidCount >= 9; + } + + private boolean carveCavityAndPlaceEggs(WorldGenLevel level, BlockPos center, RandomSource random, EggType eggType, Block amberMossBlock) { + int rx = 3 + random.nextInt(3); + int ry = 2 + random.nextInt(2); + int rz = 3 + random.nextInt(3); + + for (int dx = -rx; dx <= rx; dx++) { + for (int dy = -ry; dy <= ry; dy++) { + for (int dz = -rz; dz <= rz; dz++) { + double norm = (double)(dx * dx) / (rx * rx) + + (double)(dy * dy) / (ry * ry) + + (double)(dz * dz) / (rz * rz); + if (norm > 1.0) { + continue; + } + BlockPos pos = center.offset(dx, dy, dz); + BlockState existing = level.getBlockState(pos); + if (!existing.is(Blocks.BEDROCK) && existing.blocksMotion() && existing.getFluidState().isEmpty()) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + } + } + } + } + + List eggPositions = new ArrayList<>(); + for (int dx = -rx; dx <= rx; dx++) { + for (int dy = -ry - 1; dy <= ry; dy++) { + for (int dz = -rz; dz <= rz; dz++) { + BlockPos pos = center.offset(dx, dy, dz); + if (!level.getBlockState(pos).isAir()) { + continue; + } + BlockPos below = pos.below(); + BlockState belowState = level.getBlockState(below); + if (belowState.blocksMotion() && !belowState.isAir() && belowState.isFaceSturdy(level, below, Direction.UP)) { + eggPositions.add(pos); + } + } + } + } + + if (eggPositions.isEmpty()) { + return false; + } + + boolean placedAny = false; + for (BlockPos eggPos : eggPositions) { + if (random.nextFloat() > 0.65f) { + continue; + } + + if (amberMossBlock != null) { + BlockPos floorPos = eggPos.below(); + BlockState floorState = level.getBlockState(floorPos); + if (floorState.blocksMotion() && !floorState.is(Blocks.BEDROCK) && floorState.getFluidState().isEmpty()) { + level.setBlock(floorPos, amberMossBlock.defaultBlockState(), 2); + } + } + + BlockState eggState = eggType == EggType.CREEPING_HORROR + ? AntarchyObjects.CREEPING_HORROR_EGGS.get().defaultBlockState() + : AntarchyObjects.LURKING_TERROR_EGGS.get().defaultBlockState(); + eggState = eggState.setValue( + eggType == EggType.CREEPING_HORROR ? CreepingHorrorEggBlock.EGGS : LurkingTerrorEggBlock.EGGS, + 1 + random.nextInt(4)); + level.setBlock(eggPos, eggState, 3); + placedAny = true; + } + + return placedAny; + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private enum EggType { + CREEPING_HORROR, + LURKING_TERROR + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynFoliageGuard.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynFoliageGuard.java new file mode 100644 index 00000000..71b280df --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynFoliageGuard.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.content.block.HangingCreeprootsBlock; +import com.craisinlord.antarchy.content.block.MoltingVinesBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.VineBlock; +import net.minecraft.world.level.block.state.BlockState; + +/** + * Bile always wins on placement, but once a vine/creeproots/molting-vine column already exists, + * bile carving and oozing must not eat the block it's anchored to — otherwise a later-generated + * neighboring chunk's bile cyst/vein can undermine foliage placed earlier and leave it floating + * or pop it as a dropped item. + */ +public final class CavarynFoliageGuard { + private CavarynFoliageGuard() { + } + + public static boolean isFoliageNearby(LevelAccessor level, BlockPos center) { + if (isFoliage(level.getBlockState(center))) { + return true; + } + for (Direction direction : Direction.values()) { + if (isFoliage(level.getBlockState(center.relative(direction)))) { + return true; + } + } + return false; + } + + private static boolean isFoliage(BlockState state) { + return state.getBlock() instanceof VineBlock + || state.getBlock() instanceof HangingCreeprootsBlock + || state.getBlock() instanceof MoltingVinesBlock; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynWallAmberMossFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynWallAmberMossFeature.java new file mode 100644 index 00000000..0648f843 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynWallAmberMossFeature.java @@ -0,0 +1,162 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +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.MultifaceBlock; +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 CavarynWallAmberMossFeature extends Feature { + private static final ResourceLocation AMBER_LICHEN_ID = new ResourceLocation(Antarchy.MODID, "amber_lichen"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 28; + private static final int VERTICAL_SCAN = 10; + + public CavarynWallAmberMossFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + Block amberLichenBlock = getBlock(AMBER_LICHEN_ID); + if (amberLichenBlock == null) { + return false; + } + + Anchor anchor = findAnchor(level, context.origin(), random); + if (anchor == null) { + return false; + } + + List placedPatch = placeWallPatch(level, anchor, amberLichenBlock, random); + if (placedPatch.isEmpty()) { + return false; + } + + placeLichenFringe(level, placedPatch, anchor.supportDirection(), amberLichenBlock, random); + return true; + } + + private static Anchor findAnchor(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; 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; + startY = Math.max(level.getMinBuildHeight() + 2, Math.min(level.getMaxBuildHeight() - 3, startY)); + + for (int y = startY; y >= Math.max(level.getMinBuildHeight() + 1, startY - VERTICAL_SCAN); y--) { + mutable.set(x, y, z); + if (!level.getBlockState(mutable).canBeReplaced()) { + continue; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos supportPos = mutable.relative(direction); + BlockState supportState = level.getBlockState(supportPos); + if (supportState.isFaceSturdy(level, supportPos, direction.getOpposite())) { + return new Anchor(mutable.immutable(), direction); + } + } + } + } + + return null; + } + + private static List placeWallPatch(WorldGenLevel level, Anchor anchor, Block amberLichenBlock, RandomSource random) { + List placed = new ArrayList<>(); + Direction lateral = anchor.supportDirection().getClockWise(); + int width = 1 + random.nextInt(3); + int height = 2 + random.nextInt(4); + + for (int yOffset = 0; yOffset < height; yOffset++) { + for (int lateralOffset = -width; lateralOffset <= width; lateralOffset++) { + if (Math.abs(lateralOffset) == width && random.nextBoolean()) { + continue; + } + + BlockPos pos = anchor.pos().above(yOffset).relative(lateral, lateralOffset); + if (!canPlaceWallMoss(level, pos, anchor.supportDirection())) { + continue; + } + + BlockState state = createLichenState(amberLichenBlock, anchor.supportDirection()); + if (!state.canSurvive(level, pos)) { + continue; + } + + level.setBlock(pos, state, 3); + placed.add(pos.immutable()); + } + } + + return placed; + } + + private static void placeLichenFringe( + WorldGenLevel level, + List patchPositions, + Direction supportDirection, + Block amberLichenBlock, + RandomSource random + ) { + for (BlockPos patchPos : patchPositions) { + for (Direction spread : List.of(Direction.UP, Direction.DOWN, supportDirection.getClockWise(), supportDirection.getCounterClockWise())) { + if (random.nextFloat() > 0.45F) { + continue; + } + + BlockPos targetPos = patchPos.relative(spread); + if (!level.getBlockState(targetPos).canBeReplaced()) { + continue; + } + if (!hasSupport(level, targetPos, supportDirection)) { + continue; + } + + BlockState state = createLichenState(amberLichenBlock, supportDirection); + if (!state.canSurvive(level, targetPos)) { + continue; + } + + level.setBlock(targetPos, state, 3); + } + } + } + + private static boolean canPlaceWallMoss(WorldGenLevel level, BlockPos pos, Direction supportDirection) { + return level.getBlockState(pos).canBeReplaced() && hasSupport(level, pos, supportDirection); + } + + private static boolean hasSupport(WorldGenLevel level, BlockPos pos, Direction supportDirection) { + BlockPos supportPos = pos.relative(supportDirection); + return level.getBlockState(supportPos).isFaceSturdy(level, supportPos, supportDirection.getOpposite()); + } + + private static BlockState createLichenState(Block lichenBlock, Direction supportDirection) { + return lichenBlock.defaultBlockState().setValue(MultifaceBlock.getFaceProperty(supportDirection), true); + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private record Anchor(BlockPos pos, Direction supportDirection) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeConfiguration.java new file mode 100644 index 00000000..4e66124d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeConfiguration.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; + +public record ChitinSpikeConfiguration( + int floorToCeilingSearchRange, + int radius, + int maxColumnHeight, + int heightDeviation, + float chanceOfColumnAtMaxDistanceFromCenter, + int maxDistanceFromCenterAffectingChanceOfColumn, + int maxDistanceFromCenterAffectingHeightBias, + int maxHeightDifference, + float largeVariantChance, + int largeVariantExtraRadius, + int largeVariantExtraHeight, + int largeVariantExtraHeightDeviation, + float largeVariantSurfaceSpikeMultiplier +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.intRange(1, 128).fieldOf("floor_to_ceiling_search_range").forGetter(ChitinSpikeConfiguration::floorToCeilingSearchRange), + Codec.intRange(1, 32).fieldOf("radius").forGetter(ChitinSpikeConfiguration::radius), + Codec.intRange(1, 32).fieldOf("max_column_height").forGetter(ChitinSpikeConfiguration::maxColumnHeight), + Codec.intRange(1, 16).fieldOf("height_deviation").forGetter(ChitinSpikeConfiguration::heightDeviation), + Codec.floatRange(0.0F, 1.0F).fieldOf("chance_of_column_at_max_distance_from_center").forGetter(ChitinSpikeConfiguration::chanceOfColumnAtMaxDistanceFromCenter), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_chance_of_column").forGetter(ChitinSpikeConfiguration::maxDistanceFromCenterAffectingChanceOfColumn), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_height_bias").forGetter(ChitinSpikeConfiguration::maxDistanceFromCenterAffectingHeightBias), + Codec.intRange(0, 32).fieldOf("max_height_difference").forGetter(ChitinSpikeConfiguration::maxHeightDifference), + Codec.floatRange(0.0F, 1.0F).optionalFieldOf("large_variant_chance", 0.0F).forGetter(ChitinSpikeConfiguration::largeVariantChance), + Codec.intRange(0, 24).optionalFieldOf("large_variant_extra_radius", 0).forGetter(ChitinSpikeConfiguration::largeVariantExtraRadius), + Codec.intRange(0, 32).optionalFieldOf("large_variant_extra_height", 0).forGetter(ChitinSpikeConfiguration::largeVariantExtraHeight), + Codec.intRange(0, 16).optionalFieldOf("large_variant_extra_height_deviation", 0).forGetter(ChitinSpikeConfiguration::largeVariantExtraHeightDeviation), + Codec.floatRange(1.0F, 8.0F).optionalFieldOf("large_variant_surface_spike_multiplier", 1.0F).forGetter(ChitinSpikeConfiguration::largeVariantSurfaceSpikeMultiplier) + ).apply(instance, ChitinSpikeConfiguration::new)); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeFeature.java new file mode 100644 index 00000000..78398af6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeFeature.java @@ -0,0 +1,253 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.OptionalInt; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.PointedDripstoneBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DripstoneThickness; +import net.minecraft.world.level.levelgen.Column; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public final class ChitinSpikeFeature extends Feature { + private record ResolvedVariant(int radius, int maxColumnHeight, int heightDeviation, int surfaceSpikeAttempts) { + } + + public ChitinSpikeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + ChitinSpikeConfiguration config = context.config(); + RandomSource random = context.random(); + + if (!level.getBlockState(origin).isAir()) { + return false; + } + + boolean placedAny = false; + List placedBlocks = new ArrayList<>(); + ResolvedVariant variant = this.resolveVariant(config, random); + int radius = variant.radius(); + for (int dx = -radius; dx <= radius; dx++) { + for (int dz = -radius; dz <= radius; dz++) { + double chance = this.getChanceOfColumn(radius, dx, dz, config); + if (chance <= 0.0D) { + continue; + } + if (this.placeColumn(level, random, origin.offset(dx, 0, dz), dx, dz, chance, config, variant, placedBlocks)) { + placedAny = true; + } + } + } + + if (this.dotSurfaceSpikes(level, random, placedBlocks, config, variant)) { + placedAny = true; + } + return placedAny; + } + + private ResolvedVariant resolveVariant(ChitinSpikeConfiguration config, RandomSource random) { + if (config.largeVariantChance() > 0.0F && random.nextFloat() < config.largeVariantChance()) { + int radius = config.radius() + config.largeVariantExtraRadius(); + int maxColumnHeight = config.maxColumnHeight() + config.largeVariantExtraHeight(); + int heightDeviation = config.heightDeviation() + config.largeVariantExtraHeightDeviation(); + int baseAttempts = Math.max(8, ((radius * 2) + 1) * ((radius * 2) + 1) / 6); + int surfaceSpikeAttempts = Math.max(baseAttempts + 4, Math.round(baseAttempts * config.largeVariantSurfaceSpikeMultiplier())); + return new ResolvedVariant(radius, maxColumnHeight, heightDeviation, surfaceSpikeAttempts); + } + + int radius = config.radius(); + int baseAttempts = Math.max(8, ((radius * 2) + 1) * ((radius * 2) + 1) / 6); + return new ResolvedVariant(radius, config.maxColumnHeight(), config.heightDeviation(), baseAttempts); + } + + private boolean placeColumn( + WorldGenLevel level, + RandomSource random, + BlockPos pos, + int dx, + int dz, + double chance, + ChitinSpikeConfiguration config, + ResolvedVariant variant, + List placedBlocks + ) { + Optional optional = Column.scan(level, pos, config.floorToCeilingSearchRange(), state -> state.isAir(), state -> !state.isAir()); + if (optional.isEmpty()) { + return false; + } + + Column column = optional.get(); + OptionalInt ceiling = column.getCeiling(); + OptionalInt floor = column.getFloor(); + int maxHeight = this.getMaxLength(variant, ceiling, floor); + int downLength = 0; + int upLength = 0; + + if (ceiling.isPresent()) { + downLength = this.getSpikeHeight(random, dx, dz, chance, maxHeight, config.maxDistanceFromCenterAffectingHeightBias(), variant.heightDeviation()); + } + if (floor.isPresent()) { + if (downLength > 0) { + upLength = Mth.clamp( + downLength + Mth.randomBetweenInclusive(random, -config.maxHeightDifference(), config.maxHeightDifference()), + 0, + maxHeight + ); + } else { + upLength = this.getSpikeHeight(random, dx, dz, chance, maxHeight, config.maxDistanceFromCenterAffectingHeightBias(), variant.heightDeviation()); + } + } + + boolean placedAny = false; + if (ceiling.isPresent() && downLength > 0) { + placedAny |= this.growChitinColumn(level, pos.atY(ceiling.getAsInt() - 1), Direction.DOWN, downLength, placedBlocks); + } + if (floor.isPresent() && upLength > 0) { + placedAny |= this.growChitinColumn(level, pos.atY(floor.getAsInt() + 1), Direction.UP, upLength, placedBlocks); + } + return placedAny; + } + + private int getMaxLength(ResolvedVariant variant, OptionalInt ceiling, OptionalInt floor) { + if (ceiling.isPresent() && floor.isPresent()) { + return Math.min(variant.maxColumnHeight(), ceiling.getAsInt() - floor.getAsInt() - 1); + } + return variant.maxColumnHeight(); + } + + private boolean growChitinColumn(WorldGenLevel level, BlockPos rootStart, Direction direction, int length, List placedBlocks) { + boolean placedAny = false; + for (int offset = 0; offset < length; offset++) { + BlockPos spikePos = rootStart.relative(direction, offset); + if (spikePos.getY() < level.getMinBuildHeight() || spikePos.getY() >= level.getMaxBuildHeight()) { + break; + } + + BlockState current = level.getBlockState(spikePos); + if (!current.isAir()) { + break; + } + + BlockState chitinState = AntarchyObjects.CHITIN_BLOCK.get().defaultBlockState(); + level.setBlock(spikePos, chitinState, 3); + placedBlocks.add(spikePos.immutable()); + placedAny = true; + } + return placedAny; + } + + private boolean dotSurfaceSpikes( + WorldGenLevel level, + RandomSource random, + List placedBlocks, + ChitinSpikeConfiguration config, + ResolvedVariant variant + ) { + boolean placedAny = false; + if (placedBlocks.isEmpty()) { + return false; + } + + int attempts = Math.max(variant.surfaceSpikeAttempts(), placedBlocks.size() / 6); + for (int i = 0; i < attempts; i++) { + BlockPos anchor = placedBlocks.get(random.nextInt(placedBlocks.size())); + Direction direction = random.nextBoolean() ? Direction.UP : Direction.DOWN; + int length = 1 + random.nextInt(Math.max(1, config.maxHeightDifference() + 1)); + BlockPos start = anchor.relative(direction); + if (this.growSurfaceSpike(level, start, direction, length)) { + placedAny = true; + } + } + return placedAny; + } + + private boolean growSurfaceSpike(WorldGenLevel level, BlockPos startPos, Direction direction, int length) { + boolean placedAny = false; + for (int offset = 0; offset < length; offset++) { + BlockPos spikePos = startPos.relative(direction, offset); + if (spikePos.getY() < level.getMinBuildHeight() || spikePos.getY() >= level.getMaxBuildHeight()) { + break; + } + if (!level.getBlockState(spikePos).isAir()) { + break; + } + + BlockState spikeState = AntarchyObjects.CHITIN_SPIKE.get().defaultBlockState() + .setValue(PointedDripstoneBlock.TIP_DIRECTION, direction) + .setValue(PointedDripstoneBlock.THICKNESS, getThicknessForRootOffset(offset, length)) + .setValue(PointedDripstoneBlock.WATERLOGGED, false); + if (!spikeState.canSurvive(level, spikePos)) { + break; + } + + level.setBlock(spikePos, spikeState, 3); + placedAny = true; + } + return placedAny; + } + + private static DripstoneThickness getThicknessForRootOffset(int offsetFromRoot, int length) { + if (length <= 1 || offsetFromRoot == length - 1) { + return DripstoneThickness.TIP; + } + if (offsetFromRoot == length - 2) { + return DripstoneThickness.FRUSTUM; + } + if (offsetFromRoot == 0) { + return DripstoneThickness.BASE; + } + return DripstoneThickness.MIDDLE; + } + + private int getSpikeHeight( + RandomSource random, + int dx, + int dz, + double chance, + int maxHeight, + int maxDistanceFromCenterAffectingHeightBias, + int heightDeviation + ) { + if (maxHeight <= 0 || random.nextDouble() > chance) { + return 0; + } + + int distance = Math.abs(dx) + Math.abs(dz); + float mean = (float) Mth.clampedMap( + (double) distance, + 0.0D, + (double) maxDistanceFromCenterAffectingHeightBias, + (double) maxHeight, + 1.0D + ); + int sampled = Math.round((float) (mean + random.nextGaussian() * Math.max(1, Math.min(maxHeight, heightDeviation)))); + return Mth.clamp(sampled, 1, maxHeight); + } + + private double getChanceOfColumn(int radius, int dx, int dz, ChitinSpikeConfiguration config) { + int remainingX = radius - Math.abs(dx); + int remainingZ = radius - Math.abs(dz); + int edgeDistance = Math.min(remainingX, remainingZ); + return Mth.clampedMap( + (double) edgeDistance, + 0.0D, + (double) config.maxDistanceFromCenterAffectingChanceOfColumn(), + (double) config.chanceOfColumnAtMaxDistanceFromCenter(), + 1.0D + ); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/GroundMoltingVinesFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/GroundMoltingVinesFeature.java new file mode 100644 index 00000000..bb52aeba --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/GroundMoltingVinesFeature.java @@ -0,0 +1,128 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.MoltingVinesBlock; +import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; +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 GroundMoltingVinesFeature extends Feature { + private static final ResourceLocation MOLTING_VINES_ID = new ResourceLocation(Antarchy.MODID, "molting_vines"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + private static final int MIN_LENGTH = 2; + private static final int MAX_LENGTH = 5; + private static final int BROODFRUIT_CHANCE = 4; + + public GroundMoltingVinesFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block block = getBlock(MOLTING_VINES_ID); + if (!(block instanceof MoltingVinesBlock moltingVinesBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos basePos = findBase(level, context.origin(), random); + if (basePos == null) { + return false; + } + + return placeColumn(level, moltingVinesBlock, basePos, random); + } + + private static BlockPos findBase(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + int minY = level.getMinBuildHeight() + 2; + int maxY = level.getMaxBuildHeight() - 2; + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; 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; + startY = Math.max(minY, Math.min(maxY, startY)); + + for (int y = startY; y >= Math.max(minY, startY - VERTICAL_SCAN); y--) { + mutable.set(x, y, z); + if (!level.getBlockState(mutable).canBeReplaced()) { + continue; + } + if (AntarchyFluidChecks.hasBileNearby(level, mutable, 1)) { + continue; + } + BlockPos belowPos = mutable.below(); + BlockState belowState = level.getBlockState(belowPos); + if (!belowState.isFaceSturdy(level, belowPos, Direction.UP)) { + continue; + } + if (!level.getBlockState(mutable.above()).canBeReplaced()) { + continue; + } + return mutable.immutable(); + } + } + return null; + } + + private static boolean placeColumn(WorldGenLevel level, MoltingVinesBlock block, BlockPos basePos, RandomSource random) { + int maxLength = MIN_LENGTH + random.nextInt(MAX_LENGTH - MIN_LENGTH + 1); + int length = 0; + BlockPos.MutableBlockPos mutable = basePos.mutable(); + while (length < maxLength && mutable.getY() < level.getMaxBuildHeight()) { + BlockState existing = level.getBlockState(mutable); + if (!existing.canBeReplaced()) { + break; + } + if (AntarchyFluidChecks.hasBileNearby(level, mutable, 1)) { + break; + } + length++; + mutable.move(0, 1, 0); + } + + if (length < MIN_LENGTH) { + return false; + } + + int fruitIndex = -1; + if (length >= 3 && random.nextInt(BROODFRUIT_CHANCE) == 0) { + fruitIndex = 1 + random.nextInt(length - 2); + } + + for (int offset = 0; offset < length; offset++) { + BlockPos pos = basePos.above(offset); + BlockState state = block.defaultBlockState() + .setValue(MoltingVinesBlock.GROWTH_DIRECTION, Direction.UP) + .setValue(MoltingVinesBlock.DISTANCE, Math.min(offset, 6)) + .setValue(MoltingVinesBlock.TOP_CAP, offset == length - 1) + .setValue(MoltingVinesBlock.BOTTOM_CAP, false) + .setValue(MoltingVinesBlock.BROODFRUIT, offset == fruitIndex); + if (!state.canSurvive(level, pos)) { + return false; + } + level.setBlock(pos, state, 3); + } + + return true; + } + + 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/HangingCreeprootsFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/HangingCreeprootsFeature.java new file mode 100644 index 00000000..96a2310d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/HangingCreeprootsFeature.java @@ -0,0 +1,116 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.HangingCreeprootsBlock; +import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; +import com.mojang.serialization.Codec; +import java.util.Optional; +import net.minecraft.core.BlockPos; +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 HangingCreeprootsFeature extends Feature { + private static final ResourceLocation HANGING_CREEPROOTS_ID = new ResourceLocation(Antarchy.MODID, "hanging_creeproots"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + + public HangingCreeprootsFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block block = getBlock(HANGING_CREEPROOTS_ID); + if (!(block instanceof HangingCreeprootsBlock rootsBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos anchor = findAnchor(level, context.origin(), random); + if (anchor == null) { + return false; + } + + return placeColumn(level, rootsBlock, anchor, random); + } + + private static BlockPos findAnchor(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; 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; + startY = Math.max(level.getMinBuildHeight() + 3, Math.min(level.getMaxBuildHeight() - 3, startY)); + + for (int y = startY; y <= Math.min(level.getMaxBuildHeight() - 2, startY + VERTICAL_SCAN); y++) { + mutable.set(x, y, z); + if (!level.getBlockState(mutable).canBeReplaced()) { + continue; + } + if (AntarchyFluidChecks.hasBileNearby(level, mutable, 1)) { + continue; + } + + BlockPos abovePos = mutable.above(); + BlockState aboveState = level.getBlockState(abovePos); + if (aboveState.isFaceSturdy(level, abovePos, net.minecraft.core.Direction.DOWN)) { + return mutable.immutable(); + } + } + } + + return null; + } + + private static boolean placeColumn(WorldGenLevel level, HangingCreeprootsBlock rootsBlock, BlockPos startPos, RandomSource random) { + boolean placedAny = false; + int length = 1 + random.nextInt(5); + + for (int offset = 0; offset < length; offset++) { + BlockPos rootsPos = startPos.below(offset); + if (rootsPos.getY() <= level.getMinBuildHeight()) { + break; + } + + BlockState existing = level.getBlockState(rootsPos); + if (!existing.canBeReplaced() && !existing.is(rootsBlock)) { + break; + } + if (AntarchyFluidChecks.hasBileNearby(level, rootsPos, 1)) { + break; + } + + int distance = Math.min(offset, 4); + boolean bottom = offset == length - 1 || !level.getBlockState(rootsPos.below()).canBeReplaced(); + BlockState state = rootsBlock.defaultBlockState() + .setValue(HangingCreeprootsBlock.DISTANCE, distance) + .setValue(HangingCreeprootsBlock.BOTTOM, bottom); + if (!state.canSurvive(level, rootsPos)) { + break; + } + + level.setBlock(rootsPos, state, 3); + placedAny = true; + if (!bottom && !level.getBlockState(rootsPos.below()).canBeReplaced()) { + level.setBlock(rootsPos, state.setValue(HangingCreeprootsBlock.BOTTOM, true), 3); + break; + } + } + + return placedAny; + } + + 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/JumpyBugEggCeilingFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/JumpyBugEggCeilingFeature.java new file mode 100644 index 00000000..945de91f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/JumpyBugEggCeilingFeature.java @@ -0,0 +1,89 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.JumpyBugEggBlock; +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 JumpyBugEggCeilingFeature extends Feature { + private static final ResourceLocation JUMPY_BUG_EGG_ID = new ResourceLocation(Antarchy.MODID, "jumpy_bug_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/MoltingVinesFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/MoltingVinesFeature.java new file mode 100644 index 00000000..ec83c8df --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/MoltingVinesFeature.java @@ -0,0 +1,125 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.MoltingVinesBlock; +import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; +import com.mojang.serialization.Codec; +import java.util.Optional; +import net.minecraft.core.BlockPos; +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 MoltingVinesFeature extends Feature { + private static final ResourceLocation MOLTING_VINES_ID = new ResourceLocation(Antarchy.MODID, "molting_vines"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + private static final int MIN_LENGTH = 2; + private static final int MAX_LENGTH = 6; + private static final int BROODFRUIT_CHANCE = 3; + + public MoltingVinesFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block block = getBlock(MOLTING_VINES_ID); + if (!(block instanceof MoltingVinesBlock moltingVinesBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos anchorPos = findAnchor(level, context.origin(), random); + if (anchorPos == null) { + return false; + } + + return placeColumn(level, moltingVinesBlock, anchorPos, random); + } + + private static BlockPos findAnchor(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + int minY = level.getMinBuildHeight() + 2; + int maxY = level.getMaxBuildHeight() - 2; + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; 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; + startY = Math.max(minY, Math.min(maxY, startY)); + + for (int y = startY; y >= Math.max(minY, startY - VERTICAL_SCAN); y--) { + mutable.set(x, y, z); + if (!level.getBlockState(mutable).canBeReplaced()) { + continue; + } + if (AntarchyFluidChecks.hasBileNearby(level, mutable, 1)) { + continue; + } + BlockPos abovePos = mutable.above(); + BlockState aboveState = level.getBlockState(abovePos); + if (!aboveState.isFaceSturdy(level, abovePos, net.minecraft.core.Direction.DOWN)) { + continue; + } + if (!level.getBlockState(mutable.below()).canBeReplaced()) { + continue; + } + return mutable.immutable(); + } + } + return null; + } + + private static boolean placeColumn(WorldGenLevel level, MoltingVinesBlock block, BlockPos anchorPos, RandomSource random) { + int maxLength = MIN_LENGTH + random.nextInt(MAX_LENGTH - MIN_LENGTH + 1); + int length = 0; + BlockPos.MutableBlockPos mutable = anchorPos.mutable(); + while (length < maxLength && mutable.getY() > level.getMinBuildHeight()) { + BlockState existing = level.getBlockState(mutable); + if (!existing.canBeReplaced()) { + break; + } + if (AntarchyFluidChecks.hasBileNearby(level, mutable, 1)) { + break; + } + length++; + mutable.move(0, -1, 0); + } + + if (length < MIN_LENGTH) { + return false; + } + + int fruitIndex = -1; + if (length >= 3 && random.nextInt(BROODFRUIT_CHANCE) == 0) { + fruitIndex = 1 + random.nextInt(length - 2); + } + + for (int offset = 0; offset < length; offset++) { + BlockPos pos = anchorPos.below(offset); + BlockState state = block.defaultBlockState() + .setValue(MoltingVinesBlock.DISTANCE, Math.min(offset, MoltingVinesBlock.DISTANCE.getPossibleValues().stream().max(Integer::compareTo).orElse(6))) + .setValue(MoltingVinesBlock.BOTTOM_CAP, offset == length - 1) + .setValue(MoltingVinesBlock.BROODFRUIT, offset == fruitIndex); + if (!state.canSurvive(level, pos)) { + return false; + } + level.setBlock(pos, state, 3); + } + + return true; + } + + 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/RollyCavesGiantCavernFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/RollyCavesGiantCavernFeature.java new file mode 100644 index 00000000..27a426f3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/RollyCavesGiantCavernFeature.java @@ -0,0 +1,486 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.CaveVinesBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.Tilt; +import net.minecraft.world.level.biome.Biome; +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 RollyCavesGiantCavernFeature extends Feature { + private static final ResourceKey ROLLY_CAVES = ResourceKey.create( + Registries.BIOME, new ResourceLocation(Antarchy.MODID, "rolly_caves")); + private static final ResourceLocation GLOWCAP_MUSHROOM_ID = new ResourceLocation(Antarchy.MODID, "glowcap_mushroom"); + private static final ResourceLocation AMBER_MOSS_BLOCK_ID = new ResourceLocation(Antarchy.MODID, "amber_moss_block"); + private static final ResourceLocation OURANWOOD_WOOD_ID = new ResourceLocation(Antarchy.MODID, "ouranwood_wood"); + private static final ResourceLocation MOSSY_OURANWOOD_WOOD_ID = new ResourceLocation(Antarchy.MODID, "mossy_ouranwood_wood"); + private static final ResourceLocation MOSSY_OURANWOOD_LOG_ID = new ResourceLocation(Antarchy.MODID, "mossy_ouranwood_log"); + + private static final int TRUNK_RADIUS = 2; + private static final int MOSSY_PATCH_CHANCE = 4; + + private static final int BIOME_SAMPLE_RADIUS = 10; + private static final int BIOME_SAMPLE_STEP = 5; + private static final int MIN_BIOME_SAMPLE_MATCHES = 5; + + private static final int MIN_NATURAL_CLEARANCE = 6; + private static final int SCAN_LIMIT = 48; + + private static final int CHAMBER_HEIGHT_MIN = 26; + private static final int CHAMBER_HEIGHT_MAX = 46; + private static final int CHAMBER_RADIUS_MIN = 8; + private static final int CHAMBER_RADIUS_MAX = 12; + private static final int BLOB_LAYER_COUNT = 9; + private static final double MAX_DRIFT_FROM_CENTER = 6.0; + + private static final int MAX_PROCESSED_POSITIONS = 60000; + + private static final int FLOOR_DECORATION_ATTEMPTS = 40; + private static final int CEILING_DECORATION_ATTEMPTS = 30; + private static final int MAX_VINE_LENGTH = 10; + + public RollyCavesGiantCavernFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + try { + return tryPlace(context); + } catch (RuntimeException exception) { + return false; + } + } + + private boolean tryPlace(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + if (!isSurroundedByRollyCaves(level, origin)) { + return false; + } + + NaturalPocket pocket = findNaturalPocket(level, origin); + if (pocket == null) { + return false; + } + + List blobs = buildBlobs(random, pocket.center()); + int carvedPositions = carveBlobs(level, blobs); + if (carvedPositions == 0) { + return false; + } + + placeTrunk(level, random, blobs); + decorateFloor(level, random, blobs); + decorateCeiling(level, random, blobs); + + return true; + } + + private static void placeTrunk(WorldGenLevel level, RandomSource random, List blobs) { + Block woodBlock = getBlock(OURANWOOD_WOOD_ID); + Block mossyWoodBlock = getBlock(MOSSY_OURANWOOD_WOOD_ID); + Block mossyLogBlock = getBlock(MOSSY_OURANWOOD_LOG_ID); + if (woodBlock == null || mossyWoodBlock == null || mossyLogBlock == null) { + return; + } + + Blob bottom = blobs.get(0); + Blob top = blobs.get(blobs.size() - 1); + int trunkBottomY = (int) Math.floor(bottom.y() - bottom.verticalRadius()) + 1; + int trunkTopY = (int) Math.ceil(top.y() + top.verticalRadius()) - 1; + + BlockState woodState = woodBlock.defaultBlockState().setValue(RotatedPillarBlock.AXIS, Direction.Axis.Y); + BlockState mossyWoodState = mossyWoodBlock.defaultBlockState().setValue(RotatedPillarBlock.AXIS, Direction.Axis.Y); + BlockState mossyLogState = mossyLogBlock.defaultBlockState().setValue(RotatedPillarBlock.AXIS, Direction.Axis.Y); + + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int y = trunkBottomY; y <= trunkTopY; y++) { + double[] center = interpolateCenter(blobs, y); + int centerX = (int) Math.round(center[0]); + int centerZ = (int) Math.round(center[1]); + + for (int dx = -TRUNK_RADIUS; dx <= TRUNK_RADIUS; dx++) { + for (int dz = -TRUNK_RADIUS; dz <= TRUNK_RADIUS; dz++) { + if (dx * dx + dz * dz > TRUNK_RADIUS * TRUNK_RADIUS) { + continue; + } + + mutable.set(centerX + dx, y, centerZ + dz); + BlockState existing = level.getBlockState(mutable); + if (existing.is(Blocks.BEDROCK) || level.getBlockEntity(mutable) != null) { + continue; + } + if (!existing.getFluidState().isEmpty()) { + continue; + } + + boolean surface = dx * dx + dz * dz >= (TRUNK_RADIUS - 1) * (TRUNK_RADIUS - 1); + BlockState toPlace = woodState; + if (surface && random.nextInt(MOSSY_PATCH_CHANCE) == 0) { + toPlace = random.nextBoolean() ? mossyWoodState : mossyLogState; + } + + level.setBlock(mutable, toPlace, 2); + } + } + } + } + + private static double[] interpolateCenter(List blobs, int y) { + Blob lower = blobs.get(0); + Blob upper = blobs.get(blobs.size() - 1); + + for (int i = 0; i < blobs.size() - 1; i++) { + if (y >= blobs.get(i).y() && y <= blobs.get(i + 1).y()) { + lower = blobs.get(i); + upper = blobs.get(i + 1); + break; + } + } + + double span = upper.y() - lower.y(); + double t = span == 0 ? 0 : (y - lower.y()) / span; + t = Math.max(0.0, Math.min(1.0, t)); + + double x = lower.x() + (upper.x() - lower.x()) * t; + double z = lower.z() + (upper.z() - lower.z()) * t; + return new double[] {x, z}; + } + + private static boolean isSurroundedByRollyCaves(WorldGenLevel level, BlockPos origin) { + int matches = 0; + int samples = 0; + for (int dx = -BIOME_SAMPLE_RADIUS; dx <= BIOME_SAMPLE_RADIUS; dx += BIOME_SAMPLE_STEP) { + for (int dz = -BIOME_SAMPLE_RADIUS; dz <= BIOME_SAMPLE_RADIUS; dz += BIOME_SAMPLE_STEP) { + samples++; + if (level.getBiome(origin.offset(dx, 0, dz)).is(ROLLY_CAVES)) { + matches++; + } + } + } + return samples > 0 && matches >= MIN_BIOME_SAMPLE_MATCHES; + } + + private static NaturalPocket findNaturalPocket(WorldGenLevel level, BlockPos origin) { + BlockPos.MutableBlockPos cursor = origin.mutable(); + + if (!level.getBlockState(cursor).isAir()) { + boolean found = false; + for (int radius = 1; radius <= 6 && !found; radius++) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos candidate = origin.relative(direction, radius); + if (level.getBlockState(candidate).isAir()) { + cursor.set(candidate); + found = true; + break; + } + } + } + if (!found) { + return null; + } + } + + int floorY = cursor.getY(); + for (int steps = 0; steps < SCAN_LIMIT; steps++) { + BlockPos below = new BlockPos(cursor.getX(), floorY - 1, cursor.getZ()); + if (!level.getBlockState(below).isAir()) { + break; + } + floorY--; + } + + int ceilingY = cursor.getY(); + for (int steps = 0; steps < SCAN_LIMIT; steps++) { + BlockPos above = new BlockPos(cursor.getX(), ceilingY + 1, cursor.getZ()); + if (!level.getBlockState(above).isAir()) { + break; + } + ceilingY++; + } + + int clearance = ceilingY - floorY; + if (clearance < MIN_NATURAL_CLEARANCE) { + return null; + } + + BlockPos center = new BlockPos(cursor.getX(), (floorY + ceilingY) / 2, cursor.getZ()); + return new NaturalPocket(center); + } + + private static List buildBlobs(RandomSource random, BlockPos center) { + int chamberHeight = CHAMBER_HEIGHT_MIN + random.nextInt(CHAMBER_HEIGHT_MAX - CHAMBER_HEIGHT_MIN + 1); + int baseY = center.getY() - chamberHeight / 2; + + List blobs = new ArrayList<>(BLOB_LAYER_COUNT); + double driftX = center.getX(); + double driftZ = center.getZ(); + + for (int i = 0; i < BLOB_LAYER_COUNT; i++) { + double t = (double) i / (BLOB_LAYER_COUNT - 1); + double taper = Math.sin(Math.PI * t); + int layerY = baseY + (int) Math.round(t * chamberHeight); + + double baseRadius = CHAMBER_RADIUS_MIN + (CHAMBER_RADIUS_MAX - CHAMBER_RADIUS_MIN) * taper; + double jitter = 0.85 + random.nextDouble() * 0.3; + double horizontalRadius = Math.max(2.5, baseRadius * jitter); + double verticalRadius = Math.max(3.0, chamberHeight / (double) BLOB_LAYER_COUNT * 1.6); + + driftX = clampDrift(driftX + (random.nextDouble() - 0.5) * 3.0, center.getX()); + driftZ = clampDrift(driftZ + (random.nextDouble() - 0.5) * 3.0, center.getZ()); + + blobs.add(new Blob(driftX, layerY, driftZ, horizontalRadius, verticalRadius)); + } + + return blobs; + } + + private static double clampDrift(double value, double center) { + return Math.max(center - MAX_DRIFT_FROM_CENTER, Math.min(center + MAX_DRIFT_FROM_CENTER, value)); + } + + private static int carveBlobs(WorldGenLevel level, List blobs) { + int minX = Integer.MAX_VALUE; + int maxX = Integer.MIN_VALUE; + int minY = Integer.MAX_VALUE; + int maxY = Integer.MIN_VALUE; + int minZ = Integer.MAX_VALUE; + int maxZ = Integer.MIN_VALUE; + + for (Blob blob : blobs) { + minX = Math.min(minX, (int) Math.floor(blob.x() - blob.horizontalRadius())); + maxX = Math.max(maxX, (int) Math.ceil(blob.x() + blob.horizontalRadius())); + minY = Math.min(minY, (int) Math.floor(blob.y() - blob.verticalRadius())); + maxY = Math.max(maxY, (int) Math.ceil(blob.y() + blob.verticalRadius())); + minZ = Math.min(minZ, (int) Math.floor(blob.z() - blob.horizontalRadius())); + maxZ = Math.max(maxZ, (int) Math.ceil(blob.z() + blob.horizontalRadius())); + } + + BlockState caveAir = Blocks.CAVE_AIR.defaultBlockState(); + int processed = 0; + int carved = 0; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX && processed < MAX_PROCESSED_POSITIONS; x++) { + for (int y = minY; y <= maxY && processed < MAX_PROCESSED_POSITIONS; y++) { + for (int z = minZ; z <= maxZ && processed < MAX_PROCESSED_POSITIONS; z++) { + processed++; + + if (!insideAnyBlob(blobs, x, y, z)) { + continue; + } + + mutable.set(x, y, z); + BlockState state = level.getBlockState(mutable); + if (state.is(Blocks.BEDROCK) || !state.getFluidState().isEmpty()) { + continue; + } + if (level.getBlockEntity(mutable) != null) { + continue; + } + if (state.isAir()) { + continue; + } + if (!state.is(AntarchyTags.Blocks.ROLLY_CAVERN_CARVEABLE)) { + continue; + } + + level.setBlock(mutable, caveAir, 2); + carved++; + } + } + } + + return carved; + } + + private static boolean insideAnyBlob(List blobs, int x, int y, int z) { + for (Blob blob : blobs) { + double dx = (x + 0.5 - blob.x()) / blob.horizontalRadius(); + double dy = (y + 0.5 - blob.y()) / blob.verticalRadius(); + double dz = (z + 0.5 - blob.z()) / blob.horizontalRadius(); + if (dx * dx + dy * dy + dz * dz <= 1.0) { + return true; + } + } + return false; + } + + private static void decorateFloor(WorldGenLevel level, RandomSource random, List blobs) { + Blob widest = widestBlob(blobs); + Block glowcap = getBlock(GLOWCAP_MUSHROOM_ID); + Block amberMoss = getBlock(AMBER_MOSS_BLOCK_ID); + + for (int attempt = 0; attempt < FLOOR_DECORATION_ATTEMPTS; attempt++) { + double angle = random.nextDouble() * Math.PI * 2; + double distance = random.nextDouble() * widest.horizontalRadius(); + int x = (int) Math.round(widest.x() + Math.cos(angle) * distance); + int z = (int) Math.round(widest.z() + Math.sin(angle) * distance); + + BlockPos floorPos = findFloor(level, x, (int) Math.round(widest.y()), z); + if (floorPos == null) { + continue; + } + + BlockPos abovePos = floorPos.above(); + if (!level.getBlockState(abovePos).isAir()) { + continue; + } + + int roll = random.nextInt(100); + if (roll < 28) { + level.setBlock(floorPos, Blocks.MOSS_BLOCK.defaultBlockState(), 2); + if (random.nextBoolean()) { + level.setBlock(abovePos, Blocks.MOSS_CARPET.defaultBlockState(), 2); + } + } else if (roll < 40) { + level.setBlock(abovePos, Blocks.GRASS.defaultBlockState(), 2); + } else if (roll < 50) { + level.setBlock(abovePos, Blocks.SMALL_DRIPLEAF.defaultBlockState(), 2); + } else if (roll < 58) { + placeBigDripleaf(level, random, abovePos); + } else if (roll < 74 && glowcap != null && amberMoss != null) { + level.setBlock(floorPos, amberMoss.defaultBlockState(), 2); + level.setBlock(abovePos, glowcap.defaultBlockState(), 2); + } + } + } + + private static void placeBigDripleaf(WorldGenLevel level, RandomSource random, BlockPos basePos) { + int height = 1 + random.nextInt(3); + BlockPos.MutableBlockPos cursor = basePos.mutable(); + for (int i = 0; i < height; i++) { + if (!level.getBlockState(cursor).isAir()) { + return; + } + level.setBlock(cursor, Blocks.BIG_DRIPLEAF_STEM.defaultBlockState(), 2); + cursor.move(Direction.UP); + } + if (level.getBlockState(cursor).isAir()) { + level.setBlock(cursor, Blocks.BIG_DRIPLEAF.defaultBlockState().setValue(BlockStateProperties.TILT, Tilt.NONE), 2); + } + } + + private static void decorateCeiling(WorldGenLevel level, RandomSource random, List blobs) { + Blob widest = widestBlob(blobs); + + for (int attempt = 0; attempt < CEILING_DECORATION_ATTEMPTS; attempt++) { + double angle = random.nextDouble() * Math.PI * 2; + double distance = random.nextDouble() * widest.horizontalRadius(); + int x = (int) Math.round(widest.x() + Math.cos(angle) * distance); + int z = (int) Math.round(widest.z() + Math.sin(angle) * distance); + + BlockPos ceilingAttach = findCeiling(level, x, (int) Math.round(widest.y()), z); + if (ceilingAttach == null) { + continue; + } + + BlockPos hangPos = ceilingAttach.below(); + if (!level.getBlockState(hangPos).isAir()) { + continue; + } + + int roll = random.nextInt(100); + if (roll < 30) { + level.setBlock(hangPos, Blocks.SPORE_BLOSSOM.defaultBlockState(), 2); + } else { + placeCaveVineCurtain(level, random, hangPos); + } + } + } + + private static void placeCaveVineCurtain(WorldGenLevel level, RandomSource random, BlockPos hangPos) { + int length = availableAirLength(level, hangPos, MAX_VINE_LENGTH); + if (length <= 0) { + return; + } + + BlockPos.MutableBlockPos cursor = hangPos.mutable(); + for (int i = 0; i < length - 1; i++) { + boolean berries = random.nextInt(4) == 0; + level.setBlock(cursor, Blocks.CAVE_VINES_PLANT.defaultBlockState().setValue(CaveVinesBlock.BERRIES, berries), 2); + cursor.move(Direction.DOWN); + } + boolean tipBerries = random.nextInt(3) == 0; + level.setBlock(cursor, Blocks.CAVE_VINES.defaultBlockState().setValue(CaveVinesBlock.BERRIES, tipBerries), 2); + } + + private static int availableAirLength(WorldGenLevel level, BlockPos start, int cap) { + BlockPos.MutableBlockPos cursor = start.mutable(); + int length = 0; + while (length < cap && level.getBlockState(cursor).isAir()) { + length++; + cursor.move(Direction.DOWN); + } + return length; + } + + private static BlockPos findFloor(WorldGenLevel level, int x, int startY, int z) { + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(x, startY, z); + for (int steps = 0; steps < SCAN_LIMIT; steps++) { + BlockState state = level.getBlockState(cursor); + BlockState below = level.getBlockState(cursor.below()); + if (state.isAir() && !below.isAir() && below.isFaceSturdy(level, cursor.below(), Direction.UP)) { + return cursor.immutable(); + } + cursor.move(Direction.DOWN); + } + return null; + } + + private static BlockPos findCeiling(WorldGenLevel level, int x, int startY, int z) { + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(x, startY, z); + for (int steps = 0; steps < SCAN_LIMIT; steps++) { + BlockState state = level.getBlockState(cursor); + BlockState above = level.getBlockState(cursor.above()); + if (state.isAir() && !above.isAir() && above.isFaceSturdy(level, cursor.above(), Direction.DOWN)) { + return cursor.above().immutable(); + } + cursor.move(Direction.UP); + } + return null; + } + + private static Blob widestBlob(List blobs) { + Blob widest = blobs.get(0); + for (Blob blob : blobs) { + if (blob.horizontalRadius() > widest.horizontalRadius()) { + widest = blob; + } + } + return widest; + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private record NaturalPocket(BlockPos center) { + } + + private record Blob(double x, double y, double z, double horizontalRadius, double verticalRadius) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/SpitBugEggPatchFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/SpitBugEggPatchFeature.java new file mode 100644 index 00000000..828a610d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/SpitBugEggPatchFeature.java @@ -0,0 +1,90 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.SpitBugEggBlock; +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 SpitBugEggPatchFeature extends Feature { + private static final ResourceLocation SPIT_BUG_EGG_ID = new ResourceLocation(Antarchy.MODID, "spit_bug_egg"); + private static final int SEARCH_RADIUS = 7; + private static final int VERTICAL_SCAN = 18; + private static final int SEARCH_ATTEMPTS = 32; + private static final int MIN_PLACEMENTS = 2; + private static final int MAX_PLACEMENTS = 5; + + public SpitBugEggPatchFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block eggBlock = getBlock(SPIT_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; + int targetPlacements = MIN_PLACEMENTS + random.nextInt(MAX_PLACEMENTS - MIN_PLACEMENTS + 1); + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS && placements < targetPlacements; 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() - 1, startY + VERTICAL_SCAN); + + BlockPos spot = null; + for (int y = minY; y <= maxY; y++) { + mutable.set(x, y, z); + if (isValidFloorSpot(level, mutable)) { + spot = mutable.immutable(); + break; + } + } + + if (spot == null) { + continue; + } + BlockState eggState = eggBlock.defaultBlockState() + .setValue(SpitBugEggBlock.ROTATED, random.nextBoolean()); + level.setBlock(spot, eggState, 3); + placedAny = true; + placements++; + } + + return placedAny; + } + + private static boolean isValidFloorSpot(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + if (!state.isAir()) { + return false; + } + + BlockPos belowPos = pos.below(); + BlockState belowState = level.getBlockState(belowPos); + return belowState.isFaceSturdy(level, belowPos, Direction.UP); + } + + 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/BrutalflyCocoonFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/BrutalflyCocoonFeature.java new file mode 100644 index 00000000..bb0aa81c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/BrutalflyCocoonFeature.java @@ -0,0 +1,161 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +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.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public class BrutalflyCocoonFeature extends Feature { + private static final int MAX_ANCHOR_Y = 160; + private static final int COCOON_CLEAR_RADIUS = 1; + private static final int COCOON_CLEAR_MIN_Y_OFFSET = -16; + private static final int COCOON_CLEAR_MAX_Y_OFFSET = -1; + private static final int MIN_CANOPY_SUPPORTS = 4; + + public BrutalflyCocoonFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + int chunkX = origin.getX() & ~15; + int chunkZ = origin.getZ() & ~15; + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int attempt = 0; attempt < 12; attempt++) { + int x = chunkX + 1 + random.nextInt(14); + int z = chunkZ + 1 + random.nextInt(14); + int groundY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z); + if (groundY <= level.getMinBuildHeight() + 12) { + continue; + } + + int searchTopY = Math.min(MAX_ANCHOR_Y, level.getMaxBuildHeight() - 2); + for (int y = searchTopY; y > groundY + 12; y--) { + pos.set(x, y, z); + if (!level.getBlockState(pos).is(BlockTags.LOGS)) { + continue; + } + + BlockPos anchor = pos.immutable(); + if (findCocoonBlocker(level, anchor) != null) { + continue; + } + + return placeCocoonSpawner(level, anchor); + } + } + + return false; + } + + static int maxAnchorY() { + return MAX_ANCHOR_Y; + } + + static boolean canUseAnchor(WorldGenLevel level, BlockPos anchor) { + return findCocoonBlocker(level, anchor) == null; + } + + static boolean placeCocoonSpawner(WorldGenLevel level, BlockPos anchor) { + if (!canUseAnchor(level, anchor)) { + return false; + } + + clearCocoonVolume(level, anchor); + setCocoonSpawnerMarker(level, anchor); + return true; + } + + static void setCocoonSpawnerMarker(WorldGenLevel level, BlockPos anchor) { + Block marker = AntarchyObjects.BRUTALFLY_COCOON_SPAWNER.get(); + BlockPos markerPos = anchor.below(); + level.setBlock(markerPos, marker.defaultBlockState(), 19); + level.scheduleTick(markerPos, marker, 20); + } + + static @org.jetbrains.annotations.Nullable BlockPos findCocoonBlocker(WorldGenLevel level, BlockPos anchor) { + if (!hasCanopySupport(level, anchor)) { + return anchor; + } + + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + for (int dy = COCOON_CLEAR_MIN_Y_OFFSET; dy <= COCOON_CLEAR_MAX_Y_OFFSET; dy++) { + int worldY = anchor.getY() + dy; + for (int dx = -COCOON_CLEAR_RADIUS; dx <= COCOON_CLEAR_RADIUS; dx++) { + for (int dz = -COCOON_CLEAR_RADIUS; dz <= COCOON_CLEAR_RADIUS; dz++) { + if (dy == 0 && dx == 0 && dz == 0) { + continue; + } + + pos.set(anchor.getX() + dx, worldY, anchor.getZ() + dz); + if (!isClearableForCocoon(level.getBlockState(pos))) { + return pos.immutable(); + } + } + } + } + + return null; + } + + static void clearCocoonVolume(WorldGenLevel level, BlockPos anchor) { + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + for (int dy = COCOON_CLEAR_MIN_Y_OFFSET; dy <= COCOON_CLEAR_MAX_Y_OFFSET; dy++) { + int worldY = anchor.getY() + dy; + for (int dx = -COCOON_CLEAR_RADIUS; dx <= COCOON_CLEAR_RADIUS; dx++) { + for (int dz = -COCOON_CLEAR_RADIUS; dz <= COCOON_CLEAR_RADIUS; dz++) { + if (dy == 0 && dx == 0 && dz == 0) { + continue; + } + + pos.set(anchor.getX() + dx, worldY, anchor.getZ() + dz); + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 19); + } + } + } + } + + private static boolean hasCanopySupport(WorldGenLevel level, BlockPos anchor) { + int supports = 0; + for (int dx = -1; dx <= 1; dx++) { + for (int dz = -1; dz <= 1; dz++) { + if (dx == 0 && dz == 0) { + continue; + } + + BlockState neighbor = level.getBlockState(anchor.offset(dx, 0, dz)); + if (neighbor.is(BlockTags.LOGS) || neighbor.is(BlockTags.LEAVES)) { + supports++; + } + } + } + + BlockState above = level.getBlockState(anchor.above()); + if (above.is(BlockTags.LOGS) || above.is(BlockTags.LEAVES)) { + supports += 2; + } + + return supports >= MIN_CANOPY_SUPPORTS; + } + + private static boolean isClearableForCocoon(BlockState state) { + return state.isAir() + || state.canBeReplaced() + || state.is(BlockTags.LEAVES) + || state.is(BlockTags.LOGS) + || !state.getFluidState().isEmpty(); + } +} 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 new file mode 100644 index 00000000..73c77ddd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java @@ -0,0 +1,241 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +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.Blocks; +import net.minecraft.world.level.block.SeaPickleBlock; +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.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public class CoralSpikeFeature extends Feature { + + private record CoralSet( + Block block, + Block coral, + Block wallFan, + Block floorFan, + Block deadBlock, + Block deadCoral, + Block deadWallFan, + Block deadFloorFan + ) {} + + private static final CoralSet[] VANILLA_CORAL_SETS = { + new CoralSet(Blocks.TUBE_CORAL_BLOCK, Blocks.TUBE_CORAL, Blocks.TUBE_CORAL_WALL_FAN, Blocks.TUBE_CORAL_FAN, Blocks.DEAD_TUBE_CORAL_BLOCK, Blocks.DEAD_TUBE_CORAL, Blocks.DEAD_TUBE_CORAL_WALL_FAN, Blocks.DEAD_TUBE_CORAL_FAN), + new CoralSet(Blocks.BRAIN_CORAL_BLOCK, Blocks.BRAIN_CORAL, Blocks.BRAIN_CORAL_WALL_FAN, Blocks.BRAIN_CORAL_FAN, Blocks.DEAD_BRAIN_CORAL_BLOCK, Blocks.DEAD_BRAIN_CORAL, Blocks.DEAD_BRAIN_CORAL_WALL_FAN, Blocks.DEAD_BRAIN_CORAL_FAN), + new CoralSet(Blocks.BUBBLE_CORAL_BLOCK, Blocks.BUBBLE_CORAL, Blocks.BUBBLE_CORAL_WALL_FAN, Blocks.BUBBLE_CORAL_FAN, Blocks.DEAD_BUBBLE_CORAL_BLOCK, Blocks.DEAD_BUBBLE_CORAL, Blocks.DEAD_BUBBLE_CORAL_WALL_FAN, Blocks.DEAD_BUBBLE_CORAL_FAN), + new CoralSet(Blocks.FIRE_CORAL_BLOCK, Blocks.FIRE_CORAL, Blocks.FIRE_CORAL_WALL_FAN, Blocks.FIRE_CORAL_FAN, Blocks.DEAD_FIRE_CORAL_BLOCK, Blocks.DEAD_FIRE_CORAL, Blocks.DEAD_FIRE_CORAL_WALL_FAN, Blocks.DEAD_FIRE_CORAL_FAN), + new CoralSet(Blocks.HORN_CORAL_BLOCK, Blocks.HORN_CORAL, Blocks.HORN_CORAL_WALL_FAN, Blocks.HORN_CORAL_FAN, Blocks.DEAD_HORN_CORAL_BLOCK, Blocks.DEAD_HORN_CORAL, Blocks.DEAD_HORN_CORAL_WALL_FAN, Blocks.DEAD_HORN_CORAL_FAN), + }; + + public CoralSpikeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + int seaLevel = level.getSeaLevel(); + + int spikes = 1 + random.nextInt(3); + boolean placed = false; + for (int i = 0; i < spikes; i++) { + int offX = random.nextInt(11) - 5; + int offZ = random.nextInt(11) - 5; + placed |= placeSpike(level, random, origin.offset(offX, 0, offZ), seaLevel); + } + return placed; + } + + private boolean placeSpike(WorldGenLevel level, RandomSource random, BlockPos origin, int seaLevel) { + int floorY = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, origin.getX(), origin.getZ()); + if (floorY >= seaLevel) return false; + + 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 + + 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 + + boolean placed = false; + + for (int dy = 0; dy < totalHeight; dy++) { + 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)); + + for (int dx = -(radius + 1); dx <= radius + 1; dx++) { + for (int dz = -(radius + 1); dz <= radius + 1; dz++) { + double dist = Math.sqrt( + (origin.getX() + dx - centerX) * (origin.getX() + dx - centerX) + + (origin.getZ() + dz - centerZ) * (origin.getZ() + dz - centerZ)); + + if (dist > radius + 0.5) continue; + + BlockPos pos = new BlockPos(origin.getX() + dx, blockY, origin.getZ() + dz); + if (!canReplace(level.getBlockState(pos))) continue; + + boolean inWater = touchesWater(level, pos); + level.setBlock(pos, inWater + ? coral.block().defaultBlockState() + : coral.deadBlock().defaultBlockState(), + 2); + placed = true; + + if (dist >= radius - 0.6 && radius > 0) { + BlockPos above = pos.above(); + if (canReplace(level.getBlockState(above))) { + boolean aboveInWater = level.getBlockState(above).is(Blocks.WATER); + if (random.nextFloat() < 0.35f && aboveInWater) { + level.setBlock(above, + coral.coral().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, true), + 2); + } + } + } + + if (dist >= radius - 0.5) { + for (Direction dir : Direction.Plane.HORIZONTAL) { + if (random.nextFloat() >= 0.4f) continue; + BlockPos fanPos = pos.relative(dir); + BlockState existing = level.getBlockState(fanPos); + if (!existing.isAir() && !existing.is(Blocks.WATER)) continue; + boolean fanInWater = existing.is(Blocks.WATER); + if (fanInWater) { + level.setBlock(fanPos, + coral.wallFan().defaultBlockState() + .setValue(BlockStateProperties.HORIZONTAL_FACING, dir) + .setValue(BlockStateProperties.WATERLOGGED, true), + 2); + } else { + level.setBlock(fanPos, + coral.deadWallFan().defaultBlockState() + .setValue(BlockStateProperties.HORIZONTAL_FACING, dir) + .setValue(BlockStateProperties.WATERLOGGED, false), + 2); + } + } + } + } + } + } + + // 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; + int fz = origin.getZ() + random.nextInt(13) - 6; + int fy = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, fx, fz); + BlockPos decorPos = new BlockPos(fx, fy, fz); + + if (!canReplace(level.getBlockState(decorPos))) continue; + BlockState below = level.getBlockState(decorPos.below()); + if (below.isAir() || !below.isFaceSturdy(level, decorPos.below(), Direction.UP)) continue; + + boolean decorInWater = level.getBlockState(decorPos).is(Blocks.WATER); + float roll = random.nextFloat(); + CoralSet randomCoral = coralSets[random.nextInt(coralSets.length)]; + + if (roll < 0.35f) { + if (decorInWater) { + BlockState coralState = randomCoral.coral().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, true); + if (coralState.canSurvive(level, decorPos)) { + level.setBlock(decorPos, coralState, 2); + } + } else { + BlockState coralState = randomCoral.deadCoral().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, false); + if (coralState.canSurvive(level, decorPos)) { + level.setBlock(decorPos, coralState, 2); + } + } + } else if (roll < 0.65f) { + if (decorInWater) { + BlockState fanState = randomCoral.floorFan().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, true); + if (fanState.canSurvive(level, decorPos)) { + level.setBlock(decorPos, fanState, 2); + } + } else { + BlockState fanState = randomCoral.deadFloorFan().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, false); + if (fanState.canSurvive(level, decorPos)) { + level.setBlock(decorPos, fanState, 2); + } + } + } 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)) { + level.setBlock(decorPos, pickle, 2); + } + } + } + + return placed; + } + + private static boolean touchesWater(WorldGenLevel level, BlockPos pos) { + if (level.getBlockState(pos).is(Blocks.WATER)) return true; + for (Direction dir : Direction.values()) { + if (level.getBlockState(pos.relative(dir)).is(Blocks.WATER)) return true; + } + return false; + } + + private static boolean canReplace(BlockState state) { + return state.isAir() || state.is(Blocks.WATER) || state.canBeReplaced(); + } + + private static CoralSet[] coralSets() { + CoralSet starCoral = new CoralSet( + lookupBlock("star_coral_block", Blocks.TUBE_CORAL_BLOCK), + lookupBlock("star_coral", Blocks.TUBE_CORAL), + lookupBlock("star_coral_wall_fan", Blocks.TUBE_CORAL_WALL_FAN), + lookupBlock("star_coral_fan", Blocks.TUBE_CORAL_FAN), + lookupBlock("dead_star_coral_block", Blocks.DEAD_TUBE_CORAL_BLOCK), + lookupBlock("dead_star_coral", Blocks.DEAD_TUBE_CORAL), + lookupBlock("dead_star_coral_wall_fan", Blocks.DEAD_TUBE_CORAL_WALL_FAN), + lookupBlock("dead_star_coral_fan", Blocks.DEAD_TUBE_CORAL_FAN) + ); + + CoralSet[] combined = new CoralSet[VANILLA_CORAL_SETS.length + 1]; + System.arraycopy(VANILLA_CORAL_SETS, 0, combined, 0, VANILLA_CORAL_SETS.length); + combined[VANILLA_CORAL_SETS.length] = starCoral; + return combined; + } + + private static Block lookupBlock(String path, Block fallback) { + ResourceLocation id = new ResourceLocation(Antarchy.MODID, path); + return BuiltInRegistries.BLOCK.getOptional(id).orElse(fallback); + } +} 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 new file mode 100644 index 00000000..d5d9a118 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -0,0 +1,389 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.datafixers.util.Pair; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import java.util.stream.Stream; +import net.minecraft.core.Holder; +import net.minecraft.core.QuartPos; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; +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 { + 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") + ); + 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 MapCodec CODEC = RecordCodecBuilder.mapCodec(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 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) { + 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)) + .findFirst() + .orElse(null); + } + + 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; } + + @Override + protected com.mojang.serialization.Codec codec() { + return CODEC.codec(); + } + + @Override + protected Stream> collectPossibleBiomes() { + return this.delegate.possibleBiomes().stream(); + } + 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)) { + 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"); + } +} 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 new file mode 100644 index 00000000..276021ad --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaCloudFeature.java @@ -0,0 +1,114 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +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; + +/** + * 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); + } + + private enum CloudSize { + WISPY, + SMALL, + LARGE + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + RandomSource random = context.random(); + + CloudSize size = pickSize(random); + int banks = switch (size) { + case WISPY -> 1 + random.nextInt(2); + case SMALL -> 1; + case LARGE -> 3 + random.nextInt(3); + }; + int spread = switch (size) { + case WISPY -> 20; + case SMALL -> 10; + case LARGE -> 28; + }; + + boolean placedAny = false; + for (int i = 0; i < banks; i++) { + BlockPos center = origin.offset( + random.nextInt(spread * 2 + 1) - spread, + random.nextInt(9) - 4, + random.nextInt(spread * 2 + 1) - spread); + int[] radii = rollRadii(size, random); + placedAny |= placeBank(level, center, radii[0], radii[1], radii[2], size, random); + } + + return placedAny; + } + + private static CloudSize pickSize(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.40F) return CloudSize.WISPY; + if (roll < 0.75F) return CloudSize.SMALL; + return CloudSize.LARGE; + } + + private static int[] rollRadii(CloudSize size, RandomSource random) { + return switch (size) { + case WISPY -> new int[]{5 + random.nextInt(5), 1, 5 + random.nextInt(5)}; + case SMALL -> new int[]{2 + random.nextInt(2), 1 + random.nextInt(2), 2 + random.nextInt(2)}; + case LARGE -> new int[]{6 + random.nextInt(6), 3 + random.nextInt(4), 6 + random.nextInt(6)}; + }; + } + + private boolean placeBank(WorldGenLevel level, BlockPos center, int radiusX, int radiusY, int radiusZ, CloudSize size, RandomSource random) { + int xRange = Math.max(1, radiusX); + 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; + + boolean placedAny = false; + for (int x = -xRange; x <= xRange; x++) { + for (int y = -yRange; y <= yRange; y++) { + for (int z = -zRange; z <= zRange; z++) { + double normalized = (x * x) / (double) (xRange * xRange) + + (y * y) / (double) (yRange * yRange) + + (z * z) / (double) (zRange * zRange); + if (normalized > 1.0D + random.nextDouble() * 0.1D) { + continue; + } + + if (normalized > edgeStart && random.nextFloat() > edgeFillChance) { + continue; + } + + BlockPos target = center.offset(x, y, z); + BlockState current = level.getBlockState(target); + if (!current.isAir() && !current.canBeReplaced()) { + continue; + } + + level.setBlock(target, cloud, 2); + placedAny = true; + } + } + } + + return placedAny; + } +} 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 new file mode 100644 index 00000000..bb81c3ed --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java @@ -0,0 +1,593 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.sizeablefoliage.content.block.BigBushBlock; +import com.craisinlord.sizeablefoliage.content.block.VeryTallGrassBlock; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DoublePlantBlock; +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 class ElythiaFloraFeature extends Feature { + private static final String SIZEABLE_FOLIAGE_MODID = "sizeable_foliage"; + private static final ResourceLocation CAMELLIA_ID = new ResourceLocation("antarchy", "camellia"); + private static final ResourceLocation SPIDER_LILY_ID = new ResourceLocation("antarchy", "spider_lily"); + + private final Variant variant; + + public ElythiaFloraFeature(Codec codec, Variant variant) { + super(codec); + this.variant = variant; + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + int attempts = switch (this.variant) { + case FOREST -> 185; + case MEADOW -> 95; + case PEACH_FOREST -> 120; + case BUTTERFLY_FIELDS -> 150; + case FLOWER_FOREST_MILKWEED -> 14; + }; + int radius = switch (this.variant) { + case FOREST -> 8; + case MEADOW, PEACH_FOREST -> 14; + case BUTTERFLY_FIELDS -> 18; + case FLOWER_FOREST_MILKWEED -> 8; + }; + boolean placedAny = false; + + int torchflowerPatchRolls = switch (this.variant) { + case BUTTERFLY_FIELDS -> 2 + random.nextInt(3); + case PEACH_FOREST -> 1; + case FLOWER_FOREST_MILKWEED -> 0; + default -> 1; + }; + for (int i = 0; i < torchflowerPatchRolls; i++) { + float torchflowerChance = switch (this.variant) { + case FOREST -> 0.24F; + case MEADOW -> 0.42F; + case PEACH_FOREST -> 0.08F; + case BUTTERFLY_FIELDS -> 0.24F; + case FLOWER_FOREST_MILKWEED -> 0.0F; + }; + if (random.nextFloat() < torchflowerChance) { + placedAny |= this.placeTorchflowerPatch(level, origin, random); + } + } + + if (random.nextFloat() < switch (this.variant) { + case MEADOW -> 0.1F; + case PEACH_FOREST -> 0.0F; + case BUTTERFLY_FIELDS -> 0.12F; + case FOREST -> 0.05F; + case FLOWER_FOREST_MILKWEED -> 0.0F; + }) { + placedAny |= this.placePitcherPatch(level, origin, random); + } + if (random.nextFloat() < switch (this.variant) { + case MEADOW -> 0.16F; + case PEACH_FOREST -> 0.0F; + case BUTTERFLY_FIELDS -> 0.95F; + case FOREST -> 0.06F; + case FLOWER_FOREST_MILKWEED -> 0.18F; + }) { + placedAny |= this.placeMilkweedPatch(level, origin, random, AntarchyObjects.ORANGE_MILKWEED.get()); + } + if (random.nextFloat() < switch (this.variant) { + case MEADOW -> 0.16F; + case PEACH_FOREST -> 0.0F; + case BUTTERFLY_FIELDS -> 0.95F; + case FOREST -> 0.06F; + case FLOWER_FOREST_MILKWEED -> 0.18F; + }) { + placedAny |= this.placeMilkweedPatch(level, origin, random, AntarchyObjects.PINK_MILKWEED.get()); + } + if (this.variant == Variant.PEACH_FOREST && random.nextFloat() < 0.14F) { + placedAny |= this.placeMilkweedPatch(level, origin, random, antarchyBlock(CAMELLIA_ID)); + } + + if (this.variant == Variant.FOREST || this.variant == Variant.PEACH_FOREST) { + placedAny |= this.placeBigBushes(level, origin, random, radius); + } + + 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); + BlockPos plantPos = new BlockPos(x, y, z); + BlockPos groundPos = plantPos.below(); + + if (!isValidPlantSpot(level, plantPos, groundPos)) { + continue; + } + + normalizePeachForestGround(level, groundPos, this.variant); + maybeOvergrowGround(level, groundPos, random, this.variant); + if (placeSelectedPlant(level, plantPos, groundPos, random)) { + placedAny = true; + } + } + + placedAny |= this.placeSeagrass(level, origin, random, radius); + + return placedAny; + } + + private boolean placeSelectedPlant(WorldGenLevel level, BlockPos plantPos, BlockPos groundPos, RandomSource random) { + if (this.variant == Variant.BUTTERFLY_FIELDS) { + float roll = random.nextFloat(); + if (roll < 0.18F) { + return placeDouble(level, plantPos, AntarchyObjects.ORANGE_MILKWEED.get().defaultBlockState()); + } + if (roll < 0.36F) { + return placeDouble(level, plantPos, AntarchyObjects.PINK_MILKWEED.get().defaultBlockState()); + } + if (roll < 0.84F) { + return placeSingle(level, plantPos, Blocks.GRASS); + } + return placeDouble(level, plantPos, Blocks.TALL_GRASS.defaultBlockState()); + } + + if (this.variant == Variant.FLOWER_FOREST_MILKWEED) { + float roll = random.nextFloat(); + if (roll < 0.04F) { + return placeDouble(level, plantPos, AntarchyObjects.ORANGE_MILKWEED.get().defaultBlockState()); + } + if (roll < 0.08F) { + return placeDouble(level, plantPos, AntarchyObjects.PINK_MILKWEED.get().defaultBlockState()); + } + if (roll < 0.62F) { + return placeSingle(level, plantPos, Blocks.GRASS); + } + if (roll < 0.84F) { + return placeSingle(level, plantPos, Blocks.FERN); + } + return placeDouble(level, plantPos, Blocks.LARGE_FERN.defaultBlockState()); + } + + if (this.variant == Variant.PEACH_FOREST) { + float roll = random.nextFloat(); + if (roll < 0.01F) { + return placeSingle(level, plantPos, antarchyBlock(SPIDER_LILY_ID)); + } + if (roll < 0.58F) { + return placeSingle(level, plantPos, Blocks.GRASS); + } + return placeSingle(level, plantPos, veryShortGrass()); + } + + float roll = random.nextFloat(); + if (this.variant == Variant.MEADOW) { + if (roll < 0.34F) { + return placeSingle(level, plantPos, Blocks.GRASS); + } + if (roll < 0.78F) { + return placeSingle(level, plantPos, veryShortGrass()); + } + if (roll < 0.81F) { + return placeDouble(level, plantPos, Blocks.TALL_GRASS.defaultBlockState()); + } + return placeSingle(level, plantPos, veryShortGrass()); + } + if (roll < 0.14F) { + return placeSingle(level, plantPos, Blocks.GRASS); + } + if (roll < 0.52F) { + return placeSingle(level, plantPos, veryShortGrass()); + } + if (roll < 0.72F) { + return placeSingle(level, plantPos, Blocks.FERN); + } + if (roll < 0.80F) { + return placeDouble(level, plantPos, Blocks.TALL_GRASS.defaultBlockState()); + } + if (roll < 0.84F) { + return placeVeryTall(level, plantPos, veryTallGrass()); + } + return placeDouble(level, plantPos, Blocks.LARGE_FERN.defaultBlockState()); + } + + private static Block veryShortGrass() { + Block block = BuiltInRegistries.BLOCK.get(new ResourceLocation(SIZEABLE_FOLIAGE_MODID, "very_short_grass")); + return block == Blocks.AIR ? Blocks.GRASS : block; + } + + private static Block veryTallGrass() { + Block block = BuiltInRegistries.BLOCK.get(new ResourceLocation(SIZEABLE_FOLIAGE_MODID, "very_tall_grass")); + return block == Blocks.AIR ? Blocks.TALL_GRASS : block; + } + + private static Block torchflowerBush() { + Block block = BuiltInRegistries.BLOCK.get(new ResourceLocation(SIZEABLE_FOLIAGE_MODID, "torchflower_bush")); + return block == Blocks.AIR ? Blocks.TORCHFLOWER : block; + } + + private static Block antarchyBlock(ResourceLocation id) { + Block block = BuiltInRegistries.BLOCK.get(id); + if (block == Blocks.AIR) { + throw new IllegalStateException("Missing block: " + id); + } + return block; + } + + private boolean placeBigBushes(WorldGenLevel level, BlockPos origin, RandomSource random, int radius) { + Block bushBlock = BuiltInRegistries.BLOCK.get(new ResourceLocation(SIZEABLE_FOLIAGE_MODID, "big_bush")); + if (!(bushBlock instanceof BigBushBlock)) { + return false; + } + + boolean placed = false; + int bushAttempts = switch (this.variant) { + case PEACH_FOREST -> 1 + random.nextInt(2); + default -> 12 + random.nextInt(7); + }; + 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); + BlockPos plantPos = new BlockPos(x, y, z); + + if (!isValidPlantSpot(level, plantPos, plantPos.below())) { + continue; + } + + float roll = random.nextFloat(); + int age = roll < 0.4F ? 0 : roll < 0.75F ? 1 : 2; + BlockState bushState = bushBlock.defaultBlockState().setValue(BigBushBlock.AGE, age); + if (age > 0) { + bushState = bushState.setValue(BigBushBlock.FACING, Direction.Plane.HORIZONTAL.getRandomDirection(random)); + } + + if (!isFootprintInsideChunk(origin, plantPos, bushState) || !canPlaceBigBush(level, plantPos, bushState)) { + continue; + } + + BigBushBlock.placeBushBlocks(level, plantPos, bushState, 2); + placed = true; + } + return placed; + } + + private static boolean isFootprintInsideChunk(BlockPos featureOrigin, BlockPos bushOrigin, BlockState bushState) { + ChunkPos chunk = new ChunkPos(featureOrigin); + int minX = chunk.getMinBlockX() + 1; + int maxX = chunk.getMaxBlockX() - 1; + int minZ = chunk.getMinBlockZ() + 1; + int maxZ = chunk.getMaxBlockZ() - 1; + if (!isWithin(bushOrigin, minX, maxX, minZ, maxZ)) { + return false; + } + for (BlockPos partPos : BigBushBlock.partPositions(bushState, bushOrigin)) { + if (!isWithin(partPos, minX, maxX, minZ, maxZ)) { + return false; + } + } + return true; + } + + private static boolean isWithin(BlockPos pos, int minX, int maxX, int minZ, int maxZ) { + return pos.getX() >= minX && pos.getX() <= maxX && pos.getZ() >= minZ && pos.getZ() <= maxZ; + } + + private static boolean canPlaceBigBush(WorldGenLevel level, BlockPos originPos, BlockState bushState) { + if (bushState.getValue(BigBushBlock.AGE) == 0) { + return bushState.canSurvive(level, originPos); + } + if (!BigBushBlock.hasFullSupport(bushState, level, originPos)) { + return false; + } + for (BlockPos partPos : BigBushBlock.partPositions(bushState, originPos)) { + if (!isOpenPlantSpot(level, partPos)) { + return false; + } + } + return true; + } + + private static boolean placeSingle(WorldGenLevel level, BlockPos pos, Block block) { + BlockState state = block.defaultBlockState(); + if (!isOpenPlantSpot(level, pos) || !state.canSurvive(level, pos)) { + return false; + } + level.setBlock(pos, state, 2); + return true; + } + + private static boolean placeDouble(WorldGenLevel level, BlockPos pos, BlockState state) { + if (!isOpenPlantSpot(level, pos) || !isOpenPlantSpot(level, pos.above()) || !state.canSurvive(level, pos)) { + return false; + } + DoublePlantBlock.placeAt(level, state, pos, 2); + return true; + } + + private static boolean placeVeryTall(WorldGenLevel level, BlockPos pos, Block block) { + if (!(block instanceof VeryTallGrassBlock)) { + return placeDouble(level, pos, Blocks.TALL_GRASS.defaultBlockState()); + } + BlockState state = block.defaultBlockState(); + if (!isOpenPlantSpot(level, pos) + || !isOpenPlantSpot(level, pos.above()) + || !isOpenPlantSpot(level, pos.above(2)) + || !state.canSurvive(level, pos)) { + return false; + } + VeryTallGrassBlock.placeAt(level, pos, 2); + return true; + } + + private boolean placeTorchflowerPatch(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos patchCenter = sampleSurface(level, origin, random, this.variant == Variant.FOREST ? 8 : 12); + if (patchCenter == null) { + return false; + } + + int radius = this.variant == Variant.MEADOW ? 3 : this.variant == Variant.BUTTERFLY_FIELDS ? 3 : 2; + int plants = this.variant == Variant.BUTTERFLY_FIELDS + ? 4 + random.nextInt(5) + : 3 + random.nextInt(this.variant == Variant.MEADOW ? 4 : 3); + 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); + if (plantPos == null) { + continue; + } + + BlockPos groundPos = plantPos.below(); + if (!isValidPlantSpot(level, plantPos, groundPos)) { + continue; + } + + if (bushEligible && random.nextFloat() < 0.12F) { + if (placeDouble(level, plantPos, torchflowerBush().defaultBlockState())) { + placed = true; + } + continue; + } + if (placeSingle(level, plantPos, Blocks.TORCHFLOWER)) { + placed = true; + } + } + return placed; + } + + private boolean placePitcherPatch(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos patchCenter = sampleSurface(level, origin, random, this.variant == Variant.FOREST ? 8 : 13); + if (patchCenter == null) { + return false; + } + + int radius = this.variant == Variant.BUTTERFLY_FIELDS ? 5 : this.variant == Variant.MEADOW ? 4 : this.variant == Variant.FLOWER_FOREST_MILKWEED ? 3 : 3; + 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); + if (plantPos == null) { + continue; + } + + BlockPos groundPos = plantPos.below(); + if (!isValidPlantSpot(level, plantPos, groundPos)) { + continue; + } + + if (placeDouble(level, plantPos, Blocks.PITCHER_PLANT.defaultBlockState())) { + placed = true; + } + } + 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); + if (patchCenter == null) { + return false; + } + + int radius = this.variant == Variant.BUTTERFLY_FIELDS ? 7 : this.variant == Variant.MEADOW ? 4 : this.variant == Variant.FLOWER_FOREST_MILKWEED ? 3 : 3; + 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); + if (plantPos == null) { + continue; + } + + BlockPos groundPos = plantPos.below(); + if (!isValidPlantSpot(level, plantPos, groundPos)) { + continue; + } + + if (placeDouble(level, plantPos, flower.defaultBlockState())) { + placed = true; + } + } + return placed; + } + + private boolean placeSeagrass(WorldGenLevel level, BlockPos origin, RandomSource random, int radius) { + int attempts = switch (this.variant) { + case FOREST -> 3; + case MEADOW -> 5; + case PEACH_FOREST -> 3; + case BUTTERFLY_FIELDS -> 3; + case FLOWER_FOREST_MILKWEED -> 2; + }; + boolean placed = false; + + 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); + BlockPos seagrassPos = new BlockPos(x, y, z); + BlockPos floorPos = seagrassPos.below(); + + if (!level.getFluidState(seagrassPos).isSourceOfType(net.minecraft.world.level.material.Fluids.WATER)) { + continue; + } + + if (!isUnderwaterGround(level, floorPos) || !Blocks.SEAGRASS.defaultBlockState().canSurvive(level, seagrassPos)) { + continue; + } + + level.setBlock(seagrassPos, Blocks.SEAGRASS.defaultBlockState(), 2); + placed = true; + } + + return placed; + } + + private static BlockPos sampleSurface(WorldGenLevel level, BlockPos origin, RandomSource random, int radius) { + 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); + BlockPos plantPos = new BlockPos(x, y, z); + if (isValidPlantSpot(level, plantPos, plantPos.below())) { + return plantPos; + } + } + return null; + } + + private static BlockPos samplePatchPos(WorldGenLevel level, BlockPos center, int radius, RandomSource random) { + 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); + BlockPos plantPos = new BlockPos(x, y, z); + return isOpenPlantSpot(level, plantPos) ? plantPos : null; + } + + private static void normalizePeachForestGround(WorldGenLevel level, BlockPos groundPos, Variant variant) { + if (variant != Variant.PEACH_FOREST) { + return; + } + + BlockState state = level.getBlockState(groundPos); + if (state.is(Blocks.MOSS_BLOCK) || state.is(Blocks.ROOTED_DIRT)) { + level.setBlock(groundPos, AntarchyObjects.BLUSH_MOSS_BLOCK.get().defaultBlockState(), 2); + } + } + + private static void maybeOvergrowGround(WorldGenLevel level, BlockPos groundPos, RandomSource random, Variant variant) { + boolean meadow = variant != Variant.FOREST; + float overgrowChance = switch (variant) { + case PEACH_FOREST -> 0.20F; + case FOREST -> 0.24F; + default -> 0.45F; + }; + if (!isValidGround(level, groundPos) || random.nextFloat() > overgrowChance) { + return; + } + + BlockState replacement = variant == Variant.PEACH_FOREST + ? AntarchyObjects.BLUSH_MOSS_BLOCK.get().defaultBlockState() + : random.nextFloat() < 0.35F + ? Blocks.ROOTED_DIRT.defaultBlockState() + : Blocks.MOSS_BLOCK.defaultBlockState(); + level.setBlock(groundPos, replacement, 2); + + for (DirectionHolder direction : DirectionHolder.HORIZONTAL) { + float spreadChance = switch (variant) { + case PEACH_FOREST -> 0.07F; + case FOREST -> 0.1F; + default -> 0.22F; + }; + if (random.nextFloat() > spreadChance) { + continue; + } + BlockPos spreadPos = groundPos.offset(direction.stepX, 0, direction.stepZ); + if (isValidGround(level, spreadPos)) { + level.setBlock(spreadPos, replacement, 2); + } + } + } + + private static boolean isValidGround(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return isIntendedGround(state) && !state.is(BlockTags.LOGS) && !state.is(BlockTags.LEAVES) && !state.is(Blocks.TUFF); + } + + private static boolean isValidPlantSpot(WorldGenLevel level, BlockPos plantPos, BlockPos groundPos) { + if (!isOpenPlantSpot(level, plantPos) || !isValidGround(level, groundPos)) { + return false; + } + + BlockState topState = level.getBlockState(groundPos); + return hasPlantHeadroom(level, plantPos, 3) + && Blocks.GRASS.defaultBlockState().canSurvive(level, plantPos) + && !topState.is(BlockTags.LOGS) + && !topState.is(BlockTags.LEAVES) + && !topState.is(Blocks.TUFF) + && !topState.is(Blocks.ANDESITE_SLAB); + } + + private static boolean isIntendedGround(BlockState state) { + return state.is(BlockTags.DIRT) + || state.is(Blocks.GRASS_BLOCK) + || state.is(Blocks.MOSS_BLOCK) + || state.is(Blocks.ROOTED_DIRT) + || state.is(AntarchyObjects.BLUSH_MOSS_BLOCK.get()); + } + + private static boolean isUnderwaterGround(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return isValidGround(level, pos) || state.is(Blocks.GRAVEL) || state.is(Blocks.SAND) || state.is(Blocks.CLAY); + } + + private static boolean isOpenPlantSpot(WorldGenLevel level, BlockPos pos) { + return level.isEmptyBlock(pos) && level.getFluidState(pos).isEmpty(); + } + + private static boolean hasPlantHeadroom(WorldGenLevel level, BlockPos pos, int height) { + for (int y = 0; y < height; y++) { + if (!isOpenPlantSpot(level, pos.above(y))) { + return false; + } + } + return true; + } + + private enum DirectionHolder { + NORTH(0, -1), + SOUTH(0, 1), + WEST(-1, 0), + EAST(1, 0); + + private static final DirectionHolder[] HORIZONTAL = values(); + + private final int stepX; + private final int stepZ; + + DirectionHolder(int stepX, int stepZ) { + this.stepX = stepX; + this.stepZ = stepZ; + } + } + + public enum Variant { + FOREST, + MEADOW, + PEACH_FOREST, + BUTTERFLY_FIELDS, + FLOWER_FOREST_MILKWEED + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaLargeTuffBoulderFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaLargeTuffBoulderFeature.java new file mode 100644 index 00000000..616a4763 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaLargeTuffBoulderFeature.java @@ -0,0 +1,116 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +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.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.SlabType; +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 class ElythiaLargeTuffBoulderFeature extends Feature { + public ElythiaLargeTuffBoulderFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + BlockPos surfacePos = new BlockPos(origin.getX(), level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()) - 1, origin.getZ()); + if (!isSoil(level.getBlockState(surfacePos))) { + return false; + } + + BlockPos center = surfacePos.below(random.nextInt(2)); + int blobs = 2 + random.nextInt(3); + boolean placed = false; + for (int i = 0; i < blobs; i++) { + BlockPos blobCenter = center.offset(random.nextInt(7) - 3, random.nextInt(3), random.nextInt(7) - 3); + int radiusX = 2 + random.nextInt(3); + int radiusY = 1 + random.nextInt(2); + int radiusZ = 2 + random.nextInt(3); + placed |= this.placeEllipsoid(level, blobCenter, radiusX, radiusY, radiusZ, random); + if (random.nextFloat() < 0.35F) { + placed |= this.placeEllipsoid(level, blobCenter.above(), Math.max(2, radiusX - 1), 1, Math.max(2, radiusZ - 1), random); + } + } + + if (placed) { + this.softCapWithSlabs(level, center, 7, random); + } + + return placed; + } + + private boolean placeEllipsoid(WorldGenLevel level, BlockPos center, int radiusX, int radiusY, int radiusZ, RandomSource random) { + boolean placed = false; + double rx = radiusX * radiusX; + double ry = radiusY * radiusY; + double rz = radiusZ * radiusZ; + for (int x = -radiusX; x <= radiusX; x++) { + for (int y = -radiusY; y <= radiusY; y++) { + for (int z = -radiusZ; z <= radiusZ; z++) { + double distance = (x * x) / rx + (y * y) / ry + (z * z) / rz; + if (distance > 1.0D + random.nextDouble() * 0.2D) { + continue; + } + + BlockPos targetPos = center.offset(x, y, z); + BlockState targetState = level.getBlockState(targetPos); + if (targetState.isAir() || targetState.canBeReplaced() || isSoil(targetState)) { + level.setBlock(targetPos, Blocks.TUFF.defaultBlockState(), 2); + placed = true; + } + } + } + } + return placed; + } + + private void softCapWithSlabs(WorldGenLevel level, BlockPos center, int radius, RandomSource random) { + BlockState slabState = Blocks.ANDESITE_SLAB.defaultBlockState().setValue(SlabBlock.TYPE, SlabType.BOTTOM); + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + BlockPos topPos = center.offset(x, 0, z); + while (topPos.getY() < level.getMaxBuildHeight() - 1 && level.getBlockState(topPos.above()).is(Blocks.TUFF)) { + topPos = topPos.above(); + } + + if (!level.getBlockState(topPos).is(Blocks.TUFF)) { + continue; + } + + BlockPos slabPos = topPos.above(); + if (!level.isEmptyBlock(slabPos) || random.nextFloat() > 0.22F) { + continue; + } + + int openSides = 0; + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (!level.getBlockState(topPos.relative(direction)).is(Blocks.TUFF)) { + openSides++; + } + } + + if (openSides == 0) { + continue; + } + + level.setBlock(slabPos, slabState, 2); + } + } + } + + private static boolean isSoil(BlockState state) { + return state.is(BlockTags.DIRT) || state.is(Blocks.GRASS_BLOCK) || state.is(Blocks.MOSS_BLOCK) || state.is(Blocks.ROOTED_DIRT); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaPondFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaPondFeature.java new file mode 100644 index 00000000..01958644 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaPondFeature.java @@ -0,0 +1,60 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +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 class ElythiaPondFeature extends Feature { + public ElythiaPondFeature(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; + BlockPos center = new BlockPos(origin.getX(), surfaceY, origin.getZ()); + if (!isSoil(level.getBlockState(center))) { + return false; + } + + int radiusX = 3 + random.nextInt(3); + int radiusZ = 3 + random.nextInt(3); + int depth = 1 + random.nextInt(2); + boolean placed = false; + + for (int x = -radiusX - 1; x <= radiusX + 1; x++) { + for (int z = -radiusZ - 1; z <= radiusZ + 1; z++) { + double distance = (x * x) / (double) (radiusX * radiusX) + (z * z) / (double) (radiusZ * radiusZ); + BlockPos topPos = center.offset(x, 0, z); + if (distance <= 1.0D) { + int floorY = center.getY() - (distance < 0.35D ? depth + 1 : depth); + for (int y = center.getY(); y > floorY; y--) { + BlockPos waterPos = new BlockPos(topPos.getX(), y, topPos.getZ()); + level.setBlock(waterPos, Blocks.WATER.defaultBlockState(), 2); + } + level.setBlock(new BlockPos(topPos.getX(), floorY, topPos.getZ()), Blocks.MOSS_BLOCK.defaultBlockState(), 2); + placed = true; + } else if (distance <= 1.25D && isSoil(level.getBlockState(topPos))) { + level.setBlock(topPos, Blocks.MOSS_BLOCK.defaultBlockState(), 2); + } + } + } + + return placed; + } + + private static boolean isSoil(BlockState state) { + return state.is(BlockTags.DIRT) || state.is(Blocks.GRASS_BLOCK) || state.is(Blocks.MOSS_BLOCK) || state.is(Blocks.ROOTED_DIRT); + } +} 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 new file mode 100644 index 00000000..4c0ccf05 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaRiverCarveFunction.java @@ -0,0 +1,94 @@ +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 { + + 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 + public double compute(FunctionContext context) { + double erosionVal = erosion.compute(context); + double base = BASE_EROSION_FACTOR * erosionVal; + + if (erosionVal > EROSION_THRESHOLD) { + double ridgesVal = ridges.compute(context); + double dist = Math.abs(ridgesVal); + if (dist < CHANNEL_HALF_WIDTH) { + double t = 1.0 - (dist / CHANNEL_HALF_WIDTH); + double channelness = t * t; + return base - channelness * CHANNEL_DEPTH; + } + } + + return base; + } + + @Override + public void fillArray(double[] values, ContextProvider contextProvider) { + for (int i = 0; i < values.length; i++) { + values[i] = this.compute(contextProvider.forIndex(i)); + } + } + + @Override + public double minValue() { + return BASE_EROSION_FACTOR - CHANNEL_DEPTH; + } + + @Override + public double maxValue() { + return -BASE_EROSION_FACTOR; + } + + @Override + public DensityFunction mapAll(Visitor visitor) { + return visitor.apply(new ElythiaRiverCarveFunction(erosion.mapAll(visitor), ridges.mapAll(visitor))); + } + + @Override + public KeyDispatchDataCodec codec() { + return KEY_CODEC; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaSurfaceCoverFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaSurfaceCoverFeature.java new file mode 100644 index 00000000..762c1eae --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaSurfaceCoverFeature.java @@ -0,0 +1,127 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +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.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 class ElythiaSurfaceCoverFeature extends Feature { + public ElythiaSurfaceCoverFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + int startX = origin.getX() & ~15; + int startZ = origin.getZ() & ~15; + boolean placed = false; + + for (int localX = 0; localX < 16; localX++) { + for (int localZ = 0; localZ < 16; localZ++) { + int worldX = startX + localX; + int worldZ = startZ + localZ; + int topY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, worldX, worldZ) - 1; + if (topY <= level.getMinBuildHeight()) { + continue; + } + + BlockPos topPos = new BlockPos(worldX, topY, worldZ); + BlockPos abovePos = topPos.above(); + BlockState topState = level.getBlockState(topPos); + if (!level.getFluidState(abovePos).isEmpty()) { + continue; + } + + if (!level.canSeeSky(abovePos)) { + continue; + } + + if (!isSurfaceSoil(topState)) { + continue; + } + + level.setBlock(topPos, surfaceState(random), 2); + this.fillSubsurface(level, topPos, random); + placed = true; + } + } + + return placed; + } + + private void fillSubsurface(WorldGenLevel level, BlockPos topPos, RandomSource random) { + int depth = 5 + random.nextInt(2); + int maxDepth = topPos.getY() - level.getMinBuildHeight(); + for (int step = 1; step <= maxDepth; step++) { + BlockPos soilPos = topPos.below(step); + BlockState state = level.getBlockState(soilPos); + if (!isSurfaceSoil(state) && !state.is(Blocks.GRANITE)) { + break; + } + + if (step <= depth) { + level.setBlock(soilPos, subsurfaceState(random), 2); + continue; + } + + if (state.is(Blocks.GRASS_BLOCK)) { + level.setBlock(soilPos, Blocks.DIRT.defaultBlockState(), 2); + } + } + } + + private static BlockState surfaceState(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.7F) { + return Blocks.GRASS_BLOCK.defaultBlockState(); + } + if (roll < 0.99F) { + return Blocks.MOSS_BLOCK.defaultBlockState(); + } + return Blocks.ROOTED_DIRT.defaultBlockState(); + } + + private static BlockState subsurfaceState(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.12F) { + return Blocks.COARSE_DIRT.defaultBlockState(); + } + if (roll < 0.18F) { + return Blocks.ROOTED_DIRT.defaultBlockState(); + } + return Blocks.DIRT.defaultBlockState(); + } + + private static boolean isExposed(WorldGenLevel level, BlockPos pos) { + if (level.getBlockState(pos.above()).isAir()) { + return true; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (level.getBlockState(pos.relative(direction)).isAir()) { + return true; + } + } + + return false; + } + + private static boolean isSurfaceSoil(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); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaTuffBoulderFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaTuffBoulderFeature.java new file mode 100644 index 00000000..7d97f414 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaTuffBoulderFeature.java @@ -0,0 +1,115 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +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.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.SlabType; +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 class ElythiaTuffBoulderFeature extends Feature { + public ElythiaTuffBoulderFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + BlockPos surfacePos = new BlockPos(origin.getX(), level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()) - 1, origin.getZ()); + if (!isSoil(level.getBlockState(surfacePos))) { + return false; + } + + BlockPos center = surfacePos.below(random.nextInt(2)); + int blobs = 1 + random.nextInt(2); + boolean placed = false; + for (int i = 0; i < blobs; i++) { + BlockPos blobCenter = center.offset(random.nextInt(5) - 2, random.nextInt(2), random.nextInt(5) - 2); + int radiusX = 1 + random.nextInt(2); + int radiusZ = 1 + random.nextInt(2); + placed |= this.placeEllipsoid(level, blobCenter, radiusX, 1, radiusZ, random); + if (random.nextFloat() < 0.18F) { + placed |= this.placeEllipsoid(level, blobCenter.above(), 1, 1, 1 + random.nextInt(2), random); + } + } + + if (placed) { + this.softCapWithSlabs(level, center, 5, random); + } + + return placed; + } + + private boolean placeEllipsoid(WorldGenLevel level, BlockPos center, int radiusX, int radiusY, int radiusZ, RandomSource random) { + boolean placed = false; + double rx = radiusX * radiusX; + double ry = radiusY * radiusY; + double rz = radiusZ * radiusZ; + for (int x = -radiusX; x <= radiusX; x++) { + for (int y = -radiusY; y <= radiusY; y++) { + for (int z = -radiusZ; z <= radiusZ; z++) { + double distance = (x * x) / rx + (y * y) / ry + (z * z) / rz; + if (distance > 1.0D + random.nextDouble() * 0.18D) { + continue; + } + + BlockPos targetPos = center.offset(x, y, z); + BlockState targetState = level.getBlockState(targetPos); + if (targetState.isAir() || targetState.canBeReplaced() || isSoil(targetState)) { + level.setBlock(targetPos, Blocks.TUFF.defaultBlockState(), 2); + placed = true; + } + } + } + } + return placed; + } + + private void softCapWithSlabs(WorldGenLevel level, BlockPos center, int radius, RandomSource random) { + BlockState slabState = Blocks.ANDESITE_SLAB.defaultBlockState().setValue(SlabBlock.TYPE, SlabType.BOTTOM); + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + BlockPos topPos = center.offset(x, 0, z); + while (topPos.getY() < level.getMaxBuildHeight() - 1 && level.getBlockState(topPos.above()).is(Blocks.TUFF)) { + topPos = topPos.above(); + } + + if (!level.getBlockState(topPos).is(Blocks.TUFF)) { + continue; + } + + BlockPos slabPos = topPos.above(); + if (!level.isEmptyBlock(slabPos) || random.nextFloat() > 0.18F) { + continue; + } + + int openSides = 0; + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (!level.getBlockState(topPos.relative(direction)).is(Blocks.TUFF)) { + openSides++; + } + } + + if (openSides == 0) { + continue; + } + + level.setBlock(slabPos, slabState, 2); + } + } + } + + private static boolean isSoil(BlockState state) { + return state.is(BlockTags.DIRT) || state.is(Blocks.GRASS_BLOCK) || state.is(Blocks.MOSS_BLOCK) || state.is(Blocks.ROOTED_DIRT); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaUndergroundFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaUndergroundFeature.java new file mode 100644 index 00000000..99ce1582 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaUndergroundFeature.java @@ -0,0 +1,143 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.PointedDripstoneBlock; +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 class ElythiaUndergroundFeature extends Feature { + public ElythiaUndergroundFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos cavity = this.findCavity(level, context.origin(), random); + if (cavity == null) { + return false; + } + + BlockPos floorPos = cavity.below(); + BlockPos ceilingPos = this.findCeiling(level, cavity, 8); + if (ceilingPos == null) { + return false; + } + + return switch (random.nextInt(8)) { + case 0, 1, 2 -> this.placeFloorPatch(level, floorPos, random, Blocks.DIRT.defaultBlockState(), 3 + random.nextInt(4)); + case 3, 4, 5 -> this.placeFloorPatch(level, floorPos, random, Blocks.COARSE_DIRT.defaultBlockState(), 4 + random.nextInt(5)); + case 6 -> this.placeFloorPatch(level, floorPos, random, Blocks.GRANITE.defaultBlockState(), 3 + random.nextInt(4)); + default -> this.placeDripstonePatch(level, floorPos, ceilingPos, random, 2 + random.nextInt(3)); + }; + } + + private BlockPos findCavity(WorldGenLevel level, BlockPos origin, RandomSource random) { + for (int attempt = 0; attempt < 20; attempt++) { + BlockPos candidate = origin.offset(random.nextInt(17) - 8, random.nextInt(25) - 12, random.nextInt(17) - 8); + for (int dy = -6; dy <= 6; dy++) { + BlockPos airPos = candidate.above(dy); + if (this.isUsableCavity(level, airPos)) { + return airPos; + } + } + } + return null; + } + + private boolean isUsableCavity(WorldGenLevel level, BlockPos pos) { + return level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && isSolidCaveBlock(level.getBlockState(pos.below())) + && !level.isEmptyBlock(pos.above(3)); + } + + private BlockPos findCeiling(WorldGenLevel level, BlockPos start, int range) { + for (int step = 1; step <= range; step++) { + BlockPos pos = start.above(step); + if (!level.isEmptyBlock(pos)) { + return pos; + } + } + return null; + } + + private boolean placeFloorPatch(WorldGenLevel level, BlockPos center, RandomSource random, BlockState replacement, int radius) { + boolean placedAny = false; + int radiusSq = radius * radius; + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + if (x * x + z * z > radiusSq + random.nextInt(2)) { + continue; + } + + BlockPos targetPos = center.offset(x, 0, z); + if (!isSolidCaveBlock(level.getBlockState(targetPos)) || !level.isEmptyBlock(targetPos.above())) { + continue; + } + + level.setBlock(targetPos, replacement, 2); + placedAny = true; + } + } + return placedAny; + } + + private boolean placeDripstonePatch(WorldGenLevel level, BlockPos floorCenter, BlockPos ceilingCenter, RandomSource random, int radius) { + boolean placedAny = false; + int radiusSq = radius * radius; + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + if (x * x + z * z > radiusSq + random.nextInt(2)) { + continue; + } + + BlockPos floorPos = floorCenter.offset(x, 0, z); + if (isSolidCaveBlock(level.getBlockState(floorPos)) && level.isEmptyBlock(floorPos.above())) { + level.setBlock(floorPos, Blocks.DRIPSTONE_BLOCK.defaultBlockState(), 2); + if (random.nextFloat() < 0.45F && level.isEmptyBlock(floorPos.above())) { + level.setBlock( + floorPos.above(), + Blocks.POINTED_DRIPSTONE.defaultBlockState().setValue(PointedDripstoneBlock.TIP_DIRECTION, Direction.UP), + 2 + ); + } + placedAny = true; + } + + BlockPos ceilingPos = ceilingCenter.offset(x, 0, z); + if (isSolidCaveBlock(level.getBlockState(ceilingPos)) && level.isEmptyBlock(ceilingPos.below())) { + level.setBlock(ceilingPos, Blocks.DRIPSTONE_BLOCK.defaultBlockState(), 2); + if (random.nextFloat() < 0.55F && level.isEmptyBlock(ceilingPos.below())) { + level.setBlock( + ceilingPos.below(), + Blocks.POINTED_DRIPSTONE.defaultBlockState().setValue(PointedDripstoneBlock.TIP_DIRECTION, Direction.DOWN), + 2 + ); + } + placedAny = true; + } + } + } + return placedAny; + } + + private static boolean isSolidCaveBlock(BlockState state) { + return state.is(Blocks.DIRT) + || state.is(Blocks.GRASS_BLOCK) + || state.is(Blocks.COARSE_DIRT) + || state.is(Blocks.PACKED_MUD) + || state.is(Blocks.GRAVEL) + || state.is(Blocks.GRANITE) + || state.is(Blocks.MOSS_BLOCK) + || state.is(Blocks.DRIPSTONE_BLOCK); + } +} 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 new file mode 100644 index 00000000..20d47475 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java @@ -0,0 +1,138 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +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.Blocks; +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.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 class FallenOuranwoodFeature extends Feature { + + public FallenOuranwoodFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + 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) + boolean hollow = outerRadius >= 2; + + Block ouranwoodLog = BuiltInRegistries.BLOCK.getOptional( + new ResourceLocation("antarchy", "ouranwood_log")) + .orElse(AntarchyObjects.MOSSY_OURANWOOD_LOG.get()); + + BlockState mossyLogState = AntarchyObjects.MOSSY_OURANWOOD_LOG.get().defaultBlockState() + .setValue(RotatedPillarBlock.AXIS, axis); + BlockState freshLogState = ouranwoodLog.defaultBlockState() + .setValue(RotatedPillarBlock.AXIS, axis); + 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++) { + for (int i = 1; i < length - 1; i++) { + 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()); + boolean placed = false; + + for (int step = 0; step < length; step++) { + int bx = axis == Direction.Axis.X ? origin.getX() + step : origin.getX(); + int bz = axis == Direction.Axis.Z ? origin.getZ() + step : origin.getZ(); + + float dmg = damage[step]; + + if (dmg > 0.78f) continue; + + int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, bx, bz); + int centerY = Math.max(anchorY, Math.min(anchorY + 2, surfaceY)) + outerRadius; + + for (int dy = -outerRadius; dy <= outerRadius; dy++) { + for (int dp = -outerRadius; dp <= outerRadius; dp++) { + double dist = Math.sqrt(dy * dy + dp * dp); + if (dist > outerRadius + 0.5) continue; + + boolean isShell = dist >= outerRadius - 0.5; + + if (hollow && dist < outerRadius - 0.5) continue; + + if (dmg > 0.55f && !isShell) continue; + if (dmg > 0.55f && random.nextFloat() < (dmg - 0.55f) * 3.5f) continue; + + if (isShell && random.nextFloat() < dmg * 0.4f) continue; + + int px = axis == Direction.Axis.X ? bx : bx + dp; + int pz = axis == Direction.Axis.Z ? bz : bz + dp; + BlockPos pos = new BlockPos(px, centerY + dy, pz); + + if (!canReplace(level.getBlockState(pos))) continue; + + float r = random.nextFloat(); + BlockState toPlace; + if (r < 0.08f) { + toPlace = Blocks.MOSS_BLOCK.defaultBlockState(); + } else if (r < 0.22f) { + toPlace = freshLogState; + } else if (r < 0.32f) { + toPlace = woodState; + } else { + toPlace = mossyLogState; + } + + level.setBlock(pos, toPlace, 2); + placed = true; + } + } + } + + int mossCount = 20 + random.nextInt(25); + for (int i = 0; i < mossCount; i++) { + int mx = origin.getX() + random.nextInt(length + 6) - 3; + int mz = axis == Direction.Axis.X + ? origin.getZ() + random.nextInt(9) - 4 + : origin.getZ() + random.nextInt(length + 6) - 3; + int my = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, mx, mz); + BlockPos mossPos = new BlockPos(mx, my, mz); + + if (!canReplace(level.getBlockState(mossPos))) continue; + BlockState below = level.getBlockState(mossPos.below()); + if (!below.isFaceSturdy(level, mossPos.below(), Direction.UP)) continue; + + level.setBlock(mossPos, + random.nextFloat() < 0.35f + ? Blocks.MOSS_BLOCK.defaultBlockState() + : Blocks.MOSS_CARPET.defaultBlockState(), + 2); + } + + return placed; + } + + private static boolean canReplace(BlockState state) { + return state.isAir() || state.canBeReplaced() || (state.getBlock() instanceof LeavesBlock); + } +} 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 new file mode 100644 index 00000000..a6da40dd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java @@ -0,0 +1,178 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.HugeMushroomBlock; +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 class FungalMushroomFeature extends Feature { + + public FungalMushroomFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + boolean isRed = random.nextBoolean(); + Block capBlock = isRed ? Blocks.RED_MUSHROOM_BLOCK : Blocks.BROWN_MUSHROOM_BLOCK; + Block smallMushroom = isRed ? Blocks.RED_MUSHROOM : Blocks.BROWN_MUSHROOM; + + int stemSize = random.nextBoolean() ? 2 : 3; + int stemHeight = 6 + random.nextInt(7); + + double leanAngle = random.nextDouble() * Math.PI * 2; + double leanDX = Math.cos(leanAngle); + double leanDZ = Math.sin(leanAngle); + double maxLean = 2.0 + random.nextDouble() * 3.5; + + int baseY = origin.getY(); + int stemOffset = stemSize == 2 ? 0 : -1; // center 3x3 on origin + + BlockState stemPore = Blocks.MUSHROOM_STEM.defaultBlockState() + .setValue(HugeMushroomBlock.NORTH, false) + .setValue(HugeMushroomBlock.SOUTH, false) + .setValue(HugeMushroomBlock.EAST, false) + .setValue(HugeMushroomBlock.WEST, false) + .setValue(HugeMushroomBlock.UP, false) + .setValue(HugeMushroomBlock.DOWN, false); + BlockState stemSide = Blocks.MUSHROOM_STEM.defaultBlockState() + .setValue(HugeMushroomBlock.NORTH, true) + .setValue(HugeMushroomBlock.SOUTH, true) + .setValue(HugeMushroomBlock.EAST, true) + .setValue(HugeMushroomBlock.WEST, true) + .setValue(HugeMushroomBlock.UP, false) + .setValue(HugeMushroomBlock.DOWN, false); + + for (int dy = 0; dy < stemHeight; dy++) { + double leanProgress = (double) dy / stemHeight; + int leanX = (int) Math.round(leanDX * maxLean * leanProgress); + int leanZ = (int) Math.round(leanDZ * maxLean * leanProgress); + + for (int dx = 0; dx < stemSize; dx++) { + for (int dz = 0; dz < stemSize; dz++) { + int wx = origin.getX() + stemOffset + dx + leanX; + int wz = origin.getZ() + stemOffset + dz + leanZ; + BlockPos pos = new BlockPos(wx, baseY + dy, wz); + if (!canReplace(level.getBlockState(pos))) continue; + boolean isEdge = (dx == 0 || dx == stemSize - 1 || dz == 0 || dz == stemSize - 1); + BlockState stemState = isEdge ? stemSide : stemPore; + level.setBlock(pos, stemState, 2); + BlockPos below = pos.below(); + while (canReplace(level.getBlockState(below)) && below.getY() > level.getMinBuildHeight()) { + level.setBlock(below, stemState, 2); + below = below.below(); + } + } + } + } + + double capCenterX = origin.getX() + (stemSize == 2 ? 0.5 : 0) + leanDX * maxLean; + double capCenterZ = origin.getZ() + (stemSize == 2 ? 0.5 : 0) + leanDZ * maxLean; + int capTopY = baseY + stemHeight; + int baseCapRadius = stemSize + 2 + random.nextInt(2); + + int jitterRange = baseCapRadius + 4; + float[][] jitter = new float[jitterRange * 2 + 1][jitterRange * 2 + 1]; + for (float[] row : jitter) { + for (int j = 0; j < row.length; j++) { + row[j] = random.nextFloat() * 1.0f - 0.5f; + } + } + + int capLayers = baseCapRadius + 2; + for (int cl = 0; cl < capLayers; cl++) { + int capY = capTopY + cl; + 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; + + for (int dx = -(jitterRange); dx <= jitterRange; dx++) { + for (int dz = -(jitterRange); dz <= jitterRange; dz++) { + double dist = Math.sqrt( + (origin.getX() + dx - layerCapX) * (origin.getX() + dx - layerCapX) + + (origin.getZ() + dz - layerCapZ) * (origin.getZ() + dz - layerCapZ)); + + float j = jitter[dx + jitterRange][dz + jitterRange]; + double effectiveRadius = nomRadius + j; + + if (dist > effectiveRadius + 0.5) continue; + if (effectiveRadius < 0) continue; + + BlockPos capPos = new BlockPos(origin.getX() + dx, capY, origin.getZ() + dz); + if (!canReplace(level.getBlockState(capPos))) continue; + + boolean isOuter = dist >= effectiveRadius - 0.7; + boolean isTop = cl == capLayers - 1; + + BlockState capState = capBlock.defaultBlockState() + .setValue(HugeMushroomBlock.UP, isTop || isOuter) + .setValue(HugeMushroomBlock.NORTH, isOuter) + .setValue(HugeMushroomBlock.SOUTH, isOuter) + .setValue(HugeMushroomBlock.EAST, isOuter) + .setValue(HugeMushroomBlock.WEST, isOuter) + .setValue(HugeMushroomBlock.DOWN, false); + + level.setBlock(capPos, capState, 2); + } + } + } + + int myceliumCount = 12 + random.nextInt(12); + for (int i = 0; i < myceliumCount; i++) { + int radius = stemSize + 3 + random.nextInt(3); + int mx = origin.getX() + random.nextInt(radius * 2 + 1) - radius; + int mz = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; + int my = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, mx, mz) - 1; + BlockPos myceliumPos = new BlockPos(mx, my, mz); + + BlockState existing = level.getBlockState(myceliumPos); + if (existing.is(Blocks.GRASS_BLOCK) || existing.is(Blocks.DIRT) + || existing.is(Blocks.MOSS_BLOCK) || existing.is(Blocks.ROOTED_DIRT)) { + level.setBlock(myceliumPos, Blocks.MYCELIUM.defaultBlockState(), 2); + } + } + + int smallCount = 5 + random.nextInt(8); + for (int i = 0; i < smallCount; i++) { + int radius = stemSize + 4 + random.nextInt(4); + int sx = origin.getX() + random.nextInt(radius * 2 + 1) - radius; + int sz = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; + int sy = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, sx, sz); + BlockPos smallPos = new BlockPos(sx, sy, sz); + + if (!canReplace(level.getBlockState(smallPos))) continue; + BlockState below = level.getBlockState(smallPos.below()); + if (!below.isFaceSturdy(level, smallPos.below(), Direction.UP)) continue; + + Block plant = random.nextBoolean() ? smallMushroom + : (isRed ? Blocks.BROWN_MUSHROOM : Blocks.RED_MUSHROOM); + BlockState plantState = plant.defaultBlockState(); + if (plantState.canSurvive(level, smallPos)) { + level.setBlock(smallPos, plantState, 2); + } + } + + return true; + } + + private static boolean canReplace(BlockState state) { + return state.isAir() || state.canBeReplaced() + || (state.getBlock() instanceof net.minecraft.world.level.block.LeavesBlock); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/GiantLilyPadPatchFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/GiantLilyPadPatchFeature.java new file mode 100644 index 00000000..be7f71a1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/GiantLilyPadPatchFeature.java @@ -0,0 +1,69 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.block.GiantLilyPadBlock; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +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.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 GiantLilyPadPatchFeature extends Feature { + private final float lotusChance; + + public GiantLilyPadPatchFeature(Codec codec) { + this(codec, 1.0F); + } + + public GiantLilyPadPatchFeature(Codec codec, float lotusChance) { + super(codec); + this.lotusChance = lotusChance; + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + boolean placedAny = false; + + for (int i = 0; i < 12; i++) { + int x = origin.getX() + random.nextInt(17) - 8; + int z = origin.getZ() + random.nextInt(17) - 8; + int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + BlockPos fluidPos = new BlockPos(x, surfaceY, z); + if (!level.getFluidState(fluidPos).is(AntarchyTags.Fluids.GIANT_LILY_PAD_SUPPORTING_FLUIDS) || !level.getFluidState(fluidPos).isSource()) { + continue; + } + + BlockPos padPos = fluidPos.above(); + if (!GiantLilyPadBlock.canPlaceStructure(level, padPos)) { + continue; + } + + GiantLilyPadBlock.placeStructure(level, padPos, GiantLilyPadBlock.PadRotation.values()[random.nextInt(4)]); + placedAny = true; + + if (random.nextFloat() < this.lotusChance) { + placeLotus(level, padPos); + } + } + + return placedAny; + } + + private static void placeLotus(WorldGenLevel level, BlockPos pos) { + BlockState padState = level.getBlockState(pos); + if (!padState.is(AntarchyObjects.GIANT_LILY_PAD.get()) || padState.getValue(GiantLilyPadBlock.HAS_LOTUS)) { + return; + } + + level.setBlock(pos, padState.setValue(GiantLilyPadBlock.HAS_LOTUS, true), Block.UPDATE_CLIENTS); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenLilyPadFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenLilyPadFeature.java new file mode 100644 index 00000000..2fa0badd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenLilyPadFeature.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +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 LumenLilyPadFeature extends Feature { + public LumenLilyPadFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + boolean placedAny = false; + + for (int i = 0; i < 24; i++) { + int x = origin.getX() + random.nextInt(17) - 8; + int z = origin.getZ() + random.nextInt(17) - 8; + int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + BlockPos fluidPos = new BlockPos(x, surfaceY, z); + if (!level.getFluidState(fluidPos).is(AntarchyTags.Fluids.LUMEN) || !level.getFluidState(fluidPos).isSource()) { + continue; + } + + BlockPos padPos = fluidPos.above(); + if (!level.isEmptyBlock(padPos)) { + continue; + } + + BlockState lilyPad = Blocks.LILY_PAD.defaultBlockState(); + if (!lilyPad.canSurvive(level, padPos)) { + continue; + } + + level.setBlock(padPos, lilyPad, 2); + placedAny = true; + } + + return placedAny; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java new file mode 100644 index 00000000..16304a22 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java @@ -0,0 +1,195 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +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.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 LumenPoolFeature extends Feature { + private static final int SMALL_RADIUS_MIN = 2; + private static final int SMALL_RADIUS_MAX = 4; + private static final int LARGE_RADIUS_MIN = 5; + private static final int LARGE_RADIUS_MAX = 6; + + public LumenPoolFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + BlockPos center = findSurfaceCenter(level, origin); + if (center == null) { + return false; + } + + int radius = random.nextInt(8) == 0 + ? randomBetween(random, LARGE_RADIUS_MIN, LARGE_RADIUS_MAX) + : randomBetween(random, SMALL_RADIUS_MIN, SMALL_RADIUS_MAX); + int maxDepth = radius >= LARGE_RADIUS_MIN ? randomBetween(random, 4, 6) : randomBetween(random, 3, 4); + BlockState lumenBlockState = AntarchyObjects.LUMEN_BLOCK.get().defaultBlockState(); + BlockState shellstoneState = AntarchyObjects.SHELLSTONE.get().defaultBlockState(); + BlockState tuffState = Blocks.TUFF.defaultBlockState(); + BlockState mossState = Blocks.MOSS_BLOCK.defaultBlockState(); + int waterlineY = center.getY() - 1; + + int floorY = waterlineY - maxDepth; + if (floorY <= level.getMinBuildHeight() + 2) { + return false; + } + + if (!hasSolidSubstrate(level, center.getX(), center.getZ(), floorY)) { + return false; + } + + boolean placedAny = false; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + + for (int dx = -radius - 2; dx <= radius + 2; dx++) { + for (int dz = -radius - 2; dz <= radius + 2; dz++) { + double distance = warpedDistance(dx, dz, random, radius); + if (distance > radius + 0.7D) { + continue; + } + + int worldX = center.getX() + dx; + int worldZ = center.getZ() + dz; + int localSurfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, worldX, worldZ) - 1; + if (localSurfaceY < center.getY() - 2 || localSurfaceY > center.getY() + 1) { + continue; + } + + double normalized = Mth.clamp((float) (distance / Math.max(radius, 1)), 0.0F, 1.25F); + int basinDepth = Math.max(2, Mth.floor((1.0D - (normalized * normalized)) * maxDepth)); + if (distance <= radius * 0.45D) { + basinDepth = Math.max(basinDepth, maxDepth - 1); + } + int localWaterlineY = Math.min(waterlineY, localSurfaceY - 1); + int localFloorY = localWaterlineY - basinDepth; + if (localFloorY <= level.getMinBuildHeight() + 1) { + continue; + } + if (!hasSolidSubstrate(level, worldX, worldZ, localFloorY)) { + continue; + } + + boolean edge = distance >= radius - 0.55D; + boolean shoulder = !edge && distance >= radius - 1.2D; + boolean innerWall = !edge && distance >= radius - 0.9D; + int bankTopY = Math.max(localWaterlineY + 1, Math.min(localSurfaceY, center.getY())); + + for (int y = localSurfaceY; y > localFloorY; y--) { + mutable.set(worldX, y, worldZ); + if (y > localWaterlineY) { + level.setBlock(mutable, y <= bankTopY && (edge || shoulder) ? pickWallState(random, shellstoneState, tuffState) : Blocks.AIR.defaultBlockState(), 2); + placedAny = true; + continue; + } + + if (edge || (innerWall && y >= localFloorY + 1)) { + level.setBlock(mutable, pickWallState(random, shellstoneState, tuffState), 2); + placedAny = true; + continue; + } + + level.setBlock(mutable, LumenWorldgenHelper.lumenState(lumenBlockState, 0), 2); + LumenWorldgenHelper.scheduleFluidTick(level, mutable.immutable()); + placedAny = true; + } + + mutable.set(worldX, localFloorY, worldZ); + BlockState floorState = pickFloorState(random, shellstoneState, tuffState, mossState, edge); + level.setBlock(mutable, floorState, 2); + placedAny = true; + + clearFloatingVegetation(level, worldX, worldZ, localSurfaceY); + } + } + + return placedAny; + } + + private static void clearFloatingVegetation(WorldGenLevel level, int x, int z, int surfaceY) { + int topOfDebris = Math.max(surfaceY, level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1); + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int offset = 1; offset <= 32; offset++) { + mutable.set(x, topOfDebris + offset, z); + BlockState state = level.getBlockState(mutable); + if (!state.isAir() && state.canBeReplaced()) { + level.setBlock(mutable, Blocks.AIR.defaultBlockState(), 2); + } + } + } + + private static BlockPos findSurfaceCenter(WorldGenLevel level, BlockPos origin) { + int bestY = Integer.MIN_VALUE; + BlockPos bestPos = null; + for (int dx = -4; dx <= 4; dx++) { + for (int dz = -4; dz <= 4; dz++) { + int x = origin.getX() + dx; + int z = origin.getZ() + dz; + int topY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + BlockPos pos = LumenWorldgenHelper.findNaturalFloor(level, x, z, topY, level.getMinBuildHeight() + 1); + if (pos != null && pos.getY() > bestY) { + bestY = pos.getY(); + bestPos = pos; + } + } + } + return bestPos; + } + + private static boolean hasSolidSubstrate(WorldGenLevel level, int x, int z, int floorY) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int y = floorY - 1; y >= floorY - 3; y--) { + mutable.set(x, y, z); + if (LumenWorldgenHelper.isSolidSupport(level.getBlockState(mutable))) { + return true; + } + } + return false; + } + + private static BlockState pickWallState(RandomSource random, BlockState shellstoneState, BlockState tuffState) { + return random.nextFloat() < 0.72F ? shellstoneState : tuffState; + } + + private static BlockState pickFloorState(RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState, boolean edge) { + int roll = random.nextInt(100); + if (roll < 65) { + return shellstoneState; + } + if (roll < 95) { + return tuffState; + } + return edge ? mossState : shellstoneState; + } + + private static double warpedDistance(int dx, int dz, RandomSource random, int radius) { + double scaleX = 1.0D + random.nextDouble() * 0.18D; + double scaleZ = 0.85D + random.nextDouble() * 0.22D; + double warpX = Math.sin((dz * 0.42D) + random.nextDouble() * Math.PI * 2.0D) * 0.18D; + double warpZ = Math.cos((dx * 0.48D) + random.nextDouble() * Math.PI * 2.0D) * 0.18D; + double warpedX = (dx / scaleX) + warpX; + double warpedZ = (dz / scaleZ) + warpZ; + return Mth.sqrt((float) ((warpedX * warpedX) + (warpedZ * warpedZ))); + } + + 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/elythia/LumenSpireFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenSpireFeature.java new file mode 100644 index 00000000..f750c276 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenSpireFeature.java @@ -0,0 +1,249 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.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 LumenSpireFeature extends Feature { + private static final int MIN_HEIGHT = 15; + private static final int MAX_HEIGHT = 20; + private static final int MIN_LEVELS = 3; + private static final int MAX_LEVELS = 4; + private static final int SHAFT_RADIUS = 3; + private static final int SHELF_RADIUS = SHAFT_RADIUS + 2; + private static final int POOL_RADIUS = 2; + + public LumenSpireFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + BlockPos base = findSurfaceCenter(level, origin); + if (base == null) { + return false; + } + + int height = randomBetween(random, MIN_HEIGHT, MAX_HEIGHT); + int levels = randomBetween(random, MIN_LEVELS, MAX_LEVELS); + if (base.getY() + height >= level.getMaxBuildHeight() - 2) { + return false; + } + + BlockState shellstoneState = AntarchyObjects.SHELLSTONE.get().defaultBlockState(); + BlockState tuffState = Blocks.TUFF.defaultBlockState(); + BlockState mossState = Blocks.MOSS_BLOCK.defaultBlockState(); + BlockState lumenBlockState = AntarchyObjects.LUMEN_BLOCK.get().defaultBlockState(); + + Direction cascadeDir = Direction.Plane.HORIZONTAL.getRandomDirection(random); + int cascadeX = cascadeDir.getStepX() * (SHAFT_RADIUS + 1); + int cascadeZ = cascadeDir.getStepZ() * (SHAFT_RADIUS + 1); + int lipX = cascadeDir.getStepX() * (SHAFT_RADIUS + 1 + POOL_RADIUS); + int lipZ = cascadeDir.getStepZ() * (SHAFT_RADIUS + 1 + POOL_RADIUS); + + boolean placed = false; + for (int y = 0; y <= height; y++) { + double heightFraction = (double) y / height; + int radius = Math.max(2, Mth.floor(SHAFT_RADIUS * (1.0D - heightFraction * 0.35D))); + placed |= placePillarSlice(level, base.above(y), radius, random, shellstoneState, tuffState, mossState); + } + + int[] terraceHeights = new int[levels]; + for (int i = 0; i < levels; i++) { + terraceHeights[i] = Mth.floor(height * (double) (i + 1) / levels); + } + + int lipWorldX = base.getX() + lipX; + int lipWorldZ = base.getZ() + lipZ; + int groundLandingY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, lipWorldX, lipWorldZ) - 1; + + for (int i = levels - 1; i >= 0; i--) { + int terraceY = base.getY() + terraceHeights[i]; + BlockPos shelfCenter = new BlockPos(base.getX(), terraceY, base.getZ()); + placeShelfRing(level, shelfCenter, random, shellstoneState, tuffState, mossState); + + BlockPos poolCenter = new BlockPos(base.getX() + cascadeX, terraceY, base.getZ() + cascadeZ); + carveTerracePool(level, poolCenter, shellstoneState, tuffState, lumenBlockState, i == levels - 1); + + BlockPos lipPos = new BlockPos(base.getX() + lipX, terraceY - 1, base.getZ() + lipZ); + level.setBlock(lipPos, Blocks.AIR.defaultBlockState(), 2); + + int nextTerraceY = i > 0 ? base.getY() + terraceHeights[i - 1] : groundLandingY; + for (int y = terraceY - 2; y > nextTerraceY; y--) { + level.setBlock(new BlockPos(lipWorldX, y, lipWorldZ), Blocks.AIR.defaultBlockState(), 2); + } + + clearAboveShelf(level, shelfCenter); + placed = true; + } + + carveBaseBasin(level, new BlockPos(lipWorldX, groundLandingY, lipWorldZ), random, shellstoneState, tuffState, mossState, lumenBlockState); + + return placed; + } + + private static boolean placePillarSlice(WorldGenLevel level, BlockPos center, int radius, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState) { + boolean placed = false; + double rr = radius * radius; + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + double distance = (x * x + z * z) / Math.max(1.0D, rr); + if (distance > 1.0D) { + continue; + } + + BlockPos targetPos = center.offset(x, 0, z); + BlockState existing = level.getBlockState(targetPos); + if (!LumenWorldgenHelper.isSolidSupport(existing)) { + level.setBlock(targetPos, pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2); + placed = true; + } + } + } + return placed; + } + + private static void placeShelfRing(WorldGenLevel level, BlockPos center, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState) { + double rr = SHELF_RADIUS * SHELF_RADIUS; + for (int x = -SHELF_RADIUS; x <= SHELF_RADIUS; x++) { + for (int z = -SHELF_RADIUS; z <= SHELF_RADIUS; z++) { + double distance = (x * x + z * z) / Math.max(1.0D, rr); + if (distance > 1.0D) { + continue; + } + + BlockPos topPos = center.offset(x, 0, z); + level.setBlock(topPos, pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2); + level.setBlock(topPos.below(), shellstoneState, 2); + } + } + } + + private static void carveTerracePool(WorldGenLevel level, BlockPos poolCenter, BlockState shellstoneState, BlockState tuffState, BlockState lumenBlockState, boolean isApex) { + double rr = POOL_RADIUS * POOL_RADIUS; + for (int x = -POOL_RADIUS; x <= POOL_RADIUS; x++) { + for (int z = -POOL_RADIUS; z <= POOL_RADIUS; z++) { + double distance = (x * x + z * z) / Math.max(1.0D, rr); + if (distance > 1.0D) { + continue; + } + + BlockPos floorPos = poolCenter.offset(x, -1, z); + BlockPos surfacePos = poolCenter.offset(x, 0, z); + level.setBlock(floorPos, shellstoneState, 2); + if (distance <= 0.55D) { + level.setBlock(surfacePos, LumenWorldgenHelper.lumenState(lumenBlockState, true), 2); + LumenWorldgenHelper.scheduleFluidTick(level, surfacePos); + } else { + level.setBlock(surfacePos, tuffState, 2); + } + } + } + + if (isApex) { + level.setBlock(poolCenter, LumenWorldgenHelper.lumenState(lumenBlockState, true), 2); + LumenWorldgenHelper.scheduleFluidTick(level, poolCenter); + } + } + + private static void carveBaseBasin(WorldGenLevel level, BlockPos landingPos, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState, BlockState lumenBlockState) { + int radius = 4 + random.nextInt(2); + int depth = 2 + random.nextInt(2); + int waterlineY = landingPos.getY() - 1; + int floorY = waterlineY - depth; + double rr = radius * radius; + + for (int x = -radius - 1; x <= radius + 1; x++) { + for (int z = -radius - 1; z <= radius + 1; z++) { + double distance = (x * x + z * z) / Math.max(1.0D, rr); + BlockPos topPos = landingPos.offset(x, 0, z); + int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, topPos.getX(), topPos.getZ()) - 1; + + if (distance <= 1.0D) { + for (int y = surfaceY; y > floorY; y--) { + BlockPos fillPos = new BlockPos(topPos.getX(), y, topPos.getZ()); + if (y > waterlineY) { + level.setBlock(fillPos, Blocks.AIR.defaultBlockState(), 2); + } else { + level.setBlock(fillPos, LumenWorldgenHelper.lumenState(lumenBlockState, 0), 2); + LumenWorldgenHelper.scheduleFluidTick(level, fillPos); + } + } + level.setBlock(new BlockPos(topPos.getX(), floorY, topPos.getZ()), pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2); + } else if (distance <= 1.25D) { + for (int y = surfaceY; y >= floorY; y--) { + level.setBlock(new BlockPos(topPos.getX(), y, topPos.getZ()), pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2); + } + } + } + } + + level.setBlock(landingPos, LumenWorldgenHelper.lumenState(lumenBlockState, true), 2); + LumenWorldgenHelper.scheduleFluidTick(level, landingPos); + } + + private static void clearAboveShelf(WorldGenLevel level, BlockPos shelfCenter) { + for (int x = -SHELF_RADIUS; x <= SHELF_RADIUS; x++) { + for (int z = -SHELF_RADIUS; z <= SHELF_RADIUS; z++) { + double distance = (x * x + z * z) / (double) (SHELF_RADIUS * SHELF_RADIUS); + if (distance > 1.0D) { + continue; + } + + BlockPos columnTop = shelfCenter.offset(x, 0, z); + for (int offset = 1; offset <= 16; offset++) { + BlockPos abovePos = columnTop.above(offset); + BlockState aboveState = level.getBlockState(abovePos); + if (!aboveState.isAir() && aboveState.canBeReplaced()) { + level.setBlock(abovePos, Blocks.AIR.defaultBlockState(), 2); + } + } + } + } + } + + private static BlockState pickBodyState(double distance, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState) { + if (distance > 0.85D) { + return random.nextFloat() < 0.4F ? mossState : tuffState; + } + return random.nextFloat() < 0.7F ? shellstoneState : tuffState; + } + + private static BlockPos findSurfaceCenter(WorldGenLevel level, BlockPos origin) { + int bestY = Integer.MIN_VALUE; + BlockPos bestPos = null; + for (int dx = -4; dx <= 4; dx++) { + for (int dz = -4; dz <= 4; dz++) { + int x = origin.getX() + dx; + int z = origin.getZ() + dz; + int topY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + BlockPos pos = LumenWorldgenHelper.findNaturalFloor(level, x, z, topY, level.getMinBuildHeight() + 1); + if (pos != null && pos.getY() > bestY) { + bestY = pos.getY(); + bestPos = pos; + } + } + } + return bestPos; + } + + 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/elythia/LumenStreamFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java new file mode 100644 index 00000000..dcd5ba45 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java @@ -0,0 +1,340 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.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 LumenStreamFeature extends Feature { + private static final int MAX_LENGTH = 36; + private static final int MIN_LENGTH = 12; + private static final int MAX_WIDTH = 2; + + public LumenStreamFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + StreamStart start = findStart(level, origin); + if (start == null) { + return false; + } + + BlockState lumenBlockState = AntarchyObjects.LUMEN_BLOCK.get().defaultBlockState(); + BlockState shellstoneState = AntarchyObjects.SHELLSTONE.get().defaultBlockState(); + BlockState tuffState = Blocks.TUFF.defaultBlockState(); + + Direction direction = pickDownhillDirection(level, start.x(), start.z(), start.surfaceY(), random); + if (direction == null) { + return false; + } + + int length = randomBetween(random, MIN_LENGTH, MAX_LENGTH); + int x = start.x(); + int z = start.z(); + int previousSurfaceY = start.surfaceY(); + boolean placedAny = false; + + for (int step = 0; step < length; step++) { + int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + if (surfaceY <= level.getMinBuildHeight() + 4) { + break; + } + + if (step > 0 && surfaceY - previousSurfaceY > 2) { + break; + } + + int channelDepth = step == 0 ? 4 : 3 + random.nextInt(2); + int waterlineY = surfaceY - 1; + int floorY = waterlineY - channelDepth; + if (!hasSolidSubstrate(level, x, z, floorY)) { + break; + } + + placedAny |= carveChannelSegment(level, random, x, z, surfaceY, waterlineY, floorY, lumenBlockState, shellstoneState, tuffState, step); + + Direction nextDirection = chooseNextDirection(level, x, z, direction, random); + if (nextDirection == null) { + break; + } + + direction = nextDirection; + previousSurfaceY = surfaceY; + x += direction.getStepX(); + z += direction.getStepZ(); + } + + if (placedAny) { + placedAny |= createTerminalBasin(level, random, x, z, lumenBlockState, shellstoneState, tuffState); + } + + return placedAny; + } + + private static boolean carveChannelSegment( + WorldGenLevel level, + RandomSource random, + int centerX, + int centerZ, + int surfaceY, + int waterlineY, + int floorY, + BlockState lumenBlockState, + BlockState shellstoneState, + BlockState tuffState, + int step + ) { + boolean placedAny = false; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + int width = 1 + random.nextInt(MAX_WIDTH); + + for (int dx = -width; dx <= width; dx++) { + for (int dz = -width; dz <= width; dz++) { + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance > width + 0.4D) { + continue; + } + + int worldX = centerX + dx; + int worldZ = centerZ + dz; + int localSurfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, worldX, worldZ) - 1; + if (localSurfaceY < floorY + 1) { + continue; + } + + double normalized = Mth.clamp((float) (distance / Math.max(width, 1)), 0.0F, 1.25F); + int localDepth = Math.max(2, Mth.floor((1.0D - (normalized * normalized)) * (waterlineY - floorY))); + if (distance <= width * 0.45D) { + localDepth = Math.max(localDepth, waterlineY - floorY - 1); + } + int localWaterlineY = Math.min(waterlineY, localSurfaceY - 1); + int localFloorY = localWaterlineY - localDepth; + if (!hasSolidSubstrate(level, worldX, worldZ, localFloorY)) { + continue; + } + + boolean edge = distance >= width - 0.45D; + boolean innerWall = !edge && distance >= width - 0.8D; + int bankTopY = Math.max(localWaterlineY + 1, Math.min(localSurfaceY, surfaceY)); + for (int y = localSurfaceY; y > localFloorY; y--) { + mutable.set(worldX, y, worldZ); + if (y > localWaterlineY) { + level.setBlock(mutable, y <= bankTopY && (edge || innerWall) ? pickWallState(random, shellstoneState, tuffState) : Blocks.AIR.defaultBlockState(), 2); + placedAny = true; + continue; + } + + if (edge || (innerWall && y >= localFloorY + 1)) { + level.setBlock(mutable, pickWallState(random, shellstoneState, tuffState), 2); + placedAny = true; + continue; + } + + level.setBlock(mutable, LumenWorldgenHelper.lumenState(lumenBlockState, 0), 2); + LumenWorldgenHelper.scheduleFluidTick(level, mutable.immutable()); + placedAny = true; + } + + mutable.set(worldX, localFloorY, worldZ); + level.setBlock(mutable, random.nextFloat() < 0.65F ? shellstoneState : tuffState, 2); + placedAny = true; + } + } + + return placedAny; + } + + private static boolean createTerminalBasin( + WorldGenLevel level, + RandomSource random, + int centerX, + int centerZ, + BlockState lumenBlockState, + BlockState shellstoneState, + BlockState tuffState + ) { + int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, centerX, centerZ) - 1; + int radius = 3 + random.nextInt(2); + int waterlineY = surfaceY - 1; + int maxDepth = 3 + random.nextInt(2); + int floorY = waterlineY - maxDepth; + if (!hasSolidSubstrate(level, centerX, centerZ, floorY)) { + return false; + } + + 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 + 0.6D) { + continue; + } + + int worldX = centerX + dx; + int worldZ = centerZ + dz; + int localSurfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, worldX, worldZ) - 1; + if (localSurfaceY < floorY + 1) { + continue; + } + + double normalized = Mth.clamp((float) (distance / Math.max(radius, 1)), 0.0F, 1.25F); + int localDepth = Math.max(2, Mth.floor((1.0D - (normalized * normalized)) * maxDepth)); + int localWaterlineY = Math.min(waterlineY, localSurfaceY - 1); + int localFloorY = localWaterlineY - localDepth; + boolean edge = distance >= radius - 0.45D; + boolean innerWall = !edge && distance >= radius - 0.85D; + int bankTopY = Math.max(localWaterlineY + 1, Math.min(localSurfaceY, surfaceY)); + for (int y = localSurfaceY; y > localFloorY; y--) { + mutable.set(worldX, y, worldZ); + if (y > localWaterlineY) { + level.setBlock(mutable, y <= bankTopY && (edge || innerWall) ? pickWallState(random, shellstoneState, tuffState) : Blocks.AIR.defaultBlockState(), 2); + placedAny = true; + continue; + } + + if (edge || (innerWall && y >= localFloorY + 1)) { + level.setBlock(mutable, pickWallState(random, shellstoneState, tuffState), 2); + placedAny = true; + continue; + } + + level.setBlock(mutable, lumenBlockState, 2); + LumenWorldgenHelper.scheduleFluidTick(level, mutable.immutable()); + placedAny = true; + } + + mutable.set(worldX, localFloorY, worldZ); + level.setBlock(mutable, random.nextFloat() < 0.75F ? shellstoneState : tuffState, 2); + placedAny = true; + } + } + + return placedAny; + } + + private static StreamStart findStart(WorldGenLevel level, BlockPos origin) { + int bestY = Integer.MIN_VALUE; + StreamStart best = null; + for (int dx = -4; dx <= 4; dx++) { + for (int dz = -4; dz <= 4; dz++) { + int x = origin.getX() + dx; + int z = origin.getZ() + dz; + int topY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + BlockPos floor = LumenWorldgenHelper.findNaturalFloor(level, x, z, topY, level.getMinBuildHeight() + 1); + if (floor != null && floor.getY() > bestY) { + bestY = floor.getY(); + best = new StreamStart(x, z, floor.getY()); + } + } + } + return best; + } + + private static BlockState pickWallState(RandomSource random, BlockState shellstoneState, BlockState tuffState) { + return random.nextFloat() < 0.7F ? shellstoneState : tuffState; + } + + private static Direction pickDownhillDirection(WorldGenLevel level, int x, int z, int surfaceY, RandomSource random) { + Direction bestDirection = null; + int bestDrop = Integer.MIN_VALUE; + for (Direction direction : Direction.Plane.HORIZONTAL) { + int nextX = x + direction.getStepX() * 3; + int nextZ = z + direction.getStepZ() * 3; + int nextY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, nextX, nextZ) - 1; + int drop = surfaceY - nextY; + if (drop > bestDrop) { + bestDrop = drop; + bestDirection = direction; + } + } + + if (bestDirection == null) { + return null; + } + + if (bestDrop < -1 && random.nextInt(4) != 0) { + return null; + } + + return bestDirection; + } + + private static Direction chooseNextDirection(WorldGenLevel level, int x, int z, Direction current, RandomSource random) { + Direction[] candidates = new Direction[] { + current, + turnLeft(current), + turnRight(current) + }; + + Direction best = null; + int bestScore = Integer.MAX_VALUE; + for (Direction candidate : candidates) { + int nextX = x + candidate.getStepX() * 2; + int nextZ = z + candidate.getStepZ() * 2; + int nextY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, nextX, nextZ) - 1; + int score = nextY * 8 + random.nextInt(3); + if (score < bestScore) { + bestScore = score; + best = candidate; + } + } + + return best; + } + + private static Direction turnLeft(Direction direction) { + return switch (direction) { + case NORTH -> Direction.WEST; + case WEST -> Direction.SOUTH; + case SOUTH -> Direction.EAST; + case EAST -> Direction.NORTH; + default -> direction; + }; + } + + private static Direction turnRight(Direction direction) { + return switch (direction) { + case NORTH -> Direction.EAST; + case EAST -> Direction.SOUTH; + case SOUTH -> Direction.WEST; + case WEST -> Direction.NORTH; + default -> direction; + }; + } + + private static boolean hasSolidSubstrate(WorldGenLevel level, int x, int z, int floorY) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int y = floorY - 1; y >= floorY - 4; y--) { + mutable.set(x, y, z); + if (LumenWorldgenHelper.isSolidSupport(level.getBlockState(mutable))) { + return true; + } + } + return false; + } + + 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); + } + + private record StreamStart(int x, int z, int surfaceY) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenWorldgenHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenWorldgenHelper.java new file mode 100644 index 00000000..dd527123 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenWorldgenHelper.java @@ -0,0 +1,71 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; + +final class LumenWorldgenHelper { + private LumenWorldgenHelper() { + } + + static boolean isNaturalFloor(BlockState state) { + return state.is(net.minecraft.tags.BlockTags.DIRT) + || state.is(net.minecraft.world.level.block.Blocks.GRASS_BLOCK) + || state.is(net.minecraft.world.level.block.Blocks.MOSS_BLOCK) + || state.is(net.minecraft.world.level.block.Blocks.ROOTED_DIRT) + || state.is(AntarchyObjects.SHELLSTONE.get()) + || state.is(net.minecraft.world.level.block.Blocks.TUFF); + } + + static boolean isSolidSupport(BlockState state) { + return !state.isAir() + && state.blocksMotion() + && state.getFluidState().isEmpty() + && !state.is(BlockTags.LOGS) + && !state.is(BlockTags.LEAVES); + } + + static BlockPos findNaturalFloor(WorldGenLevel level, int x, int z, int topY, int minY) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int y = topY; y >= minY; y--) { + mutable.set(x, y, z); + BlockState state = level.getBlockState(mutable); + if (isNaturalFloor(state)) { + return mutable.immutable(); + } + if (state.is(BlockTags.LOGS) || state.is(BlockTags.LEAVES)) { + continue; + } + if (!state.isAir() && state.blocksMotion()) { + break; + } + } + return null; + } + + static BlockState lumenState(BlockState lumenBlockState, boolean source) { + if (source || !lumenBlockState.hasProperty(LiquidBlock.LEVEL)) { + return source ? lumenBlockState.setValue(LiquidBlock.LEVEL, 0) : lumenBlockState; + } + + return lumenBlockState.setValue(LiquidBlock.LEVEL, 7); + } + + static BlockState lumenState(BlockState lumenBlockState, int level) { + if (!lumenBlockState.hasProperty(LiquidBlock.LEVEL)) { + return lumenBlockState; + } + return lumenBlockState.setValue(LiquidBlock.LEVEL, net.minecraft.util.Mth.clamp(level, 0, 15)); + } + + static void scheduleFluidTick(WorldGenLevel level, BlockPos pos) { + FluidState fluidState = level.getFluidState(pos); + if (!fluidState.isEmpty()) { + level.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(level)); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormCaveEntranceFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormCaveEntranceFeature.java new file mode 100644 index 00000000..23a4052b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormCaveEntranceFeature.java @@ -0,0 +1,540 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.WorldGenRegion; +import net.minecraft.tags.BlockTags; +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.MultifaceBlock; +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; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +public class MolewormCaveEntranceFeature extends Feature { + public MolewormCaveEntranceFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos surfaceAnchor = this.findSurfaceAnchor(level, context.origin(), random); + if (surfaceAnchor == null) { + return false; + } + + BlockPos cavity = this.findWarrenAnchor(level, surfaceAnchor, random); + if (cavity == null) { + return false; + } + + float entranceRadius = 4.0F + random.nextFloat() * 1.6F; + this.raiseHabitationMound(level, random, surfaceAnchor, entranceRadius, 4 + random.nextInt(3)); + this.carveEntranceMouth(level, random, surfaceAnchor, entranceRadius); + this.carveGuidedTunnel(level, random, surfaceAnchor, cavity); + this.removeFloatingBlocks(level, surfaceAnchor, Mth.ceil(entranceRadius + 2.0F), surfaceAnchor.getY()); + this.carveNestChamber(level, random, cavity); + MolewormWarrensFeature.carveWarrenNetwork(level, random, cavity, false); + return true; + } + + @Nullable + private BlockPos findWarrenAnchor(WorldGenLevel level, BlockPos surfaceAnchor, RandomSource random) { + int minY = level.getMinBuildHeight() + 18; + int maxY = Math.max(minY + 12, surfaceAnchor.getY() - 24); + if (maxY <= minY) { + return null; + } + + for (int attempt = 0; attempt < 36; attempt++) { + int x = surfaceAnchor.getX() + random.nextInt(11) - 5; + int z = surfaceAnchor.getZ() + random.nextInt(11) - 5; + int y = Mth.clamp(surfaceAnchor.getY() - 28 - random.nextInt(34), minY, maxY); + BlockPos candidate = new BlockPos(x, y, z); + if (!canAccess(level, candidate)) { + continue; + } + + for (int dy = -8; dy <= 8; dy++) { + BlockPos airPos = candidate.above(dy); + if (this.isUsableCavity(level, airPos)) { + return airPos; + } + } + + BlockState candidateState = level.getBlockState(candidate); + if (canReplaceShell(candidateState) || candidateState.isAir()) { + return candidate; + } + } + + return null; + } + + @Nullable + private BlockPos findSurfaceAnchor(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos best = null; + double bestScore = Double.MAX_VALUE; + + for (int dx = -7; dx <= 7; dx++) { + for (int dz = -7; dz <= 7; dz++) { + int x = origin.getX() + dx; + int z = origin.getZ() + dz; + if (!canAccessColumn(level, x, z)) { + continue; + } + + int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + if (surfaceY < level.getMinBuildHeight() + 8 || surfaceY > level.getMaxBuildHeight() - 8) { + continue; + } + + BlockPos candidate = new BlockPos(x, surfaceY, z); + if (!isValidSurface(level, candidate)) { + continue; + } + + double dxScore = x - origin.getX(); + double dzScore = z - origin.getZ(); + double score = dxScore * dxScore + dzScore * dzScore + Math.abs(dx) * 0.5D + Math.abs(dz) * 0.5D + random.nextDouble() * 0.15D; + if (score < bestScore) { + bestScore = score; + best = candidate; + } + } + } + + return best; + } + + private void raiseHabitationMound(WorldGenLevel level, RandomSource random, BlockPos center, float radius, int height) { + int minX = Mth.floor(center.getX() - radius); + int maxX = Mth.floor(center.getX() + radius); + int minZ = Mth.floor(center.getZ() - radius); + int maxZ = Mth.floor(center.getZ() + radius); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + if (!canAccessColumn(level, x, z)) { + continue; + } + + double dx = (x + 0.5D - (center.getX() + 0.5D)) / radius; + double dz = (z + 0.5D - (center.getZ() + 0.5D)) / radius; + double shape = 1.0D - (dx * dx + dz * dz); + if (shape <= 0.0D) { + continue; + } + + int topY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + pos.set(x, topY, z); + if (!isSoilOrStone(level.getBlockState(pos))) { + continue; + } + + int localHeight = Math.max(1, (int) Math.floor(shape * shape * (height + 1) + random.nextDouble() * 0.6D)); + localHeight = Math.min(localHeight, 2); + level.setBlock(pos, disturbedSurfaceState(random), 2); + for (int depth = 1; depth <= 3; depth++) { + pos.set(x, topY - depth, z); + if (isSoilOrStone(level.getBlockState(pos))) { + level.setBlock(pos, disturbedSubsurfaceState(random), 2); + } + } + + for (int y = 1; y <= localHeight; y++) { + pos.set(x, topY + y, z); + if (!level.isEmptyBlock(pos) || level.isEmptyBlock(pos.below())) { + continue; + } + level.setBlock(pos, disturbedSurfaceState(random), 2); + tryPlaceDeadBush(level, random, pos.above()); + } + } + } + } + + private void removeFloatingBlocks(WorldGenLevel level, BlockPos center, int radius, int surfaceY) { + int minX = center.getX() - radius; + int maxX = center.getX() + radius; + int minZ = center.getZ() - radius; + int maxZ = center.getZ() + radius; + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + BlockPos.MutableBlockPos belowPos = new BlockPos.MutableBlockPos(); + + for (int y = surfaceY + 1; y <= surfaceY + 8; y++) { + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + if (!canAccess(level, x, y, z) || !canAccess(level, x, y - 1, z)) { + continue; + } + + pos.set(x, y, z); + BlockState state = level.getBlockState(pos); + if (state.isAir()) { + continue; + } + + belowPos.set(x, y - 1, z); + if (!level.getBlockState(belowPos).isAir()) { + continue; + } + + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + } + } + } + } + + private void carveEntranceMouth(WorldGenLevel level, RandomSource random, BlockPos surfaceAnchor, float radius) { + Vec3 mouthCenter = Vec3.atCenterOf(surfaceAnchor).add(0.0D, 2.2D, 0.0D); + this.carvePocket(level, random, mouthCenter, radius, 3.0F, radius, true); + this.carvePocket(level, random, mouthCenter.add(0.0D, -2.0D, 0.0D), radius - 0.9F, 2.1F, radius - 0.9F, false); + } + + private void carveGuidedTunnel(WorldGenLevel level, RandomSource random, BlockPos surfaceAnchor, BlockPos cavity) { + Vec3 surface = Vec3.atCenterOf(surfaceAnchor).add(0.0D, 1.2D, 0.0D); + Vec3 chamber = Vec3.atCenterOf(cavity); + Vec3 horizontal = new Vec3(chamber.x - surface.x, 0.0D, chamber.z - surface.z); + if (horizontal.lengthSqr() < 1.0D) { + float angle = random.nextFloat() * Mth.TWO_PI; + horizontal = new Vec3(Mth.cos(angle), 0.0D, Mth.sin(angle)); + } + horizontal = horizontal.normalize(); + + Vec3 cursor = surface; + int slopedSteps = 6 + random.nextInt(3); + for (int step = 0; step < slopedSteps; step++) { + Vec3 next = cursor.add( + horizontal.x * (1.8D + random.nextDouble() * 0.5D), + -(0.95D + random.nextDouble() * 0.25D), + horizontal.z * (1.8D + random.nextDouble() * 0.5D) + ); + this.carveTube(level, random, cursor, next, 2.7F, 2.35F); + cursor = next; + } + + this.carveTube(level, random, cursor, chamber, 2.35F, 2.7F); + } + + private void carveNestChamber(WorldGenLevel level, RandomSource random, BlockPos cavity) { + Vec3 center = Vec3.atCenterOf(cavity); + this.carvePocket(level, random, center, 4.5F + random.nextFloat() * 1.2F, 3.0F, 4.5F + random.nextFloat() * 1.2F, true); + this.decorateFloor(level, random, center, 4.8F, 4.8F); + this.decorateCeiling(level, random, center, 4.8F, 3.2F, 4.8F); + } + + private void carveTube(WorldGenLevel level, RandomSource random, Vec3 start, Vec3 end, float startRadius, float endRadius) { + Vec3 delta = end.subtract(start); + double length = Math.max(delta.length(), 1.0D); + int steps = Math.max(5, Mth.ceil(length * 2.3D)); + + for (int step = 0; step <= steps; step++) { + float progress = step / (float) steps; + Vec3 center = start.add(delta.scale(progress)); + float radius = Mth.lerp(progress, startRadius, endRadius); + this.carvePocket(level, random, center, radius, Math.max(1.85F, radius * 0.82F), radius, step % 4 == 0); + } + } + + private void carvePocket(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusY, float radiusZ, boolean decorate) { + int minX = Mth.floor(center.x - radiusX - 1.5F); + int maxX = Mth.floor(center.x + radiusX + 1.5F); + int minY = Math.max(level.getMinBuildHeight() + 1, Mth.floor(center.y - radiusY - 2.0F)); + int maxY = Math.min(level.getMaxBuildHeight() - 2, Mth.floor(center.y + radiusY + 2.0F)); + int minZ = Mth.floor(center.z - radiusZ - 1.5F); + int maxZ = Mth.floor(center.z + radiusZ + 1.5F); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + double dx = (x + 0.5D - center.x) / radiusX; + double dx2 = dx * dx; + for (int z = minZ; z <= maxZ; z++) { + double dz = (z + 0.5D - center.z) / radiusZ; + double dz2 = dz * dz; + for (int y = minY; y <= maxY; y++) { + if (!canAccess(level, x, y, z)) { + continue; + } + + double dy = (y + 0.5D - center.y) / radiusY; + double distance = dx2 + dz2 + dy * dy + (hashNoise(x, y, z) - 0.5D) * 0.16D; + pos.set(x, y, z); + BlockState state = level.getBlockState(pos); + + if (distance <= 1.0D) { + if (canCarve(state)) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + } + continue; + } + + if (distance <= 1.22D && canReplaceShell(state)) { + level.setBlock(pos, selectShellState(random, center.y, y), 2); + } + } + } + } + + if (decorate) { + this.decorateFloor(level, random, center, radiusX, radiusZ); + this.decorateCeiling(level, random, center, radiusX, radiusY, radiusZ); + } + } + + private void decorateFloor(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusZ) { + int minX = Mth.floor(center.x - radiusX); + int maxX = Mth.floor(center.x + radiusX); + int minZ = Mth.floor(center.z - radiusZ); + int maxZ = Mth.floor(center.z + radiusZ); + int minY = Math.max(level.getMinBuildHeight() + 2, Mth.floor(center.y - 6.0D)); + int maxY = Math.min(level.getMaxBuildHeight() - 4, Mth.floor(center.y + 3.0D)); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + for (int y = maxY; y >= minY; y--) { + if (!canAccess(level, x, y, z) || !canAccess(level, x, y + 1, z)) { + continue; + } + + pos.set(x, y, z); + if (!level.isEmptyBlock(pos) || !level.isEmptyBlock(pos.above())) { + continue; + } + + BlockPos floorPos = pos.below(); + if (!canReplaceShell(level.getBlockState(floorPos))) { + continue; + } + + level.setBlock(floorPos, random.nextFloat() < 0.14F ? Blocks.MUD.defaultBlockState() : selectFloorState(random), 2); + break; + } + } + } + } + + private void decorateCeiling(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusY, float radiusZ) { + int minX = Mth.floor(center.x - radiusX); + int maxX = Mth.floor(center.x + radiusX); + int minY = Math.max(level.getMinBuildHeight() + 2, Mth.floor(center.y - radiusY)); + int maxY = Math.min(level.getMaxBuildHeight() - 3, Mth.floor(center.y + radiusY + 1.0F)); + int minZ = Mth.floor(center.z - radiusZ); + int maxZ = Mth.floor(center.z + radiusZ); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + BlockState hangingRoots = Blocks.HANGING_ROOTS.defaultBlockState(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + for (int y = maxY; y >= minY; y--) { + if (!canAccess(level, x, y, z) || !canAccess(level, x, y - 1, z)) { + continue; + } + + pos.set(x, y, z); + if (level.isEmptyBlock(pos)) { + continue; + } + + BlockPos airPos = pos.below(); + if (!level.isEmptyBlock(airPos) || !canReplaceShell(level.getBlockState(pos))) { + break; + } + + level.setBlock(pos, random.nextFloat() < 0.72F ? rootedDirtVariant(random) : coarseDirtVariant(random), 2); + if (random.nextFloat() < 0.34F && hangingRoots.canSurvive(level, airPos)) { + level.setBlock(airPos, hangingRoots, 2); + } + break; + } + } + } + + decorateWalls(level, random, center, radiusX, radiusY, radiusZ); + } + + private boolean isUsableCavity(WorldGenLevel level, BlockPos pos) { + return canAccess(level, pos) + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && isSoilOrStone(level.getBlockState(pos.below())) + && !level.isEmptyBlock(pos.above(3)); + } + + private static boolean isValidSurface(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return level.canSeeSky(pos.above()) + && level.getFluidState(pos.above()).isEmpty() + && isSoilOrStone(state) + && !state.is(Blocks.MUD); + } + + private static BlockState disturbedSurfaceState(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.42F) { + return coarseDirtVariant(random); + } + if (roll < 0.86F) { + return rootedDirtVariant(random); + } + return Blocks.PODZOL.defaultBlockState(); + } + + private static BlockState disturbedSubsurfaceState(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.58F) { + return rootedDirtVariant(random); + } + if (roll < 0.94F) { + return coarseDirtVariant(random); + } + return Blocks.PODZOL.defaultBlockState(); + } + + private static BlockState selectShellState(RandomSource random, double centerY, int y) { + return y > centerY + 0.25D + ? (random.nextFloat() < 0.7F ? rootedDirtVariant(random) : coarseDirtVariant(random)) + : (random.nextFloat() < 0.56F ? coarseDirtVariant(random) : rootedDirtVariant(random)); + } + + private static BlockState selectFloorState(RandomSource random) { + return random.nextFloat() < 0.54F ? coarseDirtVariant(random) : rootedDirtVariant(random); + } + + private static boolean canCarve(BlockState state) { + return !state.isAir() + && state.getFluidState().isEmpty() + && !state.is(Blocks.BEDROCK) + && !state.is(Blocks.BARRIER) + && !state.is(Blocks.OBSIDIAN) + && !state.is(Blocks.CRYING_OBSIDIAN); + } + + private static boolean canReplaceShell(BlockState state) { + return canCarve(state) + && !state.is(BlockTags.LOGS) + && !state.is(BlockTags.LEAVES) + && !state.is(Blocks.WATER) + && !state.is(Blocks.LAVA); + } + + private static boolean isSoilOrStone(BlockState state) { + return state.is(BlockTags.DIRT) + || state.is(AntarchyObjects.INFESTED_ROOTED_DIRT.get()) + || state.is(AntarchyObjects.INFESTED_COARSE_DIRT.get()) + || state.is(Blocks.GRASS_BLOCK) + || state.is(Blocks.MOSS_BLOCK) + || state.is(Blocks.PODZOL) + || state.is(Blocks.STONE) + || state.is(Blocks.DEEPSLATE) + || state.is(Blocks.GRAVEL) + || state.is(Blocks.TUFF); + } + + private static double hashNoise(int x, int y, int z) { + long hash = x * 3129871L ^ z * 116129781L ^ y; + hash = hash * hash * 42317861L + hash * 11L; + return ((hash >> 16) & 1023L) / 1023.0D; + } + + private static boolean canAccessColumn(WorldGenLevel level, int x, int z) { + int probeY = Mth.clamp((level.getMinBuildHeight() + level.getMaxBuildHeight()) / 2, level.getMinBuildHeight() + 1, level.getMaxBuildHeight() - 2); + return canAccess(level, x, probeY, z); + } + + private static boolean canAccess(WorldGenLevel level, int x, int y, int z) { + return canAccess(level, new BlockPos(x, Mth.clamp(y, level.getMinBuildHeight() + 1, level.getMaxBuildHeight() - 2), z)); + } + + private static boolean canAccess(WorldGenLevel level, BlockPos pos) { + return !(level instanceof WorldGenRegion region) || region.ensureCanWrite(pos); + } + + private static BlockState rootedDirtVariant(RandomSource random) { + return random.nextFloat() < 0.12F + ? AntarchyObjects.INFESTED_ROOTED_DIRT.get().defaultBlockState() + : Blocks.ROOTED_DIRT.defaultBlockState(); + } + + private static BlockState coarseDirtVariant(RandomSource random) { + return random.nextFloat() < 0.08F + ? AntarchyObjects.INFESTED_COARSE_DIRT.get().defaultBlockState() + : Blocks.COARSE_DIRT.defaultBlockState(); + } + + private static void decorateWalls(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusY, float radiusZ) { + int minX = Mth.floor(center.x - radiusX); + int maxX = Mth.floor(center.x + radiusX); + int minY = Math.max(level.getMinBuildHeight() + 2, Mth.floor(center.y - radiusY)); + int maxY = Math.min(level.getMaxBuildHeight() - 3, Mth.floor(center.y + radiusY)); + int minZ = Mth.floor(center.z - radiusZ); + int maxZ = Mth.floor(center.z + radiusZ); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + for (int y = minY; y <= maxY; y++) { + if (random.nextFloat() >= 0.028F || !canAccess(level, x, y, z)) { + continue; + } + + pos.set(x, y, z); + if (!level.isEmptyBlock(pos)) { + continue; + } + + tryPlaceGlowLichen(level, random, pos); + } + } + } + } + + private static void tryPlaceDeadBush(WorldGenLevel level, RandomSource random, BlockPos pos) { + if (random.nextFloat() >= 0.06F) { + return; + } + + BlockState bush = Blocks.DEAD_BUSH.defaultBlockState(); + if (level.isEmptyBlock(pos) && bush.canSurvive(level, pos)) { + level.setBlock(pos, bush, 2); + } + } + + private static void tryPlaceGlowLichen(WorldGenLevel level, RandomSource random, BlockPos pos) { + Direction[] directions = Direction.values(); + for (int i = 0; i < directions.length; i++) { + Direction direction = directions[(i + random.nextInt(directions.length)) % directions.length]; + if (direction == Direction.DOWN) { + continue; + } + + BlockPos attachmentPos = pos.relative(direction); + if (!canAccess(level, attachmentPos)) { + continue; + } + + BlockState attachmentState = level.getBlockState(attachmentPos); + if (attachmentState.isAir() || !attachmentState.isFaceSturdy(level, attachmentPos, direction.getOpposite())) { + continue; + } + + BlockState lichen = Blocks.GLOW_LICHEN.defaultBlockState().setValue(MultifaceBlock.getFaceProperty(direction), true); + if (lichen.canSurvive(level, pos)) { + level.setBlock(pos, lichen, 2); + return; + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormSurfaceMoundsFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormSurfaceMoundsFeature.java new file mode 100644 index 00000000..841d9e5a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormSurfaceMoundsFeature.java @@ -0,0 +1,320 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.server.level.WorldGenRegion; +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; +import net.minecraft.world.phys.Vec3; + +public class MolewormSurfaceMoundsFeature extends Feature { + public MolewormSurfaceMoundsFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + int chunkStartX = origin.getX() & ~15; + int chunkStartZ = origin.getZ() & ~15; + boolean placedAny = false; + int tooLow = 0; + int validCenters = 0; + int invalidSurface = 0; + int ventsCarved = 0; + int aboveSurfaceBlocks = 0; + + int moundCount = 5 + random.nextInt(3); + for (int i = 0; i < moundCount; i++) { + int x = chunkStartX + random.nextInt(16); + int z = chunkStartZ + random.nextInt(16); + if (!canAccessColumn(level, x, z)) { + continue; + } + int topY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + if (topY <= level.getMinBuildHeight() + 2) { + tooLow++; + continue; + } + + BlockPos center = new BlockPos(x, topY, z); + if (!isValidSurface(level, center)) { + invalidSurface++; + continue; + } + + validCenters++; + float radiusX = 2.2F + random.nextFloat() * 2.8F; + float radiusZ = 2.2F + random.nextFloat() * 2.8F; + int height = 3 + random.nextInt(4); + aboveSurfaceBlocks += this.raiseMound(level, random, center, radiusX, radiusZ, height); + placedAny = true; + + if (random.nextFloat() < 0.9F) { + if (this.carveVent(level, random, center, 1.5F + random.nextFloat() * 1.35F, 3 + random.nextInt(4))) { + ventsCarved++; + } + } + if (random.nextFloat() < 0.16F) { + this.placeSurfaceDripstone(level, random, center, 1.6F + random.nextFloat() * 1.2F); + } + } + return placedAny; + } + + private int raiseMound(WorldGenLevel level, RandomSource random, BlockPos center, float radiusX, float radiusZ, int height) { + int minX = Mth.floor(center.getX() - radiusX); + int maxX = Mth.floor(center.getX() + radiusX); + int minZ = Mth.floor(center.getZ() - radiusZ); + int maxZ = Mth.floor(center.getZ() + radiusZ); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + int aboveSurfaceBlocks = 0; + + for (int x = minX; x <= maxX; x++) { + double dx = (x + 0.5D - (center.getX() + 0.5D)) / radiusX; + double dx2 = dx * dx; + for (int z = minZ; z <= maxZ; z++) { + if (!canAccessColumn(level, x, z)) { + continue; + } + double dz = (z + 0.5D - (center.getZ() + 0.5D)) / radiusZ; + double shape = 1.0D - (dx2 + dz * dz); + if (shape <= 0.0D) { + continue; + } + + int topY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + pos.set(x, topY, z); + if (!isSoilOrStone(level.getBlockState(pos))) { + continue; + } + + int localHeight = Math.max(1, (int) Math.floor(shape * shape * (height + 1) + random.nextDouble() * 1.1D)); + level.setBlock(pos, disturbedSurfaceState(random), 2); + for (int depth = 1; depth <= 2 + random.nextInt(2); depth++) { + pos.set(x, topY - depth, z); + if (isSoilOrStone(level.getBlockState(pos))) { + level.setBlock(pos, disturbedSubsurfaceState(random), 2); + } + } + + if (localHeight <= 1 && shape < 0.42D) { + continue; + } + + for (int y = 1; y <= localHeight; y++) { + pos.set(x, topY + y, z); + if (!level.isEmptyBlock(pos) || level.isEmptyBlock(pos.below())) { + continue; + } + level.setBlock(pos, disturbedSurfaceState(random), 2); + aboveSurfaceBlocks++; + } + } + } + + return aboveSurfaceBlocks; + } + + private boolean carveVent(WorldGenLevel level, RandomSource random, BlockPos center, float radius, int depth) { + Vec3 cursor = Vec3.atCenterOf(center).add(0.0D, 2.1D, 0.0D); + boolean carved = this.carvePocket(level, random, cursor, radius + 0.6F, 2.0F, radius + 0.6F); + + for (int step = 0; step < depth; step++) { + cursor = cursor.add( + random.nextDouble() * 0.5D - 0.25D, + -(0.9D + random.nextDouble() * 0.9D), + random.nextDouble() * 0.5D - 0.25D + ); + carved |= this.carvePocket(level, random, cursor, Math.max(0.95F, radius - step * 0.08F), 1.45F, Math.max(0.95F, radius - step * 0.08F)); + } + + return carved; + } + + private boolean carvePocket(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusY, float radiusZ) { + int minX = Mth.floor(center.x - radiusX - 1.0F); + int maxX = Mth.floor(center.x + radiusX + 1.0F); + int minY = Math.max(level.getMinBuildHeight() + 1, Mth.floor(center.y - radiusY - 1.0F)); + int maxY = Math.min(level.getMaxBuildHeight() - 2, Mth.floor(center.y + radiusY + 1.0F)); + int minZ = Mth.floor(center.z - radiusZ - 1.0F); + int maxZ = Mth.floor(center.z + radiusZ + 1.0F); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + boolean carvedAny = false; + + for (int x = minX; x <= maxX; x++) { + double dx = (x + 0.5D - center.x) / radiusX; + double dx2 = dx * dx; + for (int z = minZ; z <= maxZ; z++) { + double dz = (z + 0.5D - center.z) / radiusZ; + double dz2 = dz * dz; + for (int y = minY; y <= maxY; y++) { + if (!canAccess(level, x, y, z)) { + continue; + } + double dy = (y + 0.5D - center.y) / radiusY; + pos.set(x, y, z); + BlockState state = level.getBlockState(pos); + double distance = dx2 + dz2 + dy * dy + (hashNoise(x, y, z) - 0.5D) * 0.16D; + + if (distance <= 1.0D) { + if (canCarve(state)) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + carvedAny = true; + } + continue; + } + + if (distance <= 1.22D && canReplaceShell(state)) { + level.setBlock(pos, random.nextFloat() < 0.58F ? rootedDirtVariant(random) : coarseDirtVariant(random), 2); + } + } + } + } + + return carvedAny; + } + + private void placeSurfaceDripstone(WorldGenLevel level, RandomSource random, BlockPos center, float radius) { + int minX = Mth.floor(center.getX() - radius); + int maxX = Mth.floor(center.getX() + radius); + int minZ = Mth.floor(center.getZ() - radius); + int maxZ = Mth.floor(center.getZ() + radius); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + BlockState pointedDripstone = Blocks.POINTED_DRIPSTONE.defaultBlockState(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + if (!canAccessColumn(level, x, z)) { + continue; + } + + double dx = x + 0.5D - (center.getX() + 0.5D); + double dz = z + 0.5D - (center.getZ() + 0.5D); + if (dx * dx + dz * dz > radius * radius || random.nextFloat() < 0.35F) { + continue; + } + + int topY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + pos.set(x, topY, z); + if (!isSoilOrStone(level.getBlockState(pos))) { + continue; + } + + level.setBlock(pos, Blocks.DRIPSTONE_BLOCK.defaultBlockState(), 2); + int spikeHeight = 1 + random.nextInt(3); + for (int y = 1; y <= spikeHeight; y++) { + pos.set(x, topY + y, z); + if (!level.isEmptyBlock(pos)) { + break; + } + if (!pointedDripstone.canSurvive(level, pos)) { + break; + } + level.setBlock(pos, pointedDripstone, 2); + } + } + } + } + + private static BlockState disturbedSurfaceState(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.46F) { + return coarseDirtVariant(random); + } + if (roll < 0.82F) { + return rootedDirtVariant(random); + } + return Blocks.PODZOL.defaultBlockState(); + } + + private static BlockState disturbedSubsurfaceState(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.52F) { + return rootedDirtVariant(random); + } + if (roll < 0.9F) { + return coarseDirtVariant(random); + } + return Blocks.PODZOL.defaultBlockState(); + } + + private static boolean isValidSurface(WorldGenLevel level, BlockPos pos) { + BlockPos abovePos = pos.above(); + BlockState state = level.getBlockState(pos); + return level.getFluidState(abovePos).isEmpty() + && isSoilOrStone(state) + && !state.is(Blocks.MUD); + } + + private static boolean isSoilOrStone(BlockState state) { + return state.is(BlockTags.DIRT) + || state.is(AntarchyObjects.INFESTED_ROOTED_DIRT.get()) + || state.is(AntarchyObjects.INFESTED_COARSE_DIRT.get()) + || state.is(Blocks.GRASS_BLOCK) + || state.is(Blocks.MOSS_BLOCK) + || state.is(Blocks.PODZOL) + || state.is(Blocks.STONE) + || state.is(Blocks.DEEPSLATE) + || state.is(Blocks.GRAVEL); + } + + private static boolean canCarve(BlockState state) { + return !state.isAir() + && state.getFluidState().isEmpty() + && !state.is(Blocks.BEDROCK) + && !state.is(Blocks.BARRIER) + && !state.is(Blocks.OBSIDIAN) + && !state.is(Blocks.CRYING_OBSIDIAN); + } + + private static boolean canReplaceShell(BlockState state) { + return canCarve(state) + && !state.is(BlockTags.LOGS) + && !state.is(BlockTags.LEAVES) + && !state.is(Blocks.WATER) + && !state.is(Blocks.LAVA); + } + + private static double hashNoise(int x, int y, int z) { + long hash = x * 3129871L ^ z * 116129781L ^ y; + hash = hash * hash * 42317861L + hash * 11L; + return ((hash >> 16) & 1023L) / 1023.0D; + } + + private static boolean canAccessColumn(WorldGenLevel level, int x, int z) { + int probeY = Mth.clamp((level.getMinBuildHeight() + level.getMaxBuildHeight()) / 2, level.getMinBuildHeight() + 1, level.getMaxBuildHeight() - 2); + return canAccess(level, x, probeY, z); + } + + private static boolean canAccess(WorldGenLevel level, int x, int y, int z) { + return canAccess(level, new BlockPos(x, Mth.clamp(y, level.getMinBuildHeight() + 1, level.getMaxBuildHeight() - 2), z)); + } + + private static boolean canAccess(WorldGenLevel level, BlockPos pos) { + return !(level instanceof WorldGenRegion region) || region.ensureCanWrite(pos); + } + + private static BlockState rootedDirtVariant(RandomSource random) { + return random.nextFloat() < 0.12F + ? AntarchyObjects.INFESTED_ROOTED_DIRT.get().defaultBlockState() + : Blocks.ROOTED_DIRT.defaultBlockState(); + } + + private static BlockState coarseDirtVariant(RandomSource random) { + return random.nextFloat() < 0.08F + ? AntarchyObjects.INFESTED_COARSE_DIRT.get().defaultBlockState() + : Blocks.COARSE_DIRT.defaultBlockState(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormTunnelsFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormTunnelsFeature.java new file mode 100644 index 00000000..e24e5412 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormTunnelsFeature.java @@ -0,0 +1,784 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.server.level.WorldGenRegion; +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; +import net.minecraft.world.phys.Vec3; + +public class MolewormTunnelsFeature extends Feature { + public MolewormTunnelsFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + int chunkStartX = origin.getX() & ~15; + int chunkStartZ = origin.getZ() & ~15; + boolean placedAny = false; + int tooLowOrHigh = 0; + int invalidSurface = 0; + int successfulEntrances = 0; + int extraMainBranches = 0; + int extraSideBranches = 0; + + this.disturbSurface(level, random, chunkStartX, chunkStartZ); + this.raiseSurfaceBurrowField(level, random, chunkStartX, chunkStartZ); + + int entrances = 3 + random.nextInt(3); + for (int i = 0; i < entrances; i++) { + int x = chunkStartX + 1 + random.nextInt(14); + int z = chunkStartZ + 1 + random.nextInt(14); + if (!canAccessColumn(level, x, z)) { + continue; + } + int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + if (surfaceY <= level.getMinBuildHeight() + 20 || surfaceY >= level.getMaxBuildHeight() - 20) { + tooLowOrHigh++; + continue; + } + + BlockPos surfacePos = new BlockPos(x, surfaceY, z); + if (!isValidSurface(level, surfacePos)) { + invalidSurface++; + continue; + } + + TunnelStart start = random.nextFloat() < 0.68F + ? this.carveSlopedEntrance(level, random, surfacePos) + : this.carveCollapsedShaft(level, random, surfacePos); + if (start == null) { + continue; + } + if (random.nextFloat() < 0.18F) { + this.placeSurfaceDripstone(level, random, surfacePos, 1.5F + random.nextFloat()); + } + + this.carveMainTunnel(level, random, start.position, start.direction, surfaceY, 0); + successfulEntrances++; + if (random.nextFloat() < 0.50F) { + this.carveMainTunnel(level, random, start.position.add(random.nextDouble() - 0.5D, -0.6D, random.nextDouble() - 0.5D), + rotateHorizontal(start.direction, random.nextBoolean() ? 0.6F : -0.6F), surfaceY, 0); + extraMainBranches++; + } + if (random.nextFloat() < 0.35F) { + this.carveMainTunnel(level, random, start.position.add(random.nextDouble() - 0.5D, -1.0D, random.nextDouble() - 0.5D), + rotateHorizontal(start.direction, random.nextBoolean() ? 1.05F : -1.05F), surfaceY, 1); + extraSideBranches++; + } + placedAny = true; + } + return placedAny; + } + + private void disturbSurface(WorldGenLevel level, RandomSource random, int chunkStartX, int chunkStartZ) { + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + for (int localX = 0; localX < 16; localX++) { + for (int localZ = 0; localZ < 16; localZ++) { + int x = chunkStartX + localX; + int z = chunkStartZ + localZ; + if (!canAccessColumn(level, x, z)) { + continue; + } + int topY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + if (topY <= level.getMinBuildHeight() + 2) { + continue; + } + + pos.set(x, topY, z); + if (!isValidSurface(level, pos)) { + continue; + } + + level.setBlock(pos, disturbedSurfaceState(random), 2); + for (int depth = 1; depth <= 3 + random.nextInt(2); depth++) { + pos.set(x, topY - depth, z); + BlockState state = level.getBlockState(pos); + if (!isSoilOrStone(state)) { + break; + } + level.setBlock(pos, disturbedSubsurfaceState(random), 2); + } + } + } + } + + private void raiseSurfaceBurrowField(WorldGenLevel level, RandomSource random, int chunkStartX, int chunkStartZ) { + int moundCount = 4 + random.nextInt(5); + for (int i = 0; i < moundCount; i++) { + int x = chunkStartX + random.nextInt(16); + int z = chunkStartZ + random.nextInt(16); + if (!canAccessColumn(level, x, z)) { + continue; + } + int y = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + if (y <= level.getMinBuildHeight() + 2) { + continue; + } + + BlockPos center = new BlockPos(x, y, z); + if (!isValidSurface(level, center)) { + continue; + } + + this.raiseBroadMound(level, random, center, 2.1F + random.nextFloat() * 2.2F, 1 + random.nextInt(3)); + } + } + + private TunnelStart carveSlopedEntrance(WorldGenLevel level, RandomSource random, BlockPos surfacePos) { + Vec3 direction = horizontalDirection(random); + Vec3 cursor = Vec3.atCenterOf(surfacePos); + float startRadius = 3.5F + random.nextFloat() * 1.9F; + int steps = 7 + random.nextInt(4); + + this.raiseSpoilMound(level, random, surfacePos, startRadius + 1.5F, 2 + random.nextInt(3), direction); + this.carvePocket(level, random, cursor.add(0.0D, 3.0D, 0.0D), startRadius + 1.8F, 3.6F, startRadius + 1.8F, 0, true, true); + this.carvePocket(level, random, cursor.add(direction.x * 1.8D, 2.4D, direction.z * 1.8D), startRadius + 0.6F, 2.8F, startRadius + 0.6F, 0, false, false); + + for (int step = 0; step < steps; step++) { + float progress = (step + 1) / (float) steps; + float radius = Mth.lerp(progress, startRadius, 2.2F + random.nextFloat() * 0.9F); + cursor = cursor.add( + direction.x * (2.2D + random.nextDouble() * 1.0D), + -(1.0D + random.nextDouble() * 0.7D), + direction.z * (2.2D + random.nextDouble() * 1.0D) + ); + this.carvePocket(level, random, cursor, radius, 1.8F, radius, 4 + step * 2, false, step >= steps - 2); + } + + this.removeFloatingBlocks(level, surfacePos, Mth.ceil(startRadius + 3.0F), surfacePos.getY()); + + Vec3 tunnelDir = new Vec3( + direction.x + random.nextDouble() * 0.3D - 0.15D, + -0.45D - random.nextDouble() * 0.2D, + direction.z + random.nextDouble() * 0.3D - 0.15D + ).normalize(); + return new TunnelStart(cursor.add(0.0D, -0.5D, 0.0D), tunnelDir); + } + + private TunnelStart carveCollapsedShaft(WorldGenLevel level, RandomSource random, BlockPos surfacePos) { + Vec3 center = Vec3.atCenterOf(surfacePos).add(0.0D, 0.5D, 0.0D); + float rimRadius = 4.2F + random.nextFloat() * 2.0F; + this.raiseSpoilRing(level, random, surfacePos, rimRadius + 1.0F, 2 + random.nextInt(2)); + this.carvePocket(level, random, center.add(0.0D, 3.0D, 0.0D), rimRadius + 1.3F, 3.8F, rimRadius + 1.3F, 0, true, true); + + int shaftDepth = 8 + random.nextInt(7); + for (int step = 0; step < shaftDepth; step++) { + float radius = step < 3 ? 2.2F : 1.7F + random.nextFloat() * 0.5F; + Vec3 shaftCenter = center.add( + random.nextDouble() * 0.5D - 0.25D, + -step * 1.45D, + random.nextDouble() * 0.5D - 0.25D + ); + this.carvePocket(level, random, shaftCenter, radius, 1.5F, radius, 5 + step * 2, false, step >= shaftDepth - 3); + } + + this.removeFloatingBlocks(level, surfacePos, Mth.ceil(rimRadius + 3.0F), surfacePos.getY()); + + Vec3 branchDir = horizontalDirection(random).add(0.0D, -0.55D, 0.0D).normalize(); + return new TunnelStart(center.add(0.0D, -shaftDepth * 1.45D, 0.0D), branchDir); + } + + private boolean carveMainTunnel(WorldGenLevel level, RandomSource random, Vec3 start, Vec3 direction, int surfaceY, int branchDepth) { + Vec3 cursor = start; + Vec3 travel = normalizeTunnelDirection(direction); + boolean carved = false; + int minY = level.getMinBuildHeight() + 10; + int targetDepth = 30 + random.nextInt(27) + branchDepth * 8; + int segments = 8 + random.nextInt(5) - branchDepth; + segments = Math.max(segments, 3); + + for (int segment = 0; segment < segments; segment++) { + int currentDepth = surfaceY - Mth.floor(cursor.y); + if (currentDepth >= targetDepth || cursor.y <= minY) { + break; + } + + float segmentProgress = segment / (float) Math.max(1, segments - 1); + float startRadius = branchDepth == 0 + ? 2.0F + segmentProgress * 1.15F + random.nextFloat() * 0.35F + : 1.55F + segmentProgress * 0.7F + random.nextFloat() * 0.25F; + float endRadius = startRadius + (random.nextFloat() - 0.5F) * 0.35F; + double segmentLength = 4.75D + random.nextDouble() * 3.15D; + + Vec3 wobble = new Vec3( + random.nextDouble() * 0.55D - 0.275D, + -0.08D - random.nextDouble() * 0.14D, + random.nextDouble() * 0.55D - 0.275D + ); + travel = normalizeTunnelDirection(travel.add(wobble)); + + Vec3 next = cursor.add(travel.scale(segmentLength)); + if (next.y > cursor.y - 1.5D) { + next = new Vec3(next.x, cursor.y - 1.5D - random.nextDouble() * 2.0D, next.z); + } + if (!canAccess(level, BlockPos.containing(next.x, next.y, next.z))) { + break; + } + + boolean chamber = currentDepth > 14 && (segment == 2 || segment == 4 || random.nextFloat() < 0.22F); + this.carveTube(level, random, cursor, next, startRadius, endRadius, surfaceY, chamber); + carved = true; + + if (branchDepth < 2 && currentDepth > 6 && random.nextFloat() < (branchDepth == 0 ? 0.40F : 0.20F)) { + Vec3 branchDirection = rotateHorizontal(travel, random.nextBoolean() ? 0.95F : -0.95F).add(0.0D, -0.08D - random.nextDouble() * 0.18D, 0.0D); + this.carveMainTunnel(level, random, next, branchDirection, surfaceY, branchDepth + 1); + } + + if (branchDepth == 0 && currentDepth > 18 && currentDepth < targetDepth - 8 && random.nextFloat() < 0.12F) { + next = this.carveDropShaft(level, random, next, surfaceY); + travel = normalizeTunnelDirection(new Vec3(travel.x, -0.65D - random.nextDouble() * 0.12D, travel.z)); + } + + cursor = next; + } + + if (branchDepth == 0 && carved) { + this.carvePocket( + level, + random, + cursor, + 3.5F + random.nextFloat() * 1.8F, + 2.6F + random.nextFloat() * 0.8F, + 3.5F + random.nextFloat() * 1.8F, + surfaceY - Mth.floor(cursor.y), + true, + true + ); + } + + return carved; + } + + private Vec3 carveDropShaft(WorldGenLevel level, RandomSource random, Vec3 start, int surfaceY) { + Vec3 cursor = start; + int steps = 4 + random.nextInt(4); + for (int i = 0; i < steps; i++) { + cursor = cursor.add( + random.nextDouble() * 0.4D - 0.2D, + -(1.9D + random.nextDouble() * 1.4D), + random.nextDouble() * 0.4D - 0.2D + ); + this.carvePocket(level, random, cursor, 1.8F + random.nextFloat() * 0.5F, 1.7F, 1.8F + random.nextFloat() * 0.5F, surfaceY - Mth.floor(cursor.y), false, true); + } + this.carvePocket(level, random, cursor, 3.2F + random.nextFloat(), 2.5F, 3.2F + random.nextFloat(), surfaceY - Mth.floor(cursor.y), true, true); + return cursor; + } + + private void raiseBroadMound(WorldGenLevel level, RandomSource random, BlockPos surfacePos, float radius, int height) { + int minX = Mth.floor(surfacePos.getX() - radius); + int maxX = Mth.floor(surfacePos.getX() + radius); + int minZ = Mth.floor(surfacePos.getZ() - radius); + int maxZ = Mth.floor(surfacePos.getZ() + radius); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + if (!canAccessColumn(level, x, z)) { + continue; + } + double dx = x + 0.5D - (surfacePos.getX() + 0.5D); + double dz = z + 0.5D - (surfacePos.getZ() + 0.5D); + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance > radius) { + continue; + } + + double shape = 1.0D - distance / radius; + int localHeight = (int) Math.floor(shape * shape * (height + 1) + random.nextDouble() * 1.1D); + localHeight = Math.min(localHeight, 2); + if (localHeight <= 0) { + continue; + } + + int topY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + pos.set(x, topY, z); + if (!isSoilOrStone(level.getBlockState(pos))) { + continue; + } + + level.setBlock(pos, disturbedSurfaceState(random), 2); + for (int depth = 1; depth <= 2; depth++) { + pos.set(x, topY - depth, z); + if (isSoilOrStone(level.getBlockState(pos))) { + level.setBlock(pos, disturbedSubsurfaceState(random), 2); + } + } + + if (localHeight <= 1 && shape < 0.45D) { + continue; + } + + for (int y = 1; y <= localHeight; y++) { + pos.set(x, topY + y, z); + if (!level.isEmptyBlock(pos) || level.isEmptyBlock(pos.below())) { + continue; + } + level.setBlock(pos, disturbedSurfaceState(random), 2); + } + } + } + } + + private void placeSurfaceDripstone(WorldGenLevel level, RandomSource random, BlockPos center, float radius) { + int minX = Mth.floor(center.getX() - radius); + int maxX = Mth.floor(center.getX() + radius); + int minZ = Mth.floor(center.getZ() - radius); + int maxZ = Mth.floor(center.getZ() + radius); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + BlockState pointedDripstone = Blocks.POINTED_DRIPSTONE.defaultBlockState(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + if (!canAccessColumn(level, x, z)) { + continue; + } + + double dx = x + 0.5D - (center.getX() + 0.5D); + double dz = z + 0.5D - (center.getZ() + 0.5D); + if (dx * dx + dz * dz > radius * radius || random.nextFloat() < 0.42F) { + continue; + } + + int topY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + pos.set(x, topY, z); + if (!isSoilOrStone(level.getBlockState(pos))) { + continue; + } + + level.setBlock(pos, Blocks.DRIPSTONE_BLOCK.defaultBlockState(), 2); + int spikeHeight = 1 + random.nextInt(3); + for (int y = 1; y <= spikeHeight; y++) { + pos.set(x, topY + y, z); + if (!level.isEmptyBlock(pos) || !pointedDripstone.canSurvive(level, pos)) { + break; + } + level.setBlock(pos, pointedDripstone, 2); + } + } + } + } + + private void raiseSpoilMound(WorldGenLevel level, RandomSource random, BlockPos surfacePos, float radius, int height, Vec3 favoredDirection) { + int minX = Mth.floor(surfacePos.getX() - radius); + int maxX = Mth.floor(surfacePos.getX() + radius); + int minZ = Mth.floor(surfacePos.getZ() - radius); + int maxZ = Mth.floor(surfacePos.getZ() + radius); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + if (!canAccessColumn(level, x, z)) { + continue; + } + double dx = x + 0.5D - (surfacePos.getX() + 0.5D); + double dz = z + 0.5D - (surfacePos.getZ() + 0.5D); + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance > radius) { + continue; + } + + double directionalBias = favoredDirection.x * dx + favoredDirection.z * dz; + int localHeight = (int) Math.floor((1.0D - distance / radius) * height + directionalBias * 0.18D + random.nextDouble() * 0.75D); + localHeight = Math.min(localHeight, 2); + if (localHeight <= 0) { + continue; + } + + int topY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + pos.set(x, topY, z); + if (!isSoilOrStone(level.getBlockState(pos))) { + continue; + } + + level.setBlock(pos, disturbedSurfaceState(random), 2); + for (int y = 1; y <= localHeight; y++) { + pos.set(x, topY + y, z); + if (!level.isEmptyBlock(pos)) { + continue; + } + level.setBlock(pos, disturbedSurfaceState(random), 2); + } + } + } + } + + private void raiseSpoilRing(WorldGenLevel level, RandomSource random, BlockPos surfacePos, float radius, int height) { + int minX = Mth.floor(surfacePos.getX() - radius); + int maxX = Mth.floor(surfacePos.getX() + radius); + int minZ = Mth.floor(surfacePos.getZ() - radius); + int maxZ = Mth.floor(surfacePos.getZ() + radius); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + if (!canAccessColumn(level, x, z)) { + continue; + } + double dx = x + 0.5D - (surfacePos.getX() + 0.5D); + double dz = z + 0.5D - (surfacePos.getZ() + 0.5D); + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance > radius || distance < radius * 0.42D) { + continue; + } + + double rimStrength = 1.0D - Math.abs(distance - radius * 0.72D) / (radius * 0.32D); + int localHeight = (int) Math.floor(rimStrength * height + random.nextDouble() * 0.85D); + localHeight = Math.min(localHeight, 2); + if (localHeight <= 0) { + continue; + } + + int topY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z) - 1; + pos.set(x, topY, z); + if (!isSoilOrStone(level.getBlockState(pos))) { + continue; + } + + level.setBlock(pos, disturbedSurfaceState(random), 2); + for (int y = 1; y <= localHeight; y++) { + pos.set(x, topY + y, z); + if (!level.isEmptyBlock(pos)) { + continue; + } + level.setBlock(pos, disturbedSurfaceState(random), 2); + } + } + } + } + + private void carveTube(WorldGenLevel level, RandomSource random, Vec3 start, Vec3 end, float startRadius, float endRadius, int surfaceY, boolean chamber) { + Vec3 delta = end.subtract(start); + double length = Math.max(delta.length(), 1.0D); + int steps = Math.max(4, Mth.ceil(length * 2.2D)); + + for (int step = 0; step <= steps; step++) { + float progress = step / (float) steps; + Vec3 center = start.add(delta.scale(progress)); + float radius = Mth.lerp(progress, startRadius, endRadius); + float radiusX = radius + (random.nextFloat() - 0.5F) * 0.25F; + float radiusY = Math.max(1.45F, radius * (chamber ? 0.95F : 0.82F) + (random.nextFloat() - 0.5F) * 0.2F); + float radiusZ = radius + (random.nextFloat() - 0.5F) * 0.25F; + this.carvePocket(level, random, center, radiusX, radiusY, radiusZ, surfaceY - Mth.floor(center.y), chamber && step % 3 == 0, true); + } + + if (chamber) { + Vec3 chamberCenter = start.add(end).scale(0.5D); + this.carvePocket( + level, + random, + chamberCenter, + endRadius + 1.2F + random.nextFloat(), + endRadius * 0.85F + 1.1F, + endRadius + 1.2F + random.nextFloat(), + surfaceY - Mth.floor(chamberCenter.y), + true, + true + ); + } + } + + private void carvePocket(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusY, float radiusZ, int depthFromSurface, boolean chamber, boolean decorateCeiling) { + int minX = Mth.floor(center.x - radiusX - 1.5F); + int maxX = Mth.floor(center.x + radiusX + 1.5F); + int minY = Math.max(level.getMinBuildHeight() + 1, Mth.floor(center.y - radiusY - 2.0F)); + int maxY = Math.min(level.getMaxBuildHeight() - 2, Mth.floor(center.y + radiusY + 2.0F)); + int minZ = Mth.floor(center.z - radiusZ - 1.5F); + int maxZ = Mth.floor(center.z + radiusZ + 1.5F); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + double dx = (x + 0.5D - center.x) / radiusX; + double dx2 = dx * dx; + for (int z = minZ; z <= maxZ; z++) { + double dz = (z + 0.5D - center.z) / radiusZ; + double dz2 = dz * dz; + for (int y = minY; y <= maxY; y++) { + if (!canAccess(level, x, y, z)) { + continue; + } + double dy = (y + 0.5D - center.y) / radiusY; + double noise = (hashNoise(x, y, z) - 0.5D) * 0.18D; + double distance = dx2 + dz2 + dy * dy + noise; + pos.set(x, y, z); + BlockState state = level.getBlockState(pos); + + if (distance <= 1.0D) { + if (canCarve(state)) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + } + continue; + } + + if (distance > 1.24D || !canReplaceShell(state)) { + continue; + } + + level.setBlock(pos, selectShellState(random, depthFromSurface, center.y, y, chamber), 2); + } + } + } + + this.decorateFloor(level, random, center, radiusX, radiusZ, depthFromSurface, chamber); + if (decorateCeiling) { + this.decorateCeiling(level, random, center, radiusX, radiusY, radiusZ, depthFromSurface, chamber); + } + } + + private void decorateFloor(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusZ, int depthFromSurface, boolean chamber) { + int minX = Mth.floor(center.x - radiusX); + int maxX = Mth.floor(center.x + radiusX); + int minZ = Mth.floor(center.z - radiusZ); + int maxZ = Mth.floor(center.z + radiusZ); + int minY = Math.max(level.getMinBuildHeight() + 2, Mth.floor(center.y - 6.0D)); + int maxY = Math.min(level.getMaxBuildHeight() - 4, Mth.floor(center.y + 3.0D)); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + for (int y = maxY; y >= minY; y--) { + if (!canAccess(level, x, y, z) || !canAccess(level, x, y + 1, z)) { + continue; + } + pos.set(x, y, z); + if (!level.isEmptyBlock(pos) || !level.isEmptyBlock(pos.above())) { + continue; + } + + BlockPos floorPos = pos.below(); + BlockState floorState = level.getBlockState(floorPos); + if (!canReplaceShell(floorState)) { + continue; + } + + level.setBlock(floorPos, selectFloorState(random, depthFromSurface, chamber), 2); + break; + } + } + } + } + + private void decorateCeiling(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusY, float radiusZ, int depthFromSurface, boolean chamber) { + int minX = Mth.floor(center.x - radiusX); + int maxX = Mth.floor(center.x + radiusX); + int minY = Math.max(level.getMinBuildHeight() + 2, Mth.floor(center.y - radiusY)); + int maxY = Math.min(level.getMaxBuildHeight() - 3, Mth.floor(center.y + radiusY + 1.0F)); + int minZ = Mth.floor(center.z - radiusZ); + int maxZ = Mth.floor(center.z + radiusZ); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + BlockState hangingRoots = Blocks.HANGING_ROOTS.defaultBlockState(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + for (int y = maxY; y >= minY; y--) { + if (!canAccess(level, x, y, z) || !canAccess(level, x, y - 1, z)) { + continue; + } + pos.set(x, y, z); + if (level.isEmptyBlock(pos)) { + continue; + } + + BlockPos airPos = pos.below(); + if (!level.isEmptyBlock(airPos)) { + continue; + } + + if (!canReplaceShell(level.getBlockState(pos))) { + break; + } + + level.setBlock(pos, random.nextFloat() < 0.76F ? rootedDirtVariant(random) : coarseDirtVariant(random), 2); + if (random.nextFloat() < hangingRootChance(depthFromSurface, chamber) && hangingRoots.canSurvive(level, airPos)) { + level.setBlock(airPos, hangingRoots, 2); + } + break; + } + } + } + } + + private static BlockState selectShellState(RandomSource random, int depthFromSurface, double centerY, int y, boolean chamber) { + boolean ceiling = y > centerY + 0.25D; + if (ceiling) { + return random.nextFloat() < 0.72F ? rootedDirtVariant(random) : coarseDirtVariant(random); + } + return random.nextFloat() < 0.58F ? coarseDirtVariant(random) : rootedDirtVariant(random); + } + + private static BlockState selectFloorState(RandomSource random, int depthFromSurface, boolean chamber) { + return random.nextFloat() < 0.56F ? coarseDirtVariant(random) : rootedDirtVariant(random); + } + + private static BlockState disturbedSurfaceState(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.44F) { + return coarseDirtVariant(random); + } + if (roll < 0.79F) { + return rootedDirtVariant(random); + } + return Blocks.PODZOL.defaultBlockState(); + } + + private static BlockState disturbedSubsurfaceState(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.48F) { + return rootedDirtVariant(random); + } + if (roll < 0.84F) { + return coarseDirtVariant(random); + } + return Blocks.PODZOL.defaultBlockState(); + } + + private static float hangingRootChance(int depthFromSurface, boolean chamber) { + float chance = depthFromSurface > 18 ? 0.34F : 0.18F; + return chamber ? chance + 0.14F : chance; + } + + private static Vec3 horizontalDirection(RandomSource random) { + float angle = random.nextFloat() * Mth.TWO_PI; + return new Vec3(Mth.cos(angle), 0.0D, Mth.sin(angle)); + } + + private static Vec3 rotateHorizontal(Vec3 vector, float radians) { + double cos = Mth.cos(radians); + double sin = Mth.sin(radians); + return new Vec3(vector.x * cos - vector.z * sin, vector.y, vector.x * sin + vector.z * cos); + } + + private static Vec3 normalizeTunnelDirection(Vec3 direction) { + Vec3 horizontal = new Vec3(direction.x, 0.0D, direction.z); + if (horizontal.lengthSqr() < 1.0E-4D) { + horizontal = new Vec3(1.0D, 0.0D, 0.0D); + } + horizontal = horizontal.normalize(); + double y = Mth.clamp(direction.y, -0.88D, -0.08D); + return new Vec3(horizontal.x, y, horizontal.z).normalize(); + } + + private static boolean isValidSurface(WorldGenLevel level, BlockPos pos) { + BlockPos abovePos = pos.above(); + BlockState state = level.getBlockState(pos); + return level.canSeeSky(abovePos) + && level.getFluidState(abovePos).isEmpty() + && isSoilOrStone(state) + && !state.is(Blocks.MUD); + } + + private static boolean canCarve(BlockState state) { + return !state.isAir() + && state.getFluidState().isEmpty() + && !state.is(Blocks.BEDROCK) + && !state.is(Blocks.BARRIER) + && !state.is(Blocks.OBSIDIAN) + && !state.is(Blocks.CRYING_OBSIDIAN); + } + + private static boolean canReplaceShell(BlockState state) { + return canCarve(state) + && !state.is(BlockTags.LOGS) + && !state.is(BlockTags.LEAVES) + && !state.is(Blocks.WATER) + && !state.is(Blocks.LAVA); + } + + private static boolean isSoilOrStone(BlockState state) { + return state.is(BlockTags.DIRT) + || state.is(AntarchyObjects.INFESTED_ROOTED_DIRT.get()) + || state.is(AntarchyObjects.INFESTED_COARSE_DIRT.get()) + || state.is(Blocks.GRASS_BLOCK) + || state.is(Blocks.MOSS_BLOCK) + || state.is(Blocks.PODZOL) + || state.is(Blocks.STONE) + || state.is(Blocks.DEEPSLATE) + || state.is(Blocks.GRAVEL); + } + + private static double hashNoise(int x, int y, int z) { + long hash = x * 3129871L ^ z * 116129781L ^ y; + hash = hash * hash * 42317861L + hash * 11L; + return ((hash >> 16) & 1023L) / 1023.0D; + } + + private static boolean canAccessColumn(WorldGenLevel level, int x, int z) { + int probeY = Mth.clamp((level.getMinBuildHeight() + level.getMaxBuildHeight()) / 2, level.getMinBuildHeight() + 1, level.getMaxBuildHeight() - 2); + return canAccess(level, x, probeY, z); + } + + private static boolean canAccess(WorldGenLevel level, int x, int y, int z) { + return canAccess(level, new BlockPos(x, Mth.clamp(y, level.getMinBuildHeight() + 1, level.getMaxBuildHeight() - 2), z)); + } + + private static boolean canAccess(WorldGenLevel level, BlockPos pos) { + return !(level instanceof WorldGenRegion region) || region.ensureCanWrite(pos); + } + + private void removeFloatingBlocks(WorldGenLevel level, BlockPos center, int radius, int surfaceY) { + int minX = center.getX() - radius; + int maxX = center.getX() + radius; + int minZ = center.getZ() - radius; + int maxZ = center.getZ() + radius; + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + BlockPos.MutableBlockPos belowPos = new BlockPos.MutableBlockPos(); + + for (int y = surfaceY + 1; y <= surfaceY + 8; y++) { + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + if (!canAccess(level, x, y, z) || !canAccess(level, x, y - 1, z)) { + continue; + } + + pos.set(x, y, z); + BlockState state = level.getBlockState(pos); + if (state.isAir()) { + continue; + } + + belowPos.set(x, y - 1, z); + if (!level.getBlockState(belowPos).isAir()) { + continue; + } + + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + } + } + } + } + + private static BlockState rootedDirtVariant(RandomSource random) { + return random.nextFloat() < 0.12F + ? AntarchyObjects.INFESTED_ROOTED_DIRT.get().defaultBlockState() + : Blocks.ROOTED_DIRT.defaultBlockState(); + } + + private static BlockState coarseDirtVariant(RandomSource random) { + return random.nextFloat() < 0.08F + ? AntarchyObjects.INFESTED_COARSE_DIRT.get().defaultBlockState() + : Blocks.COARSE_DIRT.defaultBlockState(); + } + + private static class TunnelStart { + private final Vec3 position; + private final Vec3 direction; + + private TunnelStart(Vec3 position, Vec3 direction) { + this.position = position; + this.direction = direction; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormWarrensFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormWarrensFeature.java new file mode 100644 index 00000000..26fe9ab7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/MolewormWarrensFeature.java @@ -0,0 +1,437 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.WorldGenRegion; +import net.minecraft.tags.BlockTags; +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.MultifaceBlock; +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; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +public class MolewormWarrensFeature extends Feature { + public MolewormWarrensFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = findDeepCavity(level, context.origin(), random); + if (origin == null) { + return false; + } + + carveWarrenNetwork(level, random, origin, true); + return true; + } + + public static void carveWarrenNetwork(WorldGenLevel level, RandomSource random, BlockPos origin, boolean carveOriginChamber) { + Vec3 center = Vec3.atCenterOf(origin); + if (carveOriginChamber) { + carvePocket(level, random, center, 5.8F + random.nextFloat() * 1.8F, 3.6F, 5.8F + random.nextFloat() * 1.8F, true, true); + } + + int majorBranches = 7 + random.nextInt(4); + for (int i = 0; i < majorBranches; i++) { + float angle = (Mth.TWO_PI * i / majorBranches) + random.nextFloat() * 0.8F; + Vec3 direction = new Vec3(Mth.cos(angle), -0.12D - random.nextDouble() * 0.28D, Mth.sin(angle)).normalize(); + carveMainTunnel(level, random, center, direction, 0); + } + } + + @Nullable + private static BlockPos findDeepCavity(WorldGenLevel level, BlockPos origin, RandomSource random) { + for (int attempt = 0; attempt < 36; attempt++) { + BlockPos candidate = origin.offset(random.nextInt(29) - 14, random.nextInt(49) - 24, random.nextInt(29) - 14); + if (candidate.getY() > 52 || candidate.getY() < level.getMinBuildHeight() + 16) { + continue; + } + + for (int dy = -10; dy <= 10; dy++) { + BlockPos airPos = candidate.above(dy); + if (isUsableCavity(level, airPos)) { + return airPos; + } + } + } + return null; + } + + private static boolean carveMainTunnel(WorldGenLevel level, RandomSource random, Vec3 start, Vec3 direction, int branchDepth) { + Vec3 cursor = start; + Vec3 travel = normalizeDirection(direction); + boolean carved = false; + int minY = level.getMinBuildHeight() + 10; + int segments = Math.max(5, 12 + random.nextInt(6) - branchDepth * 2); + + for (int segment = 0; segment < segments; segment++) { + if (cursor.y <= minY) { + break; + } + + float progress = segment / (float) Math.max(1, segments - 1); + float startRadius = branchDepth == 0 + ? 2.6F + progress * 1.1F + random.nextFloat() * 0.45F + : 1.9F + progress * 0.7F + random.nextFloat() * 0.35F; + float endRadius = startRadius + (random.nextFloat() - 0.5F) * 0.45F; + double segmentLength = 6.5D + random.nextDouble() * 5.5D; + + Vec3 wobble = new Vec3( + random.nextDouble() * 0.7D - 0.35D, + -0.06D - random.nextDouble() * 0.22D, + random.nextDouble() * 0.7D - 0.35D + ); + travel = normalizeDirection(travel.add(wobble)); + + Vec3 next = cursor.add(travel.scale(segmentLength)); + if (next.y > cursor.y - 0.8D) { + next = new Vec3(next.x, cursor.y - 0.8D - random.nextDouble() * 2.4D, next.z); + } + if (!canAccess(level, BlockPos.containing(next.x, next.y, next.z))) { + break; + } + + boolean chamber = segment == 0 || segment == segments - 1 || random.nextFloat() < (branchDepth == 0 ? 0.34F : 0.22F); + carveTube(level, random, cursor, next, startRadius, endRadius, chamber); + carved = true; + + if (branchDepth < 2 && random.nextFloat() < (branchDepth == 0 ? 0.45F : 0.28F)) { + Vec3 branchDirection = rotateHorizontal(travel, random.nextBoolean() ? 0.95F : -0.95F) + .add(0.0D, -0.04D - random.nextDouble() * 0.18D, 0.0D); + carveMainTunnel(level, random, next, branchDirection, branchDepth + 1); + } + + if (branchDepth == 0 && random.nextFloat() < 0.28F) { + next = carveDropShaft(level, random, next); + travel = normalizeDirection(new Vec3(travel.x, -0.65D - random.nextDouble() * 0.16D, travel.z)); + } + + cursor = next; + } + + return carved; + } + + private static Vec3 carveDropShaft(WorldGenLevel level, RandomSource random, Vec3 start) { + Vec3 cursor = start; + int steps = 4 + random.nextInt(5); + for (int i = 0; i < steps; i++) { + cursor = cursor.add( + random.nextDouble() * 0.45D - 0.225D, + -(1.8D + random.nextDouble() * 1.8D), + random.nextDouble() * 0.45D - 0.225D + ); + carvePocket(level, random, cursor, 2.1F + random.nextFloat() * 0.5F, 1.9F, 2.1F + random.nextFloat() * 0.5F, false, true); + } + carvePocket(level, random, cursor, 4.0F + random.nextFloat() * 1.2F, 2.8F, 4.0F + random.nextFloat() * 1.2F, true, true); + return cursor; + } + + private static void carveTube(WorldGenLevel level, RandomSource random, Vec3 start, Vec3 end, float startRadius, float endRadius, boolean chamber) { + Vec3 delta = end.subtract(start); + double length = Math.max(delta.length(), 1.0D); + int steps = Math.max(5, Mth.ceil(length * 2.25D)); + + for (int step = 0; step <= steps; step++) { + float progress = step / (float) steps; + Vec3 center = start.add(delta.scale(progress)); + float radius = Mth.lerp(progress, startRadius, endRadius); + float radiusX = radius + (random.nextFloat() - 0.5F) * 0.3F; + float radiusY = Math.max(1.85F, radius * (chamber ? 0.95F : 0.8F) + (random.nextFloat() - 0.5F) * 0.25F); + float radiusZ = radius + (random.nextFloat() - 0.5F) * 0.3F; + carvePocket(level, random, center, radiusX, radiusY, radiusZ, chamber && step % 3 == 0, true); + } + + if (chamber) { + Vec3 chamberCenter = start.add(end).scale(0.5D); + carvePocket(level, random, chamberCenter, endRadius + 1.6F, endRadius * 0.9F + 1.2F, endRadius + 1.6F, true, true); + } + } + + private static void carvePocket(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusY, float radiusZ, boolean mudHeavy, boolean decorate) { + int minX = Mth.floor(center.x - radiusX - 1.5F); + int maxX = Mth.floor(center.x + radiusX + 1.5F); + int minY = Math.max(level.getMinBuildHeight() + 1, Mth.floor(center.y - radiusY - 2.0F)); + int maxY = Math.min(level.getMaxBuildHeight() - 2, Mth.floor(center.y + radiusY + 2.0F)); + int minZ = Mth.floor(center.z - radiusZ - 1.5F); + int maxZ = Mth.floor(center.z + radiusZ + 1.5F); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + double dx = (x + 0.5D - center.x) / radiusX; + double dx2 = dx * dx; + for (int z = minZ; z <= maxZ; z++) { + double dz = (z + 0.5D - center.z) / radiusZ; + double dz2 = dz * dz; + for (int y = minY; y <= maxY; y++) { + if (!canAccess(level, x, y, z)) { + continue; + } + + double dy = (y + 0.5D - center.y) / radiusY; + double noise = (hashNoise(x, y, z) - 0.5D) * 0.18D; + double distance = dx2 + dz2 + dy * dy + noise; + pos.set(x, y, z); + BlockState state = level.getBlockState(pos); + + if (distance <= 1.0D) { + if (canCarve(state)) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + } + continue; + } + + if (distance <= 1.24D && canReplaceShell(state)) { + level.setBlock(pos, selectShellState(random, center.y, y), 2); + } + } + } + } + + if (decorate) { + decorateFloor(level, random, center, radiusX, radiusZ, mudHeavy); + decorateCeiling(level, random, center, radiusX, radiusY, radiusZ); + } + } + + private static void decorateFloor(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusZ, boolean mudHeavy) { + int minX = Mth.floor(center.x - radiusX); + int maxX = Mth.floor(center.x + radiusX); + int minZ = Mth.floor(center.z - radiusZ); + int maxZ = Mth.floor(center.z + radiusZ); + int minY = Math.max(level.getMinBuildHeight() + 2, Mth.floor(center.y - 6.0D)); + int maxY = Math.min(level.getMaxBuildHeight() - 4, Mth.floor(center.y + 3.0D)); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + for (int y = maxY; y >= minY; y--) { + if (!canAccess(level, x, y, z) || !canAccess(level, x, y + 1, z)) { + continue; + } + + pos.set(x, y, z); + if (!level.isEmptyBlock(pos) || !level.isEmptyBlock(pos.above())) { + continue; + } + + BlockPos floorPos = pos.below(); + BlockState floorState = level.getBlockState(floorPos); + if (!canReplaceShell(floorState)) { + continue; + } + + float mudChance = mudHeavy ? 0.22F : 0.08F; + level.setBlock(floorPos, random.nextFloat() < mudChance ? Blocks.MUD.defaultBlockState() : selectFloorState(random), 2); + tryPlaceDeadBush(level, random, pos); + break; + } + } + } + } + + private static void decorateCeiling(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusY, float radiusZ) { + int minX = Mth.floor(center.x - radiusX); + int maxX = Mth.floor(center.x + radiusX); + int minY = Math.max(level.getMinBuildHeight() + 2, Mth.floor(center.y - radiusY)); + int maxY = Math.min(level.getMaxBuildHeight() - 3, Mth.floor(center.y + radiusY + 1.0F)); + int minZ = Mth.floor(center.z - radiusZ); + int maxZ = Mth.floor(center.z + radiusZ); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + BlockState hangingRoots = Blocks.HANGING_ROOTS.defaultBlockState(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + for (int y = maxY; y >= minY; y--) { + if (!canAccess(level, x, y, z) || !canAccess(level, x, y - 1, z)) { + continue; + } + + pos.set(x, y, z); + if (level.isEmptyBlock(pos)) { + continue; + } + + BlockPos airPos = pos.below(); + if (!level.isEmptyBlock(airPos) || !canReplaceShell(level.getBlockState(pos))) { + break; + } + + level.setBlock(pos, random.nextFloat() < 0.74F ? rootedDirtVariant(random) : coarseDirtVariant(random), 2); + if (random.nextFloat() < 0.38F && hangingRoots.canSurvive(level, airPos)) { + level.setBlock(airPos, hangingRoots, 2); + } + break; + } + } + } + + decorateWalls(level, random, center, radiusX, radiusY, radiusZ); + } + + private static void decorateWalls(WorldGenLevel level, RandomSource random, Vec3 center, float radiusX, float radiusY, float radiusZ) { + int minX = Mth.floor(center.x - radiusX); + int maxX = Mth.floor(center.x + radiusX); + int minY = Math.max(level.getMinBuildHeight() + 2, Mth.floor(center.y - radiusY)); + int maxY = Math.min(level.getMaxBuildHeight() - 3, Mth.floor(center.y + radiusY)); + int minZ = Mth.floor(center.z - radiusZ); + int maxZ = Mth.floor(center.z + radiusZ); + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + for (int y = minY; y <= maxY; y++) { + if (random.nextFloat() >= 0.035F || !canAccess(level, x, y, z)) { + continue; + } + + pos.set(x, y, z); + if (!level.isEmptyBlock(pos)) { + continue; + } + + tryPlaceGlowLichen(level, random, pos); + } + } + } + } + + private static boolean isUsableCavity(WorldGenLevel level, BlockPos pos) { + return canAccess(level, pos) + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && isSoilOrStone(level.getBlockState(pos.below())) + && !level.isEmptyBlock(pos.above(3)); + } + + private static Vec3 normalizeDirection(Vec3 direction) { + Vec3 horizontal = new Vec3(direction.x, 0.0D, direction.z); + if (horizontal.lengthSqr() < 1.0E-4D) { + horizontal = new Vec3(1.0D, 0.0D, 0.0D); + } + horizontal = horizontal.normalize(); + double y = Mth.clamp(direction.y, -0.92D, -0.05D); + return new Vec3(horizontal.x, y, horizontal.z).normalize(); + } + + private static Vec3 rotateHorizontal(Vec3 vector, float radians) { + double cos = Mth.cos(radians); + double sin = Mth.sin(radians); + return new Vec3(vector.x * cos - vector.z * sin, vector.y, vector.x * sin + vector.z * cos); + } + + private static BlockState selectShellState(RandomSource random, double centerY, int y) { + return y > centerY + 0.25D + ? (random.nextFloat() < 0.72F ? rootedDirtVariant(random) : coarseDirtVariant(random)) + : (random.nextFloat() < 0.58F ? coarseDirtVariant(random) : rootedDirtVariant(random)); + } + + private static BlockState selectFloorState(RandomSource random) { + return random.nextFloat() < 0.54F ? coarseDirtVariant(random) : rootedDirtVariant(random); + } + + private static boolean canCarve(BlockState state) { + return !state.isAir() + && state.getFluidState().isEmpty() + && !state.is(Blocks.BEDROCK) + && !state.is(Blocks.BARRIER) + && !state.is(Blocks.OBSIDIAN) + && !state.is(Blocks.CRYING_OBSIDIAN); + } + + private static boolean canReplaceShell(BlockState state) { + return canCarve(state) + && !state.is(BlockTags.LOGS) + && !state.is(BlockTags.LEAVES) + && !state.is(Blocks.WATER) + && !state.is(Blocks.LAVA); + } + + private static boolean isSoilOrStone(BlockState state) { + return state.is(BlockTags.DIRT) + || state.is(AntarchyObjects.INFESTED_ROOTED_DIRT.get()) + || state.is(AntarchyObjects.INFESTED_COARSE_DIRT.get()) + || state.is(Blocks.GRASS_BLOCK) + || state.is(Blocks.MOSS_BLOCK) + || state.is(Blocks.PODZOL) + || state.is(Blocks.STONE) + || state.is(Blocks.DEEPSLATE) + || state.is(Blocks.GRAVEL) + || state.is(Blocks.TUFF) + || state.is(Blocks.MUD); + } + + private static double hashNoise(int x, int y, int z) { + long hash = x * 3129871L ^ z * 116129781L ^ y; + hash = hash * hash * 42317861L + hash * 11L; + return ((hash >> 16) & 1023L) / 1023.0D; + } + + private static boolean canAccess(WorldGenLevel level, int x, int y, int z) { + return canAccess(level, new BlockPos(x, Mth.clamp(y, level.getMinBuildHeight() + 1, level.getMaxBuildHeight() - 2), z)); + } + + private static boolean canAccess(WorldGenLevel level, BlockPos pos) { + return !(level instanceof WorldGenRegion region) || region.ensureCanWrite(pos); + } + + private static BlockState rootedDirtVariant(RandomSource random) { + return random.nextFloat() < 0.12F + ? AntarchyObjects.INFESTED_ROOTED_DIRT.get().defaultBlockState() + : Blocks.ROOTED_DIRT.defaultBlockState(); + } + + private static BlockState coarseDirtVariant(RandomSource random) { + return random.nextFloat() < 0.08F + ? AntarchyObjects.INFESTED_COARSE_DIRT.get().defaultBlockState() + : Blocks.COARSE_DIRT.defaultBlockState(); + } + + private static void tryPlaceDeadBush(WorldGenLevel level, RandomSource random, BlockPos pos) { + if (random.nextFloat() >= 0.045F) { + return; + } + + BlockState bush = Blocks.DEAD_BUSH.defaultBlockState(); + if (level.isEmptyBlock(pos) && bush.canSurvive(level, pos)) { + level.setBlock(pos, bush, 2); + } + } + + private static void tryPlaceGlowLichen(WorldGenLevel level, RandomSource random, BlockPos pos) { + Direction[] directions = Direction.values(); + for (int i = 0; i < directions.length; i++) { + Direction direction = directions[(i + random.nextInt(directions.length)) % directions.length]; + if (direction == Direction.DOWN) { + continue; + } + + BlockPos attachmentPos = pos.relative(direction); + if (!canAccess(level, attachmentPos)) { + continue; + } + + BlockState attachmentState = level.getBlockState(attachmentPos); + if (attachmentState.isAir() || !attachmentState.isFaceSturdy(level, attachmentPos, direction.getOpposite())) { + continue; + } + + BlockState lichen = Blocks.GLOW_LICHEN.defaultBlockState().setValue(MultifaceBlock.getFaceProperty(direction), true); + if (lichen.canSurvive(level, pos)) { + level.setBlock(pos, lichen, 2); + return; + } + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java new file mode 100644 index 00000000..942edd7e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public class OuranwoodCocoonTreeFeature extends OuranwoodTreeFeature { + + public OuranwoodCocoonTreeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + if (!super.place(context)) return false; + placeGuaranteedCocoon(context.level(), context.origin(), context.config(), context.random()); + return true; + } + + private void placeGuaranteedCocoon(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random) { + Direction dir = Direction.Plane.HORIZONTAL.getRandomDirection(random); + int branchY = 10 + random.nextInt(8); + int branchLength = 4 + random.nextInt(3); + + for (int i = 1; i <= branchLength; i++) { + BlockPos p = origin.above(branchY).relative(dir, i); + setBlock(level, p, config.trunkProvider().getState(random, p)); + } + BlockPos anchor = origin.above(branchY).relative(dir, branchLength); + + BrutalflyCocoonFeature.clearCocoonVolume(level, anchor); + BrutalflyCocoonFeature.setCocoonSpawnerMarker(level, anchor); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeConfiguration.java new file mode 100644 index 00000000..2162cdc7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeConfiguration.java @@ -0,0 +1,39 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.util.valueproviders.IntProvider; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; + +public record OuranwoodTreeConfiguration( + BlockStateProvider trunkProvider, + BlockStateProvider foliageProvider, + IntProvider height, + IntProvider trunkRadius, + IntProvider canopyRadius, + IntProvider canopyDepth, + IntProvider buttressHeight, + IntProvider trunkVineLength, + boolean juvenile, + float flyingSquirrelNestChance, + float flyingSquirrelHollowChance, + float waspNestChance, + float caterpillarChrysalisChance +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + BlockStateProvider.CODEC.fieldOf("trunk_provider").forGetter(OuranwoodTreeConfiguration::trunkProvider), + BlockStateProvider.CODEC.fieldOf("foliage_provider").forGetter(OuranwoodTreeConfiguration::foliageProvider), + IntProvider.codec(8, 255).fieldOf("height").forGetter(OuranwoodTreeConfiguration::height), + IntProvider.codec(1, 6).fieldOf("trunk_radius").forGetter(OuranwoodTreeConfiguration::trunkRadius), + IntProvider.codec(2, 32).fieldOf("canopy_radius").forGetter(OuranwoodTreeConfiguration::canopyRadius), + IntProvider.codec(3, 64).fieldOf("canopy_depth").forGetter(OuranwoodTreeConfiguration::canopyDepth), + IntProvider.codec(0, 32).fieldOf("buttress_height").forGetter(OuranwoodTreeConfiguration::buttressHeight), + IntProvider.codec(1, 16).fieldOf("trunk_vine_length").forGetter(OuranwoodTreeConfiguration::trunkVineLength), + Codec.BOOL.optionalFieldOf("juvenile", false).forGetter(OuranwoodTreeConfiguration::juvenile), + Codec.floatRange(0.0F, 1.0F).optionalFieldOf("flying_squirrel_nest_chance", 0.0F).forGetter(OuranwoodTreeConfiguration::flyingSquirrelNestChance), + Codec.floatRange(0.0F, 1.0F).optionalFieldOf("flying_squirrel_hollow_chance", 1.0F).forGetter(OuranwoodTreeConfiguration::flyingSquirrelHollowChance), + Codec.floatRange(0.0F, 1.0F).optionalFieldOf("wasp_nest_chance", 0.0F).forGetter(OuranwoodTreeConfiguration::waspNestChance), + Codec.floatRange(0.0F, 1.0F).optionalFieldOf("caterpillar_chrysalis_chance", 0.0F).forGetter(OuranwoodTreeConfiguration::caterpillarChrysalisChance) + ).apply(instance, OuranwoodTreeConfiguration::new)); +} 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 new file mode 100644 index 00000000..60942183 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java @@ -0,0 +1,1538 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.WaspNestBlock; +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.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.WorldGenRegion; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.LevelWriter; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.CaveVines; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.VineBlock; +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.block.state.properties.IntegerProperty; +import org.jetbrains.annotations.Nullable; + +public class OuranwoodTreeFeature extends Feature { + public OuranwoodTreeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + OuranwoodTreeConfiguration config = context.config(); + RandomSource random = context.random(); + + if (!canGrowOn(level, origin.below())) { + return false; + } + + int height = config.height().sample(random); + int trunkRadius = config.trunkRadius().sample(random); + int canopyRadius = config.canopyRadius().sample(random); + int canopyDepth = Math.min(config.canopyDepth().sample(random), height / 2); + int buttressHeight = config.buttressHeight().sample(random); + + if (origin.getY() + height + canopyDepth + 4 >= level.getMaxBuildHeight()) { + return false; + } + + if (!config.juvenile()) { + this.placeButtresses(level, origin, config, random, trunkRadius, buttressHeight); + this.stabilizeBase(level, origin, config, random, trunkRadius + 1); + } + + this.placeTrunk(level, origin, config, random, trunkRadius, height); + this.placeWaspNest(level, origin, config, random, trunkRadius, height); + this.placeBaseTrunkVines(level, origin, config, random, trunkRadius, height); + if (!config.juvenile()) { + this.adaptAndRefreshTerrain(level, origin, random, trunkRadius); + } + BlockPos canopyCenter = this.resolveCanopyCenter(origin, height, canopyDepth); + BlockPos crownCenter = canopyCenter.above(canopyDepth / 3); + int branchThickness = !config.juvenile() && trunkRadius >= 3 ? 2 : 1; + this.placeUpperBranches(level, origin, canopyCenter, config, random, height, canopyRadius, branchThickness); + this.placeCanopyScaffolding(level, canopyCenter, config, random, canopyRadius, branchThickness); + this.placeCanopy(level, canopyCenter, config, random, canopyRadius, canopyDepth); + this.placeMidCanopy(level, origin, config, random, canopyRadius, height, trunkRadius, branchThickness); + this.placeTopCrown(level, crownCenter, config, random, canopyRadius, random.nextInt(4)); + this.placeHiddenCanopySupports(level, canopyCenter, crownCenter, config, random, canopyRadius, canopyDepth); + this.coverExposedBranchSides(level, origin, canopyCenter, config, random, trunkRadius, canopyRadius, canopyDepth, height); + this.pruneExposedTopLogs(level, origin, canopyCenter, config, random, trunkRadius, canopyRadius, canopyDepth, height); + this.updateLeafDistances(level, origin, height, canopyRadius, canopyDepth); + this.placeHangingAcorns(level, canopyCenter, config, random, canopyRadius, canopyDepth); + this.placeTrunkVines(level, origin, config, random, trunkRadius, height); + 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; + } + + protected BlockPos resolveCanopyCenter(BlockPos origin, int height, int canopyDepth) { + int canopyBaseY = height - Math.max(2, canopyDepth / 4); + return origin.above(canopyBaseY); + } + + protected void placeTrunk(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random, int trunkRadius, int height) { + for (int y = 0; y < height; y++) { + int taper = 0; + if (config.juvenile()) { + taper = Math.max(0, y - (height - 10)) / 6; + } else { + int distanceFromTop = height - y; + if (distanceFromTop <= 5) { + taper = trunkRadius >= 4 ? 2 : 1; + } else if (distanceFromTop <= 14) { + taper = 1; + } + } + int currentRadius = config.juvenile() + ? Math.max(1, trunkRadius - Math.max(0, y - (height - 10)) / 6) + : Math.max(1, trunkRadius - taper); + this.fillIrregularTrunkCircle(level, origin.above(y), currentRadius, config, random, origin.getY(), height); + } + } + + protected void placeButtresses(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random, int trunkRadius, int buttressHeight) { + int buttressRadius = trunkRadius + 2; + int buttressRadiusSq = buttressRadius * buttressRadius; + int trunkRadiusSq = trunkRadius * trunkRadius; + int profile = random.nextInt(4); + int targetHeight = Math.max(2, Math.min(5, buttressHeight + random.nextInt(2) - 1)); + for (int x = -buttressRadius; x <= buttressRadius; x++) { + for (int z = -buttressRadius; z <= buttressRadius; z++) { + int distanceSq = x * x + z * z; + if (distanceSq > buttressRadiusSq) { + continue; + } + + int columnHeight = this.computeButtressColumnHeight(profile, x, z, distanceSq, trunkRadiusSq, targetHeight); + for (int y = 0; y < columnHeight; y++) { + BlockPos pos = origin.offset(x, y, z); + if (canReplace(level, pos)) { + setBlock(level, pos, this.selectTrunkState(config, random, pos, pos.getY() - origin.getY(), 32)); + } + } + } + } + } + + protected int computeButtressColumnHeight(int profile, int x, int z, int distanceSq, int trunkRadiusSq, int targetHeight) { + int columnHeight; + double radialDistance = Math.sqrt(distanceSq); + switch (profile) { + case 0 -> { + int falloff = (int) Math.floor(radialDistance / 2.35D); + columnHeight = targetHeight - falloff; + if (distanceSq <= trunkRadiusSq) { + columnHeight = Math.min(5, columnHeight + 1); + } + } + case 1 -> { + int falloff = (int) Math.floor(radialDistance / 2.2D); + columnHeight = targetHeight - falloff; + if (Math.abs(x) > Math.abs(z) && distanceSq > trunkRadiusSq) { + columnHeight -= 1; + } + } + case 2 -> { + int falloff = (int) Math.floor(radialDistance / 2.2D); + columnHeight = targetHeight - falloff; + if (Math.abs(z) > Math.abs(x) && distanceSq > trunkRadiusSq) { + columnHeight -= 1; + } + } + default -> { + int falloff = (int) Math.floor(radialDistance / 2.5D); + columnHeight = targetHeight - falloff; + if (distanceSq > trunkRadiusSq && Math.abs(Math.abs(x) - Math.abs(z)) == 0) { + columnHeight -= 1; + } + } + } + + return Math.max(1, Math.min(5, columnHeight)); + } + + protected void placeCanopy(WorldGenLevel level, BlockPos center, OuranwoodTreeConfiguration config, RandomSource random, int canopyRadius, int canopyDepth) { + int minRadius = config.juvenile() ? 2 : 4; + int lowerDepth = Math.max(2, canopyDepth * 3 / 4); + int upperDepth = Math.max(2, canopyDepth / 2); + for (int y = -lowerDepth; y <= upperDepth; y++) { + float normalized = y < 0 + ? Math.abs(y) / (float) (lowerDepth + 1) + : y / (float) (upperDepth + 1); + float layerScale = y < 0 + ? 1.08F - normalized * 0.72F + : 1.02F - normalized * 0.9F; + int layerRadius = Math.max(minRadius, Math.round(canopyRadius * layerScale)); + BlockPos layerCenter = center.above(y); + boolean dense = y <= -lowerDepth + 2 || y >= upperDepth - 1; + this.fillLeafCircle(level, layerCenter, config, random, layerRadius, dense); + + if (layerRadius > minRadius + 1) { + int roundedRadius = Math.max(2, layerRadius - (y < 0 ? 2 : 1)); + BlockPos roundedCenter = y < 0 ? layerCenter.above() : layerCenter.above(random.nextFloat() < 0.55F ? 1 : 0); + this.fillLeafCircle(level, roundedCenter, config, random, roundedRadius, true); + } + } + + int hangerAttempts = config.juvenile() ? 3 + random.nextInt(3) : 8 + random.nextInt(5); + for (int i = 0; i < hangerAttempts; i++) { + Direction direction = Direction.Plane.HORIZONTAL.getRandomDirection(random); + int distance = Math.max(2, canopyRadius - 1 + random.nextInt(3)); + BlockPos leafPos = center.relative(direction, distance).below(1 + random.nextInt(2)); + this.tryPlaceGlowVineUnderLeaf(level, leafPos, random, config.juvenile() ? 2 + random.nextInt(3) : 4 + random.nextInt(5)); + } + } + + protected void placeMidCanopy(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random, int canopyRadius, int height, int trunkRadius, int branchThickness) { + int layers = config.juvenile() ? 2 + random.nextInt(2) : 5 + random.nextInt(3); + int verticalSpacing = config.juvenile() ? Math.max(4, height / 5) : Math.max(8, height / 9); + int horizontalSpread = config.juvenile() ? 1 : Math.max(2, trunkRadius + canopyRadius / 6); + for (int i = 0; i < layers; i++) { + int y = height / 4 + i * verticalSpacing + random.nextInt(config.juvenile() ? 3 : 6); + BlockPos layerCenter = origin.offset( + random.nextInt(horizontalSpread * 2 + 1) - horizontalSpread, + y, + random.nextInt(horizontalSpread * 2 + 1) - horizontalSpread + ); + int radius = config.juvenile() + ? Math.max(2, canopyRadius - 2 - i - random.nextInt(2)) + : Math.max(4, canopyRadius - 3 - i - random.nextInt(2)); + this.placeBranchHub(level, layerCenter, config, random, radius, branchThickness); + this.fillLeafCircle(level, layerCenter, config, random, radius, false); + if (radius > 3) { + this.fillLeafCircle(level, layerCenter.above(), config, random, radius - 2, true); + } + } + } + + protected void placeUpperBranches(WorldGenLevel level, BlockPos origin, BlockPos canopyCenter, OuranwoodTreeConfiguration config, RandomSource random, int height, int canopyRadius, int branchThickness) { + int branches = config.juvenile() ? 4 + random.nextInt(3) : 7 + random.nextInt(4); + for (int i = 0; i < branches; i++) { + Direction direction = Direction.Plane.HORIZONTAL.getRandomDirection(random); + int startY = config.juvenile() + ? Math.max(3, height - canopyRadius - 6 - random.nextInt(6)) + : height - 32 - random.nextInt(28); + int branchLength = config.juvenile() + ? Math.max(4, canopyRadius / 2 + 1 + random.nextInt(3)) + : Math.max(7, canopyRadius / 2 + 2 + random.nextInt(Math.max(3, canopyRadius / 2))); + for (int step = 1; step <= branchLength; step++) { + BlockPos branchPos = origin.above(startY + step / (config.juvenile() ? 3 : 4)).relative(direction, step); + this.placeBranchSegment(level, branchPos, config, random, direction, branchThickness); + this.placeBranchLeafCover(level, branchPos, config, random, direction); + if (step >= branchLength / 3 && random.nextFloat() < 0.72F) { + this.fillBranchLeafCluster(level, branchPos, config, random, 2 + random.nextInt(config.juvenile() ? 2 : 3), false); + } + } + + BlockPos branchTip = canopyCenter.relative(direction, Math.max(2, branchLength - 2)).above(random.nextInt(3) - 1); + this.fillBranchLeafCluster(level, branchTip, config, random, config.juvenile() ? 3 + random.nextInt(2) : 4 + random.nextInt(3), true); + if (random.nextFloat() < 0.65F) { + Direction sideDirection = random.nextBoolean() ? direction.getClockWise() : direction.getCounterClockWise(); + int sideLength = 2 + random.nextInt(3); + for (int sideStep = 1; sideStep <= sideLength; sideStep++) { + BlockPos sideBranchPos = branchTip.relative(sideDirection, sideStep).below(sideStep / 2); + this.placeBranchSegment(level, sideBranchPos, config, random, sideDirection, branchThickness); + this.placeBranchLeafCover(level, sideBranchPos, config, random, sideDirection); + } + this.fillBranchLeafCluster(level, branchTip.relative(sideDirection, sideLength), config, random, 3 + random.nextInt(2), false); + } + } + } + + protected void placeTopCrown(WorldGenLevel level, BlockPos crownCenter, OuranwoodTreeConfiguration config, RandomSource random, int canopyRadius, int variant) { + int crownRadius = config.juvenile() ? Math.max(3, canopyRadius / 2) : Math.max(5, canopyRadius / 2); + if (config.juvenile()) { + this.placeRoundedJuvenileCrown(level, crownCenter, config, random, crownRadius); + return; + } + + switch (variant) { + case 0 -> this.placeTieredCrown(level, crownCenter, config, random, crownRadius); + case 1 -> this.placeSplitCrown(level, crownCenter, config, random, crownRadius); + case 2 -> this.placeWindsweptCrown(level, crownCenter, config, random, crownRadius); + default -> this.placeClusteredCrown(level, crownCenter, config, random, crownRadius); + } + } + + protected void placeRoundedJuvenileCrown(WorldGenLevel level, BlockPos crownCenter, OuranwoodTreeConfiguration config, RandomSource random, int crownRadius) { + int lowerRadius = Math.max(2, crownRadius); + int middleRadius = Math.max(2, crownRadius - 1); + int upperRadius = Math.max(1, crownRadius - 2); + this.fillLeafCircle(level, crownCenter.below(), config, random, lowerRadius, false); + this.fillLeafCircle(level, crownCenter, config, random, middleRadius, true); + this.fillLeafCircle(level, crownCenter.above(), config, random, upperRadius, true); + if (upperRadius > 1 && random.nextFloat() < 0.45F) { + this.fillLeafCircle(level, crownCenter.above(2), config, random, upperRadius - 1, true); + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (random.nextFloat() < 0.75F) { + BlockPos lobeCenter = crownCenter.relative(direction, Math.max(1, crownRadius - 1)); + this.fillLeafCircle(level, lobeCenter, config, random, Math.max(2, crownRadius - 2), true); + } + } + } + + protected void placeCanopyScaffolding(WorldGenLevel level, BlockPos canopyCenter, OuranwoodTreeConfiguration config, RandomSource random, int canopyRadius, int branchThickness) { + int spokeLength = config.juvenile() ? Math.max(2, canopyRadius / 3) : Math.max(4, canopyRadius / 2); + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos cursor = canopyCenter; + for (int step = 1; step <= spokeLength; step++) { + cursor = cursor.relative(direction).above(step % (config.juvenile() ? 4 : 3) == 0 ? 1 : 0); + this.placeBranchSegment(level, cursor, config, random, direction, branchThickness); + this.placeBranchLeafCover(level, cursor, config, random, direction); + if (step >= 2 && random.nextFloat() < 0.55F) { + this.fillBranchLeafCluster(level, cursor, config, random, 2 + random.nextInt(2), false); + } + } + } + } + + protected void placeHiddenCanopySupports(WorldGenLevel level, BlockPos canopyCenter, BlockPos crownCenter, OuranwoodTreeConfiguration config, RandomSource random, int canopyRadius, int canopyDepth) { + int spokeLength = config.juvenile() ? Math.max(2, canopyRadius / 3) : Math.max(3, canopyRadius / 2); + int verticalSpread = Math.max(2, canopyDepth / 3); + + for (Direction direction : Direction.Plane.HORIZONTAL) { + int branches = config.juvenile() ? 1 : 2; + for (int branch = 0; branch < branches; branch++) { + BlockPos start = (branch == 0 ? canopyCenter : crownCenter).above(random.nextInt(verticalSpread + 1) - verticalSpread / 2); + for (int step = 1; step <= spokeLength; step++) { + BlockPos pos = start.relative(direction, step).above(step > 2 && random.nextFloat() < 0.35F ? 1 : 0); + this.tryPlaceHiddenSupportLog(level, pos, config, random); + } + } + } + } + + protected void placeBranchHub(WorldGenLevel level, BlockPos center, OuranwoodTreeConfiguration config, RandomSource random, int radius, int branchThickness) { + this.placeBranchSegment(level, center, config, random, null, branchThickness); + this.placeBranchLeafCover(level, center, config, random, null); + for (Direction direction : Direction.Plane.HORIZONTAL) { + int length = Math.max(2, radius / 2 + random.nextInt(2)); + for (int step = 1; step <= length; step++) { + BlockPos branchPos = center.relative(direction, step).above(step / 3); + this.placeBranchSegment(level, branchPos, config, random, direction, branchThickness); + this.placeBranchLeafCover(level, branchPos, config, random, direction); + } + } + this.fillBranchLeafCluster(level, center, config, random, Math.max(2, radius - 1), false); + } + + protected void placeBranchSegment(WorldGenLevel level, BlockPos pos, OuranwoodTreeConfiguration config, RandomSource random, Direction axisDirection, int thickness) { + this.placeLog(level, pos, config, random); + if (thickness <= 1) { + return; + } + + if (axisDirection == null) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + this.placeLog(level, pos.relative(direction), config, random); + } + return; + } + + if (axisDirection.getAxis() == Direction.Axis.X) { + this.placeLog(level, pos.north(), config, random); + this.placeLog(level, pos.south(), config, random); + } else { + this.placeLog(level, pos.east(), config, random); + this.placeLog(level, pos.west(), config, random); + } + + if (random.nextFloat() < 0.35F) { + this.placeLog(level, pos.below(), config, random); + } + } + + protected void placeLog(WorldGenLevel level, BlockPos pos, OuranwoodTreeConfiguration config, RandomSource random) { + if (canReplace(level, pos)) { + setBlock(level, pos, config.trunkProvider().getState(random, pos)); + } + } + + protected void placeBranchLeafCover(WorldGenLevel level, BlockPos pos, OuranwoodTreeConfiguration config, RandomSource random, Direction axisDirection) { + this.placeBranchTopLeafPad(level, pos.above(), config, random, axisDirection); + this.tryPlaceLeaf(level, pos.below(), config, random); + + if (axisDirection == null) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + this.tryPlaceLeaf(level, pos.relative(direction), config, random); + } + this.placeBranchSideLeafWrap(level, pos, config, random, null); + return; + } + + if (axisDirection.getAxis() == Direction.Axis.X) { + this.tryPlaceLeaf(level, pos.north(), config, random); + this.tryPlaceLeaf(level, pos.south(), config, random); + } else { + this.tryPlaceLeaf(level, pos.east(), config, random); + this.tryPlaceLeaf(level, pos.west(), config, random); + } + + this.placeBranchSideLeafWrap(level, pos, config, random, axisDirection); + } + + protected void placeBranchTopLeafPad(WorldGenLevel level, BlockPos center, OuranwoodTreeConfiguration config, RandomSource random, Direction axisDirection) { + this.tryPlaceLeaf(level, center, config, random); + + if (axisDirection == null || random.nextFloat() < 0.9F) { + this.fillLeafCircle(level, center, config, random, 1, true); + return; + } + + if (axisDirection.getAxis() == Direction.Axis.X) { + this.tryPlaceLeaf(level, center.north(), config, random); + this.tryPlaceLeaf(level, center.south(), config, random); + if (random.nextFloat() < 0.45F) { + this.tryPlaceLeaf(level, center.east(), config, random); + } + if (random.nextFloat() < 0.45F) { + this.tryPlaceLeaf(level, center.west(), config, random); + } + return; + } + + this.tryPlaceLeaf(level, center.east(), config, random); + this.tryPlaceLeaf(level, center.west(), config, random); + if (random.nextFloat() < 0.45F) { + this.tryPlaceLeaf(level, center.north(), config, random); + } + if (random.nextFloat() < 0.45F) { + this.tryPlaceLeaf(level, center.south(), config, random); + } + } + + protected void placeBranchSideLeafWrap(WorldGenLevel level, BlockPos pos, OuranwoodTreeConfiguration config, RandomSource random, Direction axisDirection) { + if (axisDirection == null) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + this.tryPlaceLeaf(level, pos.relative(direction).above(), config, random); + } + return; + } + + if (axisDirection.getAxis() == Direction.Axis.X) { + this.tryPlaceLeaf(level, pos.north(2), config, random); + this.tryPlaceLeaf(level, pos.south(2), config, random); + this.tryPlaceLeaf(level, pos.north().above(), config, random); + this.tryPlaceLeaf(level, pos.south().above(), config, random); + if (random.nextFloat() < 0.6F) { + this.tryPlaceLeaf(level, pos.north().below(), config, random); + } + if (random.nextFloat() < 0.6F) { + this.tryPlaceLeaf(level, pos.south().below(), config, random); + } + return; + } + + this.tryPlaceLeaf(level, pos.east(2), config, random); + this.tryPlaceLeaf(level, pos.west(2), config, random); + this.tryPlaceLeaf(level, pos.east().above(), config, random); + this.tryPlaceLeaf(level, pos.west().above(), config, random); + if (random.nextFloat() < 0.6F) { + this.tryPlaceLeaf(level, pos.east().below(), config, random); + } + if (random.nextFloat() < 0.6F) { + this.tryPlaceLeaf(level, pos.west().below(), config, random); + } + } + + protected void placeTrunkVines(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random, int trunkRadius, int height) { + int attempts = config.juvenile() ? 4 + random.nextInt(4) : 10 + random.nextInt(8); + int minY = config.juvenile() ? Math.max(2, height / 5) : Math.max(6, height / 6); + int maxY = Math.max(minY, height - Math.max(5, height / 4)); + for (int i = 0; i < attempts; i++) { + Direction direction = Direction.Plane.HORIZONTAL.getRandomDirection(random); + int y = minY + random.nextInt(maxY - minY + 1); + int lateralOffset = random.nextInt(trunkRadius * 2 + 1) - trunkRadius; + BlockPos supportPos = switch (direction) { + case NORTH -> origin.offset(lateralOffset, y, -trunkRadius); + case SOUTH -> origin.offset(lateralOffset, y, trunkRadius); + case EAST -> origin.offset(trunkRadius, y, lateralOffset); + case WEST -> origin.offset(-trunkRadius, y, lateralOffset); + default -> origin.above(y); + }; + this.tryPlaceAttachedVine(level, supportPos, direction, config.trunkVineLength().sample(random)); + } + } + + protected void placeBaseTrunkVines(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random, int trunkRadius, int height) { + int topBand = Math.min(10, Math.max(4, height / 5)); + int attempts = config.juvenile() ? 2 + random.nextInt(3) : 6 + random.nextInt(6); + for (int i = 0; i < attempts; i++) { + Direction direction = Direction.Plane.HORIZONTAL.getRandomDirection(random); + int y = random.nextInt(topBand + 1); + int lateralOffset = random.nextInt(trunkRadius * 2 + 1) - trunkRadius; + BlockPos supportPos = switch (direction) { + case NORTH -> origin.offset(lateralOffset, y, -trunkRadius); + case SOUTH -> origin.offset(lateralOffset, y, trunkRadius); + case EAST -> origin.offset(trunkRadius, y, lateralOffset); + case WEST -> origin.offset(-trunkRadius, y, lateralOffset); + default -> origin.above(y); + }; + if (!this.isBaseTrunkBlock(level.getBlockState(supportPos))) { + continue; + } + + this.tryPlaceAttachedVine(level, supportPos, direction, 2 + random.nextInt(4)); + } + } + + protected void placeVinesAndGlowBerries(WorldGenLevel level, BlockPos canopyCenter, OuranwoodTreeConfiguration config, RandomSource random, int canopyRadius, int canopyDepth, int height) { + int vineAttempts = config.juvenile() ? 8 + random.nextInt(6) : 20 + random.nextInt(12); + for (int i = 0; i < vineAttempts; i++) { + BlockPos anchor = canopyCenter.offset( + random.nextInt(canopyRadius * 2 + 1) - canopyRadius, + random.nextInt(canopyDepth + height / 6) - canopyDepth / 2, + random.nextInt(canopyRadius * 2 + 1) - canopyRadius + ); + this.tryPlaceVine(level, anchor, random); + } + + int berryAttempts = config.juvenile() ? 3 + random.nextInt(3) : 8 + random.nextInt(6); + for (int i = 0; i < berryAttempts; i++) { + BlockPos leafPos = canopyCenter.offset( + random.nextInt(canopyRadius * 2 + 1) - canopyRadius, + random.nextInt(canopyDepth + height / 7) - canopyDepth / 2, + random.nextInt(canopyRadius * 2 + 1) - canopyRadius + ); + this.tryPlaceGlowVineUnderLeaf(level, leafPos, random, 2 + random.nextInt(5)); + } + } + + protected void placeFlyingSquirrelNest(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random, int trunkRadius, int height) { + if (config.juvenile() || trunkRadius < 2 || random.nextFloat() >= config.flyingSquirrelNestChance()) { + return; + } + + Direction opening = Direction.Plane.HORIZONTAL.getRandomDirection(random); + Direction sideways = opening.getClockWise(); + boolean expandedHollow = random.nextFloat() < config.flyingSquirrelHollowChance(); + int chamberDepth = expandedHollow ? Math.min(trunkRadius, 3) : 1; + int halfWidth = expandedHollow ? 1 : 0; + int chamberHeight = expandedHollow ? 3 : 2; + int minFloorY = Math.max(3, height / 7); + int maxFloorY = Math.max(minFloorY, Math.min(height - chamberHeight - 4, height / 2)); + int floorY = minFloorY + random.nextInt(maxFloorY - minFloorY + 1); + List floorBlocks = new ArrayList<>(); + + for (int lateral = -halfWidth; lateral <= halfWidth; lateral++) { + for (int depth = 0; depth <= chamberDepth; depth++) { + int radialDistance = trunkRadius - depth; + if (radialDistance * radialDistance + lateral * lateral > trunkRadius * trunkRadius) { + continue; + } + BlockPos floorPos = origin.above(floorY - 1).relative(opening, trunkRadius - depth).relative(sideways, lateral); + floorBlocks.add(floorPos.immutable()); + for (int y = 0; y < chamberHeight; y++) { + setBlock(level, floorPos.above(y + 1), Blocks.AIR.defaultBlockState()); + } + } + } + + if (floorBlocks.isEmpty()) { + 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() + .setValue(com.craisinlord.antarchy.content.block.OuranwoodSquirrelNestBlock.SQUIRREL_COUNT, squirrelCount)); + level.scheduleTick(markerPos, AntarchyObjects.SQUIRREL_NEST_BLOCK.get(), 20); + for (int i = 1; i < floorBlocks.size(); i++) { + setBlock(level, floorBlocks.get(i), Blocks.COARSE_DIRT.defaultBlockState()); + } + + this.placeNestAcorns(level, floorBlocks, random); + } + + protected void placeWaspNest(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random, int trunkRadius, int height) { + if (config.juvenile() || trunkRadius < 2 || random.nextFloat() >= config.waspNestChance()) { + return; + } + + Direction opening = Direction.Plane.HORIZONTAL.getRandomDirection(random); + Direction span = opening.getClockWise(); + int nestY = 3 + random.nextInt(Math.max(1, Math.min(7, height / 8))); + BlockPos nestPos = origin.above(nestY).relative(opening, trunkRadius - 1); + BlockPos nestPos2 = nestPos.relative(span); + BlockPos nestPos3 = nestPos.above(); + BlockPos nestPos4 = nestPos3.relative(span); + if (!this.canFitWaspNest(level, nestPos, nestPos2, nestPos3, nestPos4)) { + return; + } + + this.clearWaspNestCavity(level, nestPos, opening, span); + + BlockState nestState = AntarchyObjects.WASP_NEST.get().defaultBlockState().setValue(WaspNestBlock.FACING, opening); + setBlock(level, nestPos, nestState); + setBlock(level, nestPos2, nestState); + setBlock(level, nestPos3, nestState); + setBlock(level, nestPos4, nestState); + } + + protected boolean canFitWaspNest(WorldGenLevel level, BlockPos nestPos, BlockPos nestPos2, BlockPos nestPos3, BlockPos nestPos4) { + return this.canFitWaspNestBlock(level, nestPos) + && this.canFitWaspNestBlock(level, nestPos2) + && this.canFitWaspNestBlock(level, nestPos3) + && this.canFitWaspNestBlock(level, nestPos4); + } + + protected boolean canFitWaspNestBlock(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.is(BlockTags.LOGS) || canReplace(level, pos); + } + + protected void clearWaspNestCavity(WorldGenLevel level, BlockPos nestPos, Direction opening, Direction span) { + BlockPos anchor = nestPos.relative(opening); + for (int forward = 0; forward <= 3; forward++) { + BlockPos front = anchor.relative(opening, forward); + for (int up = -1; up <= 3; up++) { + for (int side = -1; side <= 2; side++) { + BlockPos clearPos = front.above(up).relative(span, side); + if (!level.getBlockState(clearPos).isAir()) { + setBlock(level, clearPos, Blocks.AIR.defaultBlockState()); + } + } + } + } + } + + protected void placeNestAcorns(WorldGenLevel level, List floorBlocks, RandomSource random) { + List plantablePositions = new ArrayList<>(); + BlockState acornState = AntarchyObjects.OURANWOOD_ACORN_BLOCK.get().defaultBlockState(); + for (BlockPos floorPos : floorBlocks) { + BlockPos acornPos = floorPos.above(); + if (!level.isEmptyBlock(acornPos) || !acornState.canSurvive(level, acornPos)) { + continue; + } + plantablePositions.add(acornPos.immutable()); + } + + int acornsToPlace = Math.min(plantablePositions.size(), 1 + random.nextInt(3)); + for (int i = 0; i < acornsToPlace; i++) { + int index = random.nextInt(plantablePositions.size()); + BlockPos acornPos = plantablePositions.remove(index); + setBlock(level, acornPos, acornState); + } + } + + protected void spawnFlyingSquirrels(WorldGenLevel level, List interiorSpaces, RandomSource random) { + if (interiorSpaces.isEmpty()) { + return; + } + ServerLevel serverLevel = level.getLevel(); + + int squirrelCount = 1 + random.nextInt(3); + for (int i = 0; i < squirrelCount; i++) { + FlyingSquirrelEntity squirrel = AntarchyObjects.FLYING_SQUIRREL.get().create(serverLevel); + if (squirrel == null) { + continue; + } + + BlockPos targetPos = interiorSpaces.get(random.nextInt(interiorSpaces.size())); + if (!this.canSpawnSquirrelInHollow(level, targetPos)) { + squirrel.discard(); + continue; + } + squirrel.moveTo( + targetPos.getX() + 0.2D + random.nextDouble() * 0.6D, + targetPos.getY() + 0.05D, + targetPos.getZ() + 0.2D + random.nextDouble() * 0.6D, + random.nextFloat() * 360.0F, + 0.0F + ); + serverLevel.addFreshEntity(squirrel); + } + } + + 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); + for (int i = 0; i < attempts; i++) { + int dx = random.nextInt(r * 2 + 1) - r; + int dz = random.nextInt(r * 2 + 1) - r; + + int cx = canopyCenter.getX() + dx; + int cz = canopyCenter.getZ() + dz; + + for (int dy = canopyDepth / 4; dy >= -canopyDepth / 2; dy--) { + pos.set(cx, canopyCenter.getY() + dy, cz); + BlockState anchorState = level.getBlockState(pos); + if (!anchorState.is(BlockTags.LOGS) && !anchorState.is(BlockTags.LEAVES)) continue; + + boolean clear = true; + outer: + for (int drop = 1; drop <= clearBelow; drop++) { + for (int bx = -clearRadius; bx <= clearRadius; bx++) { + for (int bz = -clearRadius; bz <= clearRadius; bz++) { + pos.set(cx + bx, canopyCenter.getY() + dy - drop, cz + bz); + BlockState below = level.getBlockState(pos); + if (below.isSolid() && !below.is(BlockTags.LEAVES)) { clear = false; break outer; } + } + } + } + if (clear) return new BlockPos(cx, canopyCenter.getY() + dy, cz); + } + } + return null; + } + + protected boolean canSpawnSquirrelInHollow(WorldGenLevel level, BlockPos targetPos) { + return level.isEmptyBlock(targetPos) + && level.isEmptyBlock(targetPos.above()) + && !level.getBlockState(targetPos.below()).canBeReplaced(); + } + + protected void adaptTerrain(WorldGenLevel level, BlockPos origin, RandomSource random, int trunkRadius) { + int moundRadius = trunkRadius + 4; + int moundRadiusSq = moundRadius * moundRadius; + int baseY = origin.getY() - 1; + for (int x = -moundRadius; x <= moundRadius; x++) { + for (int z = -moundRadius; z <= moundRadius; z++) { + int distanceSq = x * x + z * z; + if (distanceSq > moundRadiusSq) { + continue; + } + + int worldX = origin.getX() + x; + int worldZ = origin.getZ() + z; + 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 <= trunkRadius * trunkRadius ? 0 : random.nextInt(2)); + if (currentTopY > desiredTopY) { + continue; + } + + for (int y = currentTopY + 1; y <= desiredTopY; y++) { + BlockPos targetPos = new BlockPos(worldX, y, worldZ); + if (canReplaceTerrain(level, targetPos)) { + setBlock(level, targetPos, soilState(random)); + } + } + } + } + + } + + protected void refreshTerrainSurface(WorldGenLevel level, BlockPos origin, RandomSource random, int radius) { + int radiusSq = radius * radius; + int minY = Math.max(level.getMinBuildHeight(), origin.getY() - 6); + int maxY = Math.min(level.getMaxBuildHeight() - 1, origin.getY() + 4); + + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + if (x * x + z * z > radiusSq) { + continue; + } + + int worldX = origin.getX() + x; + int worldZ = origin.getZ() + z; + BlockPos topSoilPos = null; + + for (int y = maxY; y >= minY; y--) { + BlockPos pos = new BlockPos(worldX, y, worldZ); + BlockState state = level.getBlockState(pos); + if (!isTreeSurfaceSoil(state)) { + continue; + } + + BlockPos abovePos = pos.above(); + if (!level.getBlockState(abovePos).isAir()) { + if (state.is(Blocks.MOSS_BLOCK) && isBaseTrunkBlock(level.getBlockState(abovePos))) { + topSoilPos = pos; + break; + } + if (isSurfaceCoverState(state)) { + setBlock(level, pos, soilState(random)); + } + continue; + } + + topSoilPos = pos; + break; + } + + if (topSoilPos == null) { + continue; + } + + BlockState topState = level.getBlockState(topSoilPos); + if (!isSurfaceCoverState(topState)) { + setBlock(level, topSoilPos, surfaceState(random)); + } + } + } + } + + protected void adaptAndRefreshTerrain(WorldGenLevel level, BlockPos origin, RandomSource random, int trunkRadius) { + int radius = trunkRadius + 4; + int radiusSq = radius * radius; + int trunkRadiusSq = trunkRadius * trunkRadius; + int baseY = origin.getY() - 1; + int minY = Math.max(level.getMinBuildHeight(), origin.getY() - 6); + int maxY = Math.min(level.getMaxBuildHeight() - 1, origin.getY() + 4); + + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + int distanceSq = x * x + z * z; + if (distanceSq > radiusSq) { + continue; + } + + 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)); + for (int y = currentTopY + 1; y <= desiredTopY; y++) { + BlockPos targetPos = new BlockPos(worldX, y, worldZ); + if (canReplaceTerrain(level, targetPos)) { + setBlock(level, targetPos, soilState(random)); + } + } + + BlockPos topSoilPos = null; + for (int y = maxY; y >= minY; y--) { + BlockPos pos = new BlockPos(worldX, y, worldZ); + BlockState state = level.getBlockState(pos); + if (!isTreeSurfaceSoil(state)) { + continue; + } + BlockPos abovePos = pos.above(); + if (!level.getBlockState(abovePos).isAir()) { + if (state.is(Blocks.MOSS_BLOCK) && isBaseTrunkBlock(level.getBlockState(abovePos))) { + topSoilPos = pos; + break; + } + if (isSurfaceCoverState(state)) { + setBlock(level, pos, soilState(random)); + } + continue; + } + topSoilPos = pos; + break; + } + if (topSoilPos != null) { + BlockState topState = level.getBlockState(topSoilPos); + if (!isSurfaceCoverState(topState)) { + setBlock(level, topSoilPos, surfaceState(random)); + } + } + } + } + } + + protected void stabilizeBase(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random, int radius) { + int radiusSq = radius * radius; + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + if (x * x + z * z > radiusSq) { + continue; + } + + BlockPos topPos = origin.offset(x, 0, z); + for (int y = topPos.getY() - 1; y > level.getMinBuildHeight(); y--) { + BlockPos belowPos = new BlockPos(topPos.getX(), y, topPos.getZ()); + BlockState belowState = level.getBlockState(belowPos); + if (belowState.isFaceSturdy(level, belowPos, Direction.UP) && !canReplaceTerrain(level, belowPos)) { + break; + } + + if (canReplaceTerrain(level, belowPos)) { + setBlock(level, belowPos, this.selectTrunkState(config, random, belowPos, belowPos.getY() - origin.getY(), 32)); + } else { + break; + } + } + } + } + } + + protected void fillCircle(WorldGenLevel level, BlockPos center, int radius, StateFactory stateFactory) { + int radiusSq = radius * radius; + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + if (x * x + z * z > radiusSq) { + continue; + } + + BlockPos targetPos = center.offset(x, 0, z); + BlockState state = stateFactory.create(targetPos); + if (canReplace(level, targetPos)) { + setBlock(level, targetPos, state); + } + } + } + } + + protected void fillIrregularTrunkCircle(WorldGenLevel level, BlockPos center, int radius, OuranwoodTreeConfiguration config, RandomSource random, int baseY, int height) { + int radiusSq = radius * radius; + for (int x = -radius - 1; x <= radius + 1; x++) { + for (int z = -radius - 1; z <= radius + 1; z++) { + int distanceSq = x * x + z * z; + if (distanceSq > radiusSq + 1) { + continue; + } + + if (distanceSq == radiusSq + 1 && random.nextFloat() < 0.86F) { + continue; + } + + if (distanceSq >= Math.max(1, radiusSq - radius) && random.nextFloat() < 0.04F) { + continue; + } + + BlockPos targetPos = center.offset(x, 0, z); + if (canReplace(level, targetPos)) { + setBlock(level, targetPos, this.selectTrunkState(config, random, targetPos, targetPos.getY() - baseY, height)); + } + } + } + } + + protected BlockState selectTrunkState(OuranwoodTreeConfiguration config, RandomSource random, BlockPos pos, int localY, int height) { + BlockState baseState = config.trunkProvider().getState(random, pos); + if (localY <= 1) { + return Blocks.MOSS_BLOCK.defaultBlockState(); + } + + if (localY <= 4) { + float mossChance = Mth.lerp((localY - 2) / 2.0F, 0.8F, 0.2F); + if (random.nextFloat() < mossChance) { + return Blocks.MOSS_BLOCK.defaultBlockState(); + } + return this.getMossyTrunkState(baseState); + } + + if (localY <= 10) { + float mossyChance = Mth.lerp((localY - 5) / 5.0F, 0.95F, 0.2F); + if (random.nextFloat() < mossyChance) { + return this.getMossyTrunkState(baseState); + } + return baseState; + } + + float mossChance = this.getMossChance(localY, height); + if (mossChance <= 0.0F || random.nextFloat() > mossChance) { + return baseState; + } + + return this.getMossyTrunkState(baseState); + } + + protected BlockState getMossyTrunkState(BlockState baseState) { + return switch (baseState.getValue(RotatedPillarBlock.AXIS)) { + case X, Y, Z -> AntarchyObjects.MOSSY_OURANWOOD_WOOD.get().defaultBlockState() + .setValue(RotatedPillarBlock.AXIS, baseState.getValue(RotatedPillarBlock.AXIS)); + }; + } + + protected float getMossChance(int localY, int height) { + int fullyMossyBand = Mth.clamp(height / 20, 2, 4); + int gradientTop = Mth.clamp(height / 12, 5, 10); + if (localY <= fullyMossyBand) { + return 0.9F; + } + + if (localY <= gradientTop) { + float t = (localY - fullyMossyBand) / (float) Math.max(1, gradientTop - fullyMossyBand); + return Mth.lerp(t, 0.75F, 0.08F); + } + + return 0.03F; + } + + protected void fillLeafCircle(WorldGenLevel level, BlockPos center, OuranwoodTreeConfiguration config, RandomSource random, int radius, boolean dense) { + int radiusSq = radius * radius; + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + int distanceSq = x * x + z * z; + if (distanceSq > radiusSq) { + continue; + } + + if (!dense && distanceSq > radiusSq - radius && random.nextFloat() < 0.18F) { + continue; + } + + BlockPos targetPos = center.offset(x, 0, z); + if (!canReplace(level, targetPos)) { + continue; + } + + this.setLeaf(level, targetPos, config, random); + } + } + } + + protected void fillBranchLeafCluster(WorldGenLevel level, BlockPos center, OuranwoodTreeConfiguration config, RandomSource random, int radius, boolean dense) { + this.fillLeafCircle(level, center, config, random, radius, dense); + if (radius > 2) { + this.fillLeafCircle(level, center.above(), config, random, radius - 1, true); + this.fillLeafCircle(level, center.below(), config, random, radius - 1, true); + } + if (radius >= 6) { + this.tryPlaceHiddenSupportLog(level, center, config, random); + } + } + + protected void setLeaf(WorldGenLevel level, BlockPos pos, OuranwoodTreeConfiguration config, RandomSource random) { + setBlock(level, pos, config.foliageProvider().getState(random, pos)); + } + + protected void tryPlaceLeaf(WorldGenLevel level, BlockPos pos, OuranwoodTreeConfiguration config, RandomSource random) { + if (canReplace(level, pos)) { + this.setLeaf(level, pos, config, random); + } + } + + protected void tryPlaceHiddenSupportLog(WorldGenLevel level, BlockPos pos, OuranwoodTreeConfiguration config, RandomSource random) { + BlockState state = level.getBlockState(pos); + if (!(state.getBlock() instanceof LeavesBlock)) { + return; + } + + int leafNeighbors = 0; + for (Direction direction : Direction.values()) { + BlockState neighbor = level.getBlockState(pos.relative(direction)); + if (neighbor.getBlock() instanceof LeavesBlock) { + leafNeighbors++; + } + } + + if (leafNeighbors < 5) { + return; + } + + setBlock(level, pos, config.trunkProvider().getState(random, pos)); + } + + protected void pruneExposedTopLogs(WorldGenLevel level, BlockPos origin, BlockPos canopyCenter, OuranwoodTreeConfiguration config, RandomSource random, int trunkRadius, int canopyRadius, int canopyDepth, int height) { + int horizontalRadius = canopyRadius + 6; + int minY = canopyCenter.getY() - Math.max(4, canopyDepth / 2 + 1); + int maxY = origin.getY() + height + canopyDepth + 6; + 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++) { + BlockPos pos = new BlockPos(x, y, z); + BlockState state = level.getBlockState(pos); + if (!state.is(BlockTags.LOGS)) { + continue; + } + + if (this.isWithinTrunkCore(origin, pos, trunkRadius, canopyCenter.getY())) { + continue; + } + + int leafNeighbors = this.countLeafNeighbors(level, pos); + int openFaces = this.countOpenFaces(level, pos); + boolean topExposed = level.getBlockState(pos.above()).isAir(); + boolean lowerCanopyStray = y <= canopyCenter.getY() + && leafNeighbors >= 3 + && openFaces >= 2; + if (!(topExposed && leafNeighbors >= 1) && !lowerCanopyStray) { + continue; + } + + this.setLeaf(level, pos, config, random); + } + } + } + } + + protected void coverExposedBranchSides(WorldGenLevel level, BlockPos origin, BlockPos canopyCenter, OuranwoodTreeConfiguration config, RandomSource random, int trunkRadius, int canopyRadius, int canopyDepth, int height) { + 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; + + 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++) { + BlockPos pos = new BlockPos(x, y, z); + BlockState state = level.getBlockState(pos); + if (!state.is(BlockTags.LOGS) || this.isWithinTrunkCore(origin, pos, trunkRadius, canopyCenter.getY())) { + continue; + } + + if (this.countLeafNeighbors(level, pos) < 1) { + continue; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos sidePos = pos.relative(direction); + if (!level.getBlockState(sidePos).isAir()) { + continue; + } + + if (!this.canWrapBranchSide(level, pos, direction)) { + continue; + } + + this.tryPlaceLeaf(level, sidePos, config, random); + } + } + } + } + } + + protected void updateLeafDistances(WorldGenLevel level, BlockPos origin, int height, int canopyRadius, int canopyDepth) { + 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<>(); + 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()); + } + } + } + } + + 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; + } + + int computedDistance = this.computeLeafDistance(level, pos, state); + 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); + anyChanged = true; + } + if (!anyChanged) break; + } + } + + protected void placeHangingAcorns(WorldGenLevel level, BlockPos canopyCenter, OuranwoodTreeConfiguration config, RandomSource random, int canopyRadius, int canopyDepth) { + int maxAcorns = config.juvenile() ? 12 + random.nextInt(6) : 40 + random.nextInt(20); + int attempts = maxAcorns * 12; + int horizontalRadius = canopyRadius + (config.juvenile() ? 2 : 6); + int minYOffset = -Math.max(3, canopyDepth); + int maxYOffset = Math.max(2, canopyDepth / 2); + int placed = 0; + + for (int i = 0; i < attempts && placed < maxAcorns; i++) { + int offsetX = random.nextInt(horizontalRadius * 2 + 1) - horizontalRadius; + int offsetZ = random.nextInt(horizontalRadius * 2 + 1) - horizontalRadius; + int offsetY = minYOffset + random.nextInt(maxYOffset - minYOffset + 1); + if (random.nextFloat() < 0.72F) { + int branchBandMin = -Math.max(3, canopyDepth * 3 / 4); + int branchBandMax = Math.max(-1, canopyDepth / 5); + offsetY = branchBandMin + random.nextInt(branchBandMax - branchBandMin + 1); + } + + BlockPos leafPos = canopyCenter.offset(offsetX, offsetY, offsetZ); + BlockState leafState = level.getBlockState(leafPos); + if (!(leafState.getBlock() instanceof LeavesBlock)) { + continue; + } + + BlockPos acornPos = leafPos.below(); + if (!level.isEmptyBlock(acornPos)) { + continue; + } + + if (!this.canHangAcornFromLeaf(level, leafPos)) { + continue; + } + + int openSides = 0; + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (level.getBlockState(acornPos.relative(direction)).isAir()) { + openSides++; + } + } + + if (openSides < 1) { + continue; + } + + setBlock(level, acornPos, OuranwoodLeavesBlock.createHangingAcornState(random.nextInt(3))); + placed++; + } + } + + protected boolean canHangAcornFromLeaf(WorldGenLevel level, BlockPos leafPos) { + if (level.getBlockState(leafPos.above()).is(BlockTags.LOGS) || level.getBlockState(leafPos.above(2)).is(BlockTags.LOGS)) { + return true; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (level.getBlockState(leafPos.relative(direction)).is(BlockTags.LOGS) + || level.getBlockState(leafPos.relative(direction).above()).is(BlockTags.LOGS)) { + return true; + } + } + + int nearbyLeaves = 0; + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (level.getBlockState(leafPos.relative(direction)).getBlock() instanceof LeavesBlock) { + nearbyLeaves++; + } + if (level.getBlockState(leafPos.relative(direction).above()).getBlock() instanceof LeavesBlock) { + nearbyLeaves++; + } + } + return nearbyLeaves >= 2; + } + + protected int countLeafNeighbors(WorldGenLevel level, BlockPos pos) { + int leafNeighbors = 0; + for (Direction direction : Direction.values()) { + if (level.getBlockState(pos.relative(direction)).getBlock() instanceof LeavesBlock) { + leafNeighbors++; + } + } + return leafNeighbors; + } + + protected int countOpenFaces(WorldGenLevel level, BlockPos pos) { + int openFaces = 0; + for (Direction direction : Direction.values()) { + BlockState neighbor = level.getBlockState(pos.relative(direction)); + if (neighbor.isAir()) { + openFaces++; + } + } + return openFaces; + } + + protected boolean canWrapBranchSide(WorldGenLevel level, BlockPos logPos, Direction direction) { + BlockPos sidePos = logPos.relative(direction); + return this.isLeafOrLog(level, sidePos.above()) + || this.isLeafOrLog(level, sidePos.below()) + || this.isLeafOrLog(level, logPos.relative(direction.getClockWise())) + || this.isLeafOrLog(level, logPos.relative(direction.getCounterClockWise())) + || this.isLeafOrLog(level, logPos.above()) + || this.isLeafOrLog(level, logPos.below()); + } + + protected boolean isWithinTrunkCore(BlockPos origin, BlockPos pos, int trunkRadius, int canopyCenterY) { + if (pos.getY() > canopyCenterY) { + return false; + } + + int dx = pos.getX() - origin.getX(); + int dz = pos.getZ() - origin.getZ(); + int protectedRadius = Math.max(1, trunkRadius - 1); + return dx * dx + dz * dz <= protectedRadius * protectedRadius; + } + + protected boolean isLeafOrLog(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.getBlock() instanceof LeavesBlock || state.is(BlockTags.LOGS); + } + + protected IntegerProperty getLeafDistanceProperty(BlockState state) { + if (state.getBlock() instanceof OuranwoodLeavesBlock && state.hasProperty(OuranwoodLeavesBlock.OURANWOOD_DISTANCE)) { + return OuranwoodLeavesBlock.OURANWOOD_DISTANCE; + } + + if (state.hasProperty(LeavesBlock.DISTANCE)) { + return LeavesBlock.DISTANCE; + } + + return null; + } + + protected int getLeafDistanceLimit(BlockState state) { + if (state.getBlock() instanceof OuranwoodLeavesBlock) { + return OuranwoodLeavesBlock.OURANWOOD_MAX_DISTANCE + 1; + } + + return 7; + } + + protected int computeLeafDistance(WorldGenLevel level, BlockPos pos, BlockState state) { + int bestDistance = this.getLeafDistanceLimit(state); + for (Direction direction : Direction.values()) { + BlockState neighbor = level.getBlockState(pos.relative(direction)); + if (neighbor.is(BlockTags.LOGS)) { + return 1; + } + + IntegerProperty neighborProperty = this.getLeafDistanceProperty(neighbor); + if (neighbor.getBlock() instanceof LeavesBlock && neighborProperty != null) { + bestDistance = Math.min(bestDistance, neighbor.getValue(neighborProperty) + 1); + } + } + + return Math.min(this.getLeafDistanceLimit(state), bestDistance); + } + + protected boolean hasLeafNeighbor(WorldGenLevel level, BlockPos pos) { + for (Direction direction : Direction.values()) { + if (level.getBlockState(pos.relative(direction)).getBlock() instanceof LeavesBlock) { + return true; + } + } + return false; + } + + protected void tryPlaceVine(WorldGenLevel level, BlockPos anchor, RandomSource random) { + if (!this.canSupportVine(level, anchor)) { + return; + } + + Direction side = Direction.Plane.HORIZONTAL.getRandomDirection(random); + this.tryPlaceAttachedVine(level, anchor, side, 2 + random.nextInt(5)); + } + + protected void tryPlaceAttachedVine(WorldGenLevel level, BlockPos supportPos, Direction outwardDirection, int length) { + if (!this.canSupportVine(level, supportPos)) { + return; + } + + BlockPos vinePos = supportPos.relative(outwardDirection); + if (!level.isEmptyBlock(vinePos)) { + return; + } + + this.placeVineColumn(level, vinePos, outwardDirection.getOpposite(), length); + } + + protected void placeVineColumn(WorldGenLevel level, BlockPos startPos, Direction attachedFace, int length) { + BlockState vineState = vineStateForAttachment(attachedFace); + if (vineState == null) { + return; + } + + for (int step = 0; step < length; step++) { + BlockPos targetPos = startPos.below(step); + if (!level.isEmptyBlock(targetPos)) { + break; + } + setBlock(level, targetPos, vineState); + } + } + + protected void tryPlaceGlowVineUnderLeaf(WorldGenLevel level, BlockPos leafPos, RandomSource random, int length) { + if (!AntarchySettings.glowVinesUnderLeaves()) { + return; + } + + BlockPos anchorPos = this.findLeafAnchor(level, leafPos); + if (anchorPos == null || !level.isEmptyBlock(anchorPos.below())) { + return; + } + + for (int step = 1; step <= length; step++) { + BlockPos targetPos = anchorPos.below(step); + if (!level.isEmptyBlock(targetPos)) { + break; + } + + BlockState vineState = step == length + ? Blocks.CAVE_VINES.defaultBlockState().setValue(CaveVines.BERRIES, Boolean.TRUE) + : Blocks.CAVE_VINES_PLANT.defaultBlockState().setValue(CaveVines.BERRIES, random.nextFloat() < 0.2F); + setBlock(level, targetPos, vineState); + } + } + + protected boolean canSupportVine(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.is(BlockTags.LEAVES) || state.is(BlockTags.LOGS) || state.is(Blocks.MOSS_BLOCK); + } + + protected boolean canSupportGlowVine(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.is(BlockTags.LEAVES); + } + + @Nullable + protected BlockPos findLeafAnchor(WorldGenLevel level, BlockPos pos) { + for (int offset = 0; offset <= 2; offset++) { + BlockPos candidate = pos.above(offset); + if (this.canSupportGlowVine(level, candidate)) { + return candidate; + } + } + + return null; + } + + protected void placeTieredCrown(WorldGenLevel level, BlockPos crownCenter, OuranwoodTreeConfiguration config, RandomSource random, int crownRadius) { + int crownHeight = config.juvenile() ? 3 : 5; + for (int y = 0; y <= crownHeight; y++) { + int layerRadius = Math.max(2, crownRadius - y + random.nextInt(3) - 1); + BlockPos layerCenter = crownCenter.offset(random.nextInt(3) - 1, y, random.nextInt(3) - 1); + this.fillLeafCircle(level, layerCenter, config, random, layerRadius, y >= crownHeight - 1); + if (layerRadius > 3 && random.nextFloat() < 0.75F) { + this.fillLeafCircle(level, layerCenter.above(), config, random, layerRadius - 2, true); + } + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (random.nextFloat() < 0.8F) { + BlockPos lobeCenter = crownCenter.relative(direction, Math.max(2, crownRadius - 1)).above(random.nextInt(3)); + this.fillLeafCircle(level, lobeCenter, config, random, Math.max(2, crownRadius - 2 + random.nextInt(2)), true); + } + } + } + + protected void placeSplitCrown(WorldGenLevel level, BlockPos crownCenter, OuranwoodTreeConfiguration config, RandomSource random, int crownRadius) { + int lobes = 3 + random.nextInt(3); + this.fillLeafCircle(level, crownCenter, config, random, Math.max(3, crownRadius - 2), false); + for (int i = 0; i < lobes; i++) { + Direction direction = Direction.Plane.HORIZONTAL.getRandomDirection(random); + int distance = Math.max(2, crownRadius - 2 + random.nextInt(2)); + BlockPos lobeCenter = crownCenter.relative(direction, distance).above(random.nextInt(3)); + int lobeRadius = Math.max(2, crownRadius - 2 + random.nextInt(3) - 1); + this.fillLeafCircle(level, lobeCenter, config, random, lobeRadius, true); + this.fillLeafCircle(level, lobeCenter.above(), config, random, Math.max(2, lobeRadius - 1), true); + } + } + + protected void placeWindsweptCrown(WorldGenLevel level, BlockPos crownCenter, OuranwoodTreeConfiguration config, RandomSource random, int crownRadius) { + Direction sweep = Direction.Plane.HORIZONTAL.getRandomDirection(random); + int crownHeight = config.juvenile() ? 3 : 5; + for (int y = 0; y <= crownHeight; y++) { + int offset = Math.min(2, y / 2); + BlockPos layerCenter = crownCenter.relative(sweep, offset).offset(random.nextInt(3) - 1, y, random.nextInt(3) - 1); + int layerRadius = Math.max(2, crownRadius - y + (y < 2 ? 1 : 0)); + this.fillLeafCircle(level, layerCenter, config, random, layerRadius, y >= crownHeight - 1); + } + + BlockPos tailCenter = crownCenter.relative(sweep.getOpposite(), Math.max(2, crownRadius - 2)); + this.fillLeafCircle(level, tailCenter, config, random, Math.max(2, crownRadius - 3), false); + } + + protected void placeClusteredCrown(WorldGenLevel level, BlockPos crownCenter, OuranwoodTreeConfiguration config, RandomSource random, int crownRadius) { + this.fillLeafCircle(level, crownCenter, config, random, Math.max(3, crownRadius - 1), false); + int clusters = 4 + random.nextInt(3); + for (int i = 0; i < clusters; i++) { + BlockPos clusterCenter = crownCenter.offset( + random.nextInt(crownRadius + 1) - random.nextInt(crownRadius + 1), + random.nextInt(4), + random.nextInt(crownRadius + 1) - random.nextInt(crownRadius + 1) + ); + int clusterRadius = Math.max(2, crownRadius - 3 + random.nextInt(3)); + this.fillLeafCircle(level, clusterCenter, config, random, clusterRadius, true); + if (random.nextFloat() < 0.65F) { + this.fillLeafCircle(level, clusterCenter.above(), config, random, Math.max(2, clusterRadius - 1), true); + } + } + } + + protected static BlockState vineStateForAttachment(Direction attachedFace) { + BlockState state = Blocks.VINE.defaultBlockState(); + return switch (attachedFace) { + case NORTH -> state.setValue(VineBlock.NORTH, Boolean.TRUE); + case SOUTH -> state.setValue(VineBlock.SOUTH, Boolean.TRUE); + case EAST -> state.setValue(VineBlock.EAST, Boolean.TRUE); + case WEST -> state.setValue(VineBlock.WEST, Boolean.TRUE); + default -> null; + }; + } + + protected static boolean canGrowOn(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.isFaceSturdy(level, pos, Direction.UP); + } + + protected void setBlock(WorldGenLevel level, BlockPos pos, BlockState state) { + if (canWriteAt(level, pos)) { + setBlock((LevelWriter) level, pos, state); + } + } + + protected static boolean canWriteAt(WorldGenLevel level, BlockPos pos) { + return !(level instanceof WorldGenRegion region) || region.ensureCanWrite(pos); + } + + protected static boolean canReplace(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.isAir() || state.canBeReplaced() || state.getBlock() instanceof LeavesBlock; + } + + protected static boolean canReplaceTerrain(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.isAir() || state.canBeReplaced() || state.getBlock() instanceof LeavesBlock || !state.getFluidState().isEmpty(); + } + + protected static BlockState soilState(RandomSource random) { + return random.nextFloat() < 0.35F ? Blocks.ROOTED_DIRT.defaultBlockState() : Blocks.DIRT.defaultBlockState(); + } + + protected static BlockState surfaceState(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.45F) { + return Blocks.MOSS_BLOCK.defaultBlockState(); + } + if (roll < 0.8F) { + return Blocks.GRASS_BLOCK.defaultBlockState(); + } + return Blocks.ROOTED_DIRT.defaultBlockState(); + } + + protected static boolean isSurfaceCoverState(BlockState state) { + return state.is(Blocks.GRASS_BLOCK) || state.is(Blocks.MOSS_BLOCK); + } + + protected static boolean isBaseTrunkBlock(BlockState state) { + return state.is(Blocks.MOSS_BLOCK) || state.is(BlockTags.LOGS); + } + + protected static boolean isTreeSurfaceSoil(BlockState state) { + return state.is(Blocks.DIRT) || state.is(Blocks.ROOTED_DIRT) || isSurfaceCoverState(state); + } + + @FunctionalInterface + protected interface StateFactory { + BlockState create(BlockPos pos); + } + + protected record NestPlacement(List interiorSpaces) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeGrowers.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeGrowers.java new file mode 100644 index 00000000..d0d5b690 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeGrowers.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public final class OuranwoodTreeGrowers { + public static final ResourceKey> OURANWOOD_YOUNG_TREE = featureKey("ouranwood_young_tree"); + public static final ResourceKey> OURANWOOD_MEDIUM_TREE = featureKey("ouranwood_medium_tree"); + public static final ResourceKey> OURANWOOD_LARGE_TREE = featureKey("ouranwood_large_tree"); + + private OuranwoodTreeGrowers() { + } + + private static ResourceKey> featureKey(String path) { + return ResourceKey.create( + Registries.CONFIGURED_FEATURE, + new ResourceLocation(Antarchy.MODID, path) + ); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java new file mode 100644 index 00000000..bb2dea0e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java @@ -0,0 +1,165 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; +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.SlabBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.SlabType; +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 class PeachForestMossyBoulderFeature extends Feature { + private static final int ANGLE_SAMPLES = 16; + + public PeachForestMossyBoulderFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + BlockPos surfacePos = new BlockPos(origin.getX(), level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()) - 1, origin.getZ()); + if (!isSoil(level.getBlockState(surfacePos))) { + return false; + } + + BlockPos base = surfacePos.below(random.nextInt(2)); + int height = 6 + random.nextInt(5); + int baseRadius = 2 * (2 + random.nextInt(2)); + boolean placed = false; + + double[] silhouetteNoise = generateSilhouetteNoise(random); + double leanMagnitude = random.nextDouble() * 1.6D; + double leanAngle = random.nextDouble() * Math.PI * 2.0D; + double wobbleAmplitude = 0.4D + random.nextDouble() * 0.4D; + double wobblePhase = random.nextDouble() * Math.PI * 2.0D; + + int topRadius = 1; + BlockPos topCenter = base; + for (int y = 0; y < height; y++) { + double heightFraction = (double) y / (height - 1); + double taper = Math.cos(heightFraction * Math.PI * 0.5D); + int radius = Math.max(1, Math.round((float) (baseRadius * taper))); + + double wobble = Math.sin(heightFraction * Math.PI * 1.5D + wobblePhase) * wobbleAmplitude; + int driftX = (int) Math.round(Math.cos(leanAngle) * leanMagnitude * heightFraction + Math.cos(leanAngle + Math.PI * 0.5D) * wobble); + int driftZ = (int) Math.round(Math.sin(leanAngle) * leanMagnitude * heightFraction + Math.sin(leanAngle + Math.PI * 0.5D) * wobble); + BlockPos levelCenter = base.above(y).offset(driftX, 0, driftZ); + + placed |= this.placeDisk(level, levelCenter, radius, heightFraction, silhouetteNoise, random); + topCenter = levelCenter; + topRadius = radius; + } + + if (placed) { + this.softCapWithSlabs(level, topCenter, topRadius, random); + } + + return placed; + } + + private static double[] generateSilhouetteNoise(RandomSource random) { + double[] noise = new double[ANGLE_SAMPLES]; + for (int i = 0; i < ANGLE_SAMPLES; i++) { + noise[i] = 0.88D + random.nextDouble() * 0.24D; + } + return noise; + } + + private static double sampleSilhouetteNoise(double[] noise, int x, int z) { + if (x == 0 && z == 0) { + return 1.0D; + } + + double angle = Math.atan2(z, x); + double normalized = (angle / (Math.PI * 2.0D) + 1.0D) * ANGLE_SAMPLES; + int index0 = ((int) Math.floor(normalized)) % ANGLE_SAMPLES; + int index1 = (index0 + 1) % ANGLE_SAMPLES; + double t = normalized - Math.floor(normalized); + return Mth.lerp(t, noise[index0], noise[index1]); + } + + private boolean placeDisk(WorldGenLevel level, BlockPos center, int radius, double heightFraction, double[] silhouetteNoise, RandomSource random) { + boolean placed = false; + double rr = radius * radius; + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + double noiseFactor = sampleSilhouetteNoise(silhouetteNoise, x, z); + double distance = (x * x + z * z) / (Math.max(1.0D, rr) * noiseFactor * noiseFactor); + if (distance > 1.0D) { + continue; + } + + BlockPos targetPos = center.offset(x, 0, z); + BlockState targetState = level.getBlockState(targetPos); + if (targetState.isAir() || targetState.canBeReplaced() || isSoil(targetState)) { + level.setBlock(targetPos, pickBlockState(heightFraction, random), 2); + placed = true; + } + } + } + return placed; + } + + private void softCapWithSlabs(WorldGenLevel level, BlockPos center, int radius, RandomSource random) { + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + BlockPos topPos = center.offset(x, 0, z); + while (topPos.getY() < level.getMaxBuildHeight() - 1 && isBoulderBlock(level.getBlockState(topPos.above()))) { + topPos = topPos.above(); + } + + BlockState topState = level.getBlockState(topPos); + if (!isBoulderBlock(topState)) { + continue; + } + + BlockPos slabPos = topPos.above(); + if (!level.isEmptyBlock(slabPos) || random.nextFloat() > 0.25F) { + continue; + } + + int openSides = 0; + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (!isBoulderBlock(level.getBlockState(topPos.relative(direction)))) { + openSides++; + } + } + + if (openSides == 0) { + continue; + } + + BlockState slabState = (random.nextFloat() < 0.55F ? Blocks.MOSSY_COBBLESTONE_SLAB : Blocks.COBBLESTONE_SLAB) + .defaultBlockState().setValue(SlabBlock.TYPE, SlabType.BOTTOM); + level.setBlock(slabPos, slabState, 2); + } + } + } + + private static BlockState pickBlockState(double heightFraction, RandomSource random) { + if (heightFraction < 0.35D) { + return Blocks.TUFF.defaultBlockState(); + } + + return random.nextFloat() < 0.55F ? Blocks.MOSSY_COBBLESTONE.defaultBlockState() : Blocks.COBBLESTONE.defaultBlockState(); + } + + private static boolean isBoulderBlock(BlockState state) { + return state.is(Blocks.TUFF) || state.is(Blocks.COBBLESTONE) || state.is(Blocks.MOSSY_COBBLESTONE); + } + + private static boolean isSoil(BlockState state) { + return state.is(BlockTags.DIRT) || state.is(Blocks.GRASS_BLOCK) || state.is(Blocks.MOSS_BLOCK) || state.is(Blocks.ROOTED_DIRT); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondConfiguration.java new file mode 100644 index 00000000..e8b13b34 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondConfiguration.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; + +public record PeachForestPondConfiguration( + int minRadius, + int maxRadius, + int minDepth, + int maxDepth +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.intRange(1, 32).fieldOf("min_radius").forGetter(PeachForestPondConfiguration::minRadius), + Codec.intRange(1, 32).fieldOf("max_radius").forGetter(PeachForestPondConfiguration::maxRadius), + Codec.intRange(1, 16).fieldOf("min_depth").forGetter(PeachForestPondConfiguration::minDepth), + Codec.intRange(1, 16).fieldOf("max_depth").forGetter(PeachForestPondConfiguration::maxDepth) + ).apply(instance, PeachForestPondConfiguration::new)); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java new file mode 100644 index 00000000..4ee1d582 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java @@ -0,0 +1,192 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.FluidTags; +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.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public class PeachForestPondFeature extends Feature { + private static final int NOISE_SAMPLES = 12; + private static final ResourceLocation CAMELLIA_ID = new ResourceLocation("antarchy", "camellia"); + private static final ResourceLocation SPIDER_LILY_ID = new ResourceLocation("antarchy", "spider_lily"); + + public PeachForestPondFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + PeachForestPondConfiguration config = context.config(); + + int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()) - 1; + BlockPos center = new BlockPos(origin.getX(), surfaceY, origin.getZ()); + if (!isSoil(level.getBlockState(center))) { + return false; + } + + int radiusX = Mth.nextInt(random, config.minRadius(), config.maxRadius()); + int radiusZ = Mth.clamp(radiusX + random.nextInt(3) - 1, config.minRadius(), config.maxRadius()); + int depth = Mth.nextInt(random, config.minDepth(), config.maxDepth()); + double[] edgeNoise = generateEdgeNoise(random); + boolean placed = false; + + int rimHeight = 2 + Math.max(0, (Math.max(radiusX, radiusZ) - 10) / 6); + int rimTopY = center.getY() + rimHeight; + + for (int x = -radiusX - 2; x <= radiusX + 2; x++) { + for (int z = -radiusZ - 2; z <= radiusZ + 2; z++) { + double noiseFactor = sampleEdgeNoise(edgeNoise, x, z); + double distance = ((x * x) / (double) (radiusX * radiusX) + (z * z) / (double) (radiusZ * radiusZ)) / (noiseFactor * noiseFactor); + BlockPos topPos = center.offset(x, 0, z); + + if (distance <= 1.0D) { + int floorY = center.getY() - (distance < 0.4D ? depth + 1 : depth); + for (int y = center.getY(); y > floorY; y--) { + BlockPos waterPos = new BlockPos(topPos.getX(), y, topPos.getZ()); + level.setBlock(waterPos, Blocks.WATER.defaultBlockState(), 2); + LumenWorldgenHelper.scheduleFluidTick(level, waterPos); + } + level.setBlock(new BlockPos(topPos.getX(), floorY, topPos.getZ()), Blocks.TUFF.defaultBlockState(), 2); + clearFloatingVegetation(level, topPos, center.getY()); + placed = true; + } else if (distance <= 1.2D) { + int floorY = center.getY() - depth; + for (int y = rimTopY; y >= floorY; y--) { + level.setBlock(new BlockPos(topPos.getX(), y, topPos.getZ()), Blocks.TUFF.defaultBlockState(), 2); + } + clearFloatingVegetation(level, topPos, rimTopY); + placed = true; + } else if (distance <= 1.45D && isSoil(level.getBlockState(topPos))) { + level.setBlock(topPos, Blocks.TUFF.defaultBlockState(), 2); + clearFloatingVegetation(level, topPos, center.getY()); + } + } + } + + if (placed) { + this.placeLilyPads(level, center, radiusX, radiusZ, edgeNoise, random); + this.placeFrogspawn(level, center, radiusX, radiusZ, edgeNoise, random); + } + + return placed; + } + + private static double[] generateEdgeNoise(RandomSource random) { + double[] noise = new double[NOISE_SAMPLES]; + for (int i = 0; i < NOISE_SAMPLES; i++) { + noise[i] = 0.72D + random.nextDouble() * 0.56D; + } + return noise; + } + + private static double sampleEdgeNoise(double[] edgeNoise, int x, int z) { + if (x == 0 && z == 0) { + return 1.0D; + } + + double angle = Math.atan2(z, x); + double normalized = (angle / (Math.PI * 2.0D) + 1.0D) * NOISE_SAMPLES; + int index0 = ((int) Math.floor(normalized)) % NOISE_SAMPLES; + int index1 = (index0 + 1) % NOISE_SAMPLES; + double t = normalized - Math.floor(normalized); + return Mth.lerp(t, edgeNoise[index0], edgeNoise[index1]); + } + + private static void clearFloatingVegetation(WorldGenLevel level, BlockPos topPos, int surfaceY) { + int topOfDebris = Math.max(surfaceY, level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, topPos.getX(), topPos.getZ()) - 1); + for (int y = surfaceY + 1; y <= topOfDebris + 32; y++) { + BlockPos abovePos = new BlockPos(topPos.getX(), y, topPos.getZ()); + BlockState aboveState = level.getBlockState(abovePos); + if (isPeachFlower(aboveState)) { + removePeachFlower(level, abovePos, aboveState); + continue; + } + if (!aboveState.isAir() && aboveState.canBeReplaced()) { + level.setBlock(abovePos, Blocks.AIR.defaultBlockState(), 2); + } + } + } + + private static boolean isPeachFlower(BlockState state) { + return state.is(BuiltInRegistries.BLOCK.get(CAMELLIA_ID)) || state.is(BuiltInRegistries.BLOCK.get(SPIDER_LILY_ID)); + } + + private static void removePeachFlower(WorldGenLevel level, BlockPos pos, BlockState state) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + if (state.is(BuiltInRegistries.BLOCK.get(CAMELLIA_ID)) && state.hasProperty(BlockStateProperties.DOUBLE_BLOCK_HALF)) { + BlockPos otherHalfPos = state.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.UPPER ? pos.below() : pos.above(); + if (level.getBlockState(otherHalfPos).is(BuiltInRegistries.BLOCK.get(CAMELLIA_ID))) { + level.setBlock(otherHalfPos, Blocks.AIR.defaultBlockState(), 2); + } + } + } + + private void placeLilyPads(WorldGenLevel level, BlockPos center, int radiusX, int radiusZ, double[] edgeNoise, RandomSource random) { + int attempts = 6 + (radiusX + radiusZ) * 2; + for (int i = 0; i < attempts; i++) { + int x = random.nextInt(radiusX * 2 + 1) - radiusX; + int z = random.nextInt(radiusZ * 2 + 1) - radiusZ; + double noiseFactor = sampleEdgeNoise(edgeNoise, x, z); + double distance = ((x * x) / (double) (radiusX * radiusX) + (z * z) / (double) (radiusZ * radiusZ)) / (noiseFactor * noiseFactor); + if (distance > 0.85D || random.nextFloat() > 0.55F) { + continue; + } + + BlockPos padPos = center.offset(x, 1, z); + if (!level.getFluidState(padPos.below()).is(FluidTags.WATER) || !level.isEmptyBlock(padPos)) { + continue; + } + + BlockState lilyPad = Blocks.LILY_PAD.defaultBlockState(); + if (!lilyPad.canSurvive(level, padPos)) { + continue; + } + + level.setBlock(padPos, lilyPad, 2); + } + } + + private void placeFrogspawn(WorldGenLevel level, BlockPos center, int radiusX, int radiusZ, double[] edgeNoise, RandomSource random) { + int attempts = 2 + (radiusX + radiusZ) / 3; + for (int i = 0; i < attempts; i++) { + int x = random.nextInt(radiusX * 2 + 1) - radiusX; + int z = random.nextInt(radiusZ * 2 + 1) - radiusZ; + double noiseFactor = sampleEdgeNoise(edgeNoise, x, z); + double distance = ((x * x) / (double) (radiusX * radiusX) + (z * z) / (double) (radiusZ * radiusZ)) / (noiseFactor * noiseFactor); + if (distance > 0.8D || random.nextFloat() > 0.45F) { + continue; + } + + BlockPos spawnPos = center.offset(x, 1, z); + if (!level.getFluidState(spawnPos.below()).is(FluidTags.WATER) || !level.isEmptyBlock(spawnPos)) { + continue; + } + + BlockState frogspawn = Blocks.FROGSPAWN.defaultBlockState(); + if (!frogspawn.canSurvive(level, spawnPos)) { + continue; + } + + level.setBlock(spawnPos, frogspawn, 2); + } + } + + private static boolean isSoil(BlockState state) { + return state.is(BlockTags.DIRT) || state.is(Blocks.GRASS_BLOCK) || state.is(Blocks.MOSS_BLOCK) || state.is(Blocks.ROOTED_DIRT); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeConfiguration.java new file mode 100644 index 00000000..5bd8efdb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeConfiguration.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.util.valueproviders.IntProvider; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; + +public record PeachTreeConfiguration( + BlockStateProvider trunkProvider, + BlockStateProvider foliageProvider, + IntProvider height, + IntProvider canopyRadius, + IntProvider branchCount, + int trunkWidth, + float fruitChance, + float topCanopyScale +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + BlockStateProvider.CODEC.fieldOf("trunk_provider").forGetter(PeachTreeConfiguration::trunkProvider), + BlockStateProvider.CODEC.fieldOf("foliage_provider").forGetter(PeachTreeConfiguration::foliageProvider), + IntProvider.codec(4, 64).fieldOf("height").forGetter(PeachTreeConfiguration::height), + IntProvider.codec(2, 16).fieldOf("canopy_radius").forGetter(PeachTreeConfiguration::canopyRadius), + IntProvider.codec(1, 12).fieldOf("branch_count").forGetter(PeachTreeConfiguration::branchCount), + Codec.intRange(1, 2).optionalFieldOf("trunk_width", 1).forGetter(PeachTreeConfiguration::trunkWidth), + Codec.floatRange(0.0F, 1.0F).optionalFieldOf("fruit_chance", 0.45F).forGetter(PeachTreeConfiguration::fruitChance), + Codec.floatRange(0.2F, 1.2F).optionalFieldOf("top_canopy_scale", 0.8F).forGetter(PeachTreeConfiguration::topCanopyScale) + ).apply(instance, PeachTreeConfiguration::new)); +} 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 new file mode 100644 index 00000000..24ea1a0c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeFeature.java @@ -0,0 +1,472 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.PeachLeavesBlock; +import com.mojang.serialization.Codec; +import java.util.ArrayDeque; +import java.util.ArrayList; +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.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +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; +import net.minecraft.world.level.block.state.properties.IntegerProperty; + +public class PeachTreeFeature extends Feature { + private static final ResourceLocation PEACH_LOG_ID = new ResourceLocation(Antarchy.MODID, "peach_log"); + private static final ResourceLocation PEACH_LEAVES_ID = new ResourceLocation(Antarchy.MODID, "peach_leaves"); + + public PeachTreeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + PeachTreeConfiguration config = context.config(); + int height = config.height().sample(random); + int canopyRadius = config.canopyRadius().sample(random); + int trunkWidth = config.trunkWidth(); + + if (!canGrowOn(level, origin.below())) { + return false; + } + + List trunkPath = buildTrunkPath(origin, height, random); + Set logPositions = new LinkedHashSet<>(); + Set leafPositions = new LinkedHashSet<>(); + + placeTrunk(level, trunkPath, logPositions, height, trunkWidth, random, config); + + int branchStart = Math.max(6, height - 5); + List branchTips = buildBranches(level, trunkPath, branchStart, logPositions, leafPositions, canopyRadius, trunkWidth, random, config); + BlockPos canopyCenter = trunkPath.get(trunkPath.size() - 1).offset(trunkWidth - 1, 1, trunkWidth - 1); + placeCentralCanopy(level, canopyCenter, canopyRadius, logPositions, leafPositions, random, config); + for (BranchTip tip : branchTips) { + placeBranchCanopy(level, tip, canopyCenter, canopyRadius, logPositions, leafPositions, random, config); + } + if (trunkWidth == 2) { + reinforceLargeCanopy(level, canopyCenter, branchTips, logPositions, leafPositions, random, config); + } + connectCanopy(level, canopyCenter, branchTips, logPositions, leafPositions, random); + refreshLeafDistances(level, leafPositions, logPositions); + placeHangingPeaches(level, canopyCenter, canopyRadius, leafPositions, random, config); + + return !logPositions.isEmpty() || !leafPositions.isEmpty(); + } + + private List buildTrunkPath(BlockPos origin, int height, RandomSource random) { + List trunkPath = new ArrayList<>(height); + Direction leanDirection = Direction.Plane.HORIZONTAL.getRandomDirection(random); + double driftX = leanDirection.getStepX() * (0.12D + random.nextDouble() * 0.05D); + double driftZ = leanDirection.getStepZ() * (0.12D + random.nextDouble() * 0.05D); + double wobbleX = (random.nextDouble() - 0.5D) * 0.04D; + double wobbleZ = (random.nextDouble() - 0.5D) * 0.04D; + double offsetX = 0.0D; + double offsetZ = 0.0D; + + for (int y = 0; y < height; y++) { + double progress = y / (double) Math.max(1, height - 1); + double bend = progress < 0.35D ? 0.0D : (progress - 0.35D) / 0.65D; + offsetX += (driftX + wobbleX) * bend; + offsetZ += (driftZ + wobbleZ) * bend; + trunkPath.add(origin.offset(Mth.floor(offsetX), y, Mth.floor(offsetZ))); + } + + return trunkPath; + } + + private void placeTrunk(WorldGenLevel level, List trunkPath, Set logPositions, int height, int trunkWidth, RandomSource random, PeachTreeConfiguration config) { + Direction leanDirection = Direction.NORTH; + if (trunkPath.size() >= 2) { + BlockPos base = trunkPath.get(0); + BlockPos next = trunkPath.get(1); + leanDirection = directionFromDelta(next.getX() - base.getX(), next.getZ() - base.getZ()); + } + + for (int i = 0; i < trunkPath.size(); i++) { + BlockPos pos = trunkPath.get(i); + placeTrunkColumn(level, pos, trunkWidth, Direction.Axis.Y, logPositions, config, random); + + if (trunkWidth == 1 && height >= 13 && i < 2) { + placeLog(level, pos.relative(leanDirection.getOpposite()), Direction.Axis.Y, logPositions, config, random); + } + if (trunkWidth == 1 && height >= 15 && i == 0) { + placeLog(level, pos.relative(leanDirection.getClockWise()), Direction.Axis.Y, logPositions, config, random); + } + } + } + + private List buildBranches( + WorldGenLevel level, + List trunkPath, + int branchStart, + Set logPositions, + Set leafPositions, + int canopyRadius, + int trunkWidth, + RandomSource random + , PeachTreeConfiguration config + ) { + int branchCount = config.branchCount().sample(random); + double baseAngle = random.nextDouble() * Math.PI * 2.0D; + List tips = new ArrayList<>(branchCount); + + for (int i = 0; i < branchCount; i++) { + int attachIndex = Math.min(trunkPath.size() - 1, branchStart + random.nextInt(Math.max(1, trunkPath.size() - branchStart))); + BlockPos anchor = trunkPath.get(attachIndex).offset(trunkWidth - 1, 0, trunkWidth - 1); + double angle = baseAngle + (Math.PI * 2.0D * i / branchCount) + (random.nextDouble() - 0.5D) * 0.55D; + int length = trunkWidth == 2 ? 6 + random.nextInt(5) : 3 + random.nextInt(4); + int rise = trunkWidth == 2 ? 2 + random.nextInt(3) : 1 + random.nextInt(2); + BlockPos tip = placeBranch(level, anchor, angle, length, rise, logPositions, leafPositions, random, config); + tips.add(new BranchTip(anchor, tip, angle)); + + if (random.nextFloat() < 0.30F) { + double forkAngle = angle + (random.nextBoolean() ? Math.PI / 3.0D : -Math.PI / 3.0D); + placeBranch(level, tip, forkAngle, trunkWidth == 2 ? 2 + random.nextInt(3) : 1 + random.nextInt(3), random.nextInt(2), logPositions, leafPositions, random, config); + } + } + + return tips; + } + + private BlockPos placeBranch( + WorldGenLevel level, + BlockPos start, + double angle, + int length, + int rise, + Set logPositions, + Set leafPositions, + RandomSource random, + PeachTreeConfiguration config + ) { + double dirX = Math.cos(angle); + double dirZ = Math.sin(angle); + double perpX = -dirZ; + double perpZ = dirX; + double curveStrength = 0.75D + random.nextDouble() * 0.55D; + BlockPos tip = start; + + for (int step = 1; step <= length; step++) { + double t = step / (double) length; + double curve = Math.sin(t * Math.PI) * curveStrength; + int x = Mth.floor(Mth.lerp(t, start.getX(), start.getX() + dirX * length) + perpX * curve); + int y = Mth.floor(Mth.lerp(t, start.getY(), start.getY() + rise) + Math.sin(t * Math.PI) * 0.35D); + int z = Mth.floor(Mth.lerp(t, start.getZ(), start.getZ() + dirZ * length) + perpZ * curve); + BlockPos current = new BlockPos(x, y, z); + BlockPos previous = tip; + tip = current; + + Direction.Axis axis = axisForSegment(previous, current); + placeLog(level, current, axis, logPositions, config, random); + if (step >= length - 1) { + placeLeafCluster(level, current.above(), 2 + random.nextInt(2), leafPositions, random); + } + } + + return tip; + } + + private void placeCentralCanopy(WorldGenLevel level, BlockPos center, int canopyRadius, Set logPositions, Set leafPositions, RandomSource random, PeachTreeConfiguration config) { + placeCanopyLobe(level, center.below(), canopyRadius + 1, 1, canopyRadius, 0.35D, leafPositions, random); + placeCanopyLobe(level, center, canopyRadius + 1, 2, canopyRadius + 1, 0.42D, leafPositions, random); + int topRadius = Math.max(2, Mth.floor(canopyRadius * config.topCanopyScale())); + placeCanopyLobe(level, center.above(), topRadius, 1, topRadius, 0.24D, leafPositions, random); + placeLeafCluster(level, center.above(2), Math.max(2, topRadius - 1), leafPositions, random); + placeLog(level, center.below(), Direction.Axis.Y, logPositions, config, random); + } + + private void placeBranchCanopy( + WorldGenLevel level, + BranchTip tip, + BlockPos canopyCenter, + int canopyRadius, + Set logPositions, + Set leafPositions, + RandomSource random, + PeachTreeConfiguration config + ) { + int lobeRadius = Math.max(3, canopyRadius - 1 + random.nextInt(2)); + BlockPos lobeCenter = tip.tip().above(random.nextInt(2)); + placeCanopyLobe(level, lobeCenter, lobeRadius, 2, lobeRadius, 0.36D, leafPositions, random); + placeCanopyLobe(level, lobeCenter.above(), Math.max(2, lobeRadius - 1), 1, Math.max(2, lobeRadius - 1), 0.22D, leafPositions, random); + + BlockPos bridgeCenter = tip.tip().offset( + Mth.floor(Math.cos(tip.angle()) * 2.0D), + 0, + Mth.floor(Math.sin(tip.angle()) * 2.0D) + ).above(1); + placeLeafCluster(level, bridgeCenter, Math.max(2, canopyRadius - 2), leafPositions, random); + placeLog(level, canopyCenter, Direction.Axis.Y, logPositions, config, random); + } + + private void reinforceLargeCanopy( + WorldGenLevel level, + BlockPos canopyCenter, + List branchTips, + Set logPositions, + Set leafPositions, + RandomSource random, + PeachTreeConfiguration config + ) { + placeLog(level, canopyCenter.above(), Direction.Axis.Y, logPositions, config, random); + placeLog(level, canopyCenter.above(2), Direction.Axis.Y, logPositions, config, random); + placeLog(level, canopyCenter.below(), Direction.Axis.Y, logPositions, config, random); + + for (BranchTip tip : branchTips) { + BlockPos mid = interpolate(tip.tip(), canopyCenter, 0.5D, 0.0D).above(1); + placeLog(level, mid, axisForSegment(tip.tip(), mid), logPositions, config, random); + + BlockPos nearTip = interpolate(tip.tip(), canopyCenter, 0.25D, 0.0D); + placeLog(level, nearTip.above(), axisForSegment(nearTip, canopyCenter), logPositions, config, random); + + BlockPos supportStart = tip.anchor().above(1); + BlockPos supportEnd = tip.tip().above(1); + placeLog(level, supportStart, axisForSegment(supportStart, supportEnd), logPositions, config, random); + placeLog(level, supportEnd, axisForSegment(supportStart, supportEnd), logPositions, config, random); + } + + placeLeafCluster(level, canopyCenter.above(1), Math.max(2, config.canopyRadius().sample(random) - 1), leafPositions, random); + } + + private void connectCanopy( + WorldGenLevel level, + BlockPos canopyCenter, + List branchTips, + Set logPositions, + Set leafPositions, + RandomSource random + ) { + for (BranchTip tip : branchTips) { + BlockPos start = tip.tip(); + int steps = 2 + random.nextInt(2); + for (int i = 1; i <= steps; i++) { + double t = i / (double) (steps + 1); + BlockPos pos = interpolate(start, canopyCenter, t, 0.0D).above(random.nextInt(2)); + placeLeaf(level, pos, leafPositions); + } + } + } + + private void placeCanopyLobe( + WorldGenLevel level, + BlockPos center, + int radiusX, + int radiusY, + int radiusZ, + double edgeNoise, + Set leafPositions, + RandomSource random + ) { + int minY = -radiusY; + int maxY = radiusY; + for (int dy = minY; dy <= maxY; dy++) { + double vertical = dy / (double) Math.max(1, radiusY); + for (int dx = -radiusX; dx <= radiusX; dx++) { + for (int dz = -radiusZ; dz <= radiusZ; dz++) { + double nx = dx / (double) Math.max(1, radiusX); + double nz = dz / (double) Math.max(1, radiusZ); + double normalized = nx * nx + (vertical * vertical * 1.2D) + nz * nz; + if (normalized > 1.0D + edgeNoise + random.nextDouble() * 0.04D) { + continue; + } + if (dy < 0 && normalized > 0.65D && random.nextFloat() < 0.55F) { + continue; + } + if (dy > 0 && normalized < 0.25D && random.nextFloat() < 0.18F) { + continue; + } + + BlockPos pos = center.offset(dx, dy, dz); + placeLeaf(level, pos, leafPositions); + } + } + } + } + + private void placeLeafCluster(WorldGenLevel level, BlockPos center, int radius, Set leafPositions, RandomSource random) { + int radiusSq = radius * radius; + for (int x = -radius; x <= radius; x++) { + for (int y = -1; y <= 1; y++) { + for (int z = -radius; z <= radius; z++) { + int distanceSq = x * x + z * z + y * y; + if (distanceSq > radiusSq) { + continue; + } + if (distanceSq > radiusSq - radius && random.nextFloat() < 0.20F) { + continue; + } + placeLeaf(level, center.offset(x, y, z), leafPositions); + } + } + } + } + + private void placeHangingPeaches(WorldGenLevel level, BlockPos canopyCenter, int canopyRadius, Set leafPositions, RandomSource random, PeachTreeConfiguration config) { + int fruitAttempts = 12 + random.nextInt(10); + List candidates = new ArrayList<>(leafPositions); + for (int i = 0; i < fruitAttempts && !candidates.isEmpty(); i++) { + BlockPos leafPos = candidates.get(random.nextInt(candidates.size())); + int dx = Math.abs(leafPos.getX() - canopyCenter.getX()); + int dz = Math.abs(leafPos.getZ() - canopyCenter.getZ()); + int horizontal = dx + dz; + if (horizontal < Math.max(2, canopyRadius - 2)) { + continue; + } + BlockPos fruitPos = leafPos.below(); + if (!level.getBlockState(fruitPos).isAir()) { + continue; + } + if (random.nextFloat() > config.fruitChance()) { + continue; + } + setBlock(level, fruitPos, PeachLeavesBlock.createHangingPeachState()); + } + } + + private void refreshLeafDistances(WorldGenLevel level, Set leafPositions, Set logPositions) { + ArrayDeque queue = new ArrayDeque<>(logPositions); + java.util.Map distances = new java.util.HashMap<>(); + for (BlockPos logPos : logPositions) { + distances.put(logPos, 0); + } + + while (!queue.isEmpty()) { + BlockPos current = queue.removeFirst(); + int currentDistance = distances.getOrDefault(current, 0); + if (currentDistance >= PeachLeavesBlock.PEACH_MAX_DISTANCE) { + continue; + } + + for (Direction direction : Direction.values()) { + BlockPos next = current.relative(direction); + if (distances.containsKey(next)) { + continue; + } + BlockState state = level.getBlockState(next); + if (!(state.getBlock() instanceof LeavesBlock)) { + continue; + } + distances.put(next, currentDistance + 1); + queue.addLast(next); + } + } + + for (BlockPos pos : leafPositions) { + BlockState state = level.getBlockState(pos); + if (!(state.getBlock() instanceof LeavesBlock)) { + continue; + } + + IntegerProperty property = state.getBlock() instanceof PeachLeavesBlock ? PeachLeavesBlock.PEACH_DISTANCE : null; + if (property == null) { + continue; + } + + int distance = Math.min(PeachLeavesBlock.PEACH_DECAY_DISTANCE, distances.getOrDefault(pos, PeachLeavesBlock.PEACH_DECAY_DISTANCE)); + if (state.getValue(property) != distance) { + setBlock(level, pos, PeachLeavesBlock.setPeachDistanceForWorldgen(state, distance)); + } + } + } + + private void placeTrunkColumn(WorldGenLevel level, BlockPos pos, int trunkWidth, Direction.Axis axis, Set logPositions, PeachTreeConfiguration config, RandomSource random) { + for (int dx = 0; dx < trunkWidth; dx++) { + for (int dz = 0; dz < trunkWidth; dz++) { + placeLog(level, pos.offset(dx, 0, dz), axis, logPositions, config, random); + } + } + } + + private boolean placeLog(WorldGenLevel level, BlockPos pos, Direction.Axis axis, Set logPositions, PeachTreeConfiguration config, RandomSource random) { + if (!canReplace(level, pos)) { + return false; + } + BlockState state = config.trunkProvider().getState(random, pos); + if (state.hasProperty(RotatedPillarBlock.AXIS)) { + state = state.setValue(RotatedPillarBlock.AXIS, axis); + } + setBlock(level, pos, state); + logPositions.add(pos); + return true; + } + + private boolean placeLeaf(WorldGenLevel level, BlockPos pos, Set leafPositions) { + if (!canReplace(level, pos)) { + return false; + } + setBlock(level, pos, leafState()); + leafPositions.add(pos); + return true; + } + + private BlockState leafState() { + return peachBlock(PEACH_LEAVES_ID).defaultBlockState(); + } + + private static Block peachBlock(ResourceLocation id) { + return BuiltInRegistries.BLOCK.getOptional(id) + .orElseThrow(() -> new IllegalStateException("Missing peach block: " + id)); + } + + private static boolean canGrowOn(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.isFaceSturdy(level, pos, Direction.UP); + } + + private static boolean canReplace(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.isAir() || state.canBeReplaced() || state.getBlock() instanceof LeavesBlock; + } + + private static Direction.Axis axisForSegment(BlockPos from, BlockPos to) { + int dx = Math.abs(to.getX() - from.getX()); + int dy = Math.abs(to.getY() - from.getY()); + int dz = Math.abs(to.getZ() - from.getZ()); + if (dy > dx && dy > dz) { + return Direction.Axis.Y; + } + return dx >= dz ? Direction.Axis.X : Direction.Axis.Z; + } + + private static Direction directionFromDelta(int dx, int dz) { + if (Math.abs(dx) >= Math.abs(dz)) { + return dx >= 0 ? Direction.EAST : Direction.WEST; + } + return dz >= 0 ? Direction.SOUTH : Direction.NORTH; + } + + private static BlockPos interpolate(BlockPos start, BlockPos end, double t, double sidewaysOffset) { + double x = Mth.lerp(t, start.getX(), end.getX()); + double y = Mth.lerp(t, start.getY(), end.getY()); + double z = Mth.lerp(t, start.getZ(), end.getZ()); + if (sidewaysOffset != 0.0D) { + double dx = end.getX() - start.getX(); + double dz = end.getZ() - start.getZ(); + double length = Math.sqrt(dx * dx + dz * dz); + if (length > 0.0D) { + x += (-dz / length) * sidewaysOffset; + z += (dx / length) * sidewaysOffset; + } + } + return new BlockPos(Mth.floor(x), Mth.floor(y), Mth.floor(z)); + } + + private record BranchTip(BlockPos anchor, BlockPos tip, double angle) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeGrowers.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeGrowers.java new file mode 100644 index 00000000..dda05630 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeGrowers.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public final class PeachTreeGrowers { + public static final ResourceKey> PEACH_LARGE_TREE = featureKey("peach_large_tree"); + public static final ResourceKey> PEACH_TREE = featureKey("peach_tree"); + + private PeachTreeGrowers() { + } + + private static ResourceKey> featureKey(String path) { + return ResourceKey.create(Registries.CONFIGURED_FEATURE, new ResourceLocation(Antarchy.MODID, path)); + } +} 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 new file mode 100644 index 00000000..78903f73 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/TriffidPatchFeature.java @@ -0,0 +1,169 @@ +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/mushroom/GlowcapHugeMushroomFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/mushroom/GlowcapHugeMushroomFeature.java new file mode 100644 index 00000000..2f7d6e2e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/mushroom/GlowcapHugeMushroomFeature.java @@ -0,0 +1,158 @@ +package com.craisinlord.antarchy.content.worldgen.mushroom; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.HugeMushroomBlock; +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 GlowcapHugeMushroomFeature extends Feature { + private static final ResourceLocation GLOWCAP_MUSHROOM_BLOCK_ID = new ResourceLocation(Antarchy.MODID, "glowcap_mushroom_block"); + private static final int MIN_STEM_HEIGHT = 5; + private static final int MAX_STEM_HEIGHT = 8; + private static final int CAP_RADIUS = 2; + private static final int TOP_RADIUS = 1; + public GlowcapHugeMushroomFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block glowcapBlock = getBlock(GLOWCAP_MUSHROOM_BLOCK_ID); + if (glowcapBlock == null || !(glowcapBlock.defaultBlockState().getBlock() instanceof HugeMushroomBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + int stemHeight = MIN_STEM_HEIGHT + random.nextInt(MAX_STEM_HEIGHT - MIN_STEM_HEIGHT + 1); + BlockPos origin = context.origin(); + if (!isValidPlacementOrigin(level, origin, stemHeight + 2)) { + return false; + } + BlockState capBase = glowcapBlock.defaultBlockState(); + BlockState stemState = Blocks.MUSHROOM_STEM.defaultBlockState(); + + Direction lean = Direction.Plane.HORIZONTAL.getRandomDirection(random); + + BlockPos.MutableBlockPos cursor = origin.mutable(); + boolean placedAny = false; + + for (int i = 0; i < stemHeight; i++) { + if (i > 1 && i % 2 == 0) { + cursor.move(lean); + } + cursor.setY(origin.getY() + i); + if (!canReplace(level, cursor)) { + continue; + } + level.setBlock(cursor, stemState, 3); + placedAny = true; + } + + BlockPos capCenter = cursor.above().immutable(); + placedAny |= placeUmbrellaCap(level, random, capCenter, capBase); + + return placedAny; + } + + private static boolean isValidPlacementOrigin(WorldGenLevel level, BlockPos origin, int clearanceHeight) { + if (!level.getBlockState(origin).isAir()) { + return false; + } + + BlockPos belowPos = origin.below(); + BlockState belowState = level.getBlockState(belowPos); + if (!belowState.is(BlockTags.MUSHROOM_GROW_BLOCK) && !belowState.isFaceSturdy(level, belowPos, Direction.UP)) { + return false; + } + + return hasVerticalClearance(level, origin, clearanceHeight); + } + + private static boolean hasVerticalClearance(WorldGenLevel level, BlockPos origin, int clearanceHeight) { + for (int offset = 0; offset <= clearanceHeight; offset++) { + if (!canReplace(level, origin.above(offset))) { + return false; + } + } + return true; + } + + private boolean placeUmbrellaCap(WorldGenLevel level, RandomSource random, BlockPos capCenter, BlockState capBase) { + boolean placedAny = false; + BlockState stemState = Blocks.MUSHROOM_STEM.defaultBlockState(); + + for (int dx = -CAP_RADIUS; dx <= CAP_RADIUS; dx++) { + for (int dz = -CAP_RADIUS; dz <= CAP_RADIUS; dz++) { + boolean isCenter = dx == 0 && dz == 0; + boolean coveredByTopTier = Math.abs(dx) <= TOP_RADIUS && Math.abs(dz) <= TOP_RADIUS; + + BlockPos pos = new BlockPos(capCenter.getX() + dx, capCenter.getY(), capCenter.getZ() + dz); + if (!canReplace(level, pos)) { + continue; + } + + if (isCenter) { + level.setBlock(pos, stemState, 3); + placedAny = true; + continue; + } + + BlockState state = capBase + .setValue(HugeMushroomBlock.NORTH, dz == -CAP_RADIUS) + .setValue(HugeMushroomBlock.SOUTH, dz == CAP_RADIUS) + .setValue(HugeMushroomBlock.EAST, dx == CAP_RADIUS) + .setValue(HugeMushroomBlock.WEST, dx == -CAP_RADIUS) + .setValue(HugeMushroomBlock.UP, !coveredByTopTier) + .setValue(HugeMushroomBlock.DOWN, true); + + level.setBlock(pos, state, 3); + placedAny = true; + } + } + + int topY = capCenter.getY() + 1; + for (int dx = -TOP_RADIUS; dx <= TOP_RADIUS; dx++) { + for (int dz = -TOP_RADIUS; dz <= TOP_RADIUS; dz++) { + BlockPos pos = new BlockPos(capCenter.getX() + dx, topY, capCenter.getZ() + dz); + if (!canReplace(level, pos)) { + continue; + } + + BlockState state = capBase + .setValue(HugeMushroomBlock.NORTH, dz == -TOP_RADIUS) + .setValue(HugeMushroomBlock.SOUTH, dz == TOP_RADIUS) + .setValue(HugeMushroomBlock.EAST, dx == TOP_RADIUS) + .setValue(HugeMushroomBlock.WEST, dx == -TOP_RADIUS) + .setValue(HugeMushroomBlock.UP, true) + .setValue(HugeMushroomBlock.DOWN, false); + + level.setBlock(pos, state, 3); + placedAny = true; + } + } + + return placedAny; + } + + private static boolean canReplace(WorldGenLevel level, BlockPos pos) { + BlockState existing = level.getBlockState(pos); + return existing.isAir() || existing.canBeReplaced(); + } + + private static Block getBlock(ResourceLocation id) { + return BuiltInRegistries.BLOCK.getOptional(id).orElse(null); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/mushroom/GlowcapHugeMushroomWorldgenFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/mushroom/GlowcapHugeMushroomWorldgenFeature.java new file mode 100644 index 00000000..cd3b67e4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/mushroom/GlowcapHugeMushroomWorldgenFeature.java @@ -0,0 +1,180 @@ +package com.craisinlord.antarchy.content.worldgen.mushroom; + +import com.craisinlord.antarchy.Antarchy; +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.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.HugeMushroomBlock; +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 GlowcapHugeMushroomWorldgenFeature extends Feature { + private static final ResourceLocation GLOWCAP_MUSHROOM_BLOCK_ID = new ResourceLocation(Antarchy.MODID, "glowcap_mushroom_block"); + private static final int MIN_STEM_HEIGHT = 5; + private static final int MAX_STEM_HEIGHT = 8; + private static final int CAP_RADIUS = 2; + private static final int TOP_RADIUS = 1; + private static final int SEARCH_RADIUS = 6; + private static final int SEARCH_ATTEMPTS = 20; + private static final int VERTICAL_SCAN = 12; + + public GlowcapHugeMushroomWorldgenFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block glowcapBlock = getBlock(GLOWCAP_MUSHROOM_BLOCK_ID); + if (glowcapBlock == null || !(glowcapBlock.defaultBlockState().getBlock() instanceof HugeMushroomBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + int stemHeight = MIN_STEM_HEIGHT + random.nextInt(MAX_STEM_HEIGHT - MIN_STEM_HEIGHT + 1); + BlockPos origin = findPlacementOrigin(level, context.origin(), random, stemHeight + 2); + if (origin == null) { + return false; + } + + BlockState capBase = glowcapBlock.defaultBlockState(); + BlockState stemState = Blocks.MUSHROOM_STEM.defaultBlockState(); + Direction lean = Direction.Plane.HORIZONTAL.getRandomDirection(random); + BlockPos.MutableBlockPos cursor = origin.mutable(); + boolean placedAny = false; + + for (int i = 0; i < stemHeight; i++) { + if (i > 1 && i % 2 == 0) { + cursor.move(lean); + } + cursor.setY(origin.getY() + i); + if (!canReplace(level, cursor)) { + continue; + } + level.setBlock(cursor, stemState, 3); + placedAny = true; + } + + BlockPos capCenter = cursor.above().immutable(); + placedAny |= placeUmbrellaCap(level, capCenter, capBase); + return placedAny; + } + + private static BlockPos findPlacementOrigin(WorldGenLevel level, BlockPos origin, RandomSource random, int clearanceHeight) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + int minY = Math.max(level.getMinBuildHeight() + 2, origin.getY() - VERTICAL_SCAN); + int maxY = Math.min(level.getMaxBuildHeight() - clearanceHeight - 2, origin.getY() + VERTICAL_SCAN); + + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; 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; + + for (int y = maxY; y >= minY; y--) { + mutable.set(x, y, z); + if (!isValidPlacementOrigin(level, mutable, clearanceHeight)) { + continue; + } + return mutable.immutable(); + } + } + + return null; + } + + private static boolean isValidPlacementOrigin(WorldGenLevel level, BlockPos origin, int clearanceHeight) { + if (!level.getBlockState(origin).isAir()) { + return false; + } + + BlockPos belowPos = origin.below(); + BlockState belowState = level.getBlockState(belowPos); + if (!belowState.is(BlockTags.MUSHROOM_GROW_BLOCK) && !belowState.isFaceSturdy(level, belowPos, Direction.UP)) { + return false; + } + + return hasVerticalClearance(level, origin, clearanceHeight); + } + + private static boolean hasVerticalClearance(WorldGenLevel level, BlockPos origin, int clearanceHeight) { + for (int offset = 0; offset <= clearanceHeight; offset++) { + if (!canReplace(level, origin.above(offset))) { + return false; + } + } + return true; + } + + private static boolean placeUmbrellaCap(WorldGenLevel level, BlockPos capCenter, BlockState capBase) { + boolean placedAny = false; + BlockState stemState = Blocks.MUSHROOM_STEM.defaultBlockState(); + + for (int dx = -CAP_RADIUS; dx <= CAP_RADIUS; dx++) { + for (int dz = -CAP_RADIUS; dz <= CAP_RADIUS; dz++) { + boolean isCenter = dx == 0 && dz == 0; + boolean coveredByTopTier = Math.abs(dx) <= TOP_RADIUS && Math.abs(dz) <= TOP_RADIUS; + BlockPos pos = new BlockPos(capCenter.getX() + dx, capCenter.getY(), capCenter.getZ() + dz); + if (!canReplace(level, pos)) { + continue; + } + + if (isCenter) { + level.setBlock(pos, stemState, 3); + placedAny = true; + continue; + } + + BlockState state = capBase + .setValue(HugeMushroomBlock.NORTH, dz == -CAP_RADIUS) + .setValue(HugeMushroomBlock.SOUTH, dz == CAP_RADIUS) + .setValue(HugeMushroomBlock.EAST, dx == CAP_RADIUS) + .setValue(HugeMushroomBlock.WEST, dx == -CAP_RADIUS) + .setValue(HugeMushroomBlock.UP, !coveredByTopTier) + .setValue(HugeMushroomBlock.DOWN, true); + level.setBlock(pos, state, 3); + placedAny = true; + } + } + + int topY = capCenter.getY() + 1; + for (int dx = -TOP_RADIUS; dx <= TOP_RADIUS; dx++) { + for (int dz = -TOP_RADIUS; dz <= TOP_RADIUS; dz++) { + BlockPos pos = new BlockPos(capCenter.getX() + dx, topY, capCenter.getZ() + dz); + if (!canReplace(level, pos)) { + continue; + } + + BlockState state = capBase + .setValue(HugeMushroomBlock.NORTH, dz == -TOP_RADIUS) + .setValue(HugeMushroomBlock.SOUTH, dz == TOP_RADIUS) + .setValue(HugeMushroomBlock.EAST, dx == TOP_RADIUS) + .setValue(HugeMushroomBlock.WEST, dx == -TOP_RADIUS) + .setValue(HugeMushroomBlock.UP, true) + .setValue(HugeMushroomBlock.DOWN, false); + level.setBlock(pos, state, 3); + placedAny = true; + } + } + + return placedAny; + } + + private static boolean canReplace(WorldGenLevel level, BlockPos pos) { + BlockState existing = level.getBlockState(pos); + return existing.isAir() || existing.canBeReplaced(); + } + + 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/ocean/SeashellFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/SeashellFeature.java new file mode 100644 index 00000000..044f65bd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/SeashellFeature.java @@ -0,0 +1,63 @@ +package com.craisinlord.antarchy.content.worldgen.ocean; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.SeashellBlock; +import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.LootTable; +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 SeashellFeature extends Feature { + private static final ResourceLocation LOOT_TABLE = new ResourceLocation(Antarchy.MODID, "chests/seashell"); + + public SeashellFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + boolean placedAny = false; + + for (int i = 0; i < 8; i++) { + int x = origin.getX() + random.nextInt(17) - 8; + int z = origin.getZ() + random.nextInt(17) - 8; + int floorY = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, x, z); + BlockPos shellPos = new BlockPos(x, floorY, z); + + if (!level.getFluidState(shellPos).isSource()) { + continue; + } + + BlockState state = AntarchyObjects.SEASHELL.get().defaultBlockState() + .setValue(SeashellBlock.FACING, net.minecraft.core.Direction.Plane.HORIZONTAL.getRandomDirection(random)) + .setValue(SeashellBlock.WATERLOGGED, true) + .setValue(SeashellBlock.POWERED, false); + if (!state.canSurvive(level, shellPos)) { + continue; + } + + level.setBlock(shellPos, state, 2); + if (level.getBlockEntity(shellPos) instanceof SeashellBlockEntity seashell) { + seashell.setLootTable(LOOT_TABLE, random.nextLong()); + seashell.setChanged(); + } + placedAny = true; + } + + return placedAny; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/StarCoralPatchFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/StarCoralPatchFeature.java new file mode 100644 index 00000000..f405ee72 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/StarCoralPatchFeature.java @@ -0,0 +1,118 @@ +package com.craisinlord.antarchy.content.worldgen.ocean; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.tags.FluidTags; +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.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 StarCoralPatchFeature extends Feature { + public StarCoralPatchFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + Block starCoralBlock = AntarchyObjects.STAR_CORAL_BLOCK.get(); + Block starCoral = AntarchyObjects.STAR_CORAL.get(); + Block starCoralFan = AntarchyObjects.STAR_CORAL_FAN.get(); + + int surfaceY = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, origin.getX(), origin.getZ()); + BlockPos floorPos = new BlockPos(origin.getX(), surfaceY - 1, origin.getZ()); + if (!level.getBlockState(floorPos).isSolid() || !level.getFluidState(floorPos.above()).is(FluidTags.WATER)) { + return false; + } + + int radius = 3 + random.nextInt(3); + int targetStructures = 3 + random.nextInt(4); + int attempts = targetStructures * 4; + int placed = 0; + + for (int i = 0; i < attempts && placed < targetStructures; 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); + BlockPos supportPos = new BlockPos(x, y - 1, z); + BlockPos basePos = supportPos.above(); + + if (!level.getBlockState(supportPos).isSolid()) { + continue; + } + if (!level.getFluidState(basePos).is(FluidTags.WATER)) { + continue; + } + if (!level.getBlockState(basePos).canBeReplaced()) { + continue; + } + + growCoralStructure(level, random, basePos, starCoralBlock, starCoral, starCoralFan); + placed++; + } + + return placed > 0; + } + + private void growCoralStructure(WorldGenLevel level, RandomSource random, BlockPos basePos, Block solidBlock, Block plantBlock, Block fanBlock) { + BlockPos pos = basePos; + int trunkHeight = 1 + random.nextInt(3); + for (int i = 0; i < trunkHeight; i++) { + if (!tryPlaceSolid(level, pos, solidBlock)) { + return; + } + pos = pos.above(); + } + + List directions = new ArrayList<>(List.of(Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST)); + Collections.shuffle(directions, new java.util.Random(random.nextLong())); + + int branchCount = Math.min(directions.size(), 2 + random.nextInt(3)); + for (int b = 0; b < branchCount; b++) { + Direction direction = directions.get(b); + BlockPos branchPos = pos; + int branchLength = 2 + random.nextInt(4); + boolean grew = false; + for (int step = 0; step < branchLength; step++) { + branchPos = branchPos.relative(direction); + if (step > 0 && random.nextInt(3) == 0) { + branchPos = branchPos.above(); + } + if (!tryPlaceSolid(level, branchPos, solidBlock)) { + break; + } + grew = true; + } + + if (grew) { + BlockState tip = random.nextBoolean() ? plantBlock.defaultBlockState() : fanBlock.defaultBlockState(); + tryPlaceState(level, branchPos.above(), tip); + } + } + } + + private boolean tryPlaceSolid(WorldGenLevel level, BlockPos pos, Block block) { + return tryPlaceState(level, pos, block.defaultBlockState()); + } + + private boolean tryPlaceState(WorldGenLevel level, BlockPos pos, BlockState state) { + if (!level.getFluidState(pos).is(FluidTags.WATER) || !level.getBlockState(pos).canBeReplaced()) { + return false; + } + + level.setBlock(pos, state, 2); + return true; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/overworld/CornPatchFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/overworld/CornPatchFeature.java new file mode 100644 index 00000000..c9014b00 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/overworld/CornPatchFeature.java @@ -0,0 +1,61 @@ +package com.craisinlord.antarchy.content.worldgen.overworld; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.CornCropBlock; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +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.block.state.properties.DoubleBlockHalf; +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 CornPatchFeature extends Feature { + public CornPatchFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + Block wildCorn = AntarchyObjects.WILD_CORN.get(); + int radius = 4 + random.nextInt(3); + int targetPlacements = 10 + random.nextInt(11); + int attempts = targetPlacements * 4; + int placed = 0; + + for (int i = 0; i < attempts && placed < targetPlacements; i++) { + int x = origin.getX() + random.nextInt(radius * 2 + 1) - radius; + int z = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; + int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z); + BlockPos lowerPos = new BlockPos(x, surfaceY, z); + BlockPos upperPos = lowerPos.above(); + + if (!level.getBlockState(lowerPos.below()).is(net.minecraft.world.level.block.Blocks.GRASS_BLOCK)) { + continue; + } + if (!level.getBlockState(lowerPos).canBeReplaced() || !level.getBlockState(upperPos).canBeReplaced()) { + continue; + } + + BlockState lowerState = wildCorn.defaultBlockState() + .setValue(CornCropBlock.AGE, 3) + .setValue(CornCropBlock.HALF, DoubleBlockHalf.LOWER); + BlockState upperState = wildCorn.defaultBlockState() + .setValue(CornCropBlock.AGE, 3) + .setValue(CornCropBlock.HALF, DoubleBlockHalf.UPPER); + + level.setBlock(lowerPos, lowerState, 2); + level.setBlock(upperPos, upperState, 2); + placed++; + } + + return placed > 0; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/AntiwaterSpringsConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/AntiwaterSpringsConfiguration.java new file mode 100644 index 00000000..f759744f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/AntiwaterSpringsConfiguration.java @@ -0,0 +1,44 @@ +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; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; + +public record AntiwaterSpringsConfiguration( + BlockStateProvider state, + int horizontalSearchRadius, + int floorSearchBelow, + int floorSearchAbove, + int ventOffsetRadius, + int baseClusters, + int extraClusterChance, + int minSmallVentCount, + int maxSmallVentCount, + int minLargeVentCount, + int maxLargeVentCount, + int largeVentClusterChance, + int minDepth, + int maxDepth, + int largeClusterMinDepth, + int largeClusterMaxDepth +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + BlockStateProvider.CODEC.fieldOf("state").forGetter(AntiwaterSpringsConfiguration::state), + Codec.intRange(0, 64).fieldOf("horizontal_search_radius").forGetter(AntiwaterSpringsConfiguration::horizontalSearchRadius), + Codec.intRange(1, 64).fieldOf("floor_search_below").forGetter(AntiwaterSpringsConfiguration::floorSearchBelow), + Codec.intRange(1, 64).fieldOf("floor_search_above").forGetter(AntiwaterSpringsConfiguration::floorSearchAbove), + Codec.intRange(0, 32).fieldOf("vent_offset_radius").forGetter(AntiwaterSpringsConfiguration::ventOffsetRadius), + Codec.intRange(1, 16).fieldOf("base_clusters").forGetter(AntiwaterSpringsConfiguration::baseClusters), + Codec.intRange(1, 64).fieldOf("extra_cluster_chance").forGetter(AntiwaterSpringsConfiguration::extraClusterChance), + Codec.intRange(1, 16).fieldOf("min_small_vent_count").forGetter(AntiwaterSpringsConfiguration::minSmallVentCount), + Codec.intRange(1, 16).fieldOf("max_small_vent_count").forGetter(AntiwaterSpringsConfiguration::maxSmallVentCount), + Codec.intRange(1, 16).fieldOf("min_large_vent_count").forGetter(AntiwaterSpringsConfiguration::minLargeVentCount), + Codec.intRange(1, 16).fieldOf("max_large_vent_count").forGetter(AntiwaterSpringsConfiguration::maxLargeVentCount), + Codec.intRange(1, 64).fieldOf("large_vent_cluster_chance").forGetter(AntiwaterSpringsConfiguration::largeVentClusterChance), + Codec.intRange(1, 32).fieldOf("min_depth").forGetter(AntiwaterSpringsConfiguration::minDepth), + Codec.intRange(1, 32).fieldOf("max_depth").forGetter(AntiwaterSpringsConfiguration::maxDepth), + Codec.intRange(1, 32).fieldOf("large_cluster_min_depth").forGetter(AntiwaterSpringsConfiguration::largeClusterMinDepth), + Codec.intRange(1, 32).fieldOf("large_cluster_max_depth").forGetter(AntiwaterSpringsConfiguration::largeClusterMaxDepth) + ).apply(instance, AntiwaterSpringsConfiguration::new)); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/AntiwaterSpringsFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/AntiwaterSpringsFeature.java new file mode 100644 index 00000000..9a519e2d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/AntiwaterSpringsFeature.java @@ -0,0 +1,318 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.NyxiteSpikeBlock; +import com.craisinlord.antarchy.content.block.PotentNyxiteBlock; +import com.craisinlord.antarchy.content.block.state.PotentNyxiteState; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +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.block.state.properties.DripstoneThickness; +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 AntiwaterSpringsFeature extends Feature { + private static final ResourceLocation DREAM_DUNES_BIOME_ID = new ResourceLocation(Antarchy.MODID, "dream_dunes"); + + public AntiwaterSpringsFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + RandomSource random = context.random(); + AntiwaterSpringsConfiguration config = context.config(); + + BlockState antiwaterSourceState = config.state().getState(random, origin); + if (antiwaterSourceState.isAir() || isDreamDunes(level, origin)) { + return false; + } + + boolean placedAny = false; + int clusterCount = config.baseClusters(); + if (config.extraClusterChance() > 1 && random.nextInt(config.extraClusterChance()) == 0) { + clusterCount++; + } + + for (int cluster = 0; cluster < clusterCount; cluster++) { + BlockPos searchOrigin = origin.offset( + random.nextInt(config.horizontalSearchRadius() * 2 + 1) - config.horizontalSearchRadius(), + 0, + random.nextInt(config.horizontalSearchRadius() * 2 + 1) - config.horizontalSearchRadius() + ); + BlockPos anchor = findVentAnchor(level, searchOrigin, config.floorSearchBelow(), config.floorSearchAbove()); + if (anchor == null) { + continue; + } + + boolean largeCluster = config.largeVentClusterChance() > 1 && random.nextInt(config.largeVentClusterChance()) == 0; + int ventCount = largeCluster + ? randomBetween(random, config.minLargeVentCount(), config.maxLargeVentCount()) + : randomBetween(random, config.minSmallVentCount(), config.maxSmallVentCount()); + + for (int i = 0; i < ventCount; i++) { + BlockPos ventPos = anchor.offset( + random.nextInt(config.ventOffsetRadius() * 2 + 1) - config.ventOffsetRadius(), + 0, + random.nextInt(config.ventOffsetRadius() * 2 + 1) - config.ventOffsetRadius() + ); + BlockPos surfacePos = findVentAnchor(level, ventPos, config.floorSearchBelow(), config.floorSearchAbove()); + if (surfacePos == null) { + continue; + } + + int depth = largeCluster + ? randomBetween(random, config.largeClusterMinDepth(), config.largeClusterMaxDepth()) + : randomBetween(random, config.minDepth(), config.maxDepth()); + placedAny |= placeSpring(level, surfacePos, depth, antiwaterSourceState, random); + } + } + + return placedAny; + } + + private static boolean placeSpring(WorldGenLevel level, BlockPos ventPos, int depth, BlockState antiwaterSourceState, RandomSource random) { + if (!isOpen(level, ventPos.above())) { + return false; + } + if (!hasTerrainSupport(level, ventPos, depth)) { + return false; + } + + BlockState smoothNyxiteState = AntarchyObjects.PALE_NYXITE.get().defaultBlockState(); + BlockState potentState = AntarchyObjects.POTENT_NYXITE.get() + .defaultBlockState() + .setValue(PotentNyxiteBlock.STATE, PotentNyxiteState.DORMANT); + + for (int i = 1; i <= depth; i++) { + BlockPos antiwaterPos = ventPos.below(i); + if (level.getBlockState(antiwaterPos).is(Blocks.BEDROCK)) { + return false; + } + } + + BlockPos terminatorPos = ventPos.below(depth + 1); + if (level.getBlockState(terminatorPos).is(Blocks.BEDROCK)) { + return false; + } + + sealSurface(level, ventPos, smoothNyxiteState); + level.setBlock(ventPos, potentState, 2); + + for (int i = 1; i <= depth; i++) { + BlockPos antiwaterPos = ventPos.below(i); + level.setBlock(antiwaterPos, antiwaterSourceState, 2); + scheduleFluidTick(level, antiwaterPos, antiwaterSourceState); + sealRing(level, antiwaterPos, smoothNyxiteState); + } + + level.setBlock(terminatorPos, Blocks.MAGMA_BLOCK.defaultBlockState(), 2); + sealRing(level, terminatorPos, smoothNyxiteState); + if (isReplaceable(level, terminatorPos.below())) { + level.setBlock(terminatorPos.below(), smoothNyxiteState, 2); + } + decorateSurface(level, ventPos, smoothNyxiteState, random); + + return true; + } + + private static BlockPos findVentAnchor(WorldGenLevel level, BlockPos center, int searchBelow, int searchAbove) { + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + int minY = Math.max(level.getMinBuildHeight() + 3, center.getY() - searchBelow); + int maxY = Math.min(level.getMaxBuildHeight() - 3, center.getY() + searchAbove); + + for (int y = maxY; y >= minY; y--) { + cursor.set(center.getX(), y, center.getZ()); + if (!isOpen(level, cursor.above())) { + continue; + } + + BlockState floorState = level.getBlockState(cursor); + if (floorState.is(AntarchyObjects.NYXITE.get()) || floorState.is(AntarchyObjects.PALE_NYXITE.get())) { + return cursor.immutable(); + } + + if (floorState.blocksMotion() && !floorState.is(Blocks.BEDROCK)) { + return cursor.immutable(); + } + } + + return null; + } + + private static void sealSurface(WorldGenLevel level, BlockPos center, BlockState nyxiteState) { + if (!level.getBlockState(center).is(AntarchyObjects.POTENT_NYXITE.get())) { + level.setBlock(center, nyxiteState, 2); + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos ringPos = center.relative(direction); + if (isReplaceable(level, ringPos) || level.getBlockState(ringPos).blocksMotion()) { + level.setBlock(ringPos, nyxiteState, 2); + } + } + } + + private static void sealRing(WorldGenLevel level, BlockPos center, BlockState nyxiteState) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos ringPos = center.relative(direction); + if (isReplaceable(level, ringPos) || !level.getBlockState(ringPos).blocksMotion()) { + level.setBlock(ringPos, nyxiteState, 2); + } + } + } + + private static void decorateSurface(WorldGenLevel level, BlockPos ventPos, BlockState smoothNyxiteState, RandomSource random) { + int patchRadius = 3 + random.nextInt(2); + for (int dx = -patchRadius; dx <= patchRadius; dx++) { + for (int dz = -patchRadius; dz <= patchRadius; dz++) { + if (dx == 0 && dz == 0) { + continue; + } + + BlockPos target = ventPos.offset(dx, 0, dz); + if (Math.abs(dx) + Math.abs(dz) > patchRadius + random.nextInt(2)) { + continue; + } + + BlockState targetState = level.getBlockState(target); + if (targetState.blocksMotion() && !targetState.is(Blocks.BEDROCK)) { + level.setBlock(target, smoothNyxiteState, 2); + } + } + } + + int pillarCount = 3 + random.nextInt(4); + for (int i = 0; i < pillarCount; i++) { + BlockPos pillarBase = ventPos.offset(random.nextInt(7) - 3, 0, random.nextInt(7) - 3); + if (pillarBase.equals(ventPos) || !level.getBlockState(pillarBase).is(AntarchyObjects.PALE_NYXITE.get())) { + continue; + } + + int pillarHeight = 1 + random.nextInt(4); + if (!canPlacePillar(level, pillarBase, pillarHeight)) { + continue; + } + + for (int y = 1; y <= pillarHeight; y++) { + level.setBlock(pillarBase.above(y), smoothNyxiteState, 2); + } + + placeSpikeColumn(level, pillarBase.above(pillarHeight + 1), 1 + random.nextInt(2)); + } + + int surfaceSpikeCount = 4 + random.nextInt(5); + for (int i = 0; i < surfaceSpikeCount; i++) { + BlockPos spikeBase = ventPos.offset(random.nextInt(9) - 4, 0, random.nextInt(9) - 4); + if (!level.getBlockState(spikeBase).is(AntarchyObjects.PALE_NYXITE.get())) { + continue; + } + placeSpikeColumn(level, spikeBase.above(), 1 + random.nextInt(2)); + } + } + + private static boolean canPlacePillar(WorldGenLevel level, BlockPos basePos, int height) { + for (int y = 1; y <= height + 1; y++) { + if (!isOpen(level, basePos.above(y))) { + return false; + } + } + + return true; + } + + private static boolean hasTerrainSupport(WorldGenLevel level, BlockPos ventPos, int depth) { + for (int i = 0; i <= depth + 2; i++) { + BlockPos layerPos = ventPos.below(i); + if (!isSolidOrSelf(level, layerPos)) { + return false; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos ringPos = layerPos.relative(direction); + if (!isSolidOrSelf(level, ringPos)) { + return false; + } + } + } + + return true; + } + + private static boolean isSolidOrSelf(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.blocksMotion() + || state.is(AntarchyObjects.NYXITE.get()) + || state.is(AntarchyObjects.PALE_NYXITE.get()) + || state.is(AntarchyObjects.POTENT_NYXITE.get()); + } + + private static void placeSpikeColumn(WorldGenLevel level, BlockPos startPos, int height) { + for (int i = 0; i < height; i++) { + BlockPos spikePos = startPos.above(i); + if (!isOpen(level, spikePos)) { + return; + } + } + + for (int i = 0; i < height; i++) { + BlockPos spikePos = startPos.above(i); + DripstoneThickness thickness; + if (height == 1) { + thickness = DripstoneThickness.TIP; + } else if (i == 0) { + thickness = DripstoneThickness.BASE; + } else if (i == height - 1) { + thickness = DripstoneThickness.TIP; + } else { + thickness = DripstoneThickness.MIDDLE; + } + + BlockState spikeState = AntarchyObjects.NYXITE_SPIKE.get() + .defaultBlockState() + .setValue(NyxiteSpikeBlock.TIP_DIRECTION, Direction.UP) + .setValue(NyxiteSpikeBlock.THICKNESS, thickness) + .setValue(NyxiteSpikeBlock.WATERLOGGED, false); + level.setBlock(spikePos, spikeState, 2); + } + } + + private static boolean isOpen(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + FluidState fluidState = state.getFluidState(); + return state.isAir() || (state.getCollisionShape(level, pos).isEmpty() && fluidState.isEmpty()); + } + + private static boolean isReplaceable(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + FluidState fluidState = state.getFluidState(); + return !state.is(Blocks.BEDROCK) && (state.isAir() || state.getCollisionShape(level, pos).isEmpty() || !fluidState.isEmpty()); + } + + 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 randomBetween(RandomSource random, int min, int max) { + return min >= max ? min : random.nextInt(max - min + 1) + min; + } + + private static boolean isDreamDunes(WorldGenLevel level, BlockPos pos) { + return level.getBiome(pos) + .unwrapKey() + .map(key -> key.location().equals(DREAM_DUNES_BIOME_ID)) + .orElse(false); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/BedBugNestFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/BedBugNestFeature.java new file mode 100644 index 00000000..da91eceb --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/BedBugNestFeature.java @@ -0,0 +1,210 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.BedBugEggBlock; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.Block; +import net.minecraft.world.level.block.Blocks; +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 BedBugNestFeature extends Feature { + public BedBugNestFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos center = findNestCenter(level, context.origin(), random); + if (center == null) { + return false; + } + + Direction wallDirection = findWallDirection(level, center); + if (wallDirection == null) { + return false; + } + + boolean carved = carvePocket(level, center, wallDirection); + if (!carved) { + return false; + } + + List eggSpots = placeEggClusters(level, center, wallDirection, random); + if (eggSpots.isEmpty()) { + return false; + } + + spawnBedBugs(level, center, eggSpots, random); + return true; + } + + private static BlockPos findNestCenter(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < 20; attempt++) { + int x = origin.getX() + random.nextInt(15) - 7; + int y = origin.getY() + random.nextInt(13) - 6; + int z = origin.getZ() + random.nextInt(15) - 7; + mutable.set(x, y, z); + + BlockState state = level.getBlockState(mutable); + BlockState belowState = level.getBlockState(mutable.below()); + if (!isOpen(state) || !isNestFloor(belowState)) { + continue; + } + + if (findWallDirection(level, mutable) != null) { + return mutable.immutable(); + } + } + + return null; + } + + private static Direction findWallDirection(WorldGenLevel level, BlockPos center) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos wallPos = center.relative(direction); + BlockPos pocketPos = center.relative(direction, 2); + if (isCarvable(level.getBlockState(wallPos)) && isCarvable(level.getBlockState(pocketPos))) { + return direction; + } + } + return null; + } + + private static boolean carvePocket(WorldGenLevel level, BlockPos center, Direction direction) { + boolean carved = false; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + + for (int depth = 1; depth <= 2; depth++) { + for (int side = -1; side <= 1; side++) { + for (int height = 0; height <= 1; height++) { + BlockPos target = center.relative(direction, depth) + .relative(direction.getClockWise(), side) + .above(height); + mutable.set(target); + BlockState state = level.getBlockState(mutable); + if (!isCarvable(state)) { + continue; + } + + level.setBlock(mutable, Blocks.AIR.defaultBlockState(), Block.UPDATE_ALL); + carved = true; + } + } + } + + return carved; + } + + private static List placeEggClusters(WorldGenLevel level, BlockPos center, Direction direction, RandomSource random) { + List eggSpots = new ArrayList<>(3); + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + + for (int attempt = 0; attempt < 3; attempt++) { + int depth = 1 + random.nextInt(2); + int side = random.nextInt(3) - 1; + mutable.set(center.relative(direction, depth).relative(direction.getClockWise(), side)); + if (!level.getBlockState(mutable).isAir()) { + continue; + } + if (!level.getBlockState(mutable.below()).isFaceSturdy(level, mutable.below(), Direction.UP)) { + continue; + } + + int eggs = 1 + random.nextInt(4); + level.setBlock(mutable, AntarchyObjects.BED_BUG_EGG.get().defaultBlockState().setValue(BedBugEggBlock.EGGS, eggs), Block.UPDATE_ALL); + eggSpots.add(mutable.immutable()); + } + + if (eggSpots.isEmpty()) { + BlockPos fallback = center.relative(direction, 2); + if (level.getBlockState(fallback).isAir() && level.getBlockState(fallback.below()).isFaceSturdy(level, fallback.below(), Direction.UP)) { + int eggs = 1 + random.nextInt(4); + level.setBlock(fallback, AntarchyObjects.BED_BUG_EGG.get().defaultBlockState().setValue(BedBugEggBlock.EGGS, eggs), Block.UPDATE_ALL); + eggSpots.add(fallback.immutable()); + } + } + + return eggSpots; + } + + private static void spawnBedBugs(WorldGenLevel level, BlockPos center, List eggSpots, RandomSource random) { + ServerLevelAccessor serverLevel = level; + + DifficultyInstance difficulty = serverLevel.getCurrentDifficultyAt(center); + int count = 1 + random.nextInt(4); + for (int i = 0; i < count; i++) { + BlockPos eggAnchor = eggSpots.get(random.nextInt(eggSpots.size())); + BlockPos spawnPos = findOpenSpawnPos(level, eggAnchor, center, random); + if (spawnPos == null) { + continue; + } + + BedBugEntity bedBug = AntarchyObjects.BED_BUG.get().create(serverLevel.getLevel()); + if (bedBug == null) { + continue; + } + + double spawnX = spawnPos.getX() + 0.5D + (random.nextDouble() - 0.5D) * 0.35D; + double spawnY = spawnPos.getY() + 0.02D; + double spawnZ = spawnPos.getZ() + 0.5D + (random.nextDouble() - 0.5D) * 0.35D; + bedBug.moveTo(spawnX, spawnY, spawnZ, random.nextFloat() * 360.0F, 0.0F); + bedBug.setHomeEggPos(eggAnchor); + bedBug.finalizeSpawn(serverLevel, difficulty, MobSpawnType.CHUNK_GENERATION, null, null); + serverLevel.addFreshEntity(bedBug); + } + } + + private static BlockPos findOpenSpawnPos(WorldGenLevel level, BlockPos eggAnchor, BlockPos center, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < 16; attempt++) { + BlockPos base = attempt < 10 ? eggAnchor : center; + int x = base.getX() + random.nextInt(5) - 2; + int y = base.getY() + random.nextInt(3) - 1; + int z = base.getZ() + random.nextInt(5) - 2; + mutable.set(x, y, z); + + BlockState feetState = level.getBlockState(mutable); + BlockState headState = level.getBlockState(mutable.above()); + BlockState floorState = level.getBlockState(mutable.below()); + if (feetState.canBeReplaced() + && feetState.getFluidState().isEmpty() + && headState.canBeReplaced() + && headState.getFluidState().isEmpty() + && floorState.blocksMotion() + && floorState.isFaceSturdy(level, mutable.below(), Direction.UP) + && floorState.getFluidState().isEmpty()) { + return mutable.immutable(); + } + } + + return null; + } + + private static boolean isNestFloor(BlockState state) { + return !state.isAir() && state.blocksMotion() && state.getFluidState().isEmpty(); + } + + private static boolean isCarvable(BlockState state) { + return !state.isAir() && state.blocksMotion() && state.getFluidState().isEmpty() && !state.is(Blocks.BEDROCK); + } + + private static boolean isOpen(BlockState state) { + return state.getFluidState().isEmpty() && (state.isAir() || state.canBeReplaced() || !state.blocksMotion()); + } +} 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 new file mode 100644 index 00000000..dac5ce32 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/BedBugSurfaceClusterFeature.java @@ -0,0 +1,193 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.BedBugEggBlock; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.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 BedBugSurfaceClusterFeature extends Feature { + private static final int SURFACE_SAMPLE_RADIUS = 8; + private static final int SURFACE_SAMPLE_ATTEMPTS = 24; + private static final int FLOOR_SCAN_RANGE = 12; + private static final int MIN_BUGS_PER_FEATURE = 1; + private static final int MAX_BUGS_PER_FEATURE = 4; + + public BedBugSurfaceClusterFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + boolean placedAny = false; + + BlockPos surfacePos = findSurfacePos(level, origin, random); + if (surfacePos == null) { + return false; + } + + List eggSpots = placeEggPatch(level, surfacePos, random); + if (eggSpots.isEmpty()) { + return false; + } + + placedAny = true; + if (spawnBedBugsAroundEggs(level, surfacePos, eggSpots, random)) { + placedAny = true; + } + + return placedAny; + } + + private static BlockPos findSurfacePos(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SURFACE_SAMPLE_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SURFACE_SAMPLE_RADIUS * 2 + 1) - SURFACE_SAMPLE_RADIUS; + int z = origin.getZ() + random.nextInt(SURFACE_SAMPLE_RADIUS * 2 + 1) - SURFACE_SAMPLE_RADIUS; + int startY = origin.getY() + random.nextInt(FLOOR_SCAN_RANGE * 2 + 1) - FLOOR_SCAN_RANGE; + startY = Math.max(level.getMinBuildHeight() + 2, Math.min(level.getMaxBuildHeight() - 3, startY)); + + for (int y = startY; y >= Math.max(level.getMinBuildHeight() + 1, startY - FLOOR_SCAN_RANGE); y--) { + mutable.set(x, y, z); + BlockState floorState = level.getBlockState(mutable); + BlockState airState = level.getBlockState(mutable.above()); + BlockState aboveAirState = level.getBlockState(mutable.above(2)); + if (floorState.getFluidState().isEmpty() + && floorState.blocksMotion() + && floorState.isFaceSturdy(level, mutable, Direction.UP) + && airState.canBeReplaced() + && airState.getFluidState().isEmpty() + && aboveAirState.canBeReplaced() + && aboveAirState.getFluidState().isEmpty()) { + return mutable.immutable(); + } + } + } + + return null; + } + + private static List placeEggPatch(WorldGenLevel level, BlockPos originEggPos, RandomSource random) { + List eggSpots = new ArrayList<>(3); + int spotCount = 2 + random.nextInt(2); + + for (int i = 0; i < spotCount; i++) { + BlockPos eggPos = originEggPos.offset(random.nextInt(3) - 1, 0, random.nextInt(3) - 1); + BlockState eggPosState = level.getBlockState(eggPos); + if (!eggPosState.canBeReplaced() || !eggPosState.getFluidState().isEmpty()) { + continue; + } + + BlockPos supportPos = eggPos.below(); + BlockState supportState = level.getBlockState(supportPos); + if (!supportState.isFaceSturdy(level, supportPos, Direction.UP) || !supportState.getFluidState().isEmpty()) { + continue; + } + + int eggs = 1 + random.nextInt(4); + level.setBlock( + eggPos, + AntarchyObjects.BED_BUG_EGG.get().defaultBlockState().setValue(BedBugEggBlock.EGGS, eggs), + Block.UPDATE_ALL + ); + eggSpots.add(eggPos.immutable()); + } + + return eggSpots; + } + + private static boolean spawnBedBugsAroundEggs(WorldGenLevel level, BlockPos surfacePos, List eggSpots, RandomSource random) { + ServerLevelAccessor serverLevel = level; + + DifficultyInstance difficulty = serverLevel.getCurrentDifficultyAt(surfacePos); + int count = MIN_BUGS_PER_FEATURE + random.nextInt(MAX_BUGS_PER_FEATURE - MIN_BUGS_PER_FEATURE + 1); + boolean spawnedAny = false; + + for (int i = 0; i < count; i++) { + BlockPos eggAnchor = eggSpots.get(random.nextInt(eggSpots.size())); + BlockPos spawnPos = findOpenSpawnPos(level, eggAnchor, random); + if (spawnPos == null) { + spawnPos = findOpenSpawnPos(level, surfacePos.above(), random); + } + if (spawnPos == null) { + continue; + } + + BedBugEntity bedBug = AntarchyObjects.BED_BUG.get().create(serverLevel.getLevel()); + if (bedBug == null) { + continue; + } + + bedBug.moveTo( + spawnPos.getX() + 1.0D + (random.nextDouble() - 0.5D) * 0.25D, + spawnPos.getY() + 0.02D, + spawnPos.getZ() + 1.0D + (random.nextDouble() - 0.5D) * 0.25D, + random.nextFloat() * 360.0F, + 0.0F + ); + bedBug.setHomeEggPos(eggAnchor); + bedBug.finalizeSpawn(serverLevel, difficulty, MobSpawnType.CHUNK_GENERATION, null, null); + serverLevel.addFreshEntity(bedBug); + spawnedAny = true; + } + + return spawnedAny; + } + + private static BlockPos findOpenSpawnPos(WorldGenLevel level, BlockPos center, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < 12; attempt++) { + int x = center.getX() + random.nextInt(5) - 2; + int y = center.getY() + random.nextInt(3) - 1; + int z = center.getZ() + random.nextInt(5) - 2; + mutable.set(x, y, z); + + if (canFitBedBugIn2x2(level, mutable)) { + return mutable.immutable(); + } + } + + return null; + } + + private static boolean canFitBedBugIn2x2(WorldGenLevel level, BlockPos basePos) { + for (int dx = 0; dx <= 1; dx++) { + for (int dz = 0; dz <= 1; dz++) { + BlockPos feetPos = basePos.offset(dx, 0, dz); + BlockPos headPos = feetPos.above(); + BlockPos floorPos = feetPos.below(); + + BlockState feetState = level.getBlockState(feetPos); + BlockState headState = level.getBlockState(headPos); + BlockState floorState = level.getBlockState(floorPos); + if (!feetState.canBeReplaced() + || !feetState.getFluidState().isEmpty() + || !headState.canBeReplaced() + || !headState.getFluidState().isEmpty() + || !floorState.blocksMotion() + || !floorState.isFaceSturdy(level, floorPos, Direction.UP) + || !floorState.getFluidState().isEmpty()) { + return false; + } + } + } + + return true; + } +} 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 new file mode 100644 index 00000000..2b2b86f8 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/DimensionalTearFeature.java @@ -0,0 +1,110 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +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; +import net.minecraft.world.level.ServerLevelAccessor; +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); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + ServerLevelAccessor serverLevelAccessor = level; + + RandomSource random = context.random(); + BlockPos first = findOpenPocket(level, context.origin(), random, LOCAL_SEARCH_ATTEMPTS); + if (first == null) { + 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); + 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; + int maxY = level.getMaxBuildHeight() - 8; + for (int i = 0; i < attempts; i++) { + BlockPos candidate = origin.offset( + Mth.nextInt(random, -16, 16), + Mth.nextInt(random, -24, 24), + Mth.nextInt(random, -16, 16) + ); + candidate = new BlockPos(candidate.getX(), Mth.clamp(candidate.getY(), minY, maxY), candidate.getZ()); + if (isUsablePocket(level, candidate)) { + return candidate; + } + } + return null; + } + + private static boolean isUsablePocket(WorldGenLevel level, BlockPos pos) { + 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 (!canAccess(level, checkPos) || !level.getBlockState(checkPos).getCollisionShape(level, checkPos).isEmpty()) { + return false; + } + } + } + } + return true; + } + + private static boolean canAccess(WorldGenLevel level, BlockPos pos) { + return !(level instanceof WorldGenRegion region) || region.ensureCanWrite(pos); + } + + private static Vec3 center(BlockPos pos) { + return new Vec3(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/LucidAntiwaterPoolFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/LucidAntiwaterPoolFeature.java new file mode 100644 index 00000000..3e14ca50 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/LucidAntiwaterPoolFeature.java @@ -0,0 +1,380 @@ +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.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public final class LucidAntiwaterPoolFeature extends Feature { + private static final int MIN_CAVITY_HEIGHT = 10; + private static final int MAX_CAVITY_HEIGHT = 44; + private static final int MAX_LOBES = 2; + private static final int[] BOTTOM_VARIATION = {0, 1, 1}; + + public LucidAntiwaterPoolFeature(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, Math.max(4, config.minRadius() / 2), Math.max(6, config.maxRadius() / 2)); + int depth = randomBetween(random, config.minDepth(), config.maxDepth()); + int sourceCount = Math.max(2, randomBetween(random, 2, 4)); + BlockState antiwaterSourceState = config.state().getState(random, origin); + BlockState basaltState = AntarchyObjects.ANTIMETAL.get().defaultBlockState(); + + int floorY = findFloorY(level, origin.getX(), origin.getZ()); + if (floorY <= level.getMinBuildHeight()) { + return false; + } + + int ceilingY = findCeilingY(level, origin.getX(), origin.getZ(), floorY); + if (ceilingY <= floorY + MIN_CAVITY_HEIGHT || ceilingY - floorY > MAX_CAVITY_HEIGHT) { + return false; + } + + boolean placedAny = false; + int lobeCount = randomBetween(random, 1, Math.min(MAX_LOBES, 1 + radius / 6)); + + for (int lobe = 0; lobe < lobeCount; lobe++) { + int lobeRadius = Math.max(3, radius - random.nextInt(Math.max(1, radius / 3 + 1))); + int offsetX = origin.getX() + random.nextInt(Math.max(2, radius)) - Math.max(1, radius / 2); + int offsetZ = origin.getZ() + random.nextInt(Math.max(2, radius)) - Math.max(1, radius / 2); + int ventBudget = sourceCount + random.nextInt(2); + BasinProfile profile = BasinProfile.create(random); + + placedAny |= placeCeilingBasin(level, random, offsetX, floorY, offsetZ, lobeRadius, ceilingY, profile, basaltState, antiwaterSourceState); + placedAny |= placeAntiwaterSources(level, random, offsetX, floorY, offsetZ, Math.max(2, lobeRadius - 1), ventBudget, antiwaterSourceState); + } + + return placedAny; + } + + private static boolean placeCeilingBasin( + WorldGenLevel level, + RandomSource random, + int centerX, + int floorY, + int centerZ, + int radius, + int maxCeilingY, + BasinProfile profile, + BlockState basaltState, + BlockState antiwaterSourceState + ) { + boolean placedAny = false; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + BlockState filledAntiwater = flowingAntiwaterState(antiwaterSourceState, 7); + + for (int dx = -radius - 2; dx <= radius + 2; dx++) { + for (int dz = -radius - 2; dz <= radius + 2; dz++) { + double shapeDistance = profile.distance(dx, dz); + if (shapeDistance > radius + 1.35D) { + continue; + } + + int worldX = centerX + dx; + int worldZ = centerZ + dz; + int localCeilingY = findCeilingY(level, worldX, worldZ, floorY); + if (localCeilingY <= floorY + MIN_CAVITY_HEIGHT || localCeilingY > maxCeilingY + 3) { + continue; + } + + int basinTopY = localCeilingY - 1; + int baseBottomY = Math.max(floorY + 6, basinTopY - 2); + int variation = BOTTOM_VARIATION[Math.floorMod((dx * 31) + (dz * 17) + profile.seed(), BOTTOM_VARIATION.length)]; + int interiorBottomY = Math.max(floorY + 5, baseBottomY - variation); + int edgeBottomY = Math.max(interiorBottomY, basinTopY - 3); + + boolean edge = shapeDistance >= radius - (1.3D + profile.edgeWidth()); + boolean shoulder = !edge && shapeDistance >= radius - (2.2D + profile.shoulderWidth()) && random.nextFloat() < 0.55F; + int columnBottomY = edge ? edgeBottomY : interiorBottomY; + + if (edge || shoulder) { + for (int y = columnBottomY; y <= basinTopY; y++) { + mutable.set(worldX, y, worldZ); + if (!isReplaceable(level.getBlockState(mutable))) { + continue; + } + + level.setBlock(mutable, basaltState, 2); + placedAny = true; + } + + placedAny |= placeOuterLip(level, random, worldX, worldZ, floorY, basinTopY, profile, dx, dz, radius, basaltState); + continue; + } + + for (int y = columnBottomY; y <= basinTopY; y++) { + mutable.set(worldX, y, worldZ); + if (!isReplaceable(level.getBlockState(mutable))) { + continue; + } + + BlockState antiwaterState = y == basinTopY ? antiwaterSourceState : filledAntiwater; + level.setBlock(mutable, antiwaterState, 2); + scheduleFluidTick(level, mutable, antiwaterState); + placedAny = true; + } + } + } + + return placedAny; + } + + private static boolean placeOuterLip( + WorldGenLevel level, + RandomSource random, + int centerX, + int centerZ, + int floorY, + int basinTopY, + BasinProfile profile, + int dx, + int dz, + int radius, + BlockState basaltState + ) { + boolean placedAny = false; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + + for (int stepX = -1; stepX <= 1; stepX++) { + for (int stepZ = -1; stepZ <= 1; stepZ++) { + if (stepX == 0 && stepZ == 0) { + continue; + } + + double outerDistance = profile.distance(dx + stepX, dz + stepZ); + if (outerDistance <= radius || outerDistance > radius + 1.2D) { + continue; + } + if (random.nextFloat() > 0.72F) { + continue; + } + + int x = centerX + stepX; + int z = centerZ + stepZ; + int localCeilingY = findCeilingY(level, x, z, floorY); + if (localCeilingY <= floorY + MIN_CAVITY_HEIGHT) { + continue; + } + + int topY = localCeilingY - 1; + int lipDepth = 2 + random.nextInt(2); + for (int y = Math.max(topY - lipDepth, basinTopY - 3); y <= topY; y++) { + mutable.set(x, y, z); + if (!isReplaceable(level.getBlockState(mutable))) { + continue; + } + + level.setBlock(mutable, basaltState, 2); + placedAny = true; + } + } + } + + return placedAny; + } + + private static boolean placeAntiwaterSources( + WorldGenLevel level, + RandomSource random, + int centerX, + int floorY, + int centerZ, + int radius, + int sourceCount, + BlockState antiwaterSourceState + ) { + boolean placedAny = false; + int attempts = 0; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + + while (sourceCount > 0 && attempts++ < sourceCount * 6) { + int dx = random.nextInt(radius * 2 + 1) - radius; + int dz = random.nextInt(radius * 2 + 1) - radius; + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance > radius * 0.45D + random.nextDouble() * 0.35D) { + continue; + } + + BlockPos sourcePos = findSupportedSourcePos(level, centerX + dx, floorY, centerZ + dz); + if (sourcePos == null) { + continue; + } + + mutable.set(sourcePos); + level.setBlock(mutable, antiwaterSourceState, 2); + scheduleFluidTick(level, mutable, antiwaterSourceState); + placedAny = true; + sourceCount--; + } + + return placedAny; + } + + private static BlockPos findSupportedSourcePos(WorldGenLevel level, int x, int floorY, int z) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int y = floorY + 2; y >= floorY - 3; y--) { + mutable.set(x, y, z); + BlockState state = level.getBlockState(mutable); + if (!isOpenBlock(state)) { + continue; + } + + BlockPos belowPos = mutable.below(); + BlockState belowState = level.getBlockState(belowPos); + if (!isSolidSurface(belowState)) { + continue; + } + + return belowPos.immutable(); + } + + return null; + } + + 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() || state.canBeReplaced() || !state.blocksMotion(); + } + + private static boolean isReplaceable(BlockState state) { + return state.isAir() || state.canBeReplaced() || !state.blocksMotion(); + } + + 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); + } + + private record BasinProfile( + int seed, + double scaleX, + double scaleZ, + double waveX, + double waveZ, + double phaseX, + double phaseZ, + double edgeWidth, + double shoulderWidth + ) { + private static BasinProfile create(RandomSource random) { + int seed = random.nextInt(); + int variant = random.nextInt(3); + return switch (variant) { + case 0 -> new BasinProfile( + seed, + 1.0D + random.nextDouble() * 0.12D, + 1.0D + random.nextDouble() * 0.12D, + 0.18D, + 0.15D, + random.nextDouble() * Math.PI * 2.0D, + random.nextDouble() * Math.PI * 2.0D, + 0.18D, + 0.12D + ); + case 1 -> new BasinProfile( + seed, + 1.2D + random.nextDouble() * 0.2D, + 0.82D + random.nextDouble() * 0.12D, + 0.22D, + 0.18D, + random.nextDouble() * Math.PI * 2.0D, + random.nextDouble() * Math.PI * 2.0D, + 0.26D, + 0.16D + ); + default -> new BasinProfile( + seed, + 1.05D + random.nextDouble() * 0.18D, + 0.95D + random.nextDouble() * 0.18D, + 0.3D, + 0.28D, + random.nextDouble() * Math.PI * 2.0D, + random.nextDouble() * Math.PI * 2.0D, + 0.34D, + 0.24D + ); + }; + } + + private double distance(int dx, int dz) { + double warpedX = (dx / scaleX) + Math.sin((dz * 0.55D) + phaseX) * waveX; + double warpedZ = (dz / scaleZ) + Math.cos((dx * 0.65D) + phaseZ) * waveZ; + double ellipse = Math.sqrt((warpedX * warpedX) + (warpedZ * warpedZ)); + double jag = (Math.sin((dx * 0.8D) + phaseX) + Math.cos((dz * 0.9D) + phaseZ)) * 0.22D; + return ellipse + jag; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/NyxiteSpikeConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/NyxiteSpikeConfiguration.java new file mode 100644 index 00000000..0ccc5832 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/NyxiteSpikeConfiguration.java @@ -0,0 +1,27 @@ +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 NyxiteSpikeConfiguration( + int floorToCeilingSearchRange, + int radius, + int maxColumnHeight, + int heightDeviation, + float chanceOfColumnAtMaxDistanceFromCenter, + int maxDistanceFromCenterAffectingChanceOfColumn, + int maxDistanceFromCenterAffectingHeightBias, + int maxHeightDifference +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.intRange(1, 128).fieldOf("floor_to_ceiling_search_range").forGetter(NyxiteSpikeConfiguration::floorToCeilingSearchRange), + Codec.intRange(1, 32).fieldOf("radius").forGetter(NyxiteSpikeConfiguration::radius), + Codec.intRange(1, 32).fieldOf("max_column_height").forGetter(NyxiteSpikeConfiguration::maxColumnHeight), + Codec.intRange(1, 16).fieldOf("height_deviation").forGetter(NyxiteSpikeConfiguration::heightDeviation), + Codec.floatRange(0.0F, 1.0F).fieldOf("chance_of_column_at_max_distance_from_center").forGetter(NyxiteSpikeConfiguration::chanceOfColumnAtMaxDistanceFromCenter), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_chance_of_column").forGetter(NyxiteSpikeConfiguration::maxDistanceFromCenterAffectingChanceOfColumn), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_height_bias").forGetter(NyxiteSpikeConfiguration::maxDistanceFromCenterAffectingHeightBias), + Codec.intRange(0, 32).fieldOf("max_height_difference").forGetter(NyxiteSpikeConfiguration::maxHeightDifference) + ).apply(instance, NyxiteSpikeConfiguration::new)); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/NyxiteSpikeFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/NyxiteSpikeFeature.java new file mode 100644 index 00000000..76261e3c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/NyxiteSpikeFeature.java @@ -0,0 +1,192 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import java.util.Optional; +import java.util.OptionalInt; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.PointedDripstoneBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DripstoneThickness; +import net.minecraft.world.level.levelgen.Column; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public class NyxiteSpikeFeature extends Feature { + public NyxiteSpikeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + NyxiteSpikeConfiguration config = context.config(); + RandomSource random = context.random(); + if (!level.getBlockState(origin).isAir()) { + return false; + } + + boolean placedAny = false; + int radius = config.radius(); + for (int dx = -radius; dx <= radius; dx++) { + for (int dz = -radius; dz <= radius; dz++) { + double chance = this.getChanceOfColumn(radius, dx, dz, config); + if (chance <= 0.0D) { + continue; + } + + if (this.placeColumn(level, random, origin.offset(dx, 0, dz), dx, dz, chance, config)) { + placedAny = true; + } + } + } + + return placedAny; + } + + private boolean placeColumn( + WorldGenLevel level, + RandomSource random, + BlockPos pos, + int dx, + int dz, + double chance, + NyxiteSpikeConfiguration config + ) { + Optional optional = Column.scan(level, pos, config.floorToCeilingSearchRange(), state -> state.isAir(), state -> !state.isAir()); + if (optional.isEmpty()) { + return false; + } + + Column column = optional.get(); + OptionalInt ceiling = column.getCeiling(); + OptionalInt floor = column.getFloor(); + boolean canGrowDown = ceiling.isPresent() && level.getBlockState(pos.atY(ceiling.getAsInt())).is(AntarchyObjects.NYXITE.get()); + boolean canGrowUp = floor.isPresent() && level.getBlockState(pos.atY(floor.getAsInt())).is(AntarchyObjects.NYXITE.get()); + if (!canGrowDown && !canGrowUp) { + return false; + } + + int downLength = 0; + int upLength = 0; + if (canGrowDown) { + int maxLength = this.getMaxLength(config, ceiling, floor); + downLength = this.getSpikeHeight(random, dx, dz, chance, maxLength, config); + } + if (canGrowUp) { + int maxLength = this.getMaxLength(config, ceiling, floor); + if (downLength > 0) { + upLength = Mth.clamp( + downLength + Mth.randomBetweenInclusive(random, -config.maxHeightDifference(), config.maxHeightDifference()), + 0, + maxLength + ); + } else { + upLength = this.getSpikeHeight(random, dx, dz, chance, maxLength, config); + } + } + + if (ceiling.isPresent() && floor.isPresent() && downLength > 0 && upLength > 0 && ceiling.getAsInt() - downLength <= floor.getAsInt() + upLength) { + int floorY = floor.getAsInt(); + int ceilingY = ceiling.getAsInt(); + int minSplit = Math.max(ceilingY - downLength, floorY + 1); + int maxSplit = Math.min(floorY + upLength, ceilingY - 1); + int split = Mth.randomBetweenInclusive(random, minSplit, maxSplit + 1); + int tipBelowCeiling = split - 1; + downLength = ceilingY - split; + upLength = tipBelowCeiling - floorY; + } + + boolean placedAny = false; + if (downLength > 0 && ceiling.isPresent()) { + placedAny |= this.growPointedNyxite(level, pos.atY(ceiling.getAsInt() - 1), Direction.DOWN, downLength); + } + if (upLength > 0 && floor.isPresent()) { + placedAny |= this.growPointedNyxite(level, pos.atY(floor.getAsInt() + 1), Direction.UP, upLength); + } + return placedAny; + } + + private int getMaxLength(NyxiteSpikeConfiguration config, OptionalInt ceiling, OptionalInt floor) { + if (ceiling.isPresent() && floor.isPresent()) { + return Math.min(config.maxColumnHeight(), ceiling.getAsInt() - floor.getAsInt() - 1); + } + return config.maxColumnHeight(); + } + + private boolean growPointedNyxite(WorldGenLevel level, BlockPos rootStart, Direction direction, int length) { + boolean placedAny = false; + for (int offset = 0; offset < length; offset++) { + BlockPos spikePos = rootStart.relative(direction, offset); + if (spikePos.getY() < level.getMinBuildHeight() || spikePos.getY() >= level.getMaxBuildHeight()) { + break; + } + if (!level.getBlockState(spikePos).isAir()) { + break; + } + + BlockState spikeState = AntarchyObjects.NYXITE_SPIKE.get().defaultBlockState() + .setValue(PointedDripstoneBlock.TIP_DIRECTION, direction) + .setValue(PointedDripstoneBlock.THICKNESS, getThicknessForRootOffset(offset, length)) + .setValue(PointedDripstoneBlock.WATERLOGGED, false); + if (!spikeState.canSurvive(level, spikePos)) { + break; + } + + level.setBlock(spikePos, spikeState, 3); + placedAny = true; + } + return placedAny; + } + + private static DripstoneThickness getThicknessForRootOffset(int offsetFromRoot, int length) { + if (length <= 1) { + return DripstoneThickness.TIP; + } + if (offsetFromRoot == length - 1) { + return DripstoneThickness.TIP; + } + if (offsetFromRoot == length - 2) { + return DripstoneThickness.FRUSTUM; + } + if (offsetFromRoot == 0) { + return DripstoneThickness.BASE; + } + return DripstoneThickness.MIDDLE; + } + + private int getSpikeHeight(RandomSource random, int dx, int dz, double chance, int maxHeight, NyxiteSpikeConfiguration config) { + if (maxHeight <= 0 || random.nextDouble() > chance) { + return 0; + } + + int distance = Math.abs(dx) + Math.abs(dz); + float mean = (float) Mth.clampedMap( + (double) distance, + 0.0D, + (double) config.maxDistanceFromCenterAffectingHeightBias(), + (double) maxHeight, + 1.0D + ); + int sampled = Math.round((float) (mean + random.nextGaussian() * config.heightDeviation())); + return Mth.clamp(sampled, 1, maxHeight); + } + + private double getChanceOfColumn(int radius, int dx, int dz, NyxiteSpikeConfiguration config) { + int remainingX = radius - Math.abs(dx); + int remainingZ = radius - Math.abs(dz); + int edgeDistance = Math.min(remainingX, remainingZ); + return Mth.clampedMap( + (double) edgeDistance, + 0.0D, + (double) config.maxDistanceFromCenterAffectingChanceOfColumn(), + (double) config.chanceOfColumnAtMaxDistanceFromCenter(), + 1.0D + ); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/PotentNyxiteFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/PotentNyxiteFeature.java new file mode 100644 index 00000000..685fda4f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/PotentNyxiteFeature.java @@ -0,0 +1,56 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.PotentNyxiteBlock; +import com.craisinlord.antarchy.content.block.state.PotentNyxiteState; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.WorldGenLevel; +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 class PotentNyxiteFeature extends Feature { + public PotentNyxiteFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + var random = context.random(); + boolean placedAny = false; + + for (int dx = -7; dx <= 7; dx++) { + for (int dz = -7; dz <= 7; dz++) { + for (int dy = -5; dy <= 5; dy++) { + BlockPos candidatePos = origin.offset(dx, dy, dz); + if (!level.getBlockState(candidatePos).is(AntarchyObjects.NYXITE.get())) { + continue; + } + + if (random.nextFloat() >= 0.12F) { + continue; + } + + BlockState potentNyxite = AntarchyObjects.POTENT_NYXITE.get() + .defaultBlockState() + .setValue(PotentNyxiteBlock.STATE, PotentNyxiteState.DRY); + + level.setBlock(candidatePos, potentNyxite, 2); + BlockPos abovePos = candidatePos.above(); + if (level.getBlockState(abovePos).isAir()) { + level.setBlock(abovePos, Blocks.MAGMA_BLOCK.defaultBlockState(), 2); + } + placedAny = true; + } + } + } + + return placedAny; + } + +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisAntiwaterPoolConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisAntiwaterPoolConfiguration.java new file mode 100644 index 00000000..d1802146 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisAntiwaterPoolConfiguration.java @@ -0,0 +1,24 @@ +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; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; + +public record ThoraxisAntiwaterPoolConfiguration( + BlockStateProvider state, + int minRadius, + int maxRadius, + int minDepth, + int maxDepth, + float irregularity +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + BlockStateProvider.CODEC.fieldOf("state").forGetter(ThoraxisAntiwaterPoolConfiguration::state), + Codec.intRange(1, 64).fieldOf("min_radius").forGetter(ThoraxisAntiwaterPoolConfiguration::minRadius), + Codec.intRange(1, 64).fieldOf("max_radius").forGetter(ThoraxisAntiwaterPoolConfiguration::maxRadius), + Codec.intRange(1, 32).fieldOf("min_depth").forGetter(ThoraxisAntiwaterPoolConfiguration::minDepth), + Codec.intRange(1, 32).fieldOf("max_depth").forGetter(ThoraxisAntiwaterPoolConfiguration::maxDepth), + Codec.floatRange(0.0F, 1.0F).fieldOf("irregularity").forGetter(ThoraxisAntiwaterPoolConfiguration::irregularity) + ).apply(instance, ThoraxisAntiwaterPoolConfiguration::new)); +} 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 new file mode 100644 index 00000000..84d06dda --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisAntiwaterPoolFeature.java @@ -0,0 +1,268 @@ +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 new file mode 100644 index 00000000..bf2e7933 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java @@ -0,0 +1,234 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; +import java.util.stream.Stream; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.QuartPos; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.biome.Climate; +import net.minecraft.world.level.biome.MultiNoiseBiomeSource; + +public final class ThoraxisBiomeSource extends BiomeSource { + 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 ResourceKey NIGHTMARE_WASTES = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "nightmare_wastes") + ); + private static final ResourceKey DREAM_DUNES = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "dream_dunes") + ); + private static final ResourceKey UMBRAL_HILLS = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "umbral_hills") + ); + private static final ResourceKey LUCID_POOLS = ResourceKey.create( + Registries.BIOME, + new ResourceLocation(Antarchy.MODID, "lucid_pools") + ); + + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + MultiNoiseBiomeSource.DIRECT_CODEC.forGetter(ThoraxisBiomeSource::parameters), + Codec.INT.optionalFieldOf("dream_dunes_max_y", 96).forGetter(ThoraxisBiomeSource::dreamDunesMaxY), + Codec.INT.optionalFieldOf("umbral_hills_max_y", 100).forGetter(ThoraxisBiomeSource::umbralHillsMaxY), + Codec.INT.optionalFieldOf("lucid_pools_min_y", 116).forGetter(ThoraxisBiomeSource::lucidPoolsMinY) + ).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 dreamDunesMaxQuartY; + private final int umbralHillsMaxQuartY; + private final int lucidPoolsMinQuartY; + private volatile boolean biomesResolved; + private Holder nightmareWastesBiome; + private Holder dreamDunesBiome; + private Holder umbralHillsBiome; + private Holder lucidPoolsBiome; + + 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) { + this.parameters = parameters; + this.delegate = MultiNoiseBiomeSource.createFromList(parameters); + this.dreamDunesMaxY = dreamDunesMaxY; + this.umbralHillsMaxY = umbralHillsMaxY; + this.lucidPoolsMinY = lucidPoolsMinY; + this.dreamDunesMaxQuartY = QuartPos.fromBlock(dreamDunesMaxY); + this.umbralHillsMaxQuartY = QuartPos.fromBlock(umbralHillsMaxY); + this.lucidPoolsMinQuartY = QuartPos.fromBlock(lucidPoolsMinY); + } + + private void resolveBiomesIfNeeded() { + if (this.biomesResolved) { + return; + } + synchronized (this) { + if (this.biomesResolved) { + return; + } + this.nightmareWastesBiome = this.findBiome(NIGHTMARE_WASTES); + this.dreamDunesBiome = this.findBiome(DREAM_DUNES); + this.umbralHillsBiome = this.findBiome(UMBRAL_HILLS); + this.lucidPoolsBiome = this.findBiome(LUCID_POOLS); + this.biomesResolved = true; + } + } + + private Climate.ParameterList> parameters() { + return this.parameters; + } + + private int lucidPoolsMinY() { + return this.lucidPoolsMinY; + } + + private int dreamDunesMaxY() { + return this.dreamDunesMaxY; + } + + private int umbralHillsMaxY() { + return this.umbralHillsMaxY; + } + + @Override + protected com.mojang.serialization.Codec codec() { + return CODEC.codec(); + } + + @Override + protected Stream> collectPossibleBiomes() { + return this.delegate.possibleBiomes().stream(); + } + + @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; + } + + 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; + + if (this.dreamDunesBiome != null && y <= this.dreamDunesMaxQuartY && dreamDunesSelector <= DUNES_SELECTOR_CUTOFF) { + return this.dreamDunesBiome; + } + + if (this.umbralHillsBiome != null && y <= this.umbralHillsMaxQuartY && umbralHillsSelector <= HILLS_SELECTOR_CUTOFF) { + return this.umbralHillsBiome; + } + + Holder delegateBiome = this.delegate.getNoiseBiome(x, y, z, sampler); + return this.nightmareWastesBiome != null ? this.nightmareWastesBiome : delegateBiome; + } + + @Override + public void addDebugInfo(java.util.List debug, BlockPos pos, Climate.Sampler sampler) { + this.delegate.addDebugInfo(debug, pos, sampler); + debug.add("Thoraxis selector: mixed vertical/region noise"); + debug.add("Thoraxis Lucid Pools: y>=" + this.lucidPoolsMinY); + } + + private Holder findBiome(ResourceKey key) { + return this.delegate.possibleBiomes().stream() + .filter(holder -> holder.is(key)) + .findFirst() + .orElse(null); + } + + private double cachedRegionNoise(int quartX, int quartZ) { + long key = net.minecraft.world.level.ChunkPos.asLong(quartX, quartZ); + Long2DoubleOpenHashMap cache = REGION_CACHE.get(); + if (cache.containsKey(key)) { + return cache.get(key); + } + double result = sampleRegionNoise(quartX, quartZ); + if (cache.size() >= 512) cache.clear(); + cache.put(key, result); + return result; + } + + private double cachedVerticalNoise(int quartY) { + long key = (long) quartY; + Long2DoubleOpenHashMap cache = VERTICAL_CACHE.get(); + if (cache.containsKey(key)) { + return cache.get(key); + } + double result = sampleVerticalNoise(quartY); + if (cache.size() >= 64) cache.clear(); + cache.put(key, result); + return result; + } + + private static double sampleRegionNoise(int quartX, int quartZ) { + double broad = sampleNoise(quartX, quartZ, REGION_NOISE_SCALE); + double detail = sampleNoise(quartX + 311, quartZ - 197, REGION_DETAIL_SCALE); + return broad * 0.82D + detail * 0.18D; + } + + private double sampleVerticalNoise(int quartY) { + double scaled = positiveMod((double) quartY / (double) VERTICAL_NOISE_SCALE, 1.0D); + double detail = sampleNoise(quartY + 73, quartY - 29, 5); + return scaled * 0.6D + detail * 0.4D; + } + + private static double sampleNoise(int x, int z, int scale) { + int cellX = Math.floorDiv(x, scale); + int cellZ = Math.floorDiv(z, scale); + double fracX = positiveMod((double) x / (double) scale, 1.0D); + double fracZ = positiveMod((double) z / (double) scale, 1.0D); + + double n00 = valueNoise(cellX, cellZ); + double n10 = valueNoise(cellX + 1, cellZ); + double n01 = valueNoise(cellX, cellZ + 1); + double n11 = valueNoise(cellX + 1, cellZ + 1); + + double ix0 = lerp(smoothstep(fracX), n00, n10); + double ix1 = lerp(smoothstep(fracX), n01, n11); + return lerp(smoothstep(fracZ), ix0, ix1); + } + + private static double valueNoise(int x, int z) { + long seed = x * 341873128712L + z * 132897987541L; + seed ^= seed >>> 33; + seed *= 0xff51afd7ed558ccdL; + seed ^= seed >>> 33; + seed *= 0xc4ceb9fe1a85ec53L; + seed ^= seed >>> 33; + return (double) (seed & 0xFFFFFFFFL) / (double) 0xFFFFFFFFL; + } + + private static double smoothstep(double value) { + return value * value * (3.0D - 2.0D * value); + } + + private static double lerp(double delta, double start, double end) { + return start + (end - start) * delta; + } + + private static double positiveMod(double value, double mod) { + double result = value % mod; + return result < 0.0D ? result + mod : result; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBloodCrystalConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBloodCrystalConfiguration.java new file mode 100644 index 00000000..3d568874 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBloodCrystalConfiguration.java @@ -0,0 +1,33 @@ +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; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; + +public record ThoraxisBloodCrystalConfiguration( + BlockStateProvider baseState, + BlockStateProvider crystalState, + int minHeight, + int maxHeight, + int minBaseRadius, + int maxBaseRadius, + int tipRadius, + int sway, + float sideCrystalChance, + float branchChance +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + BlockStateProvider.CODEC.fieldOf("base_state").forGetter(ThoraxisBloodCrystalConfiguration::baseState), + BlockStateProvider.CODEC.fieldOf("crystal_state").forGetter(ThoraxisBloodCrystalConfiguration::crystalState), + Codec.intRange(1, 256).fieldOf("min_height").forGetter(ThoraxisBloodCrystalConfiguration::minHeight), + Codec.intRange(1, 256).fieldOf("max_height").forGetter(ThoraxisBloodCrystalConfiguration::maxHeight), + Codec.intRange(1, 24).fieldOf("min_base_radius").forGetter(ThoraxisBloodCrystalConfiguration::minBaseRadius), + Codec.intRange(1, 24).fieldOf("max_base_radius").forGetter(ThoraxisBloodCrystalConfiguration::maxBaseRadius), + Codec.intRange(1, 24).fieldOf("tip_radius").forGetter(ThoraxisBloodCrystalConfiguration::tipRadius), + Codec.intRange(0, 32).fieldOf("sway").forGetter(ThoraxisBloodCrystalConfiguration::sway), + Codec.floatRange(0.0F, 1.0F).fieldOf("side_crystal_chance").forGetter(ThoraxisBloodCrystalConfiguration::sideCrystalChance), + Codec.floatRange(0.0F, 1.0F).fieldOf("branch_chance").forGetter(ThoraxisBloodCrystalConfiguration::branchChance) + ).apply(instance, ThoraxisBloodCrystalConfiguration::new)); +} + 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 new file mode 100644 index 00000000..c90352b6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBloodCrystalFeature.java @@ -0,0 +1,243 @@ +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.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +import java.util.ArrayList; +import java.util.List; + +public final class ThoraxisBloodCrystalFeature extends Feature { + public ThoraxisBloodCrystalFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + RandomSource random = context.random(); + ThoraxisBloodCrystalConfiguration config = context.config(); + + boolean hanging = random.nextBoolean(); + int anchorY = hanging ? findCeilingY(level, origin) : findFloorY(level, origin); + if (anchorY < level.getMinBuildHeight()) { + hanging = !hanging; + anchorY = hanging ? findCeilingY(level, origin) : findFloorY(level, origin); + } + if (anchorY < level.getMinBuildHeight()) { + return false; + } + + int length = randomBetween(random, config.minHeight(), config.maxHeight()); + int baseRadius = randomBetween(random, config.minBaseRadius(), config.maxBaseRadius()); + int tipRadius = Math.max(1, config.tipRadius()); + int sway = Math.max(0, config.sway()); + BlockState baseState = config.baseState().getState(random, origin); + BlockState buddingState = AntarchyObjects.BUDDING_BLOOD_CRYSTAL.get().defaultBlockState(); + BlockState smallCrystalState = config.crystalState().getState(random, origin); + + boolean placedAny = false; + int startY = hanging ? anchorY - 1 : anchorY + 1; + for (int step = 0; step < length; step++) { + int y = hanging ? startY - step : startY + step; + if (y <= level.getMinBuildHeight() || y >= level.getMaxBuildHeight() - 1) { + break; + } + + double progress = length <= 1 ? 0.0D : step / (double) (length - 1); + int radius = Math.max(tipRadius, (int) Math.round(Mth.lerp(progress, baseRadius, tipRadius))); + int swayX = (int) Math.round(Math.sin(progress * Math.PI * 1.4D) * sway * 0.5D); + int swayZ = (int) Math.round(Math.cos(progress * Math.PI * 1.2D) * sway * 0.5D); + BlockPos center = new BlockPos(origin.getX() + swayX, y, origin.getZ() + swayZ); + + placedAny |= placeLayer(level, center, radius, baseState, buddingState, smallCrystalState, config.sideCrystalChance(), random); + + if (step > 2 && step < length - 2 && random.nextFloat() < config.branchChance()) { + BlockPos branchCenter = center.offset(random.nextInt(5) - 2, random.nextInt(3) - 1, random.nextInt(5) - 2); + placedAny |= placeLayer(level, branchCenter, Math.max(1, radius - 1), baseState, buddingState, smallCrystalState, config.sideCrystalChance() * 0.9F, random); + } + } + + return placedAny; + } + + private boolean placeLayer( + WorldGenLevel level, + BlockPos center, + int radius, + BlockState baseState, + BlockState buddingState, + BlockState smallCrystalState, + float crystalChance, + RandomSource random + ) { + boolean placedAny = false; + int actualRadius = Math.max(1, radius); + + for (int x = -actualRadius; x <= actualRadius; x++) { + for (int z = -actualRadius; z <= actualRadius; z++) { + double distance = x * x + z * z; + if (distance > actualRadius * actualRadius + random.nextInt(3)) { + continue; + } + + BlockPos target = center.offset(x, 0, z); + BlockState current = level.getBlockState(target); + if (current.is(Blocks.BEDROCK)) { + continue; + } + + level.setBlock(target, baseState, 2); + placedAny = true; + boolean supportsCrystalGrowth = false; + List exposedDirections = collectExposedDirections(level, target, random); + if (!exposedDirections.isEmpty() && random.nextFloat() < Math.min(0.95F, crystalChance * 1.35F)) { + int placements = 1 + random.nextInt(Math.min(3, exposedDirections.size())); + if (exposedDirections.size() >= 4 && random.nextFloat() < crystalChance) { + placements = Math.min(exposedDirections.size(), placements + 1); + } + + for (int i = 0; i < placements; i++) { + Direction direction = exposedDirections.get(i); + supportsCrystalGrowth |= tryPlaceCrystal(level, target, direction, smallCrystalState, random); + } + } + + if (supportsCrystalGrowth) { + level.setBlock(target, buddingState, 2); + } + } + } + + return placedAny; + } + + private boolean tryPlaceCrystal(WorldGenLevel level, BlockPos supportPos, Direction direction, BlockState smallCrystalState, RandomSource random) { + BlockPos crystalPos = supportPos.relative(direction); + BlockState existingState = level.getBlockState(crystalPos); + if (existingState.is(Blocks.BEDROCK) || (!existingState.isAir() && !existingState.canBeReplaced() && existingState.getFluidState().isEmpty())) { + return false; + } + + BlockState fullCrystalState = orientGrowthState(smallCrystalState, direction); + BlockState budState = orientGrowthState(chooseBudState(random), direction); + + if (random.nextFloat() < 0.75F && fullCrystalState.canSurvive(level, crystalPos)) { + level.setBlock(crystalPos, fullCrystalState, 2); + return true; + } + if (budState.canSurvive(level, crystalPos)) { + level.setBlock(crystalPos, budState, 2); + return true; + } + if (fullCrystalState.canSurvive(level, crystalPos)) { + level.setBlock(crystalPos, fullCrystalState, 2); + return true; + } + + return false; + } + + private List collectExposedDirections(WorldGenLevel level, BlockPos target, RandomSource random) { + List directions = new ArrayList<>(); + for (Direction direction : Direction.values()) { + BlockPos sidePos = target.relative(direction); + BlockState sideState = level.getBlockState(sidePos); + if (sideState.is(Blocks.BEDROCK)) { + continue; + } + if (sideState.isAir() || sideState.canBeReplaced() || !sideState.getFluidState().isEmpty()) { + directions.add(direction); + } + } + + for (int i = directions.size() - 1; i > 0; i--) { + int swapIndex = random.nextInt(i + 1); + Direction current = directions.get(i); + directions.set(i, directions.get(swapIndex)); + directions.set(swapIndex, current); + } + + return directions; + } + + private BlockState orientGrowthState(BlockState state, Direction direction) { + BlockState placedState = state; + if (placedState.hasProperty(AmethystClusterBlock.FACING)) { + placedState = placedState.setValue(AmethystClusterBlock.FACING, direction); + } + if (placedState.hasProperty(BlockStateProperties.WATERLOGGED)) { + placedState = placedState.setValue(BlockStateProperties.WATERLOGGED, false); + } + return placedState; + } + + private BlockState chooseBudState(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.55F) { + return AntarchyObjects.SMALL_BLOOD_CRYSTAL_BUD.get().defaultBlockState(); + } + if (roll < 0.83F) { + return AntarchyObjects.MEDIUM_BLOOD_CRYSTAL_BUD.get().defaultBlockState(); + } + return AntarchyObjects.LARGE_BLOOD_CRYSTAL_BUD.get().defaultBlockState(); + } + + private int findFloorY(WorldGenLevel level, BlockPos origin) { + int x = origin.getX(); + int z = origin.getZ(); + int startY = Mth.clamp(origin.getY(), level.getMinBuildHeight() + 1, level.getMaxBuildHeight() - 2); + + for (int y = startY; y > level.getMinBuildHeight(); y--) { + BlockPos pos = new BlockPos(x, y, z); + BlockState state = level.getBlockState(pos); + if (state.isAir() || state.canBeReplaced() || !state.getFluidState().isEmpty()) { + continue; + } + if (state.is(Blocks.BEDROCK)) { + return -1; + } + return y; + } + + return -1; + } + + private int findCeilingY(WorldGenLevel level, BlockPos origin) { + int x = origin.getX(); + int z = origin.getZ(); + int startY = Mth.clamp(origin.getY(), level.getMinBuildHeight() + 1, level.getMaxBuildHeight() - 2); + + for (int y = startY; y < level.getMaxBuildHeight() - 1; y++) { + BlockPos pos = new BlockPos(x, y, z); + BlockState state = level.getBlockState(pos); + if (state.isAir() || state.canBeReplaced() || !state.getFluidState().isEmpty()) { + continue; + } + if (state.is(Blocks.BEDROCK)) { + return -1; + } + return y; + } + + return -1; + } + + 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/ThoraxisDuneConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisDuneConfiguration.java new file mode 100644 index 00000000..b7bf48dc --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisDuneConfiguration.java @@ -0,0 +1,28 @@ +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; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; + +public record ThoraxisDuneConfiguration( + BlockStateProvider topState, + BlockStateProvider underState, + int minRadius, + int maxRadius, + int minHeight, + int maxHeight, + int underDepth, + float irregularity +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + BlockStateProvider.CODEC.fieldOf("top_state").forGetter(ThoraxisDuneConfiguration::topState), + BlockStateProvider.CODEC.fieldOf("under_state").forGetter(ThoraxisDuneConfiguration::underState), + Codec.intRange(1, 64).fieldOf("min_radius").forGetter(ThoraxisDuneConfiguration::minRadius), + Codec.intRange(1, 64).fieldOf("max_radius").forGetter(ThoraxisDuneConfiguration::maxRadius), + Codec.intRange(1, 64).fieldOf("min_height").forGetter(ThoraxisDuneConfiguration::minHeight), + Codec.intRange(1, 64).fieldOf("max_height").forGetter(ThoraxisDuneConfiguration::maxHeight), + Codec.intRange(1, 16).fieldOf("under_depth").forGetter(ThoraxisDuneConfiguration::underDepth), + Codec.floatRange(0.0F, 1.0F).fieldOf("irregularity").forGetter(ThoraxisDuneConfiguration::irregularity) + ).apply(instance, ThoraxisDuneConfiguration::new)); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisDuneFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisDuneFeature.java new file mode 100644 index 00000000..422e2849 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisDuneFeature.java @@ -0,0 +1,130 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +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.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; + +public final class ThoraxisDuneFeature extends Feature { + public ThoraxisDuneFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + RandomSource random = context.random(); + ThoraxisDuneConfiguration config = context.config(); + + int radius = randomBetween(random, config.minRadius(), config.maxRadius()); + int height = randomBetween(random, config.minHeight(), config.maxHeight()); + BlockState topState = config.topState().getState(random, origin); + BlockState underState = config.underState().getState(random, origin); + boolean placedAny = false; + + for (int dx = -radius; dx <= radius; dx++) { + for (int dz = -radius; dz <= radius; dz++) { + double distance = Math.sqrt(dx * dx + dz * dz); + double normalized = distance / Math.max(1.0D, radius); + if (normalized > 1.0D) { + continue; + } + + double shape = 1.0D - normalized; + double roughness = 0.70D + (random.nextDouble() * 0.30D); + double mound = height * shape * roughness; + if (random.nextFloat() < config.irregularity()) { + mound *= 0.65D + random.nextDouble() * 0.45D; + } + + int columnHeight = Math.max(1, (int) Math.round(mound)); + int x = origin.getX() + dx; + int z = origin.getZ() + dz; + int surfaceY = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, x, z) - 1; + if (surfaceY <= level.getMinBuildHeight()) { + continue; + } + if (level.getBlockState(new BlockPos(x, surfaceY, z)).is(Blocks.BEDROCK)) { + continue; + } + + int baseY = surfaceY + 1; + for (int layer = 0; layer < columnHeight; layer++) { + int y = baseY + layer; + if (y >= level.getMaxBuildHeight() - 1) { + break; + } + + boolean exposedBand = layer < columnHeight - 1 + && layer > 0 + && (layer % 3 == 0 || layer % 4 == 1) + && random.nextFloat() < 0.42D + (config.irregularity() * 0.35D); + BlockState state = layer == columnHeight - 1 || exposedBand ? topState : underState; + level.setBlock(new BlockPos(x, y, z), state, 2); + placedAny = true; + } + + if (columnHeight < config.underDepth()) { + for (int layer = 0; layer < config.underDepth() - columnHeight; layer++) { + int y = surfaceY - layer; + if (y <= level.getMinBuildHeight() || level.getBlockState(new BlockPos(x, y, z)).is(Blocks.BEDROCK)) { + break; + } + if (layer > 1 && layer < config.underDepth() - 2 && random.nextFloat() < 0.22D + (config.irregularity() * 0.20D)) { + level.setBlock(new BlockPos(x, y, z), Blocks.AIR.defaultBlockState(), 2); + placedAny = true; + continue; + } + level.setBlock(new BlockPos(x, y, z), underState, 2); + placedAny = true; + } + } + + if (columnHeight > 2 && random.nextFloat() < 0.34D + config.irregularity() * 0.22D) { + int cavityRadius = 1 + random.nextInt(2); + int cavityY = baseY + Math.max(1, columnHeight / 2) - random.nextInt(Math.max(1, columnHeight / 3 + 1)); + carveBuriedCavity(level, x, cavityY, z, cavityRadius, random); + placedAny = true; + } + } + } + + return placedAny; + } + + private void carveBuriedCavity(WorldGenLevel level, int centerX, int centerY, int centerZ, int radius, RandomSource random) { + int actualRadius = Math.max(1, radius); + for (int x = -actualRadius; x <= actualRadius; x++) { + for (int y = -actualRadius; y <= actualRadius; y++) { + for (int z = -actualRadius; z <= actualRadius; z++) { + double distance = x * x + (y * y * 1.5D) + z * z; + if (distance > actualRadius * actualRadius + random.nextInt(2)) { + continue; + } + + BlockPos target = new BlockPos(centerX + x, centerY + y, centerZ + z); + BlockState state = level.getBlockState(target); + if (state.is(Blocks.BEDROCK)) { + continue; + } + if (!state.isAir() && !state.canBeReplaced() && state.getFluidState().isEmpty()) { + level.setBlock(target, Blocks.AIR.defaultBlockState(), 2); + } + } + } + } + } + + 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/ThoraxisFissureConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisFissureConfiguration.java new file mode 100644 index 00000000..f329dcb6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisFissureConfiguration.java @@ -0,0 +1,16 @@ +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 ThoraxisFissureConfiguration(int minSpan, int maxSpan, int minRadius, int maxRadius, int maxBend, float branchChance) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.intRange(1, 256).fieldOf("min_span").forGetter(ThoraxisFissureConfiguration::minSpan), + Codec.intRange(1, 256).fieldOf("max_span").forGetter(ThoraxisFissureConfiguration::maxSpan), + Codec.intRange(1, 8).fieldOf("min_radius").forGetter(ThoraxisFissureConfiguration::minRadius), + Codec.intRange(1, 8).fieldOf("max_radius").forGetter(ThoraxisFissureConfiguration::maxRadius), + Codec.intRange(0, 32).fieldOf("max_bend").forGetter(ThoraxisFissureConfiguration::maxBend), + Codec.floatRange(0.0F, 1.0F).fieldOf("branch_chance").forGetter(ThoraxisFissureConfiguration::branchChance) + ).apply(instance, ThoraxisFissureConfiguration::new)); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisFissureFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisFissureFeature.java new file mode 100644 index 00000000..09b8f92c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisFissureFeature.java @@ -0,0 +1,93 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +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.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public final class ThoraxisFissureFeature extends Feature { + public ThoraxisFissureFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + RandomSource random = context.random(); + ThoraxisFissureConfiguration config = context.config(); + + int span = randomBetween(random, config.minSpan(), config.maxSpan()); + int halfWidth = randomBetween(random, config.minRadius(), config.maxRadius()); + int bendLimit = Math.max(0, config.maxBend()); + int bendX = bendLimit == 0 ? 0 : random.nextInt(bendLimit * 2 + 1) - bendLimit; + int bendZ = bendLimit == 0 ? 0 : random.nextInt(bendLimit * 2 + 1) - bendLimit; + + if (origin.getY() <= 4 || origin.getY() >= level.getMaxBuildHeight() - 5) { + return false; + } + + for (int step = -span; step <= span; step++) { + double t = Math.abs(step) / (double) span; + int y = origin.getY() + step; + if (y <= level.getMinBuildHeight() || y >= level.getMaxBuildHeight()) { + continue; + } + + int centerX = origin.getX() + (int) Math.round(bendX * (t * t - t)); + int centerZ = origin.getZ() + (int) Math.round(bendZ * (t * t - t)); + int width = halfWidth + + (step % 4 == 0 ? 1 : 0) + + (Math.abs(step) <= span / 4 ? 1 : 0) + + (random.nextFloat() < 0.18F ? 1 : 0); + + for (int xOffset = -width; xOffset <= width; xOffset++) { + for (int zOffset = -width; zOffset <= width; zOffset++) { + if (xOffset * xOffset + zOffset * zOffset > width * width + 1) { + continue; + } + + BlockPos targetPos = new BlockPos(centerX + xOffset, y, centerZ + zOffset); + carveNode(level, targetPos, random, width); + if (random.nextFloat() < config.branchChance() && y + 1 < level.getMaxBuildHeight()) { + carveNode(level, targetPos.offset(random.nextInt(3) - 1, random.nextInt(2), random.nextInt(3) - 1), random, Math.max(1, width - 1)); + } + if (random.nextFloat() < 0.1F && y - 1 > level.getMinBuildHeight()) { + carveNode(level, targetPos.below(), random, Math.max(1, width - 1)); + } + } + } + } + + return true; + } + + private void carveNode(WorldGenLevel level, BlockPos pos, RandomSource random, int radius) { + int actualRadius = Math.max(1, radius); + for (int x = -actualRadius; x <= actualRadius; x++) { + for (int y = -2; y <= 2; y++) { + for (int z = -actualRadius; z <= actualRadius; z++) { + if (x * x + z * z + (y * y * 2) > actualRadius * actualRadius + random.nextInt(3)) { + continue; + } + + BlockPos target = pos.offset(x, y, z); + BlockState state = level.getBlockState(target); + if (!state.isAir()) { + level.setBlock(target, Blocks.AIR.defaultBlockState(), 2); + } + } + } + } + } + + 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/ThoraxisRibColumnsConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisRibColumnsConfiguration.java new file mode 100644 index 00000000..8f663044 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisRibColumnsConfiguration.java @@ -0,0 +1,18 @@ +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 ThoraxisRibColumnsConfiguration(int minRibs, int maxRibs, int minLength, int maxLength, int minThickness, int maxThickness, int curveStrength, float clawGapChance) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.intRange(1, 24).fieldOf("min_ribs").forGetter(ThoraxisRibColumnsConfiguration::minRibs), + Codec.intRange(1, 24).fieldOf("max_ribs").forGetter(ThoraxisRibColumnsConfiguration::maxRibs), + Codec.intRange(1, 64).fieldOf("min_length").forGetter(ThoraxisRibColumnsConfiguration::minLength), + Codec.intRange(1, 64).fieldOf("max_length").forGetter(ThoraxisRibColumnsConfiguration::maxLength), + Codec.intRange(1, 8).fieldOf("min_thickness").forGetter(ThoraxisRibColumnsConfiguration::minThickness), + Codec.intRange(1, 8).fieldOf("max_thickness").forGetter(ThoraxisRibColumnsConfiguration::maxThickness), + Codec.intRange(0, 16).fieldOf("curve_strength").forGetter(ThoraxisRibColumnsConfiguration::curveStrength), + Codec.floatRange(0.0F, 1.0F).fieldOf("claw_gap_chance").forGetter(ThoraxisRibColumnsConfiguration::clawGapChance) + ).apply(instance, ThoraxisRibColumnsConfiguration::new)); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisRibColumnsFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisRibColumnsFeature.java new file mode 100644 index 00000000..4996f5bf --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisRibColumnsFeature.java @@ -0,0 +1,81 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public final class ThoraxisRibColumnsFeature extends Feature { + public ThoraxisRibColumnsFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + RandomSource random = context.random(); + ThoraxisRibColumnsConfiguration config = context.config(); + + int ribs = randomBetween(random, config.minRibs(), config.maxRibs()); + boolean upward = origin.getY() < level.getHeight() / 2; + int direction = upward ? 1 : -1; + int spread = 2 + random.nextInt(4); + + for (int rib = 0; rib < ribs; rib++) { + double phase = (rib - (ribs - 1) / 2.0D) / Math.max(1.0D, ribs - 1.0D); + int xShift = (int) Math.round(phase * spread * 2.0D); + int zShift = random.nextInt(3) - 1; + int length = randomBetween(random, config.minLength(), config.maxLength()); + + for (int step = 0; step < length; step++) { + double progress = step / (double) Math.max(1, length - 1); + double curve = Math.sin(progress * Math.PI * 0.85D); + int bend = randomBetween(random, 0, Math.max(0, config.curveStrength())); + int x = origin.getX() + xShift + (int) Math.round(curve * phase * spread) + (direction * bend / 4); + int z = origin.getZ() + zShift + (int) Math.round(curve * (random.nextBoolean() ? 1 : -1)) - (direction * bend / 6); + int y = origin.getY() + (step * direction) + (int) Math.round(progress * progress * direction * 2.5D); + BlockPos pos = new BlockPos(x, y, z); + + int thickness = randomBetween(random, config.minThickness(), config.maxThickness()) + + (step > length / 2 ? 1 : 0) + + (random.nextFloat() < config.clawGapChance() ? 1 : 0); + placeClaw(level, pos, thickness, random); + } + } + + return true; + } + + private void placeClaw(WorldGenLevel level, BlockPos center, int radius, RandomSource random) { + int actualRadius = Math.max(1, radius); + for (int x = -actualRadius; x <= actualRadius; x++) { + for (int y = -actualRadius; y <= actualRadius; y++) { + for (int z = -actualRadius; z <= actualRadius; z++) { + if (x * x + y * y + z * z > actualRadius * actualRadius + random.nextInt(2)) { + continue; + } + + if (Math.abs(y) > actualRadius - 1 && random.nextFloat() < 0.4F) { + continue; + } + + BlockPos target = center.offset(x, y, z); + BlockState state = level.getBlockState(target); + if (state.isAir() || state.canBeReplaced() || !state.getFluidState().isEmpty()) { + level.setBlock(target, com.craisinlord.antarchy.content.AntarchyObjects.NYXITE.get().defaultBlockState(), 2); + } + } + } + } + } + + 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/ThoraxisSpikeConfiguration.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisSpikeConfiguration.java new file mode 100644 index 00000000..7843d6d2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisSpikeConfiguration.java @@ -0,0 +1,40 @@ +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 ThoraxisSpikeConfiguration( + Orientation orientation, + int minLength, + int maxLength, + int baseRadius, + int tipRadius, + int sway, + float branchChance +) implements FeatureConfiguration { + public enum Orientation { + UP, + DOWN; + + public static Orientation fromName(String name) { + for (Orientation value : values()) { + if (value.name().equalsIgnoreCase(name)) { + return value; + } + } + throw new IllegalArgumentException("Unknown Thoraxis spike orientation: " + name); + } + } + + public static final Codec ORIENTATION_CODEC = Codec.STRING.xmap(Orientation::fromName, Orientation::name); + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + ORIENTATION_CODEC.fieldOf("orientation").forGetter(ThoraxisSpikeConfiguration::orientation), + Codec.intRange(1, 256).fieldOf("min_length").forGetter(ThoraxisSpikeConfiguration::minLength), + Codec.intRange(1, 256).fieldOf("max_length").forGetter(ThoraxisSpikeConfiguration::maxLength), + Codec.intRange(1, 24).fieldOf("base_radius").forGetter(ThoraxisSpikeConfiguration::baseRadius), + Codec.intRange(1, 24).fieldOf("tip_radius").forGetter(ThoraxisSpikeConfiguration::tipRadius), + Codec.intRange(0, 32).fieldOf("sway").forGetter(ThoraxisSpikeConfiguration::sway), + Codec.floatRange(0.0F, 1.0F).fieldOf("branch_chance").forGetter(ThoraxisSpikeConfiguration::branchChance) + ).apply(instance, ThoraxisSpikeConfiguration::new)); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisSpikeFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisSpikeFeature.java new file mode 100644 index 00000000..ed8bd010 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisSpikeFeature.java @@ -0,0 +1,91 @@ +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.RandomSource; +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.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public final class ThoraxisSpikeFeature extends Feature { + public ThoraxisSpikeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + RandomSource random = context.random(); + ThoraxisSpikeConfiguration config = context.config(); + + int length = randomBetween(random, config.minLength(), config.maxLength()); + int direction = config.orientation() == ThoraxisSpikeConfiguration.Orientation.UP ? 1 : -1; + int baseRadius = Math.max(1, config.baseRadius()); + int tipRadius = Math.max(1, config.tipRadius()); + int sway = Math.max(0, config.sway()); + boolean placedAny = false; + + for (int step = 0; step < length; step++) { + double progress = length <= 1 ? 0.0D : step / (double) (length - 1); + int y = origin.getY() + step * direction; + if (y <= level.getMinBuildHeight() || y >= level.getMaxBuildHeight()) { + break; + } + + double wave = Math.sin(progress * Math.PI * 1.5D); + int x = origin.getX() + (int) Math.round(wave * sway * 0.35D) + random.nextInt(3) - 1; + int z = origin.getZ() + (int) Math.round(Math.cos(progress * Math.PI * 1.25D) * sway * 0.35D) + random.nextInt(3) - 1; + BlockPos center = new BlockPos(x, y, z); + int radius = Math.max(tipRadius, (int) Math.round(lerp(progress, baseRadius, tipRadius))); + placedAny |= placeSphere(level, center, radius, random); + + if (step > 0 && step < length - 1 && random.nextFloat() < config.branchChance()) { + BlockPos branchCenter = center.offset(random.nextInt(5) - 2, random.nextInt(3) - 1, random.nextInt(5) - 2); + placedAny |= placeSphere(level, branchCenter, Math.max(1, radius - 1), random); + } + } + + return placedAny; + } + + private boolean placeSphere(WorldGenLevel level, BlockPos center, int radius, RandomSource random) { + boolean placedAny = false; + int actualRadius = Math.max(1, radius); + for (int x = -actualRadius; x <= actualRadius; x++) { + for (int y = -actualRadius; y <= actualRadius; y++) { + for (int z = -actualRadius; z <= actualRadius; z++) { + double distance = x * x + y * y + z * z; + if (distance > actualRadius * actualRadius + random.nextInt(3)) { + continue; + } + + BlockPos target = center.offset(x, y, z); + BlockState state = level.getBlockState(target); + if (state.is(Blocks.BEDROCK)) { + continue; + } + + if (!state.isAir() || !state.canBeReplaced() || !state.getFluidState().isEmpty() || random.nextFloat() < 0.65F) { + level.setBlock(target, AntarchyObjects.NYXITE.get().defaultBlockState(), 2); + placedAny = true; + } + } + } + } + return placedAny; + } + + 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); + } + + private static double lerp(double t, double a, double b) { + return a + (b - a) * t; + } +} 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 new file mode 100644 index 00000000..790adece --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractMinecartMixin.java @@ -0,0 +1,151 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.minecart.AntimetalDismountHelper; +import com.craisinlord.antarchy.content.minecart.AntimetalMinecartAccess; +import com.craisinlord.antarchy.content.minecart.AntimetalMinecartPhysics; +import com.craisinlord.antarchy.content.minecart.AntimetalRailHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +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.vehicle.AbstractMinecart; +import net.minecraft.world.level.block.BaseRailBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +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.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(AbstractMinecart.class) +public abstract class AbstractMinecartMixin implements AntimetalMinecartAccess { + @Unique + private static final EntityDataAccessor ANTARCHY$ON_ANTIMETAL_RAIL = + SynchedEntityData.defineId(AbstractMinecart.class, EntityDataSerializers.BOOLEAN); + private static final int ANTARCHY$INVERTED_REFRESH_TICKS = 20; + private static final double ANTARCHY$STANDING_PASSENGER_OFFSET = 0.1875D; + + @Unique + private boolean antarchy$antimetalActive; + @Unique + @Nullable + private BlockPos antarchy$antimetalRailPos; + @Unique + @Nullable + private BlockState antarchy$antimetalRailState; + + @Shadow + protected abstract void moveAlongTrack(BlockPos pos, BlockState state); + + @Inject(method = "defineSynchedData", at = @At("TAIL")) + private void antarchy$defineData(CallbackInfo ci) { + ((AbstractMinecart) (Object) this).getEntityData().define(ANTARCHY$ON_ANTIMETAL_RAIL, false); + } + + @Inject(method = "tick", at = @At("HEAD")) + private void antarchy$findAntimetalRail(CallbackInfo ci) { + AbstractMinecart self = (AbstractMinecart) (Object) this; + if (self.level().isClientSide()) { + return; + } + BlockPos cell = AntimetalMinecartPhysics.findCell(self.level(), self.getX(), self.getY(), self.getZ()); + antarchy$antimetalActive = cell != null; + antarchy$antimetalRailPos = cell; + antarchy$antimetalRailState = cell != null ? self.level().getBlockState(cell) : null; + self.getEntityData().set(ANTARCHY$ON_ANTIMETAL_RAIL, antarchy$antimetalActive); + if (antarchy$antimetalActive) { + antarchy$applyInvertedGravity(self); + } + } + + @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/BaseRailBlock;isRail(Lnet/minecraft/world/level/block/state/BlockState;)Z")) + private boolean antarchy$redirectIsRail(BlockState state) { + if (antarchy$antimetalActive) { + return true; + } + return BaseRailBlock.isRail(state); + } + + @Inject(method = "moveAlongTrack", at = @At("HEAD"), cancellable = true) + private void antarchy$redirectMoveAlongTrack(BlockPos pos, BlockState state, CallbackInfo ci) { + if (antarchy$antimetalActive && antarchy$antimetalRailPos != null && antarchy$antimetalRailState != null) { + AntimetalMinecartPhysics.moveAlongTrack((AbstractMinecart) (Object) this, antarchy$antimetalRailPos, antarchy$antimetalRailState); + ci.cancel(); + } + } + + @Unique + private void antarchy$applyInvertedGravity(AbstractMinecart cart) { + for (Entity passenger : cart.getIndirectPassengers()) { + if (!(passenger instanceof LivingEntity living)) { + continue; + } + MobEffectInstance current = living.getEffect(AntarchyObjects.INVERTED_EFFECT.get()); + if (current == null || current.getDuration() < 10) { + living.addEffect(new MobEffectInstance(AntarchyObjects.INVERTED_EFFECT.get(), ANTARCHY$INVERTED_REFRESH_TICKS, 0, true, false, false)); + } + } + } + + @Inject(method = "getPassengersRidingOffset", at = @At("RETURN"), cancellable = true) + private void antarchy$mirrorPassengerOffset(CallbackInfoReturnable cir) { + if (this.antarchy$isOnAntimetalRail()) { + double normalOffset = cir.getReturnValue(); + cir.setReturnValue(2.0D * AntimetalRailHelper.CART_MODEL_PIVOT_Y - normalOffset - ANTARCHY$STANDING_PASSENGER_OFFSET); + } + } + + @Inject(method = "getDismountLocationForPassenger", at = @At("HEAD"), cancellable = true) + private void antarchy$dismountBelowRail(LivingEntity passenger, CallbackInfoReturnable cir) { + if (this.antarchy$isOnAntimetalRail()) { + AbstractMinecart self = (AbstractMinecart) (Object) this; + cir.setReturnValue(AntimetalDismountHelper.findDismountPosition(self, passenger)); + } + } + + @Inject(method = "getPosOffs", at = @At("HEAD"), cancellable = true) + private void antarchy$sampleAntimetalPosOffs(double x, double y, double z, double offset, CallbackInfoReturnable cir) { + AbstractMinecart self = (AbstractMinecart) (Object) this; + if (this.antarchy$isOnAntimetalRail()) { + cir.setReturnValue(AntimetalMinecartPhysics.getPosOffs(self, x, y, z, offset)); + } + } + + @Inject(method = "getPos", at = @At("HEAD"), cancellable = true) + private void antarchy$sampleAntimetalPos(double x, double y, double z, CallbackInfoReturnable cir) { + AbstractMinecart self = (AbstractMinecart) (Object) this; + if (this.antarchy$isOnAntimetalRail()) { + cir.setReturnValue(AntimetalMinecartPhysics.getPos(self, x, y, z)); + } + } + + @Override + public boolean antarchy$isOnAntimetalRail() { + return ((AbstractMinecart) (Object) this).getEntityData().get(ANTARCHY$ON_ANTIMETAL_RAIL); + } + + @Override + public void antarchy$setOnAntimetalRail(boolean value) { + ((AbstractMinecart) (Object) this).getEntityData().set(ANTARCHY$ON_ANTIMETAL_RAIL, value); + } + + @Override + @Nullable + public BlockPos antarchy$getAntimetalRailPos() { + return antarchy$antimetalRailPos; + } + + @Override + public void antarchy$setAntimetalRailPos(@Nullable BlockPos pos) { + antarchy$antimetalRailPos = pos; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AccessorRangedAttribute.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AccessorRangedAttribute.java new file mode 100644 index 00000000..99fd4fa0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AccessorRangedAttribute.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.world.entity.ai.attributes.RangedAttribute; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(RangedAttribute.class) +public interface AccessorRangedAttribute { + + @Accessor("minValue") + @Mutable + void antarchyAttributefix$setMinValue(double minValue); + + @Accessor("maxValue") + @Mutable + void antarchyAttributefix$setMaxValue(double maxValue); +} \ No newline at end of file diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodConsumeMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodConsumeMixin.java new file mode 100644 index 00000000..2fbdae93 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodConsumeMixin.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.ItemStack; +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.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Player.class) +public abstract class AmericanFoodConsumeMixin { + @Inject( + method = "eat(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/world/item/ItemStack;", + at = @At("RETURN") + ) + private void antarchy$applyAmericanBonus(Level level, ItemStack stack, CallbackInfoReturnable cir) { + if (level.isClientSide || !AntarchyObjects.AMERICAN_COMPONENT.has(stack)) { + return; + } + + Player self = (Player) (Object) this; + self.getFoodData().eat(AntarchySettings.americanBonusNutrition(), (float) AntarchySettings.americanBonusSaturation()); + + int duration = AntarchySettings.americanRegenerationDurationTicks(); + if (duration > 0) { + self.addEffect(new MobEffectInstance(MobEffects.REGENERATION, duration, AntarchySettings.americanRegenerationAmplifier())); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodNameMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodNameMixin.java new file mode 100644 index 00000000..47dc04c5 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodNameMixin.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.network.chat.Component; +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.CallbackInfoReturnable; + +@Mixin(ItemStack.class) +public abstract class AmericanFoodNameMixin { + @Inject(method = "getHoverName", at = @At("RETURN"), cancellable = true) + private void antarchy$prefixAmericanName(CallbackInfoReturnable cir) { + ItemStack self = (ItemStack) (Object) this; + if (AntarchyObjects.AMERICAN_COMPONENT.has(self)) { + cir.setReturnValue(Component.translatable("item.antarchy.american_name", cir.getReturnValue())); + } + } +} 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 new file mode 100644 index 00000000..5fb18e7f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyMixinErrorHandler.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.mixins; + +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"; + + @Override + public ErrorAction onPrepareError(IMixinConfig config, Throwable throwable, IMixinInfo mixin, ErrorAction action) { + return shouldIgnore(mixin) ? ErrorAction.NONE : action; + } + + @Override + public ErrorAction onApplyError(String targetClassName, Throwable throwable, IMixinInfo mixin, ErrorAction action) { + return shouldIgnore(mixin) ? ErrorAction.NONE : action; + } + + private static boolean shouldIgnore(IMixinInfo mixin) { + return mixin != null && BROKEN_MARVEL_STELLARIS_MIXIN.equals(mixin.getClassName()); + } +} 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 new file mode 100644 index 00000000..c804109e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyMixinPlugin.java @@ -0,0 +1,55 @@ +package com.craisinlord.antarchy.mixins; + +import java.util.List; +import java.util.Set; +import org.objectweb.asm.tree.ClassNode; +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 { + @Override + public void onLoad(String mixinPackage) { + Mixins.registerErrorHandlerClass(AntarchyMixinErrorHandler.class.getName()); + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + String resourcePath = targetClassName.replace('.', '/') + ".class"; + if (this.getClass().getClassLoader().getResource(resourcePath) == null) { + return false; + } + 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; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } +} 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 new file mode 100644 index 00000000..f8ff883d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java @@ -0,0 +1,118 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +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(BlockEntityType.class) +public abstract class BlockEntityTypeSignMixin { + @Unique + private static Block antarchy$ouranwoodSign; + @Unique + private static Block antarchy$ouranwoodWallSign; + @Unique + private static Block antarchy$ouranwoodHangingSign; + @Unique + private static Block antarchy$ouranwoodWallHangingSign; + @Unique + private static Block antarchy$peachSign; + @Unique + private static Block antarchy$peachWallSign; + @Unique + private static Block antarchy$peachHangingSign; + @Unique + private static Block antarchy$peachWallHangingSign; + + @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())) { + 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())) { + cir.setReturnValue(true); + } + } + } + + @Unique + private static Block antarchy$sign() { + if (antarchy$ouranwoodSign == null) { + antarchy$ouranwoodSign = antarchy$resolve("ouranwood_sign"); + } + return antarchy$ouranwoodSign; + } + + @Unique + private static Block antarchy$wallSign() { + if (antarchy$ouranwoodWallSign == null) { + antarchy$ouranwoodWallSign = antarchy$resolve("ouranwood_wall_sign"); + } + return antarchy$ouranwoodWallSign; + } + + @Unique + private static Block antarchy$hangingSign() { + if (antarchy$ouranwoodHangingSign == null) { + antarchy$ouranwoodHangingSign = antarchy$resolve("ouranwood_hanging_sign"); + } + return antarchy$ouranwoodHangingSign; + } + + @Unique + private static Block antarchy$wallHangingSign() { + if (antarchy$ouranwoodWallHangingSign == null) { + antarchy$ouranwoodWallHangingSign = antarchy$resolve("ouranwood_wall_hanging_sign"); + } + return antarchy$ouranwoodWallHangingSign; + } + + @Unique + private static Block antarchy$peachSign() { + if (antarchy$peachSign == null) { + antarchy$peachSign = antarchy$resolve("peach_sign"); + } + return antarchy$peachSign; + } + + @Unique + private static Block antarchy$peachWallSign() { + if (antarchy$peachWallSign == null) { + antarchy$peachWallSign = antarchy$resolve("peach_wall_sign"); + } + return antarchy$peachWallSign; + } + + @Unique + private static Block antarchy$peachHangingSign() { + if (antarchy$peachHangingSign == null) { + antarchy$peachHangingSign = antarchy$resolve("peach_hanging_sign"); + } + return antarchy$peachHangingSign; + } + + @Unique + private static Block antarchy$peachWallHangingSign() { + if (antarchy$peachWallHangingSign == null) { + antarchy$peachWallHangingSign = antarchy$resolve("peach_wall_hanging_sign"); + } + return antarchy$peachWallHangingSign; + } + + @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/BloodglassMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/BloodglassMixin.java new file mode 100644 index 00000000..46b1a037 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/BloodglassMixin.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.bloodglass.BloodglassAccess; +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 BloodglassMixin implements BloodglassAccess { + @Unique private int antarchy$armorShieldsActive; + @Unique private int antarchy$armorShieldLostCount; + @Unique private int antarchy$armorRechargeTimer; + @Unique private int antarchy$appleShieldsActive; + @Unique private int antarchy$appleShieldLostCount; + @Unique private int antarchy$appleRechargeTimer; + + @Override public int antarchy$getArmorShieldsActive() { return antarchy$armorShieldsActive; } + @Override public void antarchy$setArmorShieldsActive(int v) { antarchy$armorShieldsActive = Math.max(0, v); } + @Override public int antarchy$getArmorShieldLostCount() { return antarchy$armorShieldLostCount; } + @Override public void antarchy$setArmorShieldLostCount(int v) { antarchy$armorShieldLostCount = Math.max(0, v); } + @Override public int antarchy$getArmorRechargeTimer() { return antarchy$armorRechargeTimer; } + @Override public void antarchy$setArmorRechargeTimer(int v) { antarchy$armorRechargeTimer = Math.max(0, v); } + + @Override public int antarchy$getAppleShieldsActive() { return antarchy$appleShieldsActive; } + @Override public void antarchy$setAppleShieldsActive(int v) { antarchy$appleShieldsActive = Math.max(0, v); } + @Override public int antarchy$getAppleShieldLostCount() { return antarchy$appleShieldLostCount; } + @Override public void antarchy$setAppleShieldLostCount(int v) { antarchy$appleShieldLostCount = Math.max(0, v); } + @Override public int antarchy$getAppleRechargeTimer() { return antarchy$appleRechargeTimer; } + @Override public void antarchy$setAppleRechargeTimer(int v) { antarchy$appleRechargeTimer = Math.max(0, v); } + + @Inject(method = "addAdditionalSaveData", at = @At("TAIL")) + private void antarchy$saveBloodglass(CompoundTag tag, CallbackInfo ci) { + tag.putInt("antarchy.ArmorShieldsActive", antarchy$armorShieldsActive); + tag.putInt("antarchy.ArmorShieldLostCount", antarchy$armorShieldLostCount); + tag.putInt("antarchy.ArmorRechargeTimer", antarchy$armorRechargeTimer); + } + + @Inject(method = "readAdditionalSaveData", at = @At("TAIL")) + private void antarchy$loadBloodglass(CompoundTag tag, CallbackInfo ci) { + antarchy$armorShieldsActive = Math.max(0, tag.getInt("antarchy.ArmorShieldsActive")); + antarchy$armorShieldLostCount = Math.max(0, tag.getInt("antarchy.ArmorShieldLostCount")); + antarchy$armorRechargeTimer = Math.max(0, tag.getInt("antarchy.ArmorRechargeTimer")); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DiodeBlockMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DiodeBlockMixin.java new file mode 100644 index 00000000..eb15a305 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DiodeBlockMixin.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.block.BluestoneComparatorBlock; +import com.craisinlord.antarchy.content.block.BluestoneRepeaterBlock; +import net.minecraft.world.level.block.DiodeBlock; +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; + +@Mixin(DiodeBlock.class) +public class DiodeBlockMixin { + @Inject(method = "isDiode", at = @At("HEAD"), cancellable = true) + private static void antarchy$ignoreBluestoneDiodes(BlockState state, CallbackInfoReturnable cir) { + if (state.getBlock() instanceof BluestoneRepeaterBlock || state.getBlock() instanceof BluestoneComparatorBlock) { + cir.setReturnValue(false); + } + } +} 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 new file mode 100644 index 00000000..d930c012 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DreamFireBlockMixin.java @@ -0,0 +1,51 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.BaseFireBlock; +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; + +@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"); + private static final ResourceLocation THORAXIS_DIMENSION_ID = new ResourceLocation(Antarchy.MODID, "thoraxis"); + + @Inject(method = "getState", at = @At("HEAD"), cancellable = true) + private static void antarchy$useDreamFire(BlockGetter level, BlockPos pos, CallbackInfoReturnable cir) { + boolean thoraxis = level instanceof Level concreteLevel && concreteLevel.dimension().location().equals(THORAXIS_DIMENSION_ID); + + if (thoraxis) { + if (level.getBlockState(pos.above()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS)) { + BuiltInRegistries.BLOCK.getOptional(DREAM_CEILING_FIRE_ID).ifPresent(block -> cir.setReturnValue(block.defaultBlockState())); + return; + } + + if (level.getBlockState(pos.below()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS)) { + BuiltInRegistries.BLOCK.getOptional(DREAM_FIRE_ID).ifPresent(block -> cir.setReturnValue(block.defaultBlockState())); + } + return; + } + + if (level.getBlockState(pos.below()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS)) { + BuiltInRegistries.BLOCK.getOptional(DREAM_FIRE_ID).ifPresent(block -> cir.setReturnValue(block.defaultBlockState())); + return; + } + + if (level.getBlockState(pos.above()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS)) { + BuiltInRegistries.BLOCK.getOptional(DREAM_CEILING_FIRE_ID).ifPresent(block -> cir.setReturnValue(block.defaultBlockState())); + } + } +} 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 new file mode 100644 index 00000000..f1523d5c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java @@ -0,0 +1,49 @@ +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/ExperimentalSettingsLevelSummaryMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ExperimentalSettingsLevelSummaryMixin.java new file mode 100644 index 00000000..791d6f25 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ExperimentalSettingsLevelSummaryMixin.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.world.level.storage.LevelSummary; +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(value = LevelSummary.class, priority = 1001) +public abstract class ExperimentalSettingsLevelSummaryMixin { + @Inject(method = "isExperimental", at = @At("RETURN"), cancellable = true) + private void antarchy$hideExperimentalStatus(CallbackInfoReturnable cir) { + if (AntarchySettings.experimentalSettingsPopupDisabled()) { + cir.setReturnValue(false); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FarChunkSetBlockWarningMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FarChunkSetBlockWarningMixin.java new file mode 100644 index 00000000..fd78f92d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FarChunkSetBlockWarningMixin.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.server.level.WorldGenRegion; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(WorldGenRegion.class) +public abstract class FarChunkSetBlockWarningMixin { + @WrapOperation( + method = "ensureCanWrite", + at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;logAndPauseIfInIde(Ljava/lang/String;)V") + ) + private void antarchy$suppressFarChunkWarning(String message, Operation original) { + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FireVisualBaseFireBlockMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FireVisualBaseFireBlockMixin.java new file mode 100644 index 00000000..e5968ec0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FireVisualBaseFireBlockMixin.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.block.DreamCeilingFireBlock; +import com.craisinlord.antarchy.content.block.DreamFireBlock; +import com.craisinlord.antarchy.content.fire.AntarchyFireVisualAccess; +import com.craisinlord.antarchy.content.fire.AntarchyFireVisualType; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.SoulFireBlock; +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.CallbackInfo; + +@Mixin(BaseFireBlock.class) +public abstract class FireVisualBaseFireBlockMixin { + @Inject(method = "entityInside", at = @At("HEAD")) + private void antarchy$trackFireVisual(BlockState state, Level level, BlockPos pos, Entity entity, CallbackInfo ci) { + if (entity.fireImmune() || !(entity instanceof AntarchyFireVisualAccess access)) { + return; + } + + if (state.getBlock() instanceof DreamFireBlock || state.getBlock() instanceof DreamCeilingFireBlock) { + access.antarchy$setFireVisualType(AntarchyFireVisualType.DREAM); + return; + } + + if (state.getBlock() instanceof SoulFireBlock) { + access.antarchy$setFireVisualType(AntarchyFireVisualType.SOUL); + return; + } + + access.antarchy$setFireVisualType(AntarchyFireVisualType.NORMAL); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FireVisualEntityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FireVisualEntityMixin.java new file mode 100644 index 00000000..e54e4662 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FireVisualEntityMixin.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.fire.AntarchyFireVisualAccess; +import com.craisinlord.antarchy.content.fire.AntarchyFireVisualType; +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; + +@Mixin(Entity.class) +public abstract class FireVisualEntityMixin implements AntarchyFireVisualAccess { + @Unique + private AntarchyFireVisualType antarchy$fireVisualType = AntarchyFireVisualType.NORMAL; + + @Override + public AntarchyFireVisualType antarchy$getFireVisualType() { + return this.antarchy$fireVisualType; + } + + @Override + public void antarchy$setFireVisualType(AntarchyFireVisualType type) { + this.antarchy$fireVisualType = type == null ? AntarchyFireVisualType.NORMAL : type; + } + + @Inject(method = "setRemainingFireTicks", at = @At("TAIL")) + private void antarchy$resetFireVisualWhenExtinguished(int ticks, CallbackInfo ci) { + if (ticks <= 0) { + this.antarchy$fireVisualType = AntarchyFireVisualType.NORMAL; + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FlintAndSteelPortalIgnitionMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FlintAndSteelPortalIgnitionMixin.java new file mode 100644 index 00000000..42c82220 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FlintAndSteelPortalIgnitionMixin.java @@ -0,0 +1,53 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.portal.PermanentPortalManager; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.FlintAndSteelItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +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; + +@Mixin(FlintAndSteelItem.class) +public abstract class FlintAndSteelPortalIgnitionMixin { + @Inject(method = "useOn", at = @At("HEAD"), cancellable = true) + private void antarchy$ignitePermanentPortal(UseOnContext context, CallbackInfoReturnable cir) { + if (!AntarchySettings.permanentPortalsEnabled() || !AntarchySettings.permanentPortalsFlintAndSteelEnabled()) { + return; + } + + Level level = context.getLevel(); + BlockPos clickedPos = context.getClickedPos(); + BlockState clickedState = level.getBlockState(clickedPos); + + for (PermanentPortalType type : PermanentPortalType.values()) { + if (!type.isEnabled() || !clickedState.is(type.frameTag())) { + continue; + } + if (!PermanentPortalManager.tryIgnitePortal(level, clickedPos, type)) { + continue; + } + + if (!level.isClientSide() && context.getPlayer() != null) { + ItemStack stack = context.getItemInHand(); + stack.hurtAndBreak(1, context.getPlayer(), e -> e.broadcastBreakEvent(handToSlot(context.getHand()))); + } + + cir.setReturnValue(InteractionResult.sidedSuccess(level.isClientSide())); + return; + } + } + + private static EquipmentSlot handToSlot(InteractionHand hand) { + return hand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FrogSpawnVariantMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FrogSpawnVariantMixin.java new file mode 100644 index 00000000..212cb004 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/FrogSpawnVariantMixin.java @@ -0,0 +1,43 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.entity.ElythiaFrog; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.animal.frog.Frog; +import net.minecraft.world.level.ServerLevelAccessor; +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(Frog.class) +public abstract class FrogSpawnVariantMixin { + @Inject(method = "finalizeSpawn", at = @At("TAIL")) + private void antarchy$setElythiaSpawnVariant( + ServerLevelAccessor level, + DifficultyInstance difficulty, + MobSpawnType spawnType, + SpawnGroupData spawnGroupData, + CompoundTag compoundTag, + CallbackInfoReturnable cir + ) { + if (spawnType == MobSpawnType.BUCKET || !ElythiaFrog.shouldBecomeElythiaFrog(level)) { + return; + } + + ElythiaFrog.applyVariant((Frog) (Object) this); + } + + @Inject(method = "getBreedOffspring", at = @At("RETURN")) + private void antarchy$setElythiaOffspringVariant(ServerLevel level, AgeableMob otherParent, CallbackInfoReturnable cir) { + if (!(cir.getReturnValue() instanceof Frog frog) || !ElythiaFrog.shouldBecomeElythiaFrog(level)) { + return; + } + + ElythiaFrog.applyVariant(frog); + } +} 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 new file mode 100644 index 00000000..503f1ea0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringDamageImmunityMixin.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.tags.DamageTypeTags; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffect; +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.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; + if (self.level().isClientSide()) { + return; + } + + if (source.getEntity() == null || source.is(DamageTypeTags.BYPASSES_ARMOR)) { + return; + } + + MobEffect glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + if (glimmering != null && self.hasEffect(glimmering)) { + cir.setReturnValue(false); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushEntitiesMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushEntitiesMixin.java new file mode 100644 index 00000000..c42a8576 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushEntitiesMixin.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.world.effect.MobEffect; +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 GlimmeringPushEntitiesMixin { + @Inject(method = "pushEntities", at = @At("HEAD"), cancellable = true) + private void antarchy$glimmeringSkipsPushingOthers(CallbackInfo ci) { + LivingEntity self = (LivingEntity) (Object) this; + MobEffect glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + if (glimmering != null && self.hasEffect(glimmering)) { + ci.cancel(); + } + } +} 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 new file mode 100644 index 00000000..1cec3278 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushableMixin.java @@ -0,0 +1,43 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.world.effect.MobEffect; +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.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) + private void antarchy$glimmeringNotPushable(CallbackInfoReturnable cir) { + if (!cir.getReturnValueZ()) { + return; + } + + LivingEntity self = (LivingEntity) (Object) this; + MobEffect glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + if (glimmering != null && self.hasEffect(glimmering)) { + cir.setReturnValue(false); + } + } + + // 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()) { + return; + } + + LivingEntity self = (LivingEntity) (Object) this; + MobEffect glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + if (glimmering != null && self.hasEffect(glimmering)) { + cir.setReturnValue(false); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlowSquidLumenSpawnMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlowSquidLumenSpawnMixin.java new file mode 100644 index 00000000..56a00a36 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlowSquidLumenSpawnMixin.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.GlowSquid; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.level.ServerLevelAccessor; +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(GlowSquid.class) +public abstract class GlowSquidLumenSpawnMixin { + @Inject(method = "checkGlowSquideSpawnRules", at = @At("HEAD"), cancellable = true) + private static void antarchy$allowGlowSquidsInLumen( + EntityType entityType, + ServerLevelAccessor level, + MobSpawnType spawnType, + BlockPos pos, + RandomSource random, + CallbackInfoReturnable cir + ) { + if (pos.getY() > level.getSeaLevel() - 33 || level.getRawBrightness(pos, 0) != 0) { + return; + } + + if (level.getBlockState(pos).is(Blocks.WATER) || level.getFluidState(pos).is(AntarchyTags.Fluids.LUMEN)) { + cir.setReturnValue(true); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlowVinesUnderLeavesMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlowVinesUnderLeavesMixin.java new file mode 100644 index 00000000..e2543eb4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GlowVinesUnderLeavesMixin.java @@ -0,0 +1,30 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.GrowingPlantBlock; +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; + +@Mixin(GrowingPlantBlock.class) +public abstract class GlowVinesUnderLeavesMixin { + @Inject(method = "canSurvive", at = @At("HEAD"), cancellable = true) + private void antarchy$allowGlowVinesUnderLeaves(BlockState state, LevelReader level, BlockPos pos, CallbackInfoReturnable cir) { + if (!AntarchySettings.glowVinesUnderLeaves()) { + return; + } + if (!state.is(Blocks.CAVE_VINES) && !state.is(Blocks.CAVE_VINES_PLANT)) { + return; + } + + if (level.getBlockState(pos.above()).is(BlockTags.LEAVES)) { + cir.setReturnValue(true); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GoopedStepSoundMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GoopedStepSoundMixin.java new file mode 100644 index 00000000..70e00a93 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GoopedStepSoundMixin.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.effect.GoopedEffectHooks; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +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.CallbackInfo; + +@Mixin(Entity.class) +public abstract class GoopedStepSoundMixin { + @Inject(method = "playStepSound", at = @At("HEAD"), cancellable = true) + private void antarchy$goopedStepSound(BlockPos pos, BlockState state, CallbackInfo ci) { + if (!((Object) this instanceof LivingEntity livingEntity)) { + return; + } + + Holder gooped = GoopedEffectHooks.holder(); + if (gooped == null || !livingEntity.hasEffect(gooped.value())) { + return; + } + + livingEntity.playSound(SoundEvents.SLIME_BLOCK_STEP, 0.15F, 1.0F); + ci.cancel(); + } +} 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 new file mode 100644 index 00000000..fe2bd011 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java @@ -0,0 +1,47 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.InnateEnchantmentHelper; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.GrindstoneMenu; +import net.minecraft.world.item.ItemStack; +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(GrindstoneMenu.class) +public abstract class GrindstoneMenuMixin { + @Shadow @Final + private Container repairSlots; + + @Shadow @Final + private Container resultSlots; + + @Inject(method = "removeNonCurses(Lnet/minecraft/world/item/ItemStack;II)Lnet/minecraft/world/item/ItemStack;", at = @At("HEAD"), cancellable = true) + private void antarchy$preserveInnateEnchantments(ItemStack stack, int damage, int count, CallbackInfoReturnable cir) { + if (InnateEnchantmentHelper.hasInnateNonCurseEnchantments(stack)) { + cir.setReturnValue(InnateEnchantmentHelper.stripOnlyRemovableNonCurseEnchantments(stack)); + } + } + + @Inject(method = "createResult()V", at = @At("RETURN")) + private void antarchy$blockInnateOnlyNoOp(CallbackInfo ci) { + ItemStack firstInput = this.repairSlots.getItem(0); + ItemStack secondInput = this.repairSlots.getItem(1); + if (!firstInput.isEmpty() && secondInput.isEmpty() + && InnateEnchantmentHelper.hasInnateNonCurseEnchantments(firstInput) + && !InnateEnchantmentHelper.hasRemovableNonCurseEnchantments(firstInput)) { + this.resultSlots.setItem(0, ItemStack.EMPTY); + return; + } + + if (firstInput.isEmpty() && !secondInput.isEmpty() + && InnateEnchantmentHelper.hasInnateNonCurseEnchantments(secondInput) + && !InnateEnchantmentHelper.hasRemovableNonCurseEnchantments(secondInput)) { + this.resultSlots.setItem(0, ItemStack.EMPTY); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/MantisClawWallClimbMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/MantisClawWallClimbMixin.java new file mode 100644 index 00000000..9896bdbd --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/MantisClawWallClimbMixin.java @@ -0,0 +1,149 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.MantisClawItem; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +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.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 MantisClawWallClimbMixin extends LivingEntity { + @Unique + private static final int antarchy$MANTIS_CLAW_CLIMB_DURABILITY_INTERVAL = 20; + @Unique + private static final int antarchy$MANTIS_CLAW_FALL_RESET_GRACE_TICKS = 10; + @Unique + private boolean antarchy$mantisClinging; + @Unique + private int antarchy$mantisWallJumpCooldown; + @Unique + private int antarchy$mantisClingDurabilityTicks; + @Unique + private int antarchy$mantisFallResetTicks; + + protected MantisClawWallClimbMixin(EntityType entityType, Level level) { + super(entityType, level); + } + + @Inject(method = "tick", at = @At("TAIL")) + private void antarchy$tickMantisWallCling(CallbackInfo ci) { + if (this.antarchy$mantisWallJumpCooldown > 0) { + this.antarchy$mantisWallJumpCooldown--; + } + if (this.antarchy$mantisFallResetTicks > 0) { + this.antarchy$mantisFallResetTicks--; + this.fallDistance = 0.0F; + } + + if (!this.antarchy$canMantisCling()) { + this.antarchy$mantisClinging = false; + this.antarchy$mantisClingDurabilityTicks = 0; + return; + } + + if (!this.antarchy$mantisClinging && !this.level().isClientSide()) { + this.playSound( + SoundEvents.STONE_BREAK, + 0.45F, + 0.9F + this.getRandom().nextFloat() * 0.1F + ); + } + + Vec3 motion = this.getDeltaMovement(); + double clampedY = motion.y < MantisClawItem.WALL_CLING_FALL_SPEED ? MantisClawItem.WALL_CLING_FALL_SPEED : motion.y; + if (this.jumping && this.antarchy$mantisWallJumpCooldown <= 0) { + clampedY = Math.max(clampedY, MantisClawItem.WALL_CLIMB_JUMP_VELOCITY); + this.antarchy$mantisWallJumpCooldown = 6; + } + + this.setDeltaMovement(motion.x, clampedY, motion.z); + this.hasImpulse = true; + this.fallDistance = 0.0F; + this.antarchy$mantisFallResetTicks = antarchy$MANTIS_CLAW_FALL_RESET_GRACE_TICKS; + this.antarchy$mantisClinging = true; + this.antarchy$damageMantisClawsWhileClimbing(); + } + + @Inject(method = "causeFallDamage", at = @At("HEAD"), cancellable = true) + private void antarchy$preventFallDamageWhileMantisClimbing(float fallDistance, float multiplier, DamageSource source, org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable cir) { + if (!this.antarchy$shouldSuppressMantisFallDamage()) { + return; + } + + this.fallDistance = 0.0F; + cir.setReturnValue(false); + } + + @Unique + private boolean antarchy$canMantisCling() { + Player player = (Player) (Object) this; + return MantisClawItem.isDualWielding(player) + && this.horizontalCollision + && !this.onGround() + && !this.isInWaterOrBubble() + && !this.isPassenger() + && !this.isFallFlying() + && !player.getAbilities().flying + && !player.isSpectator(); + } + + @Unique + private void antarchy$damageMantisClawsWhileClimbing() { + if (this.level().isClientSide()) { + return; + } + + this.antarchy$mantisClingDurabilityTicks++; + if (this.antarchy$mantisClingDurabilityTicks < antarchy$MANTIS_CLAW_CLIMB_DURABILITY_INTERVAL) { + return; + } + this.antarchy$mantisClingDurabilityTicks = 0; + + Player player = (Player) (Object) this; + this.antarchy$damageClaw(player.getMainHandItem(), player, InteractionHand.MAIN_HAND); + this.antarchy$damageClaw(player.getOffhandItem(), player, InteractionHand.OFF_HAND); + } + + @Unique + private void antarchy$damageClaw(ItemStack stack, Player player, InteractionHand hand) { + if (!(stack.getItem() instanceof MantisClawItem)) { + return; + } + + EquipmentSlot slot = hand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND; + if (!stack.isDamageableItem()) { + return; + } + + ItemStack updatedStack = stack.copy(); + int nextDamage = updatedStack.getDamageValue() + 1; + if (nextDamage < updatedStack.getMaxDamage()) { + updatedStack.setDamageValue(nextDamage); + player.setItemSlot(slot, updatedStack); + } else { + player.setItemSlot(slot, ItemStack.EMPTY); + player.broadcastBreakEvent(slot); + } + + if (player instanceof ServerPlayer serverPlayer) { + serverPlayer.containerMenu.broadcastChanges(); + } + } + + @Unique + private boolean antarchy$shouldSuppressMantisFallDamage() { + return this.antarchy$mantisClinging || this.antarchy$mantisFallResetTicks > 0 || this.antarchy$canMantisCling(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/MilkBucketSizeResetMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/MilkBucketSizeResetMixin.java new file mode 100644 index 00000000..70585234 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/MilkBucketSizeResetMixin.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +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.CallbackInfoReturnable; + +@Mixin(LivingEntity.class) +public abstract class MilkBucketSizeResetMixin { + @Inject(method = "removeAllEffects", at = @At("TAIL")) + private void antarchy$resetSizeRayScale(CallbackInfoReturnable cir) { + LivingEntity self = (LivingEntity) (Object) this; + if (self.level().isClientSide) { + return; + } + + SizeRayProjectileEntity.resetScale(self); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/MinecartItemMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/MinecartItemMixin.java new file mode 100644 index 00000000..94cd9679 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/MinecartItemMixin.java @@ -0,0 +1,61 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.block.AbstractAntimetalRailBlock; +import com.craisinlord.antarchy.content.minecart.AntimetalRailHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.AbstractMinecart; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.MinecartItem; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +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(MinecartItem.class) +public abstract class MinecartItemMixin { + @Shadow + @Final + AbstractMinecart.Type type; + + @Inject(method = "useOn", at = @At("HEAD"), cancellable = true) + private void antarchy$placeOnAntimetalRail(UseOnContext context, CallbackInfoReturnable cir) { + Level level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + BlockState state = level.getBlockState(pos); + if (!(state.getBlock() instanceof AbstractAntimetalRailBlock)) { + return; + } + if (level.isClientSide()) { + cir.setReturnValue(InteractionResult.SUCCESS); + return; + } + ServerLevel serverLevel = (ServerLevel) level; + double x = pos.getX() + 0.5D; + double y = AntimetalRailHelper.attachY(pos.getY(), 0); + double z = pos.getZ() + 0.5D; + ItemStack stack = context.getItemInHand(); + Player player = context.getPlayer(); + + AbstractMinecart cart = AbstractMinecart.createMinecart(serverLevel, x, y, z, this.type); + if (cart != null) { + if (stack.hasCustomHoverName()) { + cart.setCustomName(stack.getHoverName()); + } + serverLevel.addFreshEntity(cart); + serverLevel.gameEvent(GameEvent.ENTITY_PLACE, pos, GameEvent.Context.of(player)); + if (player == null || !player.getAbilities().instabuild) { + stack.shrink(1); + } + } + cir.setReturnValue(InteractionResult.sidedSuccess(level.isClientSide())); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/NightmareArmorEffectImmunityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/NightmareArmorEffectImmunityMixin.java new file mode 100644 index 00000000..b1ae701a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/NightmareArmorEffectImmunityMixin.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.CallbackInfoReturnable; + +@Mixin(LivingEntity.class) +public abstract class NightmareArmorEffectImmunityMixin { + @Inject(method = "canBeAffected", at = @At("HEAD"), cancellable = true) + private void antarchy$blockNightmareArmorEffects(MobEffectInstance effectInstance, CallbackInfoReturnable cir) { + LivingEntity livingEntity = (LivingEntity) (Object) this; + if (NightmareArmorItem.isWearingFullSet(livingEntity) + && (effectInstance.getEffect() == MobEffects.WITHER || effectInstance.getEffect() == AntarchyObjects.DREAD.get())) { + cir.setReturnValue(false); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/NightmareSwordDamageMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/NightmareSwordDamageMixin.java new file mode 100644 index 00000000..35040515 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/NightmareSwordDamageMixin.java @@ -0,0 +1,30 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +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.ModifyVariable; + +@Mixin(LivingEntity.class) +public abstract class NightmareSwordDamageMixin { + @ModifyVariable(method = "hurt", at = @At("HEAD"), ordinal = 0, argsOnly = true) + private float antarchy$applyNightmareSwordDamage(float amount, DamageSource source) { + LivingEntity self = (LivingEntity) (Object) this; + if (self.level().isClientSide) { + return amount; + } + + if (!(source.getEntity() instanceof Player attacker)) { + return amount; + } + + if (!(attacker.getMainHandItem().getItem() instanceof NightmareSwordItem)) { + return amount; + } + + return NightmareSwordItem.calculateDamage(attacker); + } +} 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 new file mode 100644 index 00000000..7eaba1af --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.recipe.CustomBrewingRecipes; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.alchemy.PotionBrewing; +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(PotionBrewing.class) +public abstract class PotionBrewingMixin { + @Inject(method = "hasMix", at = @At("HEAD"), cancellable = true) + private static void antarchy$hasCustomMix(ItemStack input, ItemStack ingredient, CallbackInfoReturnable cir) { + if (CustomBrewingRecipes.hasMix(input, ingredient)) { + cir.setReturnValue(true); + } + } + + @Inject(method = "mix", at = @At("HEAD"), cancellable = true) + private static void antarchy$mixCustomRecipe(ItemStack ingredient, ItemStack input, CallbackInfoReturnable cir) { + ItemStack output = CustomBrewingRecipes.getOutput(input, ingredient); + if (!output.isEmpty()) { + cir.setReturnValue(output); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RedStoneWireBlockMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RedStoneWireBlockMixin.java new file mode 100644 index 00000000..e02545c3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/RedStoneWireBlockMixin.java @@ -0,0 +1,103 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.block.BluestoneBlock; +import com.craisinlord.antarchy.content.block.BluestoneComparatorBlock; +import com.craisinlord.antarchy.content.block.BluestoneRepeaterBlock; +import com.craisinlord.antarchy.content.block.BluestoneSignalHelper; +import com.craisinlord.antarchy.content.block.BluestoneTorchBlock; +import com.craisinlord.antarchy.content.block.BluestoneWireBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.RedStoneWireBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.RedstoneSide; +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.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(RedStoneWireBlock.class) +public class RedStoneWireBlockMixin { + @Inject(method = "shouldConnectTo(Lnet/minecraft/world/level/block/state/BlockState;)Z", at = @At("HEAD"), cancellable = true) + private static void antarchy$rejectBluestone(BlockState state, CallbackInfoReturnable cir) { + if (antarchy$isBluestoneBlock(state)) { + cir.setReturnValue(false); + } + } + + @Inject(method = "shouldConnectTo(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Direction;)Z", at = @At("HEAD"), cancellable = true) + private static void antarchy$rejectBluestone(BlockState state, Direction direction, CallbackInfoReturnable cir) { + if (antarchy$isBluestoneBlock(state)) { + cir.setReturnValue(false); + } + } + + @Inject(method = "getConnectingSide", at = @At("HEAD"), cancellable = true) + private void antarchy$blockBluestoneSide(BlockGetter level, BlockPos pos, Direction direction, CallbackInfoReturnable cir) { + BlockPos sidePos = pos.relative(direction); + if (antarchy$isBluestoneConnection(level, sidePos)) { + cir.setReturnValue(RedstoneSide.NONE); + } + } + + @Redirect( + method = "calculateTargetStrength", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/Level;getBestNeighborSignal(Lnet/minecraft/core/BlockPos;)I" + ) + ) + private int antarchy$ignoreBluestonePowerForRedstone(Level level, BlockPos pos) { + int signal = 0; + for (Direction direction : Direction.values()) { + BlockPos neighborPos = pos.relative(direction); + BlockState neighborState = level.getBlockState(neighborPos); + if (antarchy$isBluestoneBlock(neighborState)) { + continue; + } + signal = Math.max(signal, neighborState.getSignal(level, neighborPos, direction)); + if (neighborState.isRedstoneConductor(level, neighborPos)) { + signal = Math.max(signal, antarchy$getDirectSignalToExcludingBluestone(level, neighborPos)); + } + if (signal >= 15) { + return 15; + } + } + return signal; + } + + private int antarchy$getDirectSignalToExcludingBluestone(Level level, BlockPos pos) { + int signal = 0; + for (Direction direction : Direction.values()) { + BlockPos neighborPos = pos.relative(direction); + BlockState neighborState = level.getBlockState(neighborPos); + if (antarchy$isBluestoneBlock(neighborState)) { + continue; + } + signal = Math.max(signal, neighborState.getDirectSignal(level, neighborPos, direction)); + if (signal >= 15) { + return 15; + } + } + return signal; + } + + private static boolean antarchy$isBluestoneBlock(BlockState state) { + return state.is(AntarchyTags.Blocks.BLUESTONE_COMPONENTS) + || state.getBlock() instanceof BluestoneWireBlock + || state.getBlock() instanceof BluestoneRepeaterBlock + || state.getBlock() instanceof BluestoneComparatorBlock + || state.getBlock() instanceof BluestoneTorchBlock + || state.getBlock() instanceof BluestoneBlock; + } + + private static boolean antarchy$isBluestoneConnection(BlockGetter level, BlockPos pos) { + return antarchy$isBluestoneBlock(level.getBlockState(pos)) + || antarchy$isBluestoneBlock(level.getBlockState(pos.above())) + || antarchy$isBluestoneBlock(level.getBlockState(pos.below())); + } +} 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 new file mode 100644 index 00000000..1ae1efb7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/ServerPlayerGameModeMixin.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.ultimate.UltimateToolHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.level.ServerPlayerGameMode; +import net.minecraft.world.level.block.state.BlockState; +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(ServerPlayerGameMode.class) +/* + * Keeps custom sapling stage updates synced like vanilla. + */ +public abstract class ServerPlayerGameModeMixin { + @Shadow protected ServerLevel level; + @Shadow @Final protected ServerPlayer player; + @Shadow private int gameTicks; + @Shadow private int lastSentState; + + @Inject(method = "incrementDestroyProgress", at = @At("HEAD")) + private void antarchy$mirror3x3DestroyProgress(BlockState state, BlockPos pos, int lastDestroyProgressTicks, CallbackInfoReturnable cir) { + int elapsed = this.gameTicks - lastDestroyProgressTicks; + float progress = state.getDestroyProgress(this.player, this.player.level(), pos) * (elapsed + 1); + int stage = (int) (progress * 10.0F); + if (stage != this.lastSentState && stage >= 0 && stage < 10) { + UltimateToolHelper.broadcastAreaMiningProgress(this.player, this.level, pos, stage); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/SpongeAntiwaterMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/SpongeAntiwaterMixin.java new file mode 100644 index 00000000..f1d18295 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/SpongeAntiwaterMixin.java @@ -0,0 +1,76 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BucketPickup; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.SpongeBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +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(SpongeBlock.class) +public abstract class SpongeAntiwaterMixin { + private static final int MAX_DEPTH = 6; + private static final int MAX_COUNT = 65; + private static final Direction[] ALL_DIRECTIONS = Direction.values(); + + @Inject(method = "tryAbsorbWater", at = @At("TAIL")) + private void antarchy$tryAbsorbAntiwater(Level level, BlockPos pos, CallbackInfo ci) { + if (!level.getBlockState(pos).is(Blocks.SPONGE)) { + return; + } + + if (antarchy$removeAntiwaterBreadthFirstSearch(level, pos) > 1) { + level.setBlock(pos, Blocks.WET_SPONGE.defaultBlockState(), 2); + level.playSound(null, pos, SoundEvents.BUCKET_FILL, SoundSource.BLOCKS, 1.0F, 1.0F); + } + } + + private static int antarchy$removeAntiwaterBreadthFirstSearch(Level level, BlockPos origin) { + return BlockPos.breadthFirstTraversal( + origin, + MAX_DEPTH, + MAX_COUNT, + (pos, consumer) -> { + for (Direction direction : ALL_DIRECTIONS) { + consumer.accept(pos.relative(direction)); + } + }, + pos -> antarchy$tryRemoveAntiwaterAt(level, origin, pos) + ); + } + + private static boolean antarchy$tryRemoveAntiwaterAt(Level level, BlockPos origin, BlockPos pos) { + if (pos.equals(origin)) { + return true; + } + + BlockState state = level.getBlockState(pos); + FluidState fluidState = level.getFluidState(pos); + if (!fluidState.is(AntarchyTags.Fluids.ANTIWATER)) { + return false; + } + + Block block = state.getBlock(); + if (block instanceof BucketPickup bucketPickup && !bucketPickup.pickupBlock(level, pos, state).isEmpty()) { + return true; + } + + if (block instanceof LiquidBlock) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 3); + return true; + } + + return false; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java new file mode 100644 index 00000000..bb04cbef --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.Enchantments; +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(Enchantment.class) +public abstract class SquidzookaMultishotMixin { + @Inject(method = "canEnchant", at = @At("HEAD"), cancellable = true) + private void antarchy$allowSquidzookaForMultishot(ItemStack stack, CallbackInfoReturnable cir) { + if (antarchy$isMultishot() && antarchy$isMultishotEnchantable(stack)) { + cir.setReturnValue(true); + } + } + + @Unique + private boolean antarchy$isMultishot() { + return (Enchantment) (Object) this == Enchantments.MULTISHOT; + } + + @Unique + private boolean antarchy$isMultishotEnchantable(ItemStack stack) { + return stack.is(AntarchyTags.Items.MULTISHOT_ENCHANTABLE); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/StinkyCrouchMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/StinkyCrouchMixin.java new file mode 100644 index 00000000..2fbf2d71 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/StinkyCrouchMixin.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +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(Entity.class) +public abstract class StinkyCrouchMixin { + @Inject(method = "setShiftKeyDown", at = @At("HEAD")) + private void antarchy$playStinkyCrouchSound(boolean crouching, CallbackInfo ci) { + Entity entity = (Entity) (Object) this; + if (!crouching || entity.isShiftKeyDown() || !(entity instanceof Player player) || player.isSpectator() + || !(player.level() instanceof ServerLevel level) || !player.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + return; + } + + level.playSound( + null, + player.getX(), + player.getY(), + player.getZ(), + AntarchySoundEvents.STINK_BUG_FART.get(), + SoundSource.PLAYERS, + 0.85F, + 0.9F + level.random.nextFloat() * 0.2F + ); + } +} 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 new file mode 100644 index 00000000..8cd675a7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java @@ -0,0 +1,20 @@ +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/TigerEyeCamouflageMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeCamouflageMixin.java new file mode 100644 index 00000000..6d444490 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeCamouflageMixin.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageAccess; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(Player.class) +public abstract class TigerEyeCamouflageMixin implements TigerEyeCamouflageAccess { + @Unique private boolean antarchy$tigerEyeCamouflageActive; + @Unique private int antarchy$tigerEyeCamouflageBlockStateId; + + @Override + public boolean antarchy$isTigerEyeCamouflageActive() { + return antarchy$tigerEyeCamouflageActive; + } + + @Override + public void antarchy$setTigerEyeCamouflageActive(boolean active) { + antarchy$tigerEyeCamouflageActive = active; + } + + @Override + public int antarchy$getTigerEyeCamouflageBlockStateId() { + return antarchy$tigerEyeCamouflageBlockStateId; + } + + @Override + public void antarchy$setTigerEyeCamouflageBlockStateId(int blockStateId) { + antarchy$tigerEyeCamouflageBlockStateId = blockStateId; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeVisibilityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeVisibilityMixin.java new file mode 100644 index 00000000..3a4e5494 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeVisibilityMixin.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +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; +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 TigerEyeVisibilityMixin { + @Inject(method = "getVisibilityPercent", at = @At("RETURN"), cancellable = true) + private void antarchy$applyTigerEyeStealth(Entity observer, CallbackInfoReturnable cir) { + if (!((Object) this instanceof Player player)) { + return; + } + if (!(observer instanceof Mob mob)) { + return; + } + if (!TigerEyeArmorUtil.shouldReduceDetection(mob, player)) { + return; + } + cir.setReturnValue(cir.getReturnValueD() * (1.0D - TigerEyeArmorUtil.getDetectionReduction(player))); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/VillagerTradesMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/VillagerTradesMixin.java new file mode 100644 index 00000000..f46b0d23 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/VillagerTradesMixin.java @@ -0,0 +1,94 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Supplier; +import net.minecraft.world.entity.npc.VillagerProfession; +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 org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +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(VillagerTrades.class) +public abstract class VillagerTradesMixin { + @Shadow @Mutable @Final private static Map TRADES; + @Shadow @Mutable @Final private static Int2ObjectMap WANDERING_TRADER_TRADES; + + @Inject(method = "", at = @At("TAIL")) + private static void antarchy$appendTrades(CallbackInfo ci) { + appendVillagerTrade(VillagerProfession.FARMER, 1, + emeraldForItems(AntarchyObjects.CORN, 20, 16, 2)); + appendVillagerTrade(VillagerProfession.BUTCHER, 1, + emeraldForItems(AntarchyObjects.COOKED_CORNDOG, 5, 16, 2)); + appendWanderingTrade(0, + itemsForEmerald(AntarchyObjects.CORN_SEEDS, 1, 3, 12, 2)); + } + + private static VillagerTrades.ItemListing emeraldForItems(Supplier itemSupplier, int count, int maxUses, int villagerXp) { + return (trader, random) -> new MerchantOffer(new ItemStack(itemSupplier.get(), count), new ItemStack(Items.EMERALD), maxUses, villagerXp, 0.05F); + } + + private static VillagerTrades.ItemListing itemsForEmerald(Supplier itemSupplier, int emeraldCost, int count, int maxUses, int villagerXp) { + return (trader, random) -> new MerchantOffer(new ItemStack(Items.EMERALD, emeraldCost), new ItemStack(itemSupplier.get(), count), maxUses, villagerXp, 0.05F); + } + + @SuppressWarnings("unchecked") + private static void appendVillagerTrade(VillagerProfession profession, int level, VillagerTrades.ItemListing listing) { + Object tradeValue = TRADES.get(profession); + if (!(tradeValue instanceof Map tradeMap)) { + return; + } + + Int2ObjectOpenHashMap copy = new Int2ObjectOpenHashMap<>(); + for (Map.Entry entry : tradeMap.entrySet()) { + if (entry.getKey() instanceof Integer key && entry.getValue() instanceof VillagerTrades.ItemListing[] listings) { + copy.put(key, listings); + } + } + + VillagerTrades.ItemListing[] existing = copy.get(level); + VillagerTrades.ItemListing[] merged = Arrays.copyOf(existing == null ? new VillagerTrades.ItemListing[0] : existing, + (existing == null ? 0 : existing.length) + 1); + merged[merged.length - 1] = listing; + copy.put(level, merged); + Map rebuilt = new HashMap<>(); + for (Object entryObject : TRADES.entrySet()) { + Map.Entry entry = (Map.Entry) entryObject; + if (entry.getKey() != profession) { + rebuilt.put(entry.getKey(), entry.getValue()); + } + } + rebuilt.put(profession, copy); + TRADES = rebuilt; + } + + @SuppressWarnings("unchecked") + private static void appendWanderingTrade(int group, VillagerTrades.ItemListing listing) { + Int2ObjectOpenHashMap copy = new Int2ObjectOpenHashMap<>(); + for (Object entryObject : ((Map) WANDERING_TRADER_TRADES).entrySet()) { + Map.Entry entry = (Map.Entry) entryObject; + if (entry.getKey() instanceof Integer key && entry.getValue() instanceof VillagerTrades.ItemListing[] listings) { + copy.put((int) key, listings); + } + } + + VillagerTrades.ItemListing[] existing = copy.get(group); + VillagerTrades.ItemListing[] merged = Arrays.copyOf(existing == null ? new VillagerTrades.ItemListing[0] : existing, + (existing == null ? 0 : existing.length) + 1); + merged[merged.length - 1] = listing; + copy.put(group, merged); + WANDERING_TRADER_TRADES = copy; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/WaterlilyLumenMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/WaterlilyLumenMixin.java new file mode 100644 index 00000000..0ac9787b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/WaterlilyLumenMixin.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.WaterlilyBlock; +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; + +@Mixin(WaterlilyBlock.class) +public abstract class WaterlilyLumenMixin { + @Inject( + method = "mayPlaceOn(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;)Z", + at = @At("HEAD"), + cancellable = true + ) + private void antarchy$allowLumenSupport(BlockState state, BlockGetter level, BlockPos pos, CallbackInfoReturnable cir) { + if (level.getFluidState(pos).is(AntarchyTags.Fluids.LUMEN)) { + cir.setReturnValue(true); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/AbstractMinecartRendererMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/AbstractMinecartRendererMixin.java new file mode 100644 index 00000000..16777d5a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/AbstractMinecartRendererMixin.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.minecart.AntimetalMinecartAccess; +import com.craisinlord.antarchy.content.minecart.AntimetalRailHelper; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.MinecartRenderer; +import net.minecraft.world.entity.vehicle.AbstractMinecart; +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(MinecartRenderer.class) +public abstract class AbstractMinecartRendererMixin { + private static final double ANTARCHY$FLIP_PIVOT_Y = AntimetalRailHelper.CART_MODEL_PIVOT_Y; + private static final double ANTARCHY$MODEL_DROP = 0.1875D; + + @Inject(method = "render(Lnet/minecraft/world/entity/vehicle/AbstractMinecart;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", at = @At("HEAD")) + private void antarchy$flipHead(T entity, float yaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight, CallbackInfo ci) { + if (entity instanceof AntimetalMinecartAccess access && access.antarchy$isOnAntimetalRail()) { + poseStack.pushPose(); + poseStack.translate(0.0D, -ANTARCHY$MODEL_DROP, 0.0D); + poseStack.translate(0.0D, ANTARCHY$FLIP_PIVOT_Y, 0.0D); + poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F)); + poseStack.translate(0.0D, -ANTARCHY$FLIP_PIVOT_Y, 0.0D); + } + } + + @Inject(method = "render(Lnet/minecraft/world/entity/vehicle/AbstractMinecart;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", at = @At("TAIL")) + private void antarchy$flipTail(T entity, float yaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight, CallbackInfo ci) { + if (entity instanceof AntimetalMinecartAccess access && access.antarchy$isOnAntimetalRail()) { + poseStack.popPose(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynHordeFogMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynHordeFogMixin.java new file mode 100644 index 00000000..a29d9a96 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynHordeFogMixin.java @@ -0,0 +1,39 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.HordeClientState; +import com.mojang.blaze3d.shaders.FogShape; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Camera; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.util.Mth; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.material.FogType; +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(FogRenderer.class) +public abstract class CavarynHordeFogMixin { + private static final ResourceKey CAVARYN = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation("antarchy", "cavaryn") + ); + + @Inject(method = "setupFog", at = @At("TAIL")) + private static void antarchy$hordeFogDistance(Camera camera, FogRenderer.FogMode mode, float renderDistance, boolean thickFog, float partialTick, CallbackInfo ci) { + float intensity = HordeClientState.intensity(); + if (intensity <= 0.01F || camera.getEntity() == null || !camera.getEntity().level().dimension().equals(CAVARYN) || camera.getFluidInCamera() != FogType.NONE) { + return; + } + + float fogStart = Mth.lerp(intensity, Math.min(renderDistance * 0.55F, 48.0F), 3.5F); + float fogEnd = Mth.lerp(intensity, Math.min(renderDistance, 128.0F), 36.0F); + RenderSystem.setShaderFogStart(Math.min(fogStart, fogEnd * 0.65F)); + RenderSystem.setShaderFogEnd(fogEnd); + RenderSystem.setShaderFogShape(FogShape.SPHERE); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynHordeLightTextureMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynHordeLightTextureMixin.java new file mode 100644 index 00000000..1feceb2d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynHordeLightTextureMixin.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.HordeClientState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.dimension.DimensionType; +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(LightTexture.class) +public abstract class CavarynHordeLightTextureMixin { + private static final ResourceKey CAVARYN = ResourceKey.create( + Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "cavaryn") + ); + + @Inject(method = "getBrightness", at = @At("RETURN"), cancellable = true) + private static void antarchy$hordeAmbientBrightness(DimensionType dimensionType, int lightLevel, CallbackInfoReturnable cir) { + Minecraft minecraft = Minecraft.getInstance(); + float intensity = HordeClientState.intensity(); + if (intensity <= 0.01F || minecraft.level == null || !minecraft.level.dimension().equals(CAVARYN)) { + return; + } + + float original = cir.getReturnValue(); + float hordeAmbient = 0.015F + 0.55F * intensity; + cir.setReturnValue(Mth.clamp(original + hordeAmbient * (1.0F - original), 0.0F, 1.0F)); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynSkyMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynSkyMixin.java new file mode 100644 index 00000000..cb11b455 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynSkyMixin.java @@ -0,0 +1,62 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.renderer.CavarynSkyRenderer; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexBuffer; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.LevelRenderer; +import org.joml.Matrix4f; +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(LevelRenderer.class) +public abstract class CavarynSkyMixin { + @Shadow + @Final + private Minecraft minecraft; + + @Shadow + private ClientLevel level; + + @Shadow + @Final + private VertexBuffer skyBuffer; + + @Shadow + @Final + private VertexBuffer darkBuffer; + + @Inject(method = "renderSky", at = @At("HEAD"), cancellable = true) + private void antarchy$renderCavarynSky(PoseStack poseStack, Matrix4f projectionMatrix, float partialTick, Camera camera, boolean isFoggy, Runnable setupFog, CallbackInfo ci) { + if (this.level == null || !CavarynSkyRenderer.shouldRender(this.level)) { + return; + } + + CavarynSkyRenderer.render( + this.minecraft, + this.level, + poseStack, + projectionMatrix, + partialTick, + camera, + isFoggy, + setupFog, + this.skyBuffer, + this.darkBuffer + ); + ci.cancel(); + } + + @Inject(method = "renderClouds", at = @At("HEAD"), cancellable = true) + private void antarchy$skipCavarynClouds(PoseStack poseStack, Matrix4f projectionMatrix, float partialTick, double camX, double camY, double camZ, CallbackInfo ci) { + if (this.level != null && CavarynSkyRenderer.shouldRender(this.level)) { + 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 new file mode 100644 index 00000000..02939a73 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/CustomBossBarMixin.java @@ -0,0 +1,43 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.hud.CustomBossBarRenderer; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.BossHealthOverlay; +import net.minecraft.client.gui.components.LerpingBossEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.world.BossEvent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyConstant; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(BossHealthOverlay.class) +public abstract class CustomBossBarMixin { + @Inject( + method = "drawBar(Lnet/minecraft/client/gui/GuiGraphics;IILnet/minecraft/world/BossEvent;)V", + at = @At("HEAD"), + cancellable = true + ) + private void antarchy$drawCustomBossBar(GuiGraphics guiGraphics, int x, int y, BossEvent bossEvent, CallbackInfo ci) { + if (CustomBossBarRenderer.render(guiGraphics, x, y, bossEvent)) { + ci.cancel(); + } + } + + @Redirect( + method = "render", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/LerpingBossEvent;getName()Lnet/minecraft/network/chat/Component;") + ) + private Component antarchy$hideNameForCustomBossBar(LerpingBossEvent bossEvent) { + return CustomBossBarRenderer.isCustomBoss(bossEvent) ? Component.empty() : bossEvent.getName(); + } + + @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; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/DimensionMusicMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/DimensionMusicMixin.java new file mode 100644 index 00000000..5be09eb9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/DimensionMusicMixin.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.mixins.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.Music; +import net.minecraft.world.level.biome.Biome; +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(Minecraft.class) +public abstract class DimensionMusicMixin { + private static final ResourceLocation CAVARYN_DIMENSION = + new ResourceLocation("antarchy", "cavaryn"); + private static final ResourceLocation THORAXIS_DIMENSION = + new ResourceLocation("antarchy", "thoraxis"); + + @Inject(method = "getSituationalMusic", at = @At("HEAD"), cancellable = true) + private void antarchy$useDimensionBiomeMusic(CallbackInfoReturnable cir) { + Minecraft minecraft = (Minecraft) (Object) this; + ClientLevel level = minecraft.level; + if (level == null) { + return; + } + + ResourceLocation dimensionId = level.dimension().location(); + if (!dimensionId.equals(CAVARYN_DIMENSION) && !dimensionId.equals(THORAXIS_DIMENSION)) { + return; + } + + BlockPos musicPos = minecraft.player != null ? minecraft.player.blockPosition() : BlockPos.containing(minecraft.gameRenderer.getMainCamera().getPosition()); + Biome biome = level.getBiome(musicPos).value(); + biome.getBackgroundMusic().ifPresent(cir::setReturnValue); + } +} 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 new file mode 100644 index 00000000..ebb156c6 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ElythiaSkyMixin.java @@ -0,0 +1,60 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.renderer.ElythiaSkyRenderer; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexBuffer; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.LevelRenderer; +import org.joml.Matrix4f; +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(LevelRenderer.class) +public abstract class ElythiaSkyMixin { + @Shadow + @Final + private Minecraft minecraft; + + @Shadow + private ClientLevel level; + + @Shadow + @Final + private VertexBuffer starBuffer; + + @Shadow + @Final + private VertexBuffer skyBuffer; + + @Shadow + @Final + private VertexBuffer darkBuffer; + + @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 || !ElythiaSkyRenderer.shouldRender(this.level)) { + return; + } + + ElythiaSkyRenderer.render( + this.minecraft, + this.level, + poseStack, + projectionMatrix, + partialTick, + camera, + isFoggy, + setupFog, + this.skyBuffer, + this.darkBuffer, + this.starBuffer + ); + ci.cancel(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ElytraModelAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ElytraModelAccessor.java new file mode 100644 index 00000000..9e512000 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ElytraModelAccessor.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.mixins.client; + +import net.minecraft.client.model.ElytraModel; +import net.minecraft.client.model.geom.ModelPart; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ElytraModel.class) +public interface ElytraModelAccessor { + @Accessor("leftWing") + ModelPart antarchy$getLeftWing(); + + @Accessor("rightWing") + ModelPart antarchy$getRightWing(); +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityLightProbeMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityLightProbeMixin.java new file mode 100644 index 00000000..9665f87d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityLightProbeMixin.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.minecart.AntimetalMinecartAccess; +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; + +@Mixin(Entity.class) +public abstract class EntityLightProbeMixin { + @Inject(method = "getLightProbePosition", at = @At("RETURN"), cancellable = true) + private void antarchy$mirrorLightProbe(float partialTick, CallbackInfoReturnable cir) { + if ((Object) this instanceof AntimetalMinecartAccess access && access.antarchy$isOnAntimetalRail()) { + Entity self = (Entity) (Object) this; + Vec3 original = cir.getReturnValue(); + double mirroredY = original.y - 2.0D * self.getEyeHeight(); + cir.setReturnValue(new Vec3(original.x, mirroredY, original.z)); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ExperimentalSettingsPopupMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ExperimentalSettingsPopupMixin.java new file mode 100644 index 00000000..a0e89d51 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ExperimentalSettingsPopupMixin.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.mojang.serialization.Lifecycle; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen; +import net.minecraft.client.gui.screens.worldselection.WorldOpenFlows; +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(WorldOpenFlows.class) +public abstract class ExperimentalSettingsPopupMixin { + @Inject(method = "confirmWorldCreation", at = @At("HEAD"), cancellable = true) + private static void antarchy$skipExperimentalSettingsPopup(Minecraft minecraft, CreateWorldScreen screen, Lifecycle lifecycle, Runnable callback, boolean skipWarnings, CallbackInfo ci) { + if (AntarchySettings.experimentalSettingsPopupDisabled() && lifecycle == Lifecycle.experimental() && !skipWarnings) { + callback.run(); + ci.cancel(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/FrogRendererElythiaMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/FrogRendererElythiaMixin.java new file mode 100644 index 00000000..899a3a71 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/FrogRendererElythiaMixin.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.entity.ElythiaFrog; +import net.minecraft.client.model.FrogModel; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.client.renderer.entity.FrogRenderer; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.animal.frog.Frog; +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(FrogRenderer.class) +public abstract class FrogRendererElythiaMixin extends MobRenderer> { + protected FrogRendererElythiaMixin(EntityRendererProvider.Context context, FrogModel model, float shadowRadius) { + super(context, model, shadowRadius); + } + + @Inject(method = "getTextureLocation(Lnet/minecraft/world/entity/animal/frog/Frog;)Lnet/minecraft/resources/ResourceLocation;", at = @At("HEAD"), cancellable = true) + private void antarchy$useElythiaTexture(Frog frog, CallbackInfoReturnable cir) { + if (!ElythiaFrog.isElythiaFrog(frog)) { + return; + } + + cir.setReturnValue(ElythiaFrog.TEXTURE); + } +} 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 new file mode 100644 index 00000000..3cdd149d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/GlimmeringTranslucencyMixin.java @@ -0,0 +1,74 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.LivingEntity; +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.Redirect; +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 + private boolean antarchy$glimmeringActive; + + @Inject( + method = "render(Lnet/minecraft/world/entity/LivingEntity;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", + at = @At("HEAD") + ) + private void antarchy$captureGlimmering(LivingEntity entity, float limbSwing, float partialTick, + com.mojang.blaze3d.vertex.PoseStack poseStack, + net.minecraft.client.renderer.MultiBufferSource buffer, + int packedLight, CallbackInfo ci) { + MobEffect glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + this.antarchy$glimmeringActive = glimmering != null && entity.hasEffect(glimmering); + } + + @Redirect( + method = "render(Lnet/minecraft/world/entity/LivingEntity;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/LivingEntityRenderer;getRenderType(Lnet/minecraft/world/entity/LivingEntity;ZZZ)Lnet/minecraft/client/renderer/RenderType;" + ) + ) + private RenderType antarchy$forceTranslucentRenderType(LivingEntityRenderer self, LivingEntity entity, + boolean bodyVisible, boolean translucent, boolean glowingEffect) { + if (this.antarchy$glimmeringActive) { + var texture = Minecraft.getInstance().getEntityRenderDispatcher().getRenderer(entity).getTextureLocation(entity); + return RenderType.entityTranslucent(texture); + } + return this.getRenderType((T) entity, bodyVisible, translucent, glowingEffect); + } + + @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( + value = "INVOKE", + target = "Lnet/minecraft/client/model/EntityModel;renderToBuffer(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;IIFFFF)V" + ), + index = 7 + ) + private float antarchy$applyGlimmeringAlpha(float alpha) { + if (!this.antarchy$glimmeringActive) { + return alpha; + } + return GLIMMERING_ALPHA; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/KrakensGraspChargePoseMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/KrakensGraspChargePoseMixin.java new file mode 100644 index 00000000..40130b60 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/KrakensGraspChargePoseMixin.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.item.KrakensGraspItem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.layers.ItemInHandLayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.entity.LivingEntity; +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.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ItemInHandLayer.class) +public class KrakensGraspChargePoseMixin { + + @Inject( + method = "renderArmWithItem", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/model/ArmedModel;translateToHand(Lnet/minecraft/world/entity/HumanoidArm;Lcom/mojang/blaze3d/vertex/PoseStack;)V", + shift = At.Shift.AFTER + ) + ) + private void antarchy$fixKrakensGraspChargePose( + LivingEntity entity, ItemStack stack, ItemDisplayContext displayContext, HumanoidArm arm, + PoseStack poseStack, MultiBufferSource buffer, int light, CallbackInfo ci) { + if (isChargingKrakensGraspWithArm(entity, arm)) { + poseStack.mulPose(Axis.XP.rotationDegrees(162.0F)); + poseStack.translate(0.0D, -1.0D, 0.0D); + } + } + + private static boolean isChargingKrakensGraspWithArm(LivingEntity entity, HumanoidArm arm) { + if (!entity.isUsingItem() || !(entity.getUseItem().getItem() instanceof KrakensGraspItem)) { + return false; + } + + InteractionHand usedHand = entity.getUsedItemHand(); + boolean usedHandIsMain = usedHand == InteractionHand.MAIN_HAND; + HumanoidArm usedArm = usedHandIsMain == (entity.getMainArm() == HumanoidArm.RIGHT) ? HumanoidArm.RIGHT : HumanoidArm.LEFT; + return usedArm == arm; + } +} 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 new file mode 100644 index 00000000..538f65c1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/LightningBoltRendererMixin.java @@ -0,0 +1,44 @@ +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/MountedVehicleCameraMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/MountedVehicleCameraMixin.java new file mode 100644 index 00000000..e72b132e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/MountedVehicleCameraMixin.java @@ -0,0 +1,49 @@ +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.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArgs; +import org.spongepowered.asm.mixin.injection.invoke.arg.Args; + +@Mixin(Camera.class) +public abstract class MountedVehicleCameraMixin { + @Shadow + private Entity entity; + + @ModifyArgs( + method = "setup", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;move(FFF)V") + ) + 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; + } + + Entity vehicle = this.entity.getVehicle(); + if (vehicle instanceof HerculesBeetleEntity) { + args.set(0, (Float) args.get(0) * 1.45F); + args.set(1, (Float) args.get(1) + 0.2F); + args.set(2, (Float) args.get(2) + 0.45F); + return; + } + +// if (vehicle instanceof DorrieEntity) { +// args.set(0, (Float) args.get(0) * 0.25F); +// args.set(1, (Float) args.get(1) + 0.1F); +// args.set(2, (Float) args.get(2) + 0.55F); +// } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ParalyzedMouseTurnMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ParalyzedMouseTurnMixin.java new file mode 100644 index 00000000..a3f3619e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ParalyzedMouseTurnMixin.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.client.Minecraft; +import net.minecraft.client.MouseHandler; +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(MouseHandler.class) +public abstract class ParalyzedMouseTurnMixin { + @Shadow + @Final + private Minecraft minecraft; + + @Inject(method = "turnPlayer", at = @At("HEAD"), cancellable = true) + private void antarchy$cancelMouseLookWhileParalyzed(CallbackInfo ci) { + if (this.minecraft.player != null && this.minecraft.player.hasEffect(AntarchyObjects.PARALYZED_EFFECT.get())) { + ci.cancel(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererFireVisualMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererFireVisualMixin.java new file mode 100644 index 00000000..4b57109c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererFireVisualMixin.java @@ -0,0 +1,46 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.fire.AntarchyFireVisualAccess; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ScreenEffectRenderer; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.resources.ResourceLocation; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Mixin(ScreenEffectRenderer.class) +public abstract class ScreenEffectRendererFireVisualMixin { + private static final ResourceLocation SOUL_FIRE_1 = new ResourceLocation("block/soul_fire_1"); + private static final ResourceLocation DREAM_FIRE_1 = new ResourceLocation(Antarchy.MODID, "block/dream_fire_1"); + + @ModifyVariable(method = "renderFire", at = @At("STORE"), ordinal = 0) + private static TextureAtlasSprite antarchy$swapPlayerFireOverlay( + TextureAtlasSprite original, + Minecraft minecraft, + PoseStack poseStack + ) { + if (!AntarchySettings.entitySpecificFireOverlayEnabled() + || minecraft.player == null + || !(minecraft.player instanceof AntarchyFireVisualAccess access)) { + return original; + } + + return switch (access.antarchy$getFireVisualType()) { + case SOUL -> antarchy$getBlockAtlasSprite(SOUL_FIRE_1); + case DREAM -> antarchy$getBlockAtlasSprite(DREAM_FIRE_1); + case NORMAL -> original; + }; + } + + private static TextureAtlasSprite antarchy$getBlockAtlasSprite(ResourceLocation texture) { + return Minecraft.getInstance() + .getModelManager() + .getAtlas(TextureAtlas.LOCATION_BLOCKS) + .getSprite(texture); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java new file mode 100644 index 00000000..e812287b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.mixins.client; + +import net.minecraft.client.resources.SplashManager; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.util.profiling.ProfilerFiller; +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 java.util.List; + +@Mixin(SplashManager.class) +public abstract class SplashManagerMixin { + @Shadow + @Final + private List splashes; + + @Inject(method = "apply(Ljava/util/List;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;)V", at = @At("TAIL")) + private void antarchy$addCustomSplashes(List splashes, ResourceManager resourceManager, ProfilerFiller profiler, CallbackInfo ci) { + this.splashes.add("Virtual Antsanity!"); + this.splashes.add("Ants! Ants! Ants!"); + this.splashes.add("What is this a center for ants??"); + this.splashes.add("F-ANT-tastic!"); + this.splashes.add("If you squint hard enough, everything looks the same!"); + this.splashes.add("You are very import-ant!"); + this.splashes.add("There are ants in your pants!"); + this.splashes.add("Don't let the bed bugs bite!"); + this.splashes.add("Ants Ants Revolution!"); + this.splashes.add("Rainbow sugar yummy"); + this.splashes.add("Now with inverted gravity!"); + this.splashes.add("Everything we need is already here"); + this.splashes.add("Rub some bacon on it!"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ThoraxisFogMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ThoraxisFogMixin.java new file mode 100644 index 00000000..086e6f9d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/ThoraxisFogMixin.java @@ -0,0 +1,66 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.mojang.blaze3d.shaders.FogShape; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.material.FogType; +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.Shadow; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(FogRenderer.class) +public abstract class ThoraxisFogMixin { + @Shadow private static float fogRed; + @Shadow private static float fogGreen; + @Shadow private static float fogBlue; + + private static final ResourceLocation THORAXIS_DIMENSION = + new ResourceLocation("antarchy", "thoraxis"); + private static final float FOG_RED = 0.18F; + private static final float FOG_GREEN = 0.02F; + private static final float FOG_BLUE = 0.02F; + + @Inject(method = "setupColor", at = @At("TAIL")) + private static void modifyThoraxisFogColor( + net.minecraft.client.Camera camera, + float partialTick, + net.minecraft.client.multiplayer.ClientLevel level, + int renderDistance, + float darkenWorldAmount, + CallbackInfo ci) { + if (!isThoraxis() || camera.getFluidInCamera() != FogType.NONE) { + return; + } + + fogRed = FOG_RED; + fogGreen = FOG_GREEN; + fogBlue = FOG_BLUE; + RenderSystem.clearColor(fogRed, fogGreen, fogBlue, 0.0F); + } + + @Inject(method = "setupFog", at = @At("TAIL")) + private static void modifyThoraxisFog( + net.minecraft.client.Camera camera, + FogRenderer.FogMode fogMode, + float renderDistance, + boolean isFoggy, + float partialTick, + CallbackInfo ci) { + if (!isThoraxis() || camera.getFluidInCamera() != FogType.NONE) { + return; + } + + RenderSystem.setShaderFogStart(0.5F); + RenderSystem.setShaderFogEnd(Math.max(renderDistance, 1024.0F)); + RenderSystem.setShaderFogShape(FogShape.SPHERE); + } + + private static boolean isThoraxis() { + Minecraft mc = Minecraft.getInstance(); + return mc.level != null && mc.level.dimension().location().equals(THORAXIS_DIMENSION); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeArmorHideMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeArmorHideMixin.java new file mode 100644 index 00000000..4f08af03 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeArmorHideMixin.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +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.CallbackInfo; + +@Mixin(HumanoidArmorLayer.class) +public abstract class TigerEyeArmorHideMixin { + @Inject( + method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V", + at = @At("HEAD"), + cancellable = true + ) + private void antarchy$hideArmorWhileCamouflaged(PoseStack poseStack, MultiBufferSource buffer, int packedLight, + LivingEntity entity, float limbSwing, float limbSwingAmount, + float partialTick, float ageInTicks, float netHeadYaw, + float headPitch, CallbackInfo ci) { + if (!(entity instanceof Player player) || !TigerEyeArmorUtil.hasFullSet(player)) { + return; + } + + TigerEyeCamouflageClientState.CamouflageState state = TigerEyeCamouflageClientState.get(player.getId()); + if (state != null && state.active()) { + ci.cancel(); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeNameTagHideMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeNameTagHideMixin.java new file mode 100644 index 00000000..4f4aff3e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeNameTagHideMixin.java @@ -0,0 +1,30 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +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(LivingEntityRenderer.class) +public abstract class TigerEyeNameTagHideMixin { + @Inject( + method = "shouldShowName(Lnet/minecraft/world/entity/LivingEntity;)Z", + at = @At("HEAD"), + cancellable = true + ) + private void antarchy$hideNameWhileCamouflaged(LivingEntity entity, CallbackInfoReturnable cir) { + if (!(entity instanceof Player player) || !TigerEyeArmorUtil.hasFullSet(player)) { + return; + } + + TigerEyeCamouflageClientState.CamouflageState state = TigerEyeCamouflageClientState.get(player.getId()); + if (state != null && state.active()) { + cir.setReturnValue(false); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/WolfRendererGrimMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/WolfRendererGrimMixin.java new file mode 100644 index 00000000..2360ac60 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/client/WolfRendererGrimMixin.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.mixins.client; + +import net.minecraft.client.renderer.entity.WolfRenderer; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.animal.Wolf; +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(WolfRenderer.class) +public abstract class WolfRendererGrimMixin { + @Unique + private static final ResourceLocation ANTARCHY$GRIM_WILD_TEXTURE = new ResourceLocation("antarchy", "textures/entity/grim/grim_spotted.png"); + + @Unique + private static final ResourceLocation ANTARCHY$GRIM_TAME_TEXTURE = new ResourceLocation("antarchy", "textures/entity/grim/grim_spotted_tame.png"); + + @Unique + private static final ResourceLocation ANTARCHY$GRIM_ANGRY_TEXTURE = new ResourceLocation("antarchy", "textures/entity/grim/grim_spotted_angry.png"); + + @Inject( + method = "getTextureLocation(Lnet/minecraft/world/entity/animal/Wolf;)Lnet/minecraft/resources/ResourceLocation;", + at = @At("HEAD"), + cancellable = true + ) + private void antarchy$useGrimTexture(Wolf wolf, CallbackInfoReturnable cir) { + if (!antarchy$isGrim(wolf)) { + return; + } + + if (wolf.isAngry()) { + cir.setReturnValue(ANTARCHY$GRIM_ANGRY_TEXTURE); + return; + } + + cir.setReturnValue(wolf.isTame() ? ANTARCHY$GRIM_TAME_TEXTURE : ANTARCHY$GRIM_WILD_TEXTURE); + } + + @Unique + private static boolean antarchy$isGrim(Wolf wolf) { + return wolf.hasCustomName() && "grim".equalsIgnoreCase(wolf.getName().getString().trim()); + } +} 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 new file mode 100644 index 00000000..9a0c1a6a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/AbstractArrowGravityMixin.java @@ -0,0 +1,46 @@ +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/BucketItemGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BucketItemGravityMixin.java new file mode 100644 index 00000000..6cc293e7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BucketItemGravityMixin.java @@ -0,0 +1,88 @@ +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 new file mode 100644 index 00000000..1f4d60c9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ChunkMapAccessor.java @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..a4786784 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/CrossbowItemGravityMixin.java @@ -0,0 +1,56 @@ +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 new file mode 100644 index 00000000..f29d121a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/DirectionFacingMixin.java @@ -0,0 +1,36 @@ +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 new file mode 100644 index 00000000..0ac4a24f --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityCollisionContextMixin.java @@ -0,0 +1,65 @@ +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 new file mode 100644 index 00000000..0672060e --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityFrameMixin.java @@ -0,0 +1,248 @@ +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 new file mode 100644 index 00000000..f5e88787 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityMixin.java @@ -0,0 +1,275 @@ +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/EntityMoveMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java new file mode 100644 index 00000000..aeb655ef --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java @@ -0,0 +1,243 @@ +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 new file mode 100644 index 00000000..e2dcb868 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ExplosionGravityMixin.java @@ -0,0 +1,42 @@ +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 new file mode 100644 index 00000000..a24cc688 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FallingBlockEntityBlockDataMixin.java @@ -0,0 +1,203 @@ +package com.craisinlord.antarchy.mixins.gravity; + +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.context.DirectionalPlaceContext; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.FallingBlock; +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.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.level.material.Fluids; +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(); + + @WrapOperation( + method = "tick", + at = @org.spongepowered.asm.mixin.injection.At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/Level;setBlock(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;I)Z" + ) + ) + private boolean antarchy$placeDoublePlantCarriedBlock(Level level, BlockPos pos, BlockState state, int flags, Operation original) { + FallingBlockEntity entity = (FallingBlockEntity) (Object) this; + if (!entity.getTags().contains(GravityGunItem.GRAVITY_GUN_CARRIED_BLOCK_TAG) || !this.antarchy$isCarriedDoubleBlock(state)) { + return original.call(level, pos, state, flags); + } + + return this.antarchy$tryPlaceExact(level, pos, state); + } + + @WrapOperation( + method = "tick", + at = @org.spongepowered.asm.mixin.injection.At( + value = "INVOKE", + target = "Lnet/minecraft/world/entity/item/FallingBlockEntity;spawnAtLocation(Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/world/entity/item/ItemEntity;" + ) + ) + private ItemEntity antarchy$preserveBlockEntityDataOnDrop(FallingBlockEntity entity, ItemLike itemLike, Operation original) { + if (entity.getTags().contains(GravityGunItem.GRAVITY_GUN_CARRIED_BLOCK_TAG) && this.antarchy$tryPlaceNearby(entity)) { + return null; + } + + if (this.blockData == null || this.blockData.isEmpty()) { + return original.call(entity, itemLike); + } + + Entity self = (Entity) (Object) this; + ItemStack stack = new ItemStack(itemLike); + if (!(stack.getItem() instanceof BlockItem)) { + return original.call(entity, itemLike); + } + + String blockEntityId = this.blockData.getString("id"); + ResourceLocation blockEntityKey = ResourceLocation.tryParse(blockEntityId); + if (blockEntityKey == null) { + return original.call(entity, itemLike); + } + + BlockEntityType blockEntityType = BuiltInRegistries.BLOCK_ENTITY_TYPE.get(blockEntityKey); + if (blockEntityType == null) { + return original.call(entity, itemLike); + } + + BlockItem.setBlockEntityData(stack, blockEntityType, this.blockData.copy()); + return self.spawnAtLocation(stack); + } + + private boolean antarchy$tryPlaceNearby(FallingBlockEntity entity) { + Entity self = (Entity) (Object) this; + Level level = self.level(); + BlockState fallingState = this.getBlockState(); + if (fallingState.isAir()) { + return false; + } + + List candidates = new ArrayList<>(); + BlockPos basePos = self.blockPosition(); + for (int dx = -1; dx <= 1; dx++) { + for (int dz = -1; dz <= 1; dz++) { + candidates.add(basePos.offset(dx, 0, dz)); + candidates.add(basePos.offset(dx, -1, dz)); + } + } + candidates.sort(Comparator.comparingDouble(pos -> pos.distToCenterSqr(self.position()))); + + for (BlockPos pos : candidates) { + if (!this.antarchy$canPlaceAt(level, pos, fallingState)) { + continue; + } + + BlockState placeState = fallingState; + if (this.antarchy$isCarriedDoubleBlock(placeState)) { + if (this.antarchy$tryPlaceExact(level, pos, placeState)) { + self.discard(); + return true; + } + continue; + } + + if (placeState.hasProperty(BlockStateProperties.WATERLOGGED) && level.getFluidState(pos).getType() == Fluids.WATER) { + placeState = placeState.setValue(BlockStateProperties.WATERLOGGED, true); + } + + if (!level.setBlock(pos, placeState, 3)) { + continue; + } + + this.antarchy$restoreBlockEntityData(level, pos, placeState); + self.discard(); + return true; + } + + return false; + } + + private boolean antarchy$canPlaceAt(Level level, BlockPos pos, BlockState fallingState) { + if (this.antarchy$isCarriedDoubleBlock(fallingState)) { + BlockState existingLower = level.getBlockState(pos); + BlockState existingUpper = level.getBlockState(pos.above()); + boolean canReplaceLower = existingLower.canBeReplaced( + new DirectionalPlaceContext(level, pos, Direction.DOWN, ItemStack.EMPTY, Direction.UP) + ); + boolean canReplaceUpper = existingUpper.canBeReplaced( + new DirectionalPlaceContext(level, pos.above(), Direction.DOWN, ItemStack.EMPTY, Direction.UP) + ); + boolean hasSupport = !FallingBlock.isFree(level.getBlockState(pos.below())); + return canReplaceLower && canReplaceUpper && hasSupport && fallingState.canSurvive(level, pos); + } + + BlockState existingState = level.getBlockState(pos); + boolean canReplace = existingState.canBeReplaced( + new DirectionalPlaceContext(level, pos, Direction.DOWN, ItemStack.EMPTY, Direction.UP) + ); + boolean hasSupport = !FallingBlock.isFree(level.getBlockState(pos.below())); + return canReplace && hasSupport && fallingState.canSurvive(level, pos); + } + + private boolean antarchy$tryPlaceExact(Level level, BlockPos pos, BlockState fallingState) { + if (!this.antarchy$canPlaceAt(level, pos, fallingState)) { + return false; + } + + BlockState lowerState = fallingState.setValue(BlockStateProperties.DOUBLE_BLOCK_HALF, DoubleBlockHalf.LOWER); + BlockState upperState = fallingState.setValue(BlockStateProperties.DOUBLE_BLOCK_HALF, DoubleBlockHalf.UPPER); + if (!level.setBlock(pos, lowerState, 3)) { + return false; + } + if (!level.setBlock(pos.above(), upperState, 3)) { + level.removeBlock(pos, false); + return false; + } + return true; + } + + private boolean antarchy$isCarriedDoubleBlock(BlockState state) { + return state.hasProperty(BlockStateProperties.DOUBLE_BLOCK_HALF) + && state.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.LOWER; + } + + private void antarchy$restoreBlockEntityData(Level level, BlockPos pos, BlockState placedState) { + if (this.blockData == null || this.blockData.isEmpty() || !placedState.hasBlockEntity()) { + return; + } + + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity == null) { + return; + } + + CompoundTag mergedTag = blockEntity.saveWithoutMetadata(); + for (String key : this.blockData.getAllKeys()) { + mergedTag.put(key, this.blockData.get(key).copy()); + } + + blockEntity.load(mergedTag); + blockEntity.setChanged(); + } +} 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 new file mode 100644 index 00000000..29d2f0d7 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FireworkRocketGravityMixin.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.mixins.gravity; + +import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.FireworkRocketEntity; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +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.ModifyVariable; + +@Mixin(FireworkRocketEntity.class) +/* + * Fixes firework boost dir for inverted elytra flight. + */ +public abstract class FireworkRocketGravityMixin { + + @Shadow + @Nullable + private LivingEntity attachedToEntity; + + @ModifyVariable(method = "tick", at = @At(value = "STORE"), ordinal = 0) + private Vec3 antarchy$fixFireworkThrustDirection(Vec3 velocity) { + if (!(this.attachedToEntity instanceof Player player)) return velocity; + if (!AntarchyGravityApi.isGravityInverted(player)) return velocity; + return AntarchyGravityRotationUtil.vecWorldToPlayer( + velocity, + AntarchyGravityApi.getGravityDirection(player) + ); + } +} 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 new file mode 100644 index 00000000..c643f810 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/GroundPathNavigationMixin.java @@ -0,0 +1,36 @@ +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.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 mob = ((PathNavigationAccessor) (Object) this).antarchy$getMob(); + if (!AntarchyGravityApi.isGravityInverted(mob)) { + return; + } + + LOGGER.debug( + "[Path] swap evaluator mob={} maxVisitedNodes={}", + mob.getClass().getSimpleName(), + maxVisitedNodes + ); + + cir.setReturnValue(new PathFinder(new GravityWalkNodeEvaluator(), 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 new file mode 100644 index 00000000..76b5ff93 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java @@ -0,0 +1,253 @@ +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; + } + + @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/MobHurtMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MobHurtMixin.java new file mode 100644 index 00000000..5649f57d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MobHurtMixin.java @@ -0,0 +1,26 @@ +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/PathNavigationAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationAccessor.java new file mode 100644 index 00000000..1a512fef --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationAccessor.java @@ -0,0 +1,19 @@ +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.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(); +} 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 new file mode 100644 index 00000000..e7b1def9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationDebugMixin.java @@ -0,0 +1,133 @@ +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 new file mode 100644 index 00000000..2ea84d5c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java @@ -0,0 +1,65 @@ +package com.craisinlord.antarchy.mixins.gravity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +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.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +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.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) { + 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; + if (!PrimordialArmorItem.hasFullSet(player)) { + original.call(target, strength, x, z); + return; + } + + if (strength <= 0.0D) { + return; + } + + target.hasImpulse = true; + while (x * x + z * z < 1.0E-5D) { + x = (Math.random() - Math.random()) * 0.01D; + z = (Math.random() - Math.random()) * 0.01D; + } + + Vec3 previousMovement = target.getDeltaMovement(); + Vec3 knockback = new Vec3(x, 0.0D, z).normalize().scale(strength); + target.setDeltaMovement( + previousMovement.x / 2.0D - knockback.x, + target.onGround() ? Math.min(0.4D, previousMovement.y / 2.0D + strength) : previousMovement.y, + previousMovement.z / 2.0D - knockback.z + ); + } +} 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 new file mode 100644 index 00000000..8197a55d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerGravityMixin.java @@ -0,0 +1,79 @@ +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/PlayerSneakMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerSneakMixin.java new file mode 100644 index 00000000..d959395c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerSneakMixin.java @@ -0,0 +1,109 @@ +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 new file mode 100644 index 00000000..a8f0a2e3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ProjectileGravityMixin.java @@ -0,0 +1,11 @@ +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/ServerChunkCacheAccessor.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerChunkCacheAccessor.java new file mode 100644 index 00000000..f70ce183 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerChunkCacheAccessor.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.mixins.gravity; + +import net.minecraft.server.level.ChunkMap; +import net.minecraft.server.level.ServerChunkCache; +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 new file mode 100644 index 00000000..0b4f0515 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerEntityAccessor.java @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000..cbbf51ca --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerGamePacketListenerMixin.java @@ -0,0 +1,82 @@ +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 new file mode 100644 index 00000000..70629df2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerPlayerGravityMixin.java @@ -0,0 +1,116 @@ +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 new file mode 100644 index 00000000..77418a3d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java @@ -0,0 +1,11 @@ +package com.craisinlord.antarchy.mixins.gravity; + +import net.minecraft.world.entity.projectile.ThrowableProjectile; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(ThrowableProjectile.class) +/* + * Flips thrown projectile gravity for inverted shooters. + */ +public abstract class ThrowableProjectileGravityMixin { +} 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 new file mode 100644 index 00000000..b5c258e9 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/TrackedEntityAccessor.java @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000..d0e06db1 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java @@ -0,0 +1,100 @@ +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 new file mode 100644 index 00000000..9afe4f83 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/ClientPacketListenerGravityMixin.java @@ -0,0 +1,38 @@ +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 new file mode 100644 index 00000000..cb7c9f3a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java @@ -0,0 +1,114 @@ +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 new file mode 100644 index 00000000..e2ce0408 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/FallingBlockRendererBlockEntityMixin.java @@ -0,0 +1,72 @@ +package com.craisinlord.antarchy.mixins.gravity.client; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; +import net.minecraft.client.renderer.entity.FallingBlockRenderer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +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.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", + at = @At("HEAD"), + cancellable = true + ) + private void antarchy$renderAnimatedBlockEntity( + FallingBlockEntity entity, + float entityYaw, + float partialTick, + PoseStack poseStack, + MultiBufferSource bufferSource, + int packedLight, + CallbackInfo ci + ) { + BlockState state = entity.getBlockState(); + if (state.getRenderShape() != RenderShape.ENTITYBLOCK_ANIMATED || !(state.getBlock() instanceof EntityBlock entityBlock)) { + return; + } + + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.level == null) { + return; + } + + BlockEntity blockEntity = entityBlock.newBlockEntity(BlockPos.ZERO, state); + if (blockEntity == null) { + return; + } + + CompoundTag blockData = entity.blockData; + if (blockData != null && !blockData.isEmpty()) { + CompoundTag renderTag = blockData.copy(); + renderTag.remove("x"); + renderTag.remove("y"); + renderTag.remove("z"); + blockEntity.load(renderTag); + } + + blockEntity.setLevel(minecraft.level); + BlockEntityRenderDispatcher dispatcher = minecraft.getBlockEntityRenderDispatcher(); + poseStack.pushPose(); + poseStack.translate(-0.5D, 0.0D, -0.5D); + dispatcher.renderItem(blockEntity, poseStack, bufferSource, packedLight, OverlayTexture.NO_OVERLAY); + poseStack.popPose(); + ci.cancel(); + } +} 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 new file mode 100644 index 00000000..0b83f10c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/multipart/EntityMultipartLifecycleMixin.java @@ -0,0 +1,38 @@ +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/resources/antarchy-common.mixins.json b/common-1.20.1/src/main/resources/antarchy-common.mixins.json new file mode 100644 index 00000000..0f20735e --- /dev/null +++ b/common-1.20.1/src/main/resources/antarchy-common.mixins.json @@ -0,0 +1,107 @@ +{ + "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", + "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" + ], + "client": [ + "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" + ], + "injectors": { + "defaultRequire": 1 + }, + "minVersion": "0.8" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/alpha_jerry.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/alpha_jerry.animation.json new file mode 100644 index 00000000..32e3803e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/alpha_jerry.animation.json @@ -0,0 +1,6469 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 3, + "bones": { + "body": { + "rotation": { + "0.0": { + "vector": [-2.5, 0, 0] + }, + "0.0417": { + "vector": [-2.48, 0, 0.15] + }, + "0.0833": { + "vector": [-2.44, 0, 0.31] + }, + "0.125": { + "vector": [-2.37, 0, 0.47] + }, + "0.1667": { + "vector": [-2.28, 0, 0.65] + }, + "0.2083": { + "vector": [-2.17, 0, 0.83] + }, + "0.25": { + "vector": [-2.04, 0, 1.02] + }, + "0.2917": { + "vector": [-1.89, 0, 1.2] + }, + "0.3333": { + "vector": [-1.73, 0, 1.39] + }, + "0.375": { + "vector": [-1.56, 0, 1.56] + }, + "0.4167": { + "vector": [-1.39, 0, 1.73] + }, + "0.4583": { + "vector": [-1.2, 0, 1.89] + }, + "0.5": { + "vector": [-1.02, 0, 2.04] + }, + "0.5417": { + "vector": [-0.83, 0, 2.17] + }, + "0.5833": { + "vector": [-0.65, 0, 2.28] + }, + "0.625": { + "vector": [-0.47, 0, 2.37] + }, + "0.6667": { + "vector": [-0.31, 0, 2.44] + }, + "0.7083": { + "vector": [-0.15, 0, 2.48] + }, + "0.75": { + "vector": [0, 0, 2.5] + }, + "0.7917": { + "vector": [0.15, 0, 2.48] + }, + "0.8333": { + "vector": [0.31, 0, 2.44] + }, + "0.875": { + "vector": [0.47, 0, 2.37] + }, + "0.9167": { + "vector": [0.65, 0, 2.28] + }, + "0.9583": { + "vector": [0.83, 0, 2.17] + }, + "1.0": { + "vector": [1.02, 0, 2.04] + }, + "1.0417": { + "vector": [1.2, 0, 1.89] + }, + "1.0833": { + "vector": [1.39, 0, 1.73] + }, + "1.125": { + "vector": [1.56, 0, 1.56] + }, + "1.1667": { + "vector": [1.73, 0, 1.39] + }, + "1.2083": { + "vector": [1.89, 0, 1.2] + }, + "1.25": { + "vector": [2.04, 0, 1.02] + }, + "1.2917": { + "vector": [2.17, 0, 0.83] + }, + "1.3333": { + "vector": [2.28, 0, 0.65] + }, + "1.375": { + "vector": [2.37, 0, 0.47] + }, + "1.4167": { + "vector": [2.44, 0, 0.31] + }, + "1.4583": { + "vector": [2.48, 0, 0.15] + }, + "1.5": { + "vector": [2.5, 0, 0] + }, + "1.5417": { + "vector": [2.48, 0, -0.15] + }, + "1.5833": { + "vector": [2.44, 0, -0.31] + }, + "1.625": { + "vector": [2.37, 0, -0.47] + }, + "1.6667": { + "vector": [2.28, 0, -0.65] + }, + "1.7083": { + "vector": [2.17, 0, -0.83] + }, + "1.75": { + "vector": [2.04, 0, -1.02] + }, + "1.7917": { + "vector": [1.89, 0, -1.2] + }, + "1.8333": { + "vector": [1.73, 0, -1.39] + }, + "1.875": { + "vector": [1.56, 0, -1.56] + }, + "1.9167": { + "vector": [1.39, 0, -1.73] + }, + "1.9583": { + "vector": [1.2, 0, -1.89] + }, + "2.0": { + "vector": [1.02, 0, -2.04] + }, + "2.0417": { + "vector": [0.83, 0, -2.17] + }, + "2.0833": { + "vector": [0.65, 0, -2.28] + }, + "2.125": { + "vector": [0.47, 0, -2.37] + }, + "2.1667": { + "vector": [0.31, 0, -2.44] + }, + "2.2083": { + "vector": [0.15, 0, -2.48] + }, + "2.25": { + "vector": [0, 0, -2.5] + }, + "2.2917": { + "vector": [-0.15, 0, -2.48] + }, + "2.3333": { + "vector": [-0.31, 0, -2.44] + }, + "2.375": { + "vector": [-0.47, 0, -2.37] + }, + "2.4167": { + "vector": [-0.65, 0, -2.28] + }, + "2.4583": { + "vector": [-0.83, 0, -2.17] + }, + "2.5": { + "vector": [-1.02, 0, -2.04] + }, + "2.5417": { + "vector": [-1.2, 0, -1.89] + }, + "2.5833": { + "vector": [-1.39, 0, -1.73] + }, + "2.625": { + "vector": [-1.56, 0, -1.56] + }, + "2.6667": { + "vector": [-1.73, 0, -1.39] + }, + "2.7083": { + "vector": [-1.89, 0, -1.2] + }, + "2.75": { + "vector": [-2.04, 0, -1.02] + }, + "2.7917": { + "vector": [-2.17, 0, -0.83] + }, + "2.8333": { + "vector": [-2.28, 0, -0.65] + }, + "2.875": { + "vector": [-2.37, 0, -0.47] + }, + "2.9167": { + "vector": [-2.44, 0, -0.31] + }, + "2.9583": { + "vector": [-2.48, 0, -0.15] + }, + "3.0": { + "vector": [-2.5, 0, 0] + } + } + }, + "topHeadClawThing": { + "rotation": { + "0.0": { + "vector": [35, 0, 0] + }, + "0.0417": { + "vector": [34.98, 0, 0] + }, + "0.0833": { + "vector": [34.91, 0, 0] + }, + "0.125": { + "vector": [34.8, 0, 0] + }, + "0.1667": { + "vector": [34.66, 0, 0] + }, + "0.2083": { + "vector": [34.47, 0, 0] + }, + "0.25": { + "vector": [34.26, 0, 0] + }, + "0.2917": { + "vector": [34.01, 0, 0] + }, + "0.3333": { + "vector": [33.74, 0, 0] + }, + "0.375": { + "vector": [33.44, 0, 0] + }, + "0.4167": { + "vector": [33.11, 0, 0] + }, + "0.4583": { + "vector": [32.77, 0, 0] + }, + "0.5": { + "vector": [32.41, 0, 0] + }, + "0.5417": { + "vector": [32.03, 0, 0] + }, + "0.5833": { + "vector": [31.64, 0, 0] + }, + "0.625": { + "vector": [31.24, 0, 0] + }, + "0.6667": { + "vector": [30.83, 0, 0] + }, + "0.7083": { + "vector": [30.42, 0, 0] + }, + "0.75": { + "vector": [30, 0, 0] + }, + "0.7917": { + "vector": [29.58, 0, 0] + }, + "0.8333": { + "vector": [29.17, 0, 0] + }, + "0.875": { + "vector": [28.76, 0, 0] + }, + "0.9167": { + "vector": [28.36, 0, 0] + }, + "0.9583": { + "vector": [27.97, 0, 0] + }, + "1.0": { + "vector": [27.59, 0, 0] + }, + "1.0417": { + "vector": [27.23, 0, 0] + }, + "1.0833": { + "vector": [26.89, 0, 0] + }, + "1.125": { + "vector": [26.56, 0, 0] + }, + "1.1667": { + "vector": [26.26, 0, 0] + }, + "1.2083": { + "vector": [25.99, 0, 0] + }, + "1.25": { + "vector": [25.74, 0, 0] + }, + "1.2917": { + "vector": [25.53, 0, 0] + }, + "1.3333": { + "vector": [25.34, 0, 0] + }, + "1.375": { + "vector": [25.2, 0, 0] + }, + "1.4167": { + "vector": [25.09, 0, 0] + }, + "1.4583": { + "vector": [25.02, 0, 0] + }, + "1.5": { + "vector": [25, 0, 0] + }, + "1.5417": { + "vector": [25.02, 0, 0] + }, + "1.5833": { + "vector": [25.09, 0, 0] + }, + "1.625": { + "vector": [25.2, 0, 0] + }, + "1.6667": { + "vector": [25.34, 0, 0] + }, + "1.7083": { + "vector": [25.53, 0, 0] + }, + "1.75": { + "vector": [25.74, 0, 0] + }, + "1.7917": { + "vector": [25.99, 0, 0] + }, + "1.8333": { + "vector": [26.26, 0, 0] + }, + "1.875": { + "vector": [26.56, 0, 0] + }, + "1.9167": { + "vector": [26.89, 0, 0] + }, + "1.9583": { + "vector": [27.23, 0, 0] + }, + "2.0": { + "vector": [27.59, 0, 0] + }, + "2.0417": { + "vector": [27.97, 0, 0] + }, + "2.0833": { + "vector": [28.36, 0, 0] + }, + "2.125": { + "vector": [28.76, 0, 0] + }, + "2.1667": { + "vector": [29.17, 0, 0] + }, + "2.2083": { + "vector": [29.58, 0, 0] + }, + "2.25": { + "vector": [30, 0, 0] + }, + "2.2917": { + "vector": [30.42, 0, 0] + }, + "2.3333": { + "vector": [30.83, 0, 0] + }, + "2.375": { + "vector": [31.24, 0, 0] + }, + "2.4167": { + "vector": [31.64, 0, 0] + }, + "2.4583": { + "vector": [32.03, 0, 0] + }, + "2.5": { + "vector": [32.41, 0, 0] + }, + "2.5417": { + "vector": [32.77, 0, 0] + }, + "2.5833": { + "vector": [33.11, 0, 0] + }, + "2.625": { + "vector": [33.44, 0, 0] + }, + "2.6667": { + "vector": [33.74, 0, 0] + }, + "2.7083": { + "vector": [34.01, 0, 0] + }, + "2.75": { + "vector": [34.26, 0, 0] + }, + "2.7917": { + "vector": [34.47, 0, 0] + }, + "2.8333": { + "vector": [34.66, 0, 0] + }, + "2.875": { + "vector": [34.8, 0, 0] + }, + "2.9167": { + "vector": [34.91, 0, 0] + }, + "2.9583": { + "vector": [34.98, 0, 0] + }, + "3.0": { + "vector": [35, 0, 0] + } + } + }, + "rightFrontThigh": { + "rotation": { + "0.0": { + "vector": [0, -15, -5] + }, + "0.0417": { + "vector": [-0.22, -14.99, -4.14] + }, + "0.0833": { + "vector": [-0.49, -14.98, -3.1] + }, + "0.125": { + "vector": [-0.79, -14.96, -1.93] + }, + "0.1667": { + "vector": [-1.11, -14.94, -0.69] + }, + "0.2083": { + "vector": [-1.43, -14.91, 0.57] + }, + "0.25": { + "vector": [-1.75, -14.89, 1.79] + }, + "0.2917": { + "vector": [-2.04, -14.86, 2.92] + }, + "0.3333": { + "vector": [-2.29, -14.83, 3.91] + }, + "0.375": { + "vector": [-2.5, -14.81, 4.7] + }, + "0.4167": { + "vector": [-2.64, -14.79, 5.24] + }, + "0.4583": { + "vector": [-2.7, -14.78, 5.47] + }, + "0.5": { + "vector": [-2.66, -14.77, 5.35] + }, + "0.5417": { + "vector": [-2.51, -14.76, 4.75] + }, + "0.5833": { + "vector": [-2.23, -14.76, 3.67] + }, + "0.625": { + "vector": [-1.86, -14.77, 2.21] + }, + "0.6667": { + "vector": [-1.4, -14.77, 0.46] + }, + "0.7083": { + "vector": [-0.9, -14.78, -1.49] + }, + "0.75": { + "vector": [-0.37, -14.8, -3.55] + }, + "0.7917": { + "vector": [0.16, -14.81, -5.61] + }, + "0.8333": { + "vector": [0.67, -14.82, -7.59] + }, + "0.875": { + "vector": [1.13, -14.83, -9.39] + }, + "0.9167": { + "vector": [1.53, -14.85, -10.91] + }, + "0.9583": { + "vector": [1.82, -14.86, -12.07] + }, + "1.0": { + "vector": [2, -14.87, -12.76] + }, + "1.0417": { + "vector": [2.07, -14.88, -13.03] + }, + "1.0833": { + "vector": [2.06, -14.89, -12.99] + }, + "1.125": { + "vector": [1.99, -14.91, -12.7] + }, + "1.1667": { + "vector": [1.85, -14.92, -12.19] + }, + "1.2083": { + "vector": [1.67, -14.94, -11.49] + }, + "1.25": { + "vector": [1.46, -14.96, -10.66] + }, + "1.2917": { + "vector": [1.22, -14.97, -9.73] + }, + "1.3333": { + "vector": [0.96, -14.98, -8.74] + }, + "1.375": { + "vector": [0.7, -14.99, -7.73] + }, + "1.4167": { + "vector": [0.45, -15, -6.74] + }, + "1.4583": { + "vector": [0.21, -15, -5.82] + }, + "1.5": { + "vector": [0, -15, -5] + }, + "1.5417": { + "vector": [-0.22, -14.99, -4.14] + }, + "1.5833": { + "vector": [-0.49, -14.98, -3.1] + }, + "1.625": { + "vector": [-0.79, -14.96, -1.93] + }, + "1.6667": { + "vector": [-1.11, -14.94, -0.69] + }, + "1.7083": { + "vector": [-1.43, -14.91, 0.57] + }, + "1.75": { + "vector": [-1.75, -14.89, 1.79] + }, + "1.7917": { + "vector": [-2.04, -14.86, 2.92] + }, + "1.8333": { + "vector": [-2.29, -14.83, 3.91] + }, + "1.875": { + "vector": [-2.5, -14.81, 4.7] + }, + "1.9167": { + "vector": [-2.64, -14.79, 5.24] + }, + "1.9583": { + "vector": [-2.7, -14.78, 5.47] + }, + "2.0": { + "vector": [-2.66, -14.77, 5.35] + }, + "2.0417": { + "vector": [-2.51, -14.76, 4.75] + }, + "2.0833": { + "vector": [-2.23, -14.76, 3.67] + }, + "2.125": { + "vector": [-1.86, -14.77, 2.21] + }, + "2.1667": { + "vector": [-1.4, -14.77, 0.46] + }, + "2.2083": { + "vector": [-0.9, -14.78, -1.49] + }, + "2.25": { + "vector": [-0.37, -14.8, -3.55] + }, + "2.2917": { + "vector": [0.16, -14.81, -5.61] + }, + "2.3333": { + "vector": [0.67, -14.82, -7.59] + }, + "2.375": { + "vector": [1.13, -14.83, -9.39] + }, + "2.4167": { + "vector": [1.53, -14.85, -10.91] + }, + "2.4583": { + "vector": [1.82, -14.86, -12.07] + }, + "2.5": { + "vector": [2, -14.87, -12.76] + }, + "2.5417": { + "vector": [2.07, -14.88, -13.03] + }, + "2.5833": { + "vector": [2.06, -14.89, -12.99] + }, + "2.625": { + "vector": [1.99, -14.91, -12.7] + }, + "2.6667": { + "vector": [1.85, -14.92, -12.19] + }, + "2.7083": { + "vector": [1.67, -14.94, -11.49] + }, + "2.75": { + "vector": [1.46, -14.96, -10.66] + }, + "2.7917": { + "vector": [1.22, -14.97, -9.73] + }, + "2.8333": { + "vector": [0.96, -14.98, -8.74] + }, + "2.875": { + "vector": [0.7, -14.99, -7.73] + }, + "2.9167": { + "vector": [0.45, -15, -6.74] + }, + "2.9583": { + "vector": [0.21, -15, -5.82] + }, + "3.0": { + "vector": [0, -15, -5] + } + } + }, + "rightFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -35] + }, + "0.0417": { + "vector": [0, 0, -34.87] + }, + "0.0833": { + "vector": [0, 0, -34.49] + }, + "0.125": { + "vector": [0, 0, -33.89] + }, + "0.1667": { + "vector": [0, 0, -33.11] + }, + "0.2083": { + "vector": [0, 0, -32.17] + }, + "0.25": { + "vector": [0, 0, -31.11] + }, + "0.2917": { + "vector": [0, 0, -29.96] + }, + "0.3333": { + "vector": [0, 0, -28.74] + }, + "0.375": { + "vector": [0, 0, -27.5] + }, + "0.4167": { + "vector": [0, 0, -26.26] + }, + "0.4583": { + "vector": [0, 0, -25.04] + }, + "0.5": { + "vector": [0, 0, -23.89] + }, + "0.5417": { + "vector": [0, 0, -22.83] + }, + "0.5833": { + "vector": [0, 0, -21.89] + }, + "0.625": { + "vector": [0, 0, -21.11] + }, + "0.6667": { + "vector": [0, 0, -20.51] + }, + "0.7083": { + "vector": [0, 0, -20.13] + }, + "0.75": { + "vector": [0, 0, -20] + }, + "0.7917": { + "vector": [0, 0, -20.13] + }, + "0.8333": { + "vector": [0, 0, -20.51] + }, + "0.875": { + "vector": [0, 0, -21.11] + }, + "0.9167": { + "vector": [0, 0, -21.89] + }, + "0.9583": { + "vector": [0, 0, -22.83] + }, + "1.0": { + "vector": [0, 0, -23.89] + }, + "1.0417": { + "vector": [0, 0, -25.04] + }, + "1.0833": { + "vector": [0, 0, -26.26] + }, + "1.125": { + "vector": [0, 0, -27.5] + }, + "1.1667": { + "vector": [0, 0, -28.74] + }, + "1.2083": { + "vector": [0, 0, -29.96] + }, + "1.25": { + "vector": [0, 0, -31.11] + }, + "1.2917": { + "vector": [0, 0, -32.17] + }, + "1.3333": { + "vector": [0, 0, -33.11] + }, + "1.375": { + "vector": [0, 0, -33.89] + }, + "1.4167": { + "vector": [0, 0, -34.49] + }, + "1.4583": { + "vector": [0, 0, -34.87] + }, + "1.5": { + "vector": [0, 0, -35] + }, + "1.5417": { + "vector": [0, 0, -34.87] + }, + "1.5833": { + "vector": [0, 0, -34.49] + }, + "1.625": { + "vector": [0, 0, -33.89] + }, + "1.6667": { + "vector": [0, 0, -33.11] + }, + "1.7083": { + "vector": [0, 0, -32.17] + }, + "1.75": { + "vector": [0, 0, -31.11] + }, + "1.7917": { + "vector": [0, 0, -29.96] + }, + "1.8333": { + "vector": [0, 0, -28.74] + }, + "1.875": { + "vector": [0, 0, -27.5] + }, + "1.9167": { + "vector": [0, 0, -26.26] + }, + "1.9583": { + "vector": [0, 0, -25.04] + }, + "2.0": { + "vector": [0, 0, -23.89] + }, + "2.0417": { + "vector": [0, 0, -22.83] + }, + "2.0833": { + "vector": [0, 0, -21.89] + }, + "2.125": { + "vector": [0, 0, -21.11] + }, + "2.1667": { + "vector": [0, 0, -20.51] + }, + "2.2083": { + "vector": [0, 0, -20.13] + }, + "2.25": { + "vector": [0, 0, -20] + }, + "2.2917": { + "vector": [0, 0, -20.13] + }, + "2.3333": { + "vector": [0, 0, -20.51] + }, + "2.375": { + "vector": [0, 0, -21.11] + }, + "2.4167": { + "vector": [0, 0, -21.89] + }, + "2.4583": { + "vector": [0, 0, -22.83] + }, + "2.5": { + "vector": [0, 0, -23.89] + }, + "2.5417": { + "vector": [0, 0, -25.04] + }, + "2.5833": { + "vector": [0, 0, -26.26] + }, + "2.625": { + "vector": [0, 0, -27.5] + }, + "2.6667": { + "vector": [0, 0, -28.74] + }, + "2.7083": { + "vector": [0, 0, -29.96] + }, + "2.75": { + "vector": [0, 0, -31.11] + }, + "2.7917": { + "vector": [0, 0, -32.17] + }, + "2.8333": { + "vector": [0, 0, -33.11] + }, + "2.875": { + "vector": [0, 0, -33.89] + }, + "2.9167": { + "vector": [0, 0, -34.49] + }, + "2.9583": { + "vector": [0, 0, -34.87] + }, + "3.0": { + "vector": [0, 0, -35] + } + } + }, + "rightFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 10] + }, + "0.0417": { + "vector": [0, 0, 8.88] + }, + "0.0833": { + "vector": [0, 0, 7.64] + }, + "0.125": { + "vector": [0, 0, 6.33] + }, + "0.1667": { + "vector": [0, 0, 5] + }, + "0.2083": { + "vector": [0, 0, 3.71] + }, + "0.25": { + "vector": [0, 0, 2.5] + }, + "0.2917": { + "vector": [0, 0, 1.43] + }, + "0.3333": { + "vector": [0, 0, 0.56] + }, + "0.375": { + "vector": [0, 0, -0.08] + }, + "0.4167": { + "vector": [0, 0, -0.42] + }, + "0.4583": { + "vector": [0, 0, -0.41] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [0, 0, 0.99] + }, + "0.5833": { + "vector": [0, 0, 2.6] + }, + "0.625": { + "vector": [0, 0, 4.73] + }, + "0.6667": { + "vector": [0, 0, 7.22] + }, + "0.7083": { + "vector": [0, 0, 9.96] + }, + "0.75": { + "vector": [0, 0, 12.81] + }, + "0.7917": { + "vector": [0, 0, 15.65] + }, + "0.8333": { + "vector": [0, 0, 18.33] + }, + "0.875": { + "vector": [0, 0, 20.74] + }, + "0.9167": { + "vector": [0, 0, 22.74] + }, + "0.9583": { + "vector": [0, 0, 24.21] + }, + "1.0": { + "vector": [0, 0, 25] + }, + "1.0417": { + "vector": [0, 0, 25.13] + }, + "1.0833": { + "vector": [0, 0, 24.76] + }, + "1.125": { + "vector": [0, 0, 23.95] + }, + "1.1667": { + "vector": [0, 0, 22.78] + }, + "1.2083": { + "vector": [0, 0, 21.33] + }, + "1.25": { + "vector": [0, 0, 19.69] + }, + "1.2917": { + "vector": [0, 0, 17.92] + }, + "1.3333": { + "vector": [0, 0, 16.11] + }, + "1.375": { + "vector": [0, 0, 14.34] + }, + "1.4167": { + "vector": [0, 0, 12.67] + }, + "1.4583": { + "vector": [0, 0, 11.2] + }, + "1.5": { + "vector": [0, 0, 10] + }, + "1.5417": { + "vector": [0, 0, 8.88] + }, + "1.5833": { + "vector": [0, 0, 7.64] + }, + "1.625": { + "vector": [0, 0, 6.33] + }, + "1.6667": { + "vector": [0, 0, 5] + }, + "1.7083": { + "vector": [0, 0, 3.71] + }, + "1.75": { + "vector": [0, 0, 2.5] + }, + "1.7917": { + "vector": [0, 0, 1.43] + }, + "1.8333": { + "vector": [0, 0, 0.56] + }, + "1.875": { + "vector": [0, 0, -0.08] + }, + "1.9167": { + "vector": [0, 0, -0.42] + }, + "1.9583": { + "vector": [0, 0, -0.41] + }, + "2.0": { + "vector": [0, 0, 0] + }, + "2.0417": { + "vector": [0, 0, 0.99] + }, + "2.0833": { + "vector": [0, 0, 2.6] + }, + "2.125": { + "vector": [0, 0, 4.73] + }, + "2.1667": { + "vector": [0, 0, 7.22] + }, + "2.2083": { + "vector": [0, 0, 9.96] + }, + "2.25": { + "vector": [0, 0, 12.81] + }, + "2.2917": { + "vector": [0, 0, 15.65] + }, + "2.3333": { + "vector": [0, 0, 18.33] + }, + "2.375": { + "vector": [0, 0, 20.74] + }, + "2.4167": { + "vector": [0, 0, 22.74] + }, + "2.4583": { + "vector": [0, 0, 24.21] + }, + "2.5": { + "vector": [0, 0, 25] + }, + "2.5417": { + "vector": [0, 0, 25.13] + }, + "2.5833": { + "vector": [0, 0, 24.76] + }, + "2.625": { + "vector": [0, 0, 23.95] + }, + "2.6667": { + "vector": [0, 0, 22.78] + }, + "2.7083": { + "vector": [0, 0, 21.33] + }, + "2.75": { + "vector": [0, 0, 19.69] + }, + "2.7917": { + "vector": [0, 0, 17.92] + }, + "2.8333": { + "vector": [0, 0, 16.11] + }, + "2.875": { + "vector": [0, 0, 14.34] + }, + "2.9167": { + "vector": [0, 0, 12.67] + }, + "2.9583": { + "vector": [0, 0, 11.2] + }, + "3.0": { + "vector": [0, 0, 10] + } + } + }, + "rightBackThigh": { + "rotation": { + "0.0": { + "vector": [0, 15, -5] + }, + "0.0417": { + "vector": [0.24, 14.97, -4.05] + }, + "0.0833": { + "vector": [0.58, 14.93, -2.74] + }, + "0.125": { + "vector": [0.98, 14.88, -1.18] + }, + "0.1667": { + "vector": [1.42, 14.83, 0.55] + }, + "0.2083": { + "vector": [1.89, 14.77, 2.38] + }, + "0.25": { + "vector": [2.36, 14.71, 4.21] + }, + "0.2917": { + "vector": [2.8, 14.65, 5.96] + }, + "0.3333": { + "vector": [3.21, 14.6, 7.54] + }, + "0.375": { + "vector": [3.55, 14.55, 8.87] + }, + "0.4167": { + "vector": [3.8, 14.51, 9.86] + }, + "0.4583": { + "vector": [3.95, 14.49, 10.44] + }, + "0.5": { + "vector": [3.97, 14.48, 10.5] + }, + "0.5417": { + "vector": [3.83, 14.48, 9.97] + }, + "0.5833": { + "vector": [3.54, 14.5, 8.85] + }, + "0.625": { + "vector": [3.14, 14.53, 7.27] + }, + "0.6667": { + "vector": [2.64, 14.57, 5.33] + }, + "0.7083": { + "vector": [2.08, 14.62, 3.14] + }, + "0.75": { + "vector": [1.48, 14.67, 0.81] + }, + "0.7917": { + "vector": [0.87, 14.73, -1.56] + }, + "0.8333": { + "vector": [0.28, 14.78, -3.86] + }, + "0.875": { + "vector": [-0.26, 14.83, -5.98] + }, + "0.9167": { + "vector": [-0.73, 14.88, -7.81] + }, + "0.9583": { + "vector": [-1.1, 14.91, -9.24] + }, + "1.0": { + "vector": [-1.34, 14.94, -10.18] + }, + "1.0417": { + "vector": [-1.46, 14.96, -10.67] + }, + "1.0833": { + "vector": [-1.51, 14.98, -10.87] + }, + "1.125": { + "vector": [-1.5, 14.99, -10.82] + }, + "1.1667": { + "vector": [-1.43, 15, -10.56] + }, + "1.2083": { + "vector": [-1.32, 15.01, -10.11] + }, + "1.25": { + "vector": [-1.17, 15.01, -9.53] + }, + "1.2917": { + "vector": [-0.99, 15.02, -8.83] + }, + "1.3333": { + "vector": [-0.79, 15.02, -8.07] + }, + "1.375": { + "vector": [-0.58, 15.02, -7.26] + }, + "1.4167": { + "vector": [-0.38, 15.01, -6.46] + }, + "1.4583": { + "vector": [-0.18, 15.01, -5.69] + }, + "1.5": { + "vector": [0, 15, -5] + }, + "1.5417": { + "vector": [0.19, 14.99, -4.24] + }, + "1.5833": { + "vector": [0.44, 14.97, -3.31] + }, + "1.625": { + "vector": [0.71, 14.95, -2.23] + }, + "1.6667": { + "vector": [1.01, 14.93, -1.07] + }, + "1.7083": { + "vector": [1.32, 14.9, 0.12] + }, + "1.75": { + "vector": [1.62, 14.87, 1.3] + }, + "1.7917": { + "vector": [1.91, 14.85, 2.42] + }, + "1.8333": { + "vector": [2.17, 14.82, 3.43] + }, + "1.875": { + "vector": [2.39, 14.8, 4.27] + }, + "1.9167": { + "vector": [2.55, 14.78, 4.91] + }, + "1.9583": { + "vector": [2.65, 14.77, 5.28] + }, + "2.0": { + "vector": [2.66, 14.77, 5.35] + }, + "2.0417": { + "vector": [2.58, 14.77, 5.03] + }, + "2.0833": { + "vector": [2.41, 14.78, 4.36] + }, + "2.125": { + "vector": [2.16, 14.79, 3.39] + }, + "2.1667": { + "vector": [1.85, 14.81, 2.18] + }, + "2.2083": { + "vector": [1.5, 14.84, 0.82] + }, + "2.25": { + "vector": [1.12, 14.86, -0.64] + }, + "2.2917": { + "vector": [0.74, 14.89, -2.12] + }, + "2.3333": { + "vector": [0.37, 14.91, -3.56] + }, + "2.375": { + "vector": [0.02, 14.93, -4.9] + }, + "2.4167": { + "vector": [-0.28, 14.96, -6.06] + }, + "2.4583": { + "vector": [-0.51, 14.97, -6.98] + }, + "2.5": { + "vector": [-0.67, 14.99, -7.59] + }, + "2.5417": { + "vector": [-0.76, 15, -7.96] + }, + "2.5833": { + "vector": [-0.83, 15.01, -8.2] + }, + "2.625": { + "vector": [-0.86, 15.02, -8.34] + }, + "2.6667": { + "vector": [-0.87, 15.03, -8.35] + }, + "2.7083": { + "vector": [-0.84, 15.03, -8.26] + }, + "2.75": { + "vector": [-0.79, 15.04, -8.07] + }, + "2.7917": { + "vector": [-0.72, 15.04, -7.78] + }, + "2.8333": { + "vector": [-0.62, 15.04, -7.39] + }, + "2.875": { + "vector": [-0.49, 15.04, -6.92] + }, + "2.9167": { + "vector": [-0.35, 15.03, -6.36] + }, + "2.9583": { + "vector": [-0.18, 15.02, -5.72] + }, + "3.0": { + "vector": [0, 15, -5] + } + } + }, + "rightBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -5] + }, + "0.0417": { + "vector": [0, 0, -5.57] + }, + "0.0833": { + "vector": [0, 0, -6.24] + }, + "0.125": { + "vector": [0, 0, -6.95] + }, + "0.1667": { + "vector": [0, 0, -7.64] + }, + "0.2083": { + "vector": [0, 0, -8.28] + }, + "0.25": { + "vector": [0, 0, -8.8] + }, + "0.2917": { + "vector": [0, 0, -9.16] + }, + "0.3333": { + "vector": [0, 0, -9.3] + }, + "0.375": { + "vector": [0, 0, -9.17] + }, + "0.4167": { + "vector": [0, 0, -8.66] + }, + "0.4583": { + "vector": [0, 0, -7.76] + }, + "0.5": { + "vector": [0, 0, -6.58] + }, + "0.5417": { + "vector": [0, 0, -5.23] + }, + "0.5833": { + "vector": [0, 0, -3.84] + }, + "0.625": { + "vector": [0, 0, -2.5] + }, + "0.6667": { + "vector": [0, 0, -1.34] + }, + "0.7083": { + "vector": [0, 0, -0.47] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [0, 0, 0.08] + }, + "0.8333": { + "vector": [0, 0, 0.09] + }, + "0.875": { + "vector": [0, 0, 0.03] + }, + "0.9167": { + "vector": [0, 0, -0.08] + }, + "0.9583": { + "vector": [0, 0, -0.25] + }, + "1.0": { + "vector": [0, 0, -0.46] + }, + "1.0417": { + "vector": [0, 0, -0.72] + }, + "1.0833": { + "vector": [0, 0, -1.02] + }, + "1.125": { + "vector": [0, 0, -1.35] + }, + "1.1667": { + "vector": [0, 0, -1.71] + }, + "1.2083": { + "vector": [0, 0, -2.1] + }, + "1.25": { + "vector": [0, 0, -2.5] + }, + "1.2917": { + "vector": [0, 0, -2.91] + }, + "1.3333": { + "vector": [0, 0, -3.34] + }, + "1.375": { + "vector": [0, 0, -3.76] + }, + "1.4167": { + "vector": [0, 0, -4.18] + }, + "1.4583": { + "vector": [0, 0, -4.6] + }, + "1.5": { + "vector": [0, 0, -5] + }, + "1.5417": { + "vector": [0, 0, -5.96] + }, + "1.5833": { + "vector": [0, 0, -7.21] + }, + "1.625": { + "vector": [0, 0, -8.61] + }, + "1.6667": { + "vector": [0, 0, -10.07] + }, + "1.7083": { + "vector": [0, 0, -11.47] + }, + "1.75": { + "vector": [0, 0, -12.69] + }, + "1.7917": { + "vector": [0, 0, -13.62] + }, + "1.8333": { + "vector": [0, 0, -14.15] + }, + "1.875": { + "vector": [0, 0, -14.17] + }, + "1.9167": { + "vector": [0, 0, -13.51] + }, + "1.9583": { + "vector": [0, 0, -12.22] + }, + "2.0": { + "vector": [0, 0, -10.47] + }, + "2.0417": { + "vector": [0, 0, -8.42] + }, + "2.0833": { + "vector": [0, 0, -6.26] + }, + "2.125": { + "vector": [0, 0, -4.17] + }, + "2.1667": { + "vector": [0, 0, -2.31] + }, + "2.2083": { + "vector": [0, 0, -0.86] + }, + "2.25": { + "vector": [0, 0, 0] + }, + "2.2917": { + "vector": [0, 0, 0.2] + }, + "2.3333": { + "vector": [0, 0, 0.28] + }, + "2.375": { + "vector": [0, 0, 0.27] + }, + "2.4167": { + "vector": [0, 0, 0.16] + }, + "2.4583": { + "vector": [0, 0, -0.02] + }, + "2.5": { + "vector": [0, 0, -0.28] + }, + "2.5417": { + "vector": [0, 0, -0.59] + }, + "2.5833": { + "vector": [0, 0, -0.95] + }, + "2.625": { + "vector": [0, 0, -1.35] + }, + "2.6667": { + "vector": [0, 0, -1.78] + }, + "2.7083": { + "vector": [0, 0, -2.23] + }, + "2.75": { + "vector": [0, 0, -2.68] + }, + "2.7917": { + "vector": [0, 0, -3.14] + }, + "2.8333": { + "vector": [0, 0, -3.58] + }, + "2.875": { + "vector": [0, 0, -3.99] + }, + "2.9167": { + "vector": [0, 0, -4.38] + }, + "2.9583": { + "vector": [0, 0, -4.71] + }, + "3.0": { + "vector": [0, 0, -5] + } + } + }, + "rightBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 30] + }, + "0.0417": { + "vector": [0, 0, 31.54] + }, + "0.0833": { + "vector": [0, 0, 33.21] + }, + "0.125": { + "vector": [0, 0, 34.94] + }, + "0.1667": { + "vector": [0, 0, 36.67] + }, + "0.2083": { + "vector": [0, 0, 38.32] + }, + "0.25": { + "vector": [0, 0, 39.84] + }, + "0.2917": { + "vector": [0, 0, 41.17] + }, + "0.3333": { + "vector": [0, 0, 42.22] + }, + "0.375": { + "vector": [0, 0, 42.95] + }, + "0.4167": { + "vector": [0, 0, 43.28] + }, + "0.4583": { + "vector": [0, 0, 43.15] + }, + "0.5": { + "vector": [0, 0, 42.5] + }, + "0.5417": { + "vector": [0, 0, 41.06] + }, + "0.5833": { + "vector": [0, 0, 38.75] + }, + "0.625": { + "vector": [0, 0, 35.74] + }, + "0.6667": { + "vector": [0, 0, 32.22] + }, + "0.7083": { + "vector": [0, 0, 28.37] + }, + "0.75": { + "vector": [0, 0, 24.38] + }, + "0.7917": { + "vector": [0, 0, 20.41] + }, + "0.8333": { + "vector": [0, 0, 16.67] + }, + "0.875": { + "vector": [0, 0, 13.32] + }, + "0.9167": { + "vector": [0, 0, 10.56] + }, + "0.9583": { + "vector": [0, 0, 8.55] + }, + "1.0": { + "vector": [0, 0, 7.5] + }, + "1.0417": { + "vector": [0, 0, 7.39] + }, + "1.0833": { + "vector": [0, 0, 8.04] + }, + "1.125": { + "vector": [0, 0, 9.32] + }, + "1.1667": { + "vector": [0, 0, 11.11] + }, + "1.2083": { + "vector": [0, 0, 13.31] + }, + "1.25": { + "vector": [0, 0, 15.78] + }, + "1.2917": { + "vector": [0, 0, 18.42] + }, + "1.3333": { + "vector": [0, 0, 21.11] + }, + "1.375": { + "vector": [0, 0, 23.73] + }, + "1.4167": { + "vector": [0, 0, 26.16] + }, + "1.4583": { + "vector": [0, 0, 28.29] + }, + "1.5": { + "vector": [0, 0, 30] + }, + "1.5417": { + "vector": [0, 0, 31.54] + }, + "1.5833": { + "vector": [0, 0, 33.21] + }, + "1.625": { + "vector": [0, 0, 34.94] + }, + "1.6667": { + "vector": [0, 0, 36.67] + }, + "1.7083": { + "vector": [0, 0, 38.32] + }, + "1.75": { + "vector": [0, 0, 39.84] + }, + "1.7917": { + "vector": [0, 0, 41.17] + }, + "1.8333": { + "vector": [0, 0, 42.22] + }, + "1.875": { + "vector": [0, 0, 42.95] + }, + "1.9167": { + "vector": [0, 0, 43.28] + }, + "1.9583": { + "vector": [0, 0, 43.15] + }, + "2.0": { + "vector": [0, 0, 42.5] + }, + "2.0417": { + "vector": [0, 0, 41.06] + }, + "2.0833": { + "vector": [0, 0, 38.75] + }, + "2.125": { + "vector": [0, 0, 35.74] + }, + "2.1667": { + "vector": [0, 0, 32.22] + }, + "2.2083": { + "vector": [0, 0, 28.37] + }, + "2.25": { + "vector": [0, 0, 24.38] + }, + "2.2917": { + "vector": [0, 0, 20.41] + }, + "2.3333": { + "vector": [0, 0, 16.67] + }, + "2.375": { + "vector": [0, 0, 13.32] + }, + "2.4167": { + "vector": [0, 0, 10.56] + }, + "2.4583": { + "vector": [0, 0, 8.55] + }, + "2.5": { + "vector": [0, 0, 7.5] + }, + "2.5417": { + "vector": [0, 0, 7.39] + }, + "2.5833": { + "vector": [0, 0, 8.04] + }, + "2.625": { + "vector": [0, 0, 9.32] + }, + "2.6667": { + "vector": [0, 0, 11.11] + }, + "2.7083": { + "vector": [0, 0, 13.31] + }, + "2.75": { + "vector": [0, 0, 15.78] + }, + "2.7917": { + "vector": [0, 0, 18.42] + }, + "2.8333": { + "vector": [0, 0, 21.11] + }, + "2.875": { + "vector": [0, 0, 23.73] + }, + "2.9167": { + "vector": [0, 0, 26.16] + }, + "2.9583": { + "vector": [0, 0, 28.29] + }, + "3.0": { + "vector": [0, 0, 30] + } + } + }, + "leftHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-35, 0, -25] + }, + "0.0417": { + "vector": [-34.98, 0, -25] + }, + "0.0833": { + "vector": [-34.91, 0, -25] + }, + "0.125": { + "vector": [-34.8, 0, -25] + }, + "0.1667": { + "vector": [-34.66, 0, -25] + }, + "0.2083": { + "vector": [-34.47, 0, -25] + }, + "0.25": { + "vector": [-34.26, 0, -25] + }, + "0.2917": { + "vector": [-34.01, 0, -25] + }, + "0.3333": { + "vector": [-33.74, 0, -25] + }, + "0.375": { + "vector": [-33.44, 0, -25] + }, + "0.4167": { + "vector": [-33.11, 0, -25] + }, + "0.4583": { + "vector": [-32.77, 0, -25] + }, + "0.5": { + "vector": [-32.41, 0, -25] + }, + "0.5417": { + "vector": [-32.03, 0, -25] + }, + "0.5833": { + "vector": [-31.64, 0, -25] + }, + "0.625": { + "vector": [-31.24, 0, -25] + }, + "0.6667": { + "vector": [-30.83, 0, -25] + }, + "0.7083": { + "vector": [-30.42, 0, -25] + }, + "0.75": { + "vector": [-30, 0, -25] + }, + "0.7917": { + "vector": [-29.58, 0, -25] + }, + "0.8333": { + "vector": [-29.17, 0, -25] + }, + "0.875": { + "vector": [-28.76, 0, -25] + }, + "0.9167": { + "vector": [-28.36, 0, -25] + }, + "0.9583": { + "vector": [-27.97, 0, -25] + }, + "1.0": { + "vector": [-27.59, 0, -25] + }, + "1.0417": { + "vector": [-27.23, 0, -25] + }, + "1.0833": { + "vector": [-26.89, 0, -25] + }, + "1.125": { + "vector": [-26.56, 0, -25] + }, + "1.1667": { + "vector": [-26.26, 0, -25] + }, + "1.2083": { + "vector": [-25.99, 0, -25] + }, + "1.25": { + "vector": [-25.74, 0, -25] + }, + "1.2917": { + "vector": [-25.53, 0, -25] + }, + "1.3333": { + "vector": [-25.34, 0, -25] + }, + "1.375": { + "vector": [-25.2, 0, -25] + }, + "1.4167": { + "vector": [-25.09, 0, -25] + }, + "1.4583": { + "vector": [-25.02, 0, -25] + }, + "1.5": { + "vector": [-25, 0, -25] + }, + "1.5417": { + "vector": [-25.02, 0, -25] + }, + "1.5833": { + "vector": [-25.09, 0, -25] + }, + "1.625": { + "vector": [-25.2, 0, -25] + }, + "1.6667": { + "vector": [-25.34, 0, -25] + }, + "1.7083": { + "vector": [-25.53, 0, -25] + }, + "1.75": { + "vector": [-25.74, 0, -25] + }, + "1.7917": { + "vector": [-25.99, 0, -25] + }, + "1.8333": { + "vector": [-26.26, 0, -25] + }, + "1.875": { + "vector": [-26.56, 0, -25] + }, + "1.9167": { + "vector": [-26.89, 0, -25] + }, + "1.9583": { + "vector": [-27.23, 0, -25] + }, + "2.0": { + "vector": [-27.59, 0, -25] + }, + "2.0417": { + "vector": [-27.97, 0, -25] + }, + "2.0833": { + "vector": [-28.36, 0, -25] + }, + "2.125": { + "vector": [-28.76, 0, -25] + }, + "2.1667": { + "vector": [-29.17, 0, -25] + }, + "2.2083": { + "vector": [-29.58, 0, -25] + }, + "2.25": { + "vector": [-30, 0, -25] + }, + "2.2917": { + "vector": [-30.42, 0, -25] + }, + "2.3333": { + "vector": [-30.83, 0, -25] + }, + "2.375": { + "vector": [-31.24, 0, -25] + }, + "2.4167": { + "vector": [-31.64, 0, -25] + }, + "2.4583": { + "vector": [-32.03, 0, -25] + }, + "2.5": { + "vector": [-32.41, 0, -25] + }, + "2.5417": { + "vector": [-32.77, 0, -25] + }, + "2.5833": { + "vector": [-33.11, 0, -25] + }, + "2.625": { + "vector": [-33.44, 0, -25] + }, + "2.6667": { + "vector": [-33.74, 0, -25] + }, + "2.7083": { + "vector": [-34.01, 0, -25] + }, + "2.75": { + "vector": [-34.26, 0, -25] + }, + "2.7917": { + "vector": [-34.47, 0, -25] + }, + "2.8333": { + "vector": [-34.66, 0, -25] + }, + "2.875": { + "vector": [-34.8, 0, -25] + }, + "2.9167": { + "vector": [-34.91, 0, -25] + }, + "2.9583": { + "vector": [-34.98, 0, -25] + }, + "3.0": { + "vector": [-35, 0, -25] + } + } + }, + "rightHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-35, 0, 25] + }, + "0.0417": { + "vector": [-34.98, 0, 25] + }, + "0.0833": { + "vector": [-34.91, 0, 25] + }, + "0.125": { + "vector": [-34.8, 0, 25] + }, + "0.1667": { + "vector": [-34.66, 0, 25] + }, + "0.2083": { + "vector": [-34.47, 0, 25] + }, + "0.25": { + "vector": [-34.26, 0, 25] + }, + "0.2917": { + "vector": [-34.01, 0, 25] + }, + "0.3333": { + "vector": [-33.74, 0, 25] + }, + "0.375": { + "vector": [-33.44, 0, 25] + }, + "0.4167": { + "vector": [-33.11, 0, 25] + }, + "0.4583": { + "vector": [-32.77, 0, 25] + }, + "0.5": { + "vector": [-32.41, 0, 25] + }, + "0.5417": { + "vector": [-32.03, 0, 25] + }, + "0.5833": { + "vector": [-31.64, 0, 25] + }, + "0.625": { + "vector": [-31.24, 0, 25] + }, + "0.6667": { + "vector": [-30.83, 0, 25] + }, + "0.7083": { + "vector": [-30.42, 0, 25] + }, + "0.75": { + "vector": [-30, 0, 25] + }, + "0.7917": { + "vector": [-29.58, 0, 25] + }, + "0.8333": { + "vector": [-29.17, 0, 25] + }, + "0.875": { + "vector": [-28.76, 0, 25] + }, + "0.9167": { + "vector": [-28.36, 0, 25] + }, + "0.9583": { + "vector": [-27.97, 0, 25] + }, + "1.0": { + "vector": [-27.59, 0, 25] + }, + "1.0417": { + "vector": [-27.23, 0, 25] + }, + "1.0833": { + "vector": [-26.89, 0, 25] + }, + "1.125": { + "vector": [-26.56, 0, 25] + }, + "1.1667": { + "vector": [-26.26, 0, 25] + }, + "1.2083": { + "vector": [-25.99, 0, 25] + }, + "1.25": { + "vector": [-25.74, 0, 25] + }, + "1.2917": { + "vector": [-25.53, 0, 25] + }, + "1.3333": { + "vector": [-25.34, 0, 25] + }, + "1.375": { + "vector": [-25.2, 0, 25] + }, + "1.4167": { + "vector": [-25.09, 0, 25] + }, + "1.4583": { + "vector": [-25.02, 0, 25] + }, + "1.5": { + "vector": [-25, 0, 25] + }, + "1.5417": { + "vector": [-25.02, 0, 25] + }, + "1.5833": { + "vector": [-25.09, 0, 25] + }, + "1.625": { + "vector": [-25.2, 0, 25] + }, + "1.6667": { + "vector": [-25.34, 0, 25] + }, + "1.7083": { + "vector": [-25.53, 0, 25] + }, + "1.75": { + "vector": [-25.74, 0, 25] + }, + "1.7917": { + "vector": [-25.99, 0, 25] + }, + "1.8333": { + "vector": [-26.26, 0, 25] + }, + "1.875": { + "vector": [-26.56, 0, 25] + }, + "1.9167": { + "vector": [-26.89, 0, 25] + }, + "1.9583": { + "vector": [-27.23, 0, 25] + }, + "2.0": { + "vector": [-27.59, 0, 25] + }, + "2.0417": { + "vector": [-27.97, 0, 25] + }, + "2.0833": { + "vector": [-28.36, 0, 25] + }, + "2.125": { + "vector": [-28.76, 0, 25] + }, + "2.1667": { + "vector": [-29.17, 0, 25] + }, + "2.2083": { + "vector": [-29.58, 0, 25] + }, + "2.25": { + "vector": [-30, 0, 25] + }, + "2.2917": { + "vector": [-30.42, 0, 25] + }, + "2.3333": { + "vector": [-30.83, 0, 25] + }, + "2.375": { + "vector": [-31.24, 0, 25] + }, + "2.4167": { + "vector": [-31.64, 0, 25] + }, + "2.4583": { + "vector": [-32.03, 0, 25] + }, + "2.5": { + "vector": [-32.41, 0, 25] + }, + "2.5417": { + "vector": [-32.77, 0, 25] + }, + "2.5833": { + "vector": [-33.11, 0, 25] + }, + "2.625": { + "vector": [-33.44, 0, 25] + }, + "2.6667": { + "vector": [-33.74, 0, 25] + }, + "2.7083": { + "vector": [-34.01, 0, 25] + }, + "2.75": { + "vector": [-34.26, 0, 25] + }, + "2.7917": { + "vector": [-34.47, 0, 25] + }, + "2.8333": { + "vector": [-34.66, 0, 25] + }, + "2.875": { + "vector": [-34.8, 0, 25] + }, + "2.9167": { + "vector": [-34.91, 0, 25] + }, + "2.9583": { + "vector": [-34.98, 0, 25] + }, + "3.0": { + "vector": [-35, 0, 25] + } + } + }, + "leftFrontThigh": { + "rotation": { + "0.0": { + "vector": [0, 15, 5] + }, + "0.0417": { + "vector": [-0.22, 14.99, 4.14] + }, + "0.0833": { + "vector": [-0.49, 14.98, 3.1] + }, + "0.125": { + "vector": [-0.79, 14.96, 1.93] + }, + "0.1667": { + "vector": [-1.11, 14.94, 0.69] + }, + "0.2083": { + "vector": [-1.43, 14.91, -0.57] + }, + "0.25": { + "vector": [-1.75, 14.89, -1.79] + }, + "0.2917": { + "vector": [-2.04, 14.86, -2.92] + }, + "0.3333": { + "vector": [-2.29, 14.83, -3.91] + }, + "0.375": { + "vector": [-2.5, 14.81, -4.7] + }, + "0.4167": { + "vector": [-2.64, 14.79, -5.24] + }, + "0.4583": { + "vector": [-2.7, 14.78, -5.47] + }, + "0.5": { + "vector": [-2.66, 14.77, -5.35] + }, + "0.5417": { + "vector": [-2.51, 14.76, -4.75] + }, + "0.5833": { + "vector": [-2.23, 14.76, -3.67] + }, + "0.625": { + "vector": [-1.86, 14.77, -2.21] + }, + "0.6667": { + "vector": [-1.4, 14.77, -0.46] + }, + "0.7083": { + "vector": [-0.9, 14.78, 1.49] + }, + "0.75": { + "vector": [-0.37, 14.8, 3.55] + }, + "0.7917": { + "vector": [0.16, 14.81, 5.61] + }, + "0.8333": { + "vector": [0.67, 14.82, 7.59] + }, + "0.875": { + "vector": [1.13, 14.83, 9.39] + }, + "0.9167": { + "vector": [1.53, 14.85, 10.91] + }, + "0.9583": { + "vector": [1.82, 14.86, 12.07] + }, + "1.0": { + "vector": [2, 14.87, 12.76] + }, + "1.0417": { + "vector": [2.07, 14.88, 13.03] + }, + "1.0833": { + "vector": [2.06, 14.89, 12.99] + }, + "1.125": { + "vector": [1.99, 14.91, 12.7] + }, + "1.1667": { + "vector": [1.85, 14.92, 12.19] + }, + "1.2083": { + "vector": [1.67, 14.94, 11.49] + }, + "1.25": { + "vector": [1.46, 14.96, 10.66] + }, + "1.2917": { + "vector": [1.22, 14.97, 9.73] + }, + "1.3333": { + "vector": [0.96, 14.98, 8.74] + }, + "1.375": { + "vector": [0.7, 14.99, 7.73] + }, + "1.4167": { + "vector": [0.45, 15, 6.74] + }, + "1.4583": { + "vector": [0.21, 15, 5.82] + }, + "1.5": { + "vector": [0, 15, 5] + }, + "1.5417": { + "vector": [-0.22, 14.99, 4.14] + }, + "1.5833": { + "vector": [-0.49, 14.98, 3.1] + }, + "1.625": { + "vector": [-0.79, 14.96, 1.93] + }, + "1.6667": { + "vector": [-1.11, 14.94, 0.69] + }, + "1.7083": { + "vector": [-1.43, 14.91, -0.57] + }, + "1.75": { + "vector": [-1.75, 14.89, -1.79] + }, + "1.7917": { + "vector": [-2.04, 14.86, -2.92] + }, + "1.8333": { + "vector": [-2.29, 14.83, -3.91] + }, + "1.875": { + "vector": [-2.5, 14.81, -4.7] + }, + "1.9167": { + "vector": [-2.64, 14.79, -5.24] + }, + "1.9583": { + "vector": [-2.7, 14.78, -5.47] + }, + "2.0": { + "vector": [-2.66, 14.77, -5.35] + }, + "2.0417": { + "vector": [-2.51, 14.76, -4.75] + }, + "2.0833": { + "vector": [-2.23, 14.76, -3.67] + }, + "2.125": { + "vector": [-1.86, 14.77, -2.21] + }, + "2.1667": { + "vector": [-1.4, 14.77, -0.46] + }, + "2.2083": { + "vector": [-0.9, 14.78, 1.49] + }, + "2.25": { + "vector": [-0.37, 14.8, 3.55] + }, + "2.2917": { + "vector": [0.16, 14.81, 5.61] + }, + "2.3333": { + "vector": [0.67, 14.82, 7.59] + }, + "2.375": { + "vector": [1.13, 14.83, 9.39] + }, + "2.4167": { + "vector": [1.53, 14.85, 10.91] + }, + "2.4583": { + "vector": [1.82, 14.86, 12.07] + }, + "2.5": { + "vector": [2, 14.87, 12.76] + }, + "2.5417": { + "vector": [2.07, 14.88, 13.03] + }, + "2.5833": { + "vector": [2.06, 14.89, 12.99] + }, + "2.625": { + "vector": [1.99, 14.91, 12.7] + }, + "2.6667": { + "vector": [1.85, 14.92, 12.19] + }, + "2.7083": { + "vector": [1.67, 14.94, 11.49] + }, + "2.75": { + "vector": [1.46, 14.96, 10.66] + }, + "2.7917": { + "vector": [1.22, 14.97, 9.73] + }, + "2.8333": { + "vector": [0.96, 14.98, 8.74] + }, + "2.875": { + "vector": [0.7, 14.99, 7.73] + }, + "2.9167": { + "vector": [0.45, 15, 6.74] + }, + "2.9583": { + "vector": [0.21, 15, 5.82] + }, + "3.0": { + "vector": [0, 15, 5] + } + } + }, + "leftBackThigh": { + "rotation": { + "0.0": { + "vector": [0, -15, 5] + }, + "0.0417": { + "vector": [0.24, -14.97, 4.05] + }, + "0.0833": { + "vector": [0.58, -14.93, 2.74] + }, + "0.125": { + "vector": [0.98, -14.88, 1.18] + }, + "0.1667": { + "vector": [1.42, -14.83, -0.55] + }, + "0.2083": { + "vector": [1.89, -14.77, -2.38] + }, + "0.25": { + "vector": [2.36, -14.71, -4.21] + }, + "0.2917": { + "vector": [2.8, -14.65, -5.96] + }, + "0.3333": { + "vector": [3.21, -14.6, -7.54] + }, + "0.375": { + "vector": [3.55, -14.55, -8.87] + }, + "0.4167": { + "vector": [3.8, -14.51, -9.86] + }, + "0.4583": { + "vector": [3.95, -14.49, -10.44] + }, + "0.5": { + "vector": [3.97, -14.48, -10.5] + }, + "0.5417": { + "vector": [3.83, -14.48, -9.97] + }, + "0.5833": { + "vector": [3.54, -14.5, -8.85] + }, + "0.625": { + "vector": [3.14, -14.53, -7.27] + }, + "0.6667": { + "vector": [2.64, -14.57, -5.33] + }, + "0.7083": { + "vector": [2.08, -14.62, -3.14] + }, + "0.75": { + "vector": [1.48, -14.67, -0.81] + }, + "0.7917": { + "vector": [0.87, -14.73, 1.56] + }, + "0.8333": { + "vector": [0.28, -14.78, 3.86] + }, + "0.875": { + "vector": [-0.26, -14.83, 5.98] + }, + "0.9167": { + "vector": [-0.73, -14.88, 7.81] + }, + "0.9583": { + "vector": [-1.1, -14.91, 9.24] + }, + "1.0": { + "vector": [-1.34, -14.94, 10.18] + }, + "1.0417": { + "vector": [-1.46, -14.96, 10.67] + }, + "1.0833": { + "vector": [-1.51, -14.98, 10.87] + }, + "1.125": { + "vector": [-1.5, -14.99, 10.82] + }, + "1.1667": { + "vector": [-1.43, -15, 10.56] + }, + "1.2083": { + "vector": [-1.32, -15.01, 10.11] + }, + "1.25": { + "vector": [-1.17, -15.01, 9.53] + }, + "1.2917": { + "vector": [-0.99, -15.02, 8.83] + }, + "1.3333": { + "vector": [-0.79, -15.02, 8.07] + }, + "1.375": { + "vector": [-0.58, -15.02, 7.26] + }, + "1.4167": { + "vector": [-0.38, -15.01, 6.46] + }, + "1.4583": { + "vector": [-0.18, -15.01, 5.69] + }, + "1.5": { + "vector": [0, -15, 5] + }, + "1.5417": { + "vector": [0.19, -14.99, 4.24] + }, + "1.5833": { + "vector": [0.44, -14.97, 3.31] + }, + "1.625": { + "vector": [0.71, -14.95, 2.23] + }, + "1.6667": { + "vector": [1.01, -14.93, 1.07] + }, + "1.7083": { + "vector": [1.32, -14.9, -0.12] + }, + "1.75": { + "vector": [1.62, -14.87, -1.3] + }, + "1.7917": { + "vector": [1.91, -14.85, -2.42] + }, + "1.8333": { + "vector": [2.17, -14.82, -3.43] + }, + "1.875": { + "vector": [2.39, -14.8, -4.27] + }, + "1.9167": { + "vector": [2.55, -14.78, -4.91] + }, + "1.9583": { + "vector": [2.65, -14.77, -5.28] + }, + "2.0": { + "vector": [2.66, -14.77, -5.35] + }, + "2.0417": { + "vector": [2.58, -14.77, -5.03] + }, + "2.0833": { + "vector": [2.41, -14.78, -4.36] + }, + "2.125": { + "vector": [2.16, -14.79, -3.39] + }, + "2.1667": { + "vector": [1.85, -14.81, -2.18] + }, + "2.2083": { + "vector": [1.5, -14.84, -0.82] + }, + "2.25": { + "vector": [1.12, -14.86, 0.64] + }, + "2.2917": { + "vector": [0.74, -14.89, 2.12] + }, + "2.3333": { + "vector": [0.37, -14.91, 3.56] + }, + "2.375": { + "vector": [0.02, -14.93, 4.9] + }, + "2.4167": { + "vector": [-0.28, -14.96, 6.06] + }, + "2.4583": { + "vector": [-0.51, -14.97, 6.98] + }, + "2.5": { + "vector": [-0.67, -14.99, 7.59] + }, + "2.5417": { + "vector": [-0.76, -15, 7.96] + }, + "2.5833": { + "vector": [-0.83, -15.01, 8.2] + }, + "2.625": { + "vector": [-0.86, -15.02, 8.34] + }, + "2.6667": { + "vector": [-0.87, -15.03, 8.35] + }, + "2.7083": { + "vector": [-0.84, -15.03, 8.26] + }, + "2.75": { + "vector": [-0.79, -15.04, 8.07] + }, + "2.7917": { + "vector": [-0.72, -15.04, 7.78] + }, + "2.8333": { + "vector": [-0.62, -15.04, 7.39] + }, + "2.875": { + "vector": [-0.49, -15.04, 6.92] + }, + "2.9167": { + "vector": [-0.35, -15.03, 6.36] + }, + "2.9583": { + "vector": [-0.18, -15.02, 5.72] + }, + "3.0": { + "vector": [0, -15, 5] + } + } + }, + "leftBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 5] + }, + "0.0417": { + "vector": [0, 0, 5.57] + }, + "0.0833": { + "vector": [0, 0, 6.24] + }, + "0.125": { + "vector": [0, 0, 6.95] + }, + "0.1667": { + "vector": [0, 0, 7.64] + }, + "0.2083": { + "vector": [0, 0, 8.28] + }, + "0.25": { + "vector": [0, 0, 8.8] + }, + "0.2917": { + "vector": [0, 0, 9.16] + }, + "0.3333": { + "vector": [0, 0, 9.3] + }, + "0.375": { + "vector": [0, 0, 9.17] + }, + "0.4167": { + "vector": [0, 0, 8.66] + }, + "0.4583": { + "vector": [0, 0, 7.76] + }, + "0.5": { + "vector": [0, 0, 6.58] + }, + "0.5417": { + "vector": [0, 0, 5.23] + }, + "0.5833": { + "vector": [0, 0, 3.84] + }, + "0.625": { + "vector": [0, 0, 2.5] + }, + "0.6667": { + "vector": [0, 0, 1.34] + }, + "0.7083": { + "vector": [0, 0, 0.47] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [0, 0, -0.08] + }, + "0.8333": { + "vector": [0, 0, -0.09] + }, + "0.875": { + "vector": [0, 0, -0.03] + }, + "0.9167": { + "vector": [0, 0, 0.08] + }, + "0.9583": { + "vector": [0, 0, 0.25] + }, + "1.0": { + "vector": [0, 0, 0.46] + }, + "1.0417": { + "vector": [0, 0, 0.72] + }, + "1.0833": { + "vector": [0, 0, 1.02] + }, + "1.125": { + "vector": [0, 0, 1.35] + }, + "1.1667": { + "vector": [0, 0, 1.71] + }, + "1.2083": { + "vector": [0, 0, 2.1] + }, + "1.25": { + "vector": [0, 0, 2.5] + }, + "1.2917": { + "vector": [0, 0, 2.91] + }, + "1.3333": { + "vector": [0, 0, 3.34] + }, + "1.375": { + "vector": [0, 0, 3.76] + }, + "1.4167": { + "vector": [0, 0, 4.18] + }, + "1.4583": { + "vector": [0, 0, 4.6] + }, + "1.5": { + "vector": [0, 0, 5] + }, + "1.5417": { + "vector": [0, 0, 5.96] + }, + "1.5833": { + "vector": [0, 0, 7.21] + }, + "1.625": { + "vector": [0, 0, 8.61] + }, + "1.6667": { + "vector": [0, 0, 10.07] + }, + "1.7083": { + "vector": [0, 0, 11.47] + }, + "1.75": { + "vector": [0, 0, 12.69] + }, + "1.7917": { + "vector": [0, 0, 13.62] + }, + "1.8333": { + "vector": [0, 0, 14.15] + }, + "1.875": { + "vector": [0, 0, 14.17] + }, + "1.9167": { + "vector": [0, 0, 13.51] + }, + "1.9583": { + "vector": [0, 0, 12.22] + }, + "2.0": { + "vector": [0, 0, 10.47] + }, + "2.0417": { + "vector": [0, 0, 8.42] + }, + "2.0833": { + "vector": [0, 0, 6.26] + }, + "2.125": { + "vector": [0, 0, 4.17] + }, + "2.1667": { + "vector": [0, 0, 2.31] + }, + "2.2083": { + "vector": [0, 0, 0.86] + }, + "2.25": { + "vector": [0, 0, 0] + }, + "2.2917": { + "vector": [0, 0, -0.2] + }, + "2.3333": { + "vector": [0, 0, -0.28] + }, + "2.375": { + "vector": [0, 0, -0.27] + }, + "2.4167": { + "vector": [0, 0, -0.16] + }, + "2.4583": { + "vector": [0, 0, 0.02] + }, + "2.5": { + "vector": [0, 0, 0.28] + }, + "2.5417": { + "vector": [0, 0, 0.59] + }, + "2.5833": { + "vector": [0, 0, 0.95] + }, + "2.625": { + "vector": [0, 0, 1.35] + }, + "2.6667": { + "vector": [0, 0, 1.78] + }, + "2.7083": { + "vector": [0, 0, 2.23] + }, + "2.75": { + "vector": [0, 0, 2.68] + }, + "2.7917": { + "vector": [0, 0, 3.14] + }, + "2.8333": { + "vector": [0, 0, 3.58] + }, + "2.875": { + "vector": [0, 0, 3.99] + }, + "2.9167": { + "vector": [0, 0, 4.38] + }, + "2.9583": { + "vector": [0, 0, 4.71] + }, + "3.0": { + "vector": [0, 0, 5] + } + } + }, + "leftBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, -30] + }, + "0.0417": { + "vector": [0, 0, -31.54] + }, + "0.0833": { + "vector": [0, 0, -33.21] + }, + "0.125": { + "vector": [0, 0, -34.94] + }, + "0.1667": { + "vector": [0, 0, -36.67] + }, + "0.2083": { + "vector": [0, 0, -38.32] + }, + "0.25": { + "vector": [0, 0, -39.84] + }, + "0.2917": { + "vector": [0, 0, -41.17] + }, + "0.3333": { + "vector": [0, 0, -42.22] + }, + "0.375": { + "vector": [0, 0, -42.95] + }, + "0.4167": { + "vector": [0, 0, -43.28] + }, + "0.4583": { + "vector": [0, 0, -43.15] + }, + "0.5": { + "vector": [0, 0, -42.5] + }, + "0.5417": { + "vector": [0, 0, -41.06] + }, + "0.5833": { + "vector": [0, 0, -38.75] + }, + "0.625": { + "vector": [0, 0, -35.74] + }, + "0.6667": { + "vector": [0, 0, -32.22] + }, + "0.7083": { + "vector": [0, 0, -28.37] + }, + "0.75": { + "vector": [0, 0, -24.37] + }, + "0.7917": { + "vector": [0, 0, -20.41] + }, + "0.8333": { + "vector": [0, 0, -16.67] + }, + "0.875": { + "vector": [0, 0, -13.32] + }, + "0.9167": { + "vector": [0, 0, -10.56] + }, + "0.9583": { + "vector": [0, 0, -8.55] + }, + "1.0": { + "vector": [0, 0, -7.5] + }, + "1.0417": { + "vector": [0, 0, -7.39] + }, + "1.0833": { + "vector": [0, 0, -8.04] + }, + "1.125": { + "vector": [0, 0, -9.32] + }, + "1.1667": { + "vector": [0, 0, -11.11] + }, + "1.2083": { + "vector": [0, 0, -13.31] + }, + "1.25": { + "vector": [0, 0, -15.78] + }, + "1.2917": { + "vector": [0, 0, -18.42] + }, + "1.3333": { + "vector": [0, 0, -21.11] + }, + "1.375": { + "vector": [0, 0, -23.73] + }, + "1.4167": { + "vector": [0, 0, -26.16] + }, + "1.4583": { + "vector": [0, 0, -28.29] + }, + "1.5": { + "vector": [0, 0, -30] + }, + "1.5417": { + "vector": [0, 0, -31.54] + }, + "1.5833": { + "vector": [0, 0, -33.21] + }, + "1.625": { + "vector": [0, 0, -34.94] + }, + "1.6667": { + "vector": [0, 0, -36.67] + }, + "1.7083": { + "vector": [0, 0, -38.32] + }, + "1.75": { + "vector": [0, 0, -39.84] + }, + "1.7917": { + "vector": [0, 0, -41.17] + }, + "1.8333": { + "vector": [0, 0, -42.22] + }, + "1.875": { + "vector": [0, 0, -42.95] + }, + "1.9167": { + "vector": [0, 0, -43.28] + }, + "1.9583": { + "vector": [0, 0, -43.15] + }, + "2.0": { + "vector": [0, 0, -42.5] + }, + "2.0417": { + "vector": [0, 0, -41.06] + }, + "2.0833": { + "vector": [0, 0, -38.75] + }, + "2.125": { + "vector": [0, 0, -35.74] + }, + "2.1667": { + "vector": [0, 0, -32.22] + }, + "2.2083": { + "vector": [0, 0, -28.37] + }, + "2.25": { + "vector": [0, 0, -24.37] + }, + "2.2917": { + "vector": [0, 0, -20.41] + }, + "2.3333": { + "vector": [0, 0, -16.67] + }, + "2.375": { + "vector": [0, 0, -13.32] + }, + "2.4167": { + "vector": [0, 0, -10.56] + }, + "2.4583": { + "vector": [0, 0, -8.55] + }, + "2.5": { + "vector": [0, 0, -7.5] + }, + "2.5417": { + "vector": [0, 0, -7.39] + }, + "2.5833": { + "vector": [0, 0, -8.04] + }, + "2.625": { + "vector": [0, 0, -9.32] + }, + "2.6667": { + "vector": [0, 0, -11.11] + }, + "2.7083": { + "vector": [0, 0, -13.31] + }, + "2.75": { + "vector": [0, 0, -15.78] + }, + "2.7917": { + "vector": [0, 0, -18.42] + }, + "2.8333": { + "vector": [0, 0, -21.11] + }, + "2.875": { + "vector": [0, 0, -23.73] + }, + "2.9167": { + "vector": [0, 0, -26.16] + }, + "2.9583": { + "vector": [0, 0, -28.29] + }, + "3.0": { + "vector": [0, 0, -30] + } + } + }, + "leftFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 35] + }, + "0.0417": { + "vector": [0, 0, 34.87] + }, + "0.0833": { + "vector": [0, 0, 34.49] + }, + "0.125": { + "vector": [0, 0, 33.89] + }, + "0.1667": { + "vector": [0, 0, 33.11] + }, + "0.2083": { + "vector": [0, 0, 32.17] + }, + "0.25": { + "vector": [0, 0, 31.11] + }, + "0.2917": { + "vector": [0, 0, 29.96] + }, + "0.3333": { + "vector": [0, 0, 28.74] + }, + "0.375": { + "vector": [0, 0, 27.5] + }, + "0.4167": { + "vector": [0, 0, 26.26] + }, + "0.4583": { + "vector": [0, 0, 25.04] + }, + "0.5": { + "vector": [0, 0, 23.89] + }, + "0.5417": { + "vector": [0, 0, 22.83] + }, + "0.5833": { + "vector": [0, 0, 21.89] + }, + "0.625": { + "vector": [0, 0, 21.11] + }, + "0.6667": { + "vector": [0, 0, 20.51] + }, + "0.7083": { + "vector": [0, 0, 20.13] + }, + "0.75": { + "vector": [0, 0, 20] + }, + "0.7917": { + "vector": [0, 0, 20.13] + }, + "0.8333": { + "vector": [0, 0, 20.51] + }, + "0.875": { + "vector": [0, 0, 21.11] + }, + "0.9167": { + "vector": [0, 0, 21.89] + }, + "0.9583": { + "vector": [0, 0, 22.83] + }, + "1.0": { + "vector": [0, 0, 23.89] + }, + "1.0417": { + "vector": [0, 0, 25.04] + }, + "1.0833": { + "vector": [0, 0, 26.26] + }, + "1.125": { + "vector": [0, 0, 27.5] + }, + "1.1667": { + "vector": [0, 0, 28.74] + }, + "1.2083": { + "vector": [0, 0, 29.96] + }, + "1.25": { + "vector": [0, 0, 31.11] + }, + "1.2917": { + "vector": [0, 0, 32.17] + }, + "1.3333": { + "vector": [0, 0, 33.11] + }, + "1.375": { + "vector": [0, 0, 33.89] + }, + "1.4167": { + "vector": [0, 0, 34.49] + }, + "1.4583": { + "vector": [0, 0, 34.87] + }, + "1.5": { + "vector": [0, 0, 35] + }, + "1.5417": { + "vector": [0, 0, 34.87] + }, + "1.5833": { + "vector": [0, 0, 34.49] + }, + "1.625": { + "vector": [0, 0, 33.89] + }, + "1.6667": { + "vector": [0, 0, 33.11] + }, + "1.7083": { + "vector": [0, 0, 32.17] + }, + "1.75": { + "vector": [0, 0, 31.11] + }, + "1.7917": { + "vector": [0, 0, 29.96] + }, + "1.8333": { + "vector": [0, 0, 28.74] + }, + "1.875": { + "vector": [0, 0, 27.5] + }, + "1.9167": { + "vector": [0, 0, 26.26] + }, + "1.9583": { + "vector": [0, 0, 25.04] + }, + "2.0": { + "vector": [0, 0, 23.89] + }, + "2.0417": { + "vector": [0, 0, 22.83] + }, + "2.0833": { + "vector": [0, 0, 21.89] + }, + "2.125": { + "vector": [0, 0, 21.11] + }, + "2.1667": { + "vector": [0, 0, 20.51] + }, + "2.2083": { + "vector": [0, 0, 20.13] + }, + "2.25": { + "vector": [0, 0, 20] + }, + "2.2917": { + "vector": [0, 0, 20.13] + }, + "2.3333": { + "vector": [0, 0, 20.51] + }, + "2.375": { + "vector": [0, 0, 21.11] + }, + "2.4167": { + "vector": [0, 0, 21.89] + }, + "2.4583": { + "vector": [0, 0, 22.83] + }, + "2.5": { + "vector": [0, 0, 23.89] + }, + "2.5417": { + "vector": [0, 0, 25.04] + }, + "2.5833": { + "vector": [0, 0, 26.26] + }, + "2.625": { + "vector": [0, 0, 27.5] + }, + "2.6667": { + "vector": [0, 0, 28.74] + }, + "2.7083": { + "vector": [0, 0, 29.96] + }, + "2.75": { + "vector": [0, 0, 31.11] + }, + "2.7917": { + "vector": [0, 0, 32.17] + }, + "2.8333": { + "vector": [0, 0, 33.11] + }, + "2.875": { + "vector": [0, 0, 33.89] + }, + "2.9167": { + "vector": [0, 0, 34.49] + }, + "2.9583": { + "vector": [0, 0, 34.87] + }, + "3.0": { + "vector": [0, 0, 35] + } + } + }, + "leftFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, -10] + }, + "0.0417": { + "vector": [0, 0, -8.88] + }, + "0.0833": { + "vector": [0, 0, -7.64] + }, + "0.125": { + "vector": [0, 0, -6.33] + }, + "0.1667": { + "vector": [0, 0, -5] + }, + "0.2083": { + "vector": [0, 0, -3.71] + }, + "0.25": { + "vector": [0, 0, -2.5] + }, + "0.2917": { + "vector": [0, 0, -1.43] + }, + "0.3333": { + "vector": [0, 0, -0.56] + }, + "0.375": { + "vector": [0, 0, 0.08] + }, + "0.4167": { + "vector": [0, 0, 0.42] + }, + "0.4583": { + "vector": [0, 0, 0.41] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [0, 0, -0.99] + }, + "0.5833": { + "vector": [0, 0, -2.6] + }, + "0.625": { + "vector": [0, 0, -4.73] + }, + "0.6667": { + "vector": [0, 0, -7.22] + }, + "0.7083": { + "vector": [0, 0, -9.96] + }, + "0.75": { + "vector": [0, 0, -12.81] + }, + "0.7917": { + "vector": [0, 0, -15.65] + }, + "0.8333": { + "vector": [0, 0, -18.33] + }, + "0.875": { + "vector": [0, 0, -20.74] + }, + "0.9167": { + "vector": [0, 0, -22.74] + }, + "0.9583": { + "vector": [0, 0, -24.21] + }, + "1.0": { + "vector": [0, 0, -25] + }, + "1.0417": { + "vector": [0, 0, -25.13] + }, + "1.0833": { + "vector": [0, 0, -24.76] + }, + "1.125": { + "vector": [0, 0, -23.95] + }, + "1.1667": { + "vector": [0, 0, -22.78] + }, + "1.2083": { + "vector": [0, 0, -21.33] + }, + "1.25": { + "vector": [0, 0, -19.69] + }, + "1.2917": { + "vector": [0, 0, -17.92] + }, + "1.3333": { + "vector": [0, 0, -16.11] + }, + "1.375": { + "vector": [0, 0, -14.34] + }, + "1.4167": { + "vector": [0, 0, -12.67] + }, + "1.4583": { + "vector": [0, 0, -11.2] + }, + "1.5": { + "vector": [0, 0, -10] + }, + "1.5417": { + "vector": [0, 0, -8.88] + }, + "1.5833": { + "vector": [0, 0, -7.64] + }, + "1.625": { + "vector": [0, 0, -6.33] + }, + "1.6667": { + "vector": [0, 0, -5] + }, + "1.7083": { + "vector": [0, 0, -3.71] + }, + "1.75": { + "vector": [0, 0, -2.5] + }, + "1.7917": { + "vector": [0, 0, -1.43] + }, + "1.8333": { + "vector": [0, 0, -0.56] + }, + "1.875": { + "vector": [0, 0, 0.08] + }, + "1.9167": { + "vector": [0, 0, 0.42] + }, + "1.9583": { + "vector": [0, 0, 0.41] + }, + "2.0": { + "vector": [0, 0, 0] + }, + "2.0417": { + "vector": [0, 0, -0.99] + }, + "2.0833": { + "vector": [0, 0, -2.6] + }, + "2.125": { + "vector": [0, 0, -4.73] + }, + "2.1667": { + "vector": [0, 0, -7.22] + }, + "2.2083": { + "vector": [0, 0, -9.96] + }, + "2.25": { + "vector": [0, 0, -12.81] + }, + "2.2917": { + "vector": [0, 0, -15.65] + }, + "2.3333": { + "vector": [0, 0, -18.33] + }, + "2.375": { + "vector": [0, 0, -20.74] + }, + "2.4167": { + "vector": [0, 0, -22.74] + }, + "2.4583": { + "vector": [0, 0, -24.21] + }, + "2.5": { + "vector": [0, 0, -25] + }, + "2.5417": { + "vector": [0, 0, -25.13] + }, + "2.5833": { + "vector": [0, 0, -24.76] + }, + "2.625": { + "vector": [0, 0, -23.95] + }, + "2.6667": { + "vector": [0, 0, -22.78] + }, + "2.7083": { + "vector": [0, 0, -21.33] + }, + "2.75": { + "vector": [0, 0, -19.69] + }, + "2.7917": { + "vector": [0, 0, -17.92] + }, + "2.8333": { + "vector": [0, 0, -16.11] + }, + "2.875": { + "vector": [0, 0, -14.34] + }, + "2.9167": { + "vector": [0, 0, -12.67] + }, + "2.9583": { + "vector": [0, 0, -11.2] + }, + "3.0": { + "vector": [0, 0, -10] + } + } + } + } + }, + "float": { + "loop": true, + "animation_length": 1.5, + "bones": { + "body": { + "rotation": { + "vector": [5, 0, 0] + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, 0.01, 0] + }, + "0.0833": { + "vector": [0, 0.03, 0] + }, + "0.125": { + "vector": [0, 0.07, 0] + }, + "0.1667": { + "vector": [0, 0.13, 0] + }, + "0.2083": { + "vector": [0, 0.19, 0] + }, + "0.25": { + "vector": [0, 0.26, 0] + }, + "0.2917": { + "vector": [0, 0.34, 0] + }, + "0.3333": { + "vector": [0, 0.42, 0] + }, + "0.375": { + "vector": [0, 0.5, 0] + }, + "0.4167": { + "vector": [0, 0.58, 0] + }, + "0.4583": { + "vector": [0, 0.66, 0] + }, + "0.5": { + "vector": [0, 0.74, 0] + }, + "0.5417": { + "vector": [0, 0.81, 0] + }, + "0.5833": { + "vector": [0, 0.87, 0] + }, + "0.625": { + "vector": [0, 0.93, 0] + }, + "0.6667": { + "vector": [0, 0.97, 0] + }, + "0.7083": { + "vector": [0, 0.99, 0] + }, + "0.75": { + "vector": [0, 1, 0] + }, + "0.7917": { + "vector": [0, 0.99, 0] + }, + "0.8333": { + "vector": [0, 0.97, 0] + }, + "0.875": { + "vector": [0, 0.93, 0] + }, + "0.9167": { + "vector": [0, 0.87, 0] + }, + "0.9583": { + "vector": [0, 0.81, 0] + }, + "1.0": { + "vector": [0, 0.74, 0] + }, + "1.0417": { + "vector": [0, 0.66, 0] + }, + "1.0833": { + "vector": [0, 0.58, 0] + }, + "1.125": { + "vector": [0, 0.5, 0] + }, + "1.1667": { + "vector": [0, 0.42, 0] + }, + "1.2083": { + "vector": [0, 0.34, 0] + }, + "1.25": { + "vector": [0, 0.26, 0] + }, + "1.2917": { + "vector": [0, 0.19, 0] + }, + "1.3333": { + "vector": [0, 0.13, 0] + }, + "1.375": { + "vector": [0, 0.07, 0] + }, + "1.4167": { + "vector": [0, 0.03, 0] + }, + "1.4583": { + "vector": [0, 0.01, 0] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "topHeadClawThing": { + "rotation": { + "0.0": { + "vector": [35, 0, 0] + }, + "0.0417": { + "vector": [34.91, 0, 0] + }, + "0.0833": { + "vector": [34.66, 0, 0] + }, + "0.125": { + "vector": [34.26, 0, 0] + }, + "0.1667": { + "vector": [33.74, 0, 0] + }, + "0.2083": { + "vector": [33.11, 0, 0] + }, + "0.25": { + "vector": [32.41, 0, 0] + }, + "0.2917": { + "vector": [31.64, 0, 0] + }, + "0.3333": { + "vector": [30.83, 0, 0] + }, + "0.375": { + "vector": [30, 0, 0] + }, + "0.4167": { + "vector": [29.17, 0, 0] + }, + "0.4583": { + "vector": [28.36, 0, 0] + }, + "0.5": { + "vector": [27.59, 0, 0] + }, + "0.5417": { + "vector": [26.89, 0, 0] + }, + "0.5833": { + "vector": [26.26, 0, 0] + }, + "0.625": { + "vector": [25.74, 0, 0] + }, + "0.6667": { + "vector": [25.34, 0, 0] + }, + "0.7083": { + "vector": [25.09, 0, 0] + }, + "0.75": { + "vector": [25, 0, 0] + }, + "0.7917": { + "vector": [25.09, 0, 0] + }, + "0.8333": { + "vector": [25.34, 0, 0] + }, + "0.875": { + "vector": [25.74, 0, 0] + }, + "0.9167": { + "vector": [26.26, 0, 0] + }, + "0.9583": { + "vector": [26.89, 0, 0] + }, + "1.0": { + "vector": [27.59, 0, 0] + }, + "1.0417": { + "vector": [28.36, 0, 0] + }, + "1.0833": { + "vector": [29.17, 0, 0] + }, + "1.125": { + "vector": [30, 0, 0] + }, + "1.1667": { + "vector": [30.83, 0, 0] + }, + "1.2083": { + "vector": [31.64, 0, 0] + }, + "1.25": { + "vector": [32.41, 0, 0] + }, + "1.2917": { + "vector": [33.11, 0, 0] + }, + "1.3333": { + "vector": [33.74, 0, 0] + }, + "1.375": { + "vector": [34.26, 0, 0] + }, + "1.4167": { + "vector": [34.66, 0, 0] + }, + "1.4583": { + "vector": [34.91, 0, 0] + }, + "1.5": { + "vector": [35, 0, 0] + } + } + }, + "rightFrontThigh": { + "rotation": { + "0.0": { + "vector": [0, -15, -5] + }, + "0.0417": { + "vector": [-0.49, -14.98, -3.1] + }, + "0.0833": { + "vector": [-1.11, -14.94, -0.69] + }, + "0.125": { + "vector": [-1.75, -14.89, 1.79] + }, + "0.1667": { + "vector": [-2.29, -14.83, 3.91] + }, + "0.2083": { + "vector": [-2.64, -14.79, 5.24] + }, + "0.25": { + "vector": [-2.66, -14.77, 5.35] + }, + "0.2917": { + "vector": [-2.23, -14.76, 3.67] + }, + "0.3333": { + "vector": [-1.4, -14.77, 0.46] + }, + "0.375": { + "vector": [-0.37, -14.8, -3.55] + }, + "0.4167": { + "vector": [0.67, -14.82, -7.59] + }, + "0.4583": { + "vector": [1.53, -14.85, -10.91] + }, + "0.5": { + "vector": [2, -14.87, -12.76] + }, + "0.5417": { + "vector": [2.06, -14.89, -12.99] + }, + "0.5833": { + "vector": [1.85, -14.92, -12.19] + }, + "0.625": { + "vector": [1.46, -14.96, -10.66] + }, + "0.6667": { + "vector": [0.96, -14.98, -8.74] + }, + "0.7083": { + "vector": [0.45, -15, -6.74] + }, + "0.75": { + "vector": [0, -15, -5] + }, + "0.7917": { + "vector": [-0.49, -14.98, -3.1] + }, + "0.8333": { + "vector": [-1.11, -14.94, -0.69] + }, + "0.875": { + "vector": [-1.75, -14.89, 1.79] + }, + "0.9167": { + "vector": [-2.29, -14.83, 3.91] + }, + "0.9583": { + "vector": [-2.64, -14.79, 5.24] + }, + "1.0": { + "vector": [-2.66, -14.77, 5.35] + }, + "1.0417": { + "vector": [-2.23, -14.76, 3.67] + }, + "1.0833": { + "vector": [-1.4, -14.77, 0.46] + }, + "1.125": { + "vector": [-0.37, -14.8, -3.55] + }, + "1.1667": { + "vector": [0.67, -14.82, -7.59] + }, + "1.2083": { + "vector": [1.53, -14.85, -10.91] + }, + "1.25": { + "vector": [2, -14.87, -12.76] + }, + "1.2917": { + "vector": [2.06, -14.89, -12.99] + }, + "1.3333": { + "vector": [1.85, -14.92, -12.19] + }, + "1.375": { + "vector": [1.46, -14.96, -10.66] + }, + "1.4167": { + "vector": [0.96, -14.98, -8.74] + }, + "1.4583": { + "vector": [0.45, -15, -6.74] + }, + "1.5": { + "vector": [0, -15, -5] + } + } + }, + "rightFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -35] + }, + "0.0417": { + "vector": [0, 0, -34.49] + }, + "0.0833": { + "vector": [0, 0, -33.11] + }, + "0.125": { + "vector": [0, 0, -31.11] + }, + "0.1667": { + "vector": [0, 0, -28.74] + }, + "0.2083": { + "vector": [0, 0, -26.26] + }, + "0.25": { + "vector": [0, 0, -23.89] + }, + "0.2917": { + "vector": [0, 0, -21.89] + }, + "0.3333": { + "vector": [0, 0, -20.51] + }, + "0.375": { + "vector": [0, 0, -20] + }, + "0.4167": { + "vector": [0, 0, -20.51] + }, + "0.4583": { + "vector": [0, 0, -21.89] + }, + "0.5": { + "vector": [0, 0, -23.89] + }, + "0.5417": { + "vector": [0, 0, -26.26] + }, + "0.5833": { + "vector": [0, 0, -28.74] + }, + "0.625": { + "vector": [0, 0, -31.11] + }, + "0.6667": { + "vector": [0, 0, -33.11] + }, + "0.7083": { + "vector": [0, 0, -34.49] + }, + "0.75": { + "vector": [0, 0, -35] + }, + "0.7917": { + "vector": [0, 0, -34.49] + }, + "0.8333": { + "vector": [0, 0, -33.11] + }, + "0.875": { + "vector": [0, 0, -31.11] + }, + "0.9167": { + "vector": [0, 0, -28.74] + }, + "0.9583": { + "vector": [0, 0, -26.26] + }, + "1.0": { + "vector": [0, 0, -23.89] + }, + "1.0417": { + "vector": [0, 0, -21.89] + }, + "1.0833": { + "vector": [0, 0, -20.51] + }, + "1.125": { + "vector": [0, 0, -20] + }, + "1.1667": { + "vector": [0, 0, -20.51] + }, + "1.2083": { + "vector": [0, 0, -21.89] + }, + "1.25": { + "vector": [0, 0, -23.89] + }, + "1.2917": { + "vector": [0, 0, -26.26] + }, + "1.3333": { + "vector": [0, 0, -28.74] + }, + "1.375": { + "vector": [0, 0, -31.11] + }, + "1.4167": { + "vector": [0, 0, -33.11] + }, + "1.4583": { + "vector": [0, 0, -34.49] + }, + "1.5": { + "vector": [0, 0, -35] + } + } + }, + "rightFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 10] + }, + "0.0417": { + "vector": [0, 0, 7.64] + }, + "0.0833": { + "vector": [0, 0, 5] + }, + "0.125": { + "vector": [0, 0, 2.5] + }, + "0.1667": { + "vector": [0, 0, 0.56] + }, + "0.2083": { + "vector": [0, 0, -0.42] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 2.6] + }, + "0.3333": { + "vector": [0, 0, 7.22] + }, + "0.375": { + "vector": [0, 0, 12.81] + }, + "0.4167": { + "vector": [0, 0, 18.33] + }, + "0.4583": { + "vector": [0, 0, 22.74] + }, + "0.5": { + "vector": [0, 0, 25] + }, + "0.5417": { + "vector": [0, 0, 24.76] + }, + "0.5833": { + "vector": [0, 0, 22.78] + }, + "0.625": { + "vector": [0, 0, 19.69] + }, + "0.6667": { + "vector": [0, 0, 16.11] + }, + "0.7083": { + "vector": [0, 0, 12.67] + }, + "0.75": { + "vector": [0, 0, 10] + }, + "0.7917": { + "vector": [0, 0, 7.64] + }, + "0.8333": { + "vector": [0, 0, 5] + }, + "0.875": { + "vector": [0, 0, 2.5] + }, + "0.9167": { + "vector": [0, 0, 0.56] + }, + "0.9583": { + "vector": [0, 0, -0.42] + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.0417": { + "vector": [0, 0, 2.6] + }, + "1.0833": { + "vector": [0, 0, 7.22] + }, + "1.125": { + "vector": [0, 0, 12.81] + }, + "1.1667": { + "vector": [0, 0, 18.33] + }, + "1.2083": { + "vector": [0, 0, 22.74] + }, + "1.25": { + "vector": [0, 0, 25] + }, + "1.2917": { + "vector": [0, 0, 24.76] + }, + "1.3333": { + "vector": [0, 0, 22.78] + }, + "1.375": { + "vector": [0, 0, 19.69] + }, + "1.4167": { + "vector": [0, 0, 16.11] + }, + "1.4583": { + "vector": [0, 0, 12.67] + }, + "1.5": { + "vector": [0, 0, 10] + } + } + }, + "rightBackThigh": { + "rotation": { + "0.0": { + "vector": [0, 15, -5] + }, + "0.0417": { + "vector": [0.58, 14.93, -2.74] + }, + "0.0833": { + "vector": [1.42, 14.83, 0.55] + }, + "0.125": { + "vector": [2.36, 14.71, 4.21] + }, + "0.1667": { + "vector": [3.21, 14.6, 7.54] + }, + "0.2083": { + "vector": [3.8, 14.51, 9.86] + }, + "0.25": { + "vector": [3.97, 14.48, 10.5] + }, + "0.2917": { + "vector": [3.54, 14.5, 8.85] + }, + "0.3333": { + "vector": [2.64, 14.57, 5.33] + }, + "0.375": { + "vector": [1.48, 14.67, 0.81] + }, + "0.4167": { + "vector": [0.28, 14.78, -3.86] + }, + "0.4583": { + "vector": [-0.73, 14.88, -7.81] + }, + "0.5": { + "vector": [-1.34, 14.94, -10.18] + }, + "0.5417": { + "vector": [-1.51, 14.98, -10.87] + }, + "0.5833": { + "vector": [-1.43, 15, -10.56] + }, + "0.625": { + "vector": [-1.17, 15.01, -9.53] + }, + "0.6667": { + "vector": [-0.79, 15.02, -8.07] + }, + "0.7083": { + "vector": [-0.38, 15.01, -6.46] + }, + "0.75": { + "vector": [0, 15, -5] + }, + "0.7917": { + "vector": [0.44, 14.97, -3.31] + }, + "0.8333": { + "vector": [1.01, 14.93, -1.07] + }, + "0.875": { + "vector": [1.62, 14.87, 1.3] + }, + "0.9167": { + "vector": [2.17, 14.82, 3.43] + }, + "0.9583": { + "vector": [2.55, 14.78, 4.91] + }, + "1.0": { + "vector": [2.66, 14.77, 5.35] + }, + "1.0417": { + "vector": [2.41, 14.78, 4.36] + }, + "1.0833": { + "vector": [1.85, 14.81, 2.18] + }, + "1.125": { + "vector": [1.12, 14.86, -0.64] + }, + "1.1667": { + "vector": [0.37, 14.91, -3.56] + }, + "1.2083": { + "vector": [-0.28, 14.96, -6.06] + }, + "1.25": { + "vector": [-0.67, 14.99, -7.59] + }, + "1.2917": { + "vector": [-0.83, 15.01, -8.2] + }, + "1.3333": { + "vector": [-0.87, 15.03, -8.35] + }, + "1.375": { + "vector": [-0.79, 15.04, -8.07] + }, + "1.4167": { + "vector": [-0.62, 15.04, -7.39] + }, + "1.4583": { + "vector": [-0.35, 15.03, -6.36] + }, + "1.5": { + "vector": [0, 15, -5] + } + } + }, + "rightBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -5] + }, + "0.0417": { + "vector": [0, 0, -6.1] + }, + "0.0833": { + "vector": [0, 0, -7.37] + }, + "0.125": { + "vector": [0, 0, -8.5] + }, + "0.1667": { + "vector": [0, 0, -9.2] + }, + "0.2083": { + "vector": [0, 0, -9.17] + }, + "0.25": { + "vector": [0, 0, -7.48] + }, + "0.2917": { + "vector": [0, 0, -4.53] + }, + "0.3333": { + "vector": [0, 0, -1.61] + }, + "0.375": { + "vector": [0, 0, 0] + }, + "0.4167": { + "vector": [0, 0, 0.09] + }, + "0.4583": { + "vector": [0, 0, -0.08] + }, + "0.5": { + "vector": [0, 0, -0.46] + }, + "0.5417": { + "vector": [0, 0, -1.02] + }, + "0.5833": { + "vector": [0, 0, -1.71] + }, + "0.625": { + "vector": [0, 0, -2.5] + }, + "0.6667": { + "vector": [0, 0, -3.34] + }, + "0.7083": { + "vector": [0, 0, -4.18] + }, + "0.75": { + "vector": [0, 0, -5] + }, + "0.7917": { + "vector": [0, 0, -6.94] + }, + "0.8333": { + "vector": [0, 0, -9.49] + }, + "0.875": { + "vector": [0, 0, -11.98] + }, + "0.9167": { + "vector": [0, 0, -13.76] + }, + "0.9583": { + "vector": [0, 0, -14.17] + }, + "1.0": { + "vector": [0, 0, -11.82] + }, + "1.0417": { + "vector": [0, 0, -7.35] + }, + "1.0833": { + "vector": [0, 0, -2.74] + }, + "1.125": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0.28] + }, + "1.2083": { + "vector": [0, 0, 0.16] + }, + "1.25": { + "vector": [0, 0, -0.28] + }, + "1.2917": { + "vector": [0, 0, -0.95] + }, + "1.3333": { + "vector": [0, 0, -1.78] + }, + "1.375": { + "vector": [0, 0, -2.68] + }, + "1.4167": { + "vector": [0, 0, -3.58] + }, + "1.4583": { + "vector": [0, 0, -4.38] + }, + "1.5": { + "vector": [0, 0, -5] + } + } + }, + "rightBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 30] + }, + "0.0417": { + "vector": [0, 0, 33.21] + }, + "0.0833": { + "vector": [0, 0, 36.67] + }, + "0.125": { + "vector": [0, 0, 39.84] + }, + "0.1667": { + "vector": [0, 0, 42.22] + }, + "0.2083": { + "vector": [0, 0, 43.28] + }, + "0.25": { + "vector": [0, 0, 42.5] + }, + "0.2917": { + "vector": [0, 0, 38.75] + }, + "0.3333": { + "vector": [0, 0, 32.22] + }, + "0.375": { + "vector": [0, 0, 24.38] + }, + "0.4167": { + "vector": [0, 0, 16.67] + }, + "0.4583": { + "vector": [0, 0, 10.56] + }, + "0.5": { + "vector": [0, 0, 7.5] + }, + "0.5417": { + "vector": [0, 0, 8.04] + }, + "0.5833": { + "vector": [0, 0, 11.11] + }, + "0.625": { + "vector": [0, 0, 15.78] + }, + "0.6667": { + "vector": [0, 0, 21.11] + }, + "0.7083": { + "vector": [0, 0, 26.16] + }, + "0.75": { + "vector": [0, 0, 30] + }, + "0.7917": { + "vector": [0, 0, 33.21] + }, + "0.8333": { + "vector": [0, 0, 36.67] + }, + "0.875": { + "vector": [0, 0, 39.84] + }, + "0.9167": { + "vector": [0, 0, 42.22] + }, + "0.9583": { + "vector": [0, 0, 43.28] + }, + "1.0": { + "vector": [0, 0, 42.5] + }, + "1.0417": { + "vector": [0, 0, 38.75] + }, + "1.0833": { + "vector": [0, 0, 32.22] + }, + "1.125": { + "vector": [0, 0, 24.38] + }, + "1.1667": { + "vector": [0, 0, 16.67] + }, + "1.2083": { + "vector": [0, 0, 10.56] + }, + "1.25": { + "vector": [0, 0, 7.5] + }, + "1.2917": { + "vector": [0, 0, 8.04] + }, + "1.3333": { + "vector": [0, 0, 11.11] + }, + "1.375": { + "vector": [0, 0, 15.78] + }, + "1.4167": { + "vector": [0, 0, 21.11] + }, + "1.4583": { + "vector": [0, 0, 26.16] + }, + "1.5": { + "vector": [0, 0, 30] + } + } + }, + "leftHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-35, 0, -25] + }, + "0.0417": { + "vector": [-34.91, 0, -25] + }, + "0.0833": { + "vector": [-34.66, 0, -25] + }, + "0.125": { + "vector": [-34.26, 0, -25] + }, + "0.1667": { + "vector": [-33.74, 0, -25] + }, + "0.2083": { + "vector": [-33.11, 0, -25] + }, + "0.25": { + "vector": [-32.41, 0, -25] + }, + "0.2917": { + "vector": [-31.64, 0, -25] + }, + "0.3333": { + "vector": [-30.83, 0, -25] + }, + "0.375": { + "vector": [-30, 0, -25] + }, + "0.4167": { + "vector": [-29.17, 0, -25] + }, + "0.4583": { + "vector": [-28.36, 0, -25] + }, + "0.5": { + "vector": [-27.59, 0, -25] + }, + "0.5417": { + "vector": [-26.89, 0, -25] + }, + "0.5833": { + "vector": [-26.26, 0, -25] + }, + "0.625": { + "vector": [-25.74, 0, -25] + }, + "0.6667": { + "vector": [-25.34, 0, -25] + }, + "0.7083": { + "vector": [-25.09, 0, -25] + }, + "0.75": { + "vector": [-25, 0, -25] + }, + "0.7917": { + "vector": [-25.09, 0, -25] + }, + "0.8333": { + "vector": [-25.34, 0, -25] + }, + "0.875": { + "vector": [-25.74, 0, -25] + }, + "0.9167": { + "vector": [-26.26, 0, -25] + }, + "0.9583": { + "vector": [-26.89, 0, -25] + }, + "1.0": { + "vector": [-27.59, 0, -25] + }, + "1.0417": { + "vector": [-28.36, 0, -25] + }, + "1.0833": { + "vector": [-29.17, 0, -25] + }, + "1.125": { + "vector": [-30, 0, -25] + }, + "1.1667": { + "vector": [-30.83, 0, -25] + }, + "1.2083": { + "vector": [-31.64, 0, -25] + }, + "1.25": { + "vector": [-32.41, 0, -25] + }, + "1.2917": { + "vector": [-33.11, 0, -25] + }, + "1.3333": { + "vector": [-33.74, 0, -25] + }, + "1.375": { + "vector": [-34.26, 0, -25] + }, + "1.4167": { + "vector": [-34.66, 0, -25] + }, + "1.4583": { + "vector": [-34.91, 0, -25] + }, + "1.5": { + "vector": [-35, 0, -25] + } + } + }, + "rightHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-35, 0, 25] + }, + "0.0417": { + "vector": [-34.91, 0, 25] + }, + "0.0833": { + "vector": [-34.66, 0, 25] + }, + "0.125": { + "vector": [-34.26, 0, 25] + }, + "0.1667": { + "vector": [-33.74, 0, 25] + }, + "0.2083": { + "vector": [-33.11, 0, 25] + }, + "0.25": { + "vector": [-32.41, 0, 25] + }, + "0.2917": { + "vector": [-31.64, 0, 25] + }, + "0.3333": { + "vector": [-30.83, 0, 25] + }, + "0.375": { + "vector": [-30, 0, 25] + }, + "0.4167": { + "vector": [-29.17, 0, 25] + }, + "0.4583": { + "vector": [-28.36, 0, 25] + }, + "0.5": { + "vector": [-27.59, 0, 25] + }, + "0.5417": { + "vector": [-26.89, 0, 25] + }, + "0.5833": { + "vector": [-26.26, 0, 25] + }, + "0.625": { + "vector": [-25.74, 0, 25] + }, + "0.6667": { + "vector": [-25.34, 0, 25] + }, + "0.7083": { + "vector": [-25.09, 0, 25] + }, + "0.75": { + "vector": [-25, 0, 25] + }, + "0.7917": { + "vector": [-25.09, 0, 25] + }, + "0.8333": { + "vector": [-25.34, 0, 25] + }, + "0.875": { + "vector": [-25.74, 0, 25] + }, + "0.9167": { + "vector": [-26.26, 0, 25] + }, + "0.9583": { + "vector": [-26.89, 0, 25] + }, + "1.0": { + "vector": [-27.59, 0, 25] + }, + "1.0417": { + "vector": [-28.36, 0, 25] + }, + "1.0833": { + "vector": [-29.17, 0, 25] + }, + "1.125": { + "vector": [-30, 0, 25] + }, + "1.1667": { + "vector": [-30.83, 0, 25] + }, + "1.2083": { + "vector": [-31.64, 0, 25] + }, + "1.25": { + "vector": [-32.41, 0, 25] + }, + "1.2917": { + "vector": [-33.11, 0, 25] + }, + "1.3333": { + "vector": [-33.74, 0, 25] + }, + "1.375": { + "vector": [-34.26, 0, 25] + }, + "1.4167": { + "vector": [-34.66, 0, 25] + }, + "1.4583": { + "vector": [-34.91, 0, 25] + }, + "1.5": { + "vector": [-35, 0, 25] + } + } + }, + "leftFrontThigh": { + "rotation": { + "0.0": { + "vector": [0, 15, 5] + }, + "0.0417": { + "vector": [-0.49, 14.98, 3.1] + }, + "0.0833": { + "vector": [-1.11, 14.94, 0.69] + }, + "0.125": { + "vector": [-1.75, 14.89, -1.79] + }, + "0.1667": { + "vector": [-2.29, 14.83, -3.91] + }, + "0.2083": { + "vector": [-2.64, 14.79, -5.24] + }, + "0.25": { + "vector": [-2.66, 14.77, -5.35] + }, + "0.2917": { + "vector": [-2.23, 14.76, -3.67] + }, + "0.3333": { + "vector": [-1.4, 14.77, -0.46] + }, + "0.375": { + "vector": [-0.37, 14.8, 3.55] + }, + "0.4167": { + "vector": [0.67, 14.82, 7.59] + }, + "0.4583": { + "vector": [1.53, 14.85, 10.91] + }, + "0.5": { + "vector": [2, 14.87, 12.76] + }, + "0.5417": { + "vector": [2.06, 14.89, 12.99] + }, + "0.5833": { + "vector": [1.85, 14.92, 12.19] + }, + "0.625": { + "vector": [1.46, 14.96, 10.66] + }, + "0.6667": { + "vector": [0.96, 14.98, 8.74] + }, + "0.7083": { + "vector": [0.45, 15, 6.74] + }, + "0.75": { + "vector": [0, 15, 5] + }, + "0.7917": { + "vector": [-0.49, 14.98, 3.1] + }, + "0.8333": { + "vector": [-1.11, 14.94, 0.69] + }, + "0.875": { + "vector": [-1.75, 14.89, -1.79] + }, + "0.9167": { + "vector": [-2.29, 14.83, -3.91] + }, + "0.9583": { + "vector": [-2.64, 14.79, -5.24] + }, + "1.0": { + "vector": [-2.66, 14.77, -5.35] + }, + "1.0417": { + "vector": [-2.23, 14.76, -3.67] + }, + "1.0833": { + "vector": [-1.4, 14.77, -0.46] + }, + "1.125": { + "vector": [-0.37, 14.8, 3.55] + }, + "1.1667": { + "vector": [0.67, 14.82, 7.59] + }, + "1.2083": { + "vector": [1.53, 14.85, 10.91] + }, + "1.25": { + "vector": [2, 14.87, 12.76] + }, + "1.2917": { + "vector": [2.06, 14.89, 12.99] + }, + "1.3333": { + "vector": [1.85, 14.92, 12.19] + }, + "1.375": { + "vector": [1.46, 14.96, 10.66] + }, + "1.4167": { + "vector": [0.96, 14.98, 8.74] + }, + "1.4583": { + "vector": [0.45, 15, 6.74] + }, + "1.5": { + "vector": [0, 15, 5] + } + } + }, + "leftBackThigh": { + "rotation": { + "0.0": { + "vector": [0, -15, 5] + }, + "0.0417": { + "vector": [0.58, -14.93, 2.74] + }, + "0.0833": { + "vector": [1.42, -14.83, -0.55] + }, + "0.125": { + "vector": [2.36, -14.71, -4.21] + }, + "0.1667": { + "vector": [3.21, -14.6, -7.54] + }, + "0.2083": { + "vector": [3.8, -14.51, -9.86] + }, + "0.25": { + "vector": [3.97, -14.48, -10.5] + }, + "0.2917": { + "vector": [3.54, -14.5, -8.85] + }, + "0.3333": { + "vector": [2.64, -14.57, -5.33] + }, + "0.375": { + "vector": [1.48, -14.67, -0.81] + }, + "0.4167": { + "vector": [0.28, -14.78, 3.86] + }, + "0.4583": { + "vector": [-0.73, -14.88, 7.81] + }, + "0.5": { + "vector": [-1.34, -14.94, 10.18] + }, + "0.5417": { + "vector": [-1.51, -14.98, 10.87] + }, + "0.5833": { + "vector": [-1.43, -15, 10.56] + }, + "0.625": { + "vector": [-1.17, -15.01, 9.53] + }, + "0.6667": { + "vector": [-0.79, -15.02, 8.07] + }, + "0.7083": { + "vector": [-0.38, -15.01, 6.46] + }, + "0.75": { + "vector": [0, -15, 5] + }, + "0.7917": { + "vector": [0.44, -14.97, 3.31] + }, + "0.8333": { + "vector": [1.01, -14.93, 1.07] + }, + "0.875": { + "vector": [1.62, -14.87, -1.3] + }, + "0.9167": { + "vector": [2.17, -14.82, -3.43] + }, + "0.9583": { + "vector": [2.55, -14.78, -4.91] + }, + "1.0": { + "vector": [2.66, -14.77, -5.35] + }, + "1.0417": { + "vector": [2.41, -14.78, -4.36] + }, + "1.0833": { + "vector": [1.85, -14.81, -2.18] + }, + "1.125": { + "vector": [1.12, -14.86, 0.64] + }, + "1.1667": { + "vector": [0.37, -14.91, 3.56] + }, + "1.2083": { + "vector": [-0.28, -14.96, 6.06] + }, + "1.25": { + "vector": [-0.67, -14.99, 7.59] + }, + "1.2917": { + "vector": [-0.83, -15.01, 8.2] + }, + "1.3333": { + "vector": [-0.87, -15.03, 8.35] + }, + "1.375": { + "vector": [-0.79, -15.04, 8.07] + }, + "1.4167": { + "vector": [-0.62, -15.04, 7.39] + }, + "1.4583": { + "vector": [-0.35, -15.03, 6.36] + }, + "1.5": { + "vector": [0, -15, 5] + } + } + }, + "leftBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 5] + }, + "0.0417": { + "vector": [0, 0, 6.1] + }, + "0.0833": { + "vector": [0, 0, 7.37] + }, + "0.125": { + "vector": [0, 0, 8.5] + }, + "0.1667": { + "vector": [0, 0, 9.2] + }, + "0.2083": { + "vector": [0, 0, 9.17] + }, + "0.25": { + "vector": [0, 0, 7.48] + }, + "0.2917": { + "vector": [0, 0, 4.53] + }, + "0.3333": { + "vector": [0, 0, 1.61] + }, + "0.375": { + "vector": [0, 0, 0] + }, + "0.4167": { + "vector": [0, 0, -0.09] + }, + "0.4583": { + "vector": [0, 0, 0.08] + }, + "0.5": { + "vector": [0, 0, 0.46] + }, + "0.5417": { + "vector": [0, 0, 1.02] + }, + "0.5833": { + "vector": [0, 0, 1.71] + }, + "0.625": { + "vector": [0, 0, 2.5] + }, + "0.6667": { + "vector": [0, 0, 3.34] + }, + "0.7083": { + "vector": [0, 0, 4.18] + }, + "0.75": { + "vector": [0, 0, 5] + }, + "0.7917": { + "vector": [0, 0, 6.94] + }, + "0.8333": { + "vector": [0, 0, 9.49] + }, + "0.875": { + "vector": [0, 0, 11.98] + }, + "0.9167": { + "vector": [0, 0, 13.76] + }, + "0.9583": { + "vector": [0, 0, 14.17] + }, + "1.0": { + "vector": [0, 0, 11.82] + }, + "1.0417": { + "vector": [0, 0, 7.35] + }, + "1.0833": { + "vector": [0, 0, 2.74] + }, + "1.125": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, -0.28] + }, + "1.2083": { + "vector": [0, 0, -0.16] + }, + "1.25": { + "vector": [0, 0, 0.28] + }, + "1.2917": { + "vector": [0, 0, 0.95] + }, + "1.3333": { + "vector": [0, 0, 1.78] + }, + "1.375": { + "vector": [0, 0, 2.68] + }, + "1.4167": { + "vector": [0, 0, 3.58] + }, + "1.4583": { + "vector": [0, 0, 4.38] + }, + "1.5": { + "vector": [0, 0, 5] + } + } + }, + "leftBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, -30] + }, + "0.0417": { + "vector": [0, 0, -33.21] + }, + "0.0833": { + "vector": [0, 0, -36.67] + }, + "0.125": { + "vector": [0, 0, -39.84] + }, + "0.1667": { + "vector": [0, 0, -42.22] + }, + "0.2083": { + "vector": [0, 0, -43.28] + }, + "0.25": { + "vector": [0, 0, -42.5] + }, + "0.2917": { + "vector": [0, 0, -38.75] + }, + "0.3333": { + "vector": [0, 0, -32.22] + }, + "0.375": { + "vector": [0, 0, -24.37] + }, + "0.4167": { + "vector": [0, 0, -16.67] + }, + "0.4583": { + "vector": [0, 0, -10.56] + }, + "0.5": { + "vector": [0, 0, -7.5] + }, + "0.5417": { + "vector": [0, 0, -8.04] + }, + "0.5833": { + "vector": [0, 0, -11.11] + }, + "0.625": { + "vector": [0, 0, -15.78] + }, + "0.6667": { + "vector": [0, 0, -21.11] + }, + "0.7083": { + "vector": [0, 0, -26.16] + }, + "0.75": { + "vector": [0, 0, -30] + }, + "0.7917": { + "vector": [0, 0, -33.21] + }, + "0.8333": { + "vector": [0, 0, -36.67] + }, + "0.875": { + "vector": [0, 0, -39.84] + }, + "0.9167": { + "vector": [0, 0, -42.22] + }, + "0.9583": { + "vector": [0, 0, -43.28] + }, + "1.0": { + "vector": [0, 0, -42.5] + }, + "1.0417": { + "vector": [0, 0, -38.75] + }, + "1.0833": { + "vector": [0, 0, -32.22] + }, + "1.125": { + "vector": [0, 0, -24.37] + }, + "1.1667": { + "vector": [0, 0, -16.67] + }, + "1.2083": { + "vector": [0, 0, -10.56] + }, + "1.25": { + "vector": [0, 0, -7.5] + }, + "1.2917": { + "vector": [0, 0, -8.04] + }, + "1.3333": { + "vector": [0, 0, -11.11] + }, + "1.375": { + "vector": [0, 0, -15.78] + }, + "1.4167": { + "vector": [0, 0, -21.11] + }, + "1.4583": { + "vector": [0, 0, -26.16] + }, + "1.5": { + "vector": [0, 0, -30] + } + } + }, + "leftFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 35] + }, + "0.0417": { + "vector": [0, 0, 34.49] + }, + "0.0833": { + "vector": [0, 0, 33.11] + }, + "0.125": { + "vector": [0, 0, 31.11] + }, + "0.1667": { + "vector": [0, 0, 28.74] + }, + "0.2083": { + "vector": [0, 0, 26.26] + }, + "0.25": { + "vector": [0, 0, 23.89] + }, + "0.2917": { + "vector": [0, 0, 21.89] + }, + "0.3333": { + "vector": [0, 0, 20.51] + }, + "0.375": { + "vector": [0, 0, 20] + }, + "0.4167": { + "vector": [0, 0, 20.51] + }, + "0.4583": { + "vector": [0, 0, 21.89] + }, + "0.5": { + "vector": [0, 0, 23.89] + }, + "0.5417": { + "vector": [0, 0, 26.26] + }, + "0.5833": { + "vector": [0, 0, 28.74] + }, + "0.625": { + "vector": [0, 0, 31.11] + }, + "0.6667": { + "vector": [0, 0, 33.11] + }, + "0.7083": { + "vector": [0, 0, 34.49] + }, + "0.75": { + "vector": [0, 0, 35] + }, + "0.7917": { + "vector": [0, 0, 34.49] + }, + "0.8333": { + "vector": [0, 0, 33.11] + }, + "0.875": { + "vector": [0, 0, 31.11] + }, + "0.9167": { + "vector": [0, 0, 28.74] + }, + "0.9583": { + "vector": [0, 0, 26.26] + }, + "1.0": { + "vector": [0, 0, 23.89] + }, + "1.0417": { + "vector": [0, 0, 21.89] + }, + "1.0833": { + "vector": [0, 0, 20.51] + }, + "1.125": { + "vector": [0, 0, 20] + }, + "1.1667": { + "vector": [0, 0, 20.51] + }, + "1.2083": { + "vector": [0, 0, 21.89] + }, + "1.25": { + "vector": [0, 0, 23.89] + }, + "1.2917": { + "vector": [0, 0, 26.26] + }, + "1.3333": { + "vector": [0, 0, 28.74] + }, + "1.375": { + "vector": [0, 0, 31.11] + }, + "1.4167": { + "vector": [0, 0, 33.11] + }, + "1.4583": { + "vector": [0, 0, 34.49] + }, + "1.5": { + "vector": [0, 0, 35] + } + } + }, + "leftFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, -10] + }, + "0.0417": { + "vector": [0, 0, -7.64] + }, + "0.0833": { + "vector": [0, 0, -5] + }, + "0.125": { + "vector": [0, 0, -2.5] + }, + "0.1667": { + "vector": [0, 0, -0.56] + }, + "0.2083": { + "vector": [0, 0, 0.42] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, -2.6] + }, + "0.3333": { + "vector": [0, 0, -7.22] + }, + "0.375": { + "vector": [0, 0, -12.81] + }, + "0.4167": { + "vector": [0, 0, -18.33] + }, + "0.4583": { + "vector": [0, 0, -22.74] + }, + "0.5": { + "vector": [0, 0, -25] + }, + "0.5417": { + "vector": [0, 0, -24.76] + }, + "0.5833": { + "vector": [0, 0, -22.78] + }, + "0.625": { + "vector": [0, 0, -19.69] + }, + "0.6667": { + "vector": [0, 0, -16.11] + }, + "0.7083": { + "vector": [0, 0, -12.67] + }, + "0.75": { + "vector": [0, 0, -10] + }, + "0.7917": { + "vector": [0, 0, -7.64] + }, + "0.8333": { + "vector": [0, 0, -5] + }, + "0.875": { + "vector": [0, 0, -2.5] + }, + "0.9167": { + "vector": [0, 0, -0.56] + }, + "0.9583": { + "vector": [0, 0, 0.42] + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.0417": { + "vector": [0, 0, -2.6] + }, + "1.0833": { + "vector": [0, 0, -7.22] + }, + "1.125": { + "vector": [0, 0, -12.81] + }, + "1.1667": { + "vector": [0, 0, -18.33] + }, + "1.2083": { + "vector": [0, 0, -22.74] + }, + "1.25": { + "vector": [0, 0, -25] + }, + "1.2917": { + "vector": [0, 0, -24.76] + }, + "1.3333": { + "vector": [0, 0, -22.78] + }, + "1.375": { + "vector": [0, 0, -19.69] + }, + "1.4167": { + "vector": [0, 0, -16.11] + }, + "1.4583": { + "vector": [0, 0, -12.67] + }, + "1.5": { + "vector": [0, 0, -10] + } + } + } + } + }, + "attack": { + "loop": true, + "animation_length": 0.75, + "bones": { + "body": { + "rotation": { + "0.0": { + "vector": [5, 0, 0] + }, + "0.0417": { + "vector": [2.33, 0, 0] + }, + "0.0833": { + "vector": [-1.11, 0, 0] + }, + "0.125": { + "vector": [-4.69, 0, 0] + }, + "0.1667": { + "vector": [-7.78, 0, 0] + }, + "0.2083": { + "vector": [-9.76, 0, 0] + }, + "0.25": { + "vector": [-10, 0, 0] + }, + "0.2917": { + "vector": [-7.74, 0, 0] + }, + "0.3333": { + "vector": [-3.33, 0, 0] + }, + "0.375": { + "vector": [2.19, 0, 0] + }, + "0.4167": { + "vector": [7.78, 0, 0] + }, + "0.4583": { + "vector": [12.4, 0, 0] + }, + "0.5": { + "vector": [15, 0, 0] + }, + "0.5417": { + "vector": [15.42, 0, 0] + }, + "0.5833": { + "vector": [14.44, 0, 0] + }, + "0.625": { + "vector": [12.5, 0, 0] + }, + "0.6667": { + "vector": [10, 0, 0] + }, + "0.7083": { + "vector": [7.36, 0, 0] + }, + "0.75": { + "vector": [5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, 0.21, 0.18] + }, + "0.0833": { + "vector": [0, 0.47, 0.52] + }, + "0.125": { + "vector": [0, 0.74, 0.86] + }, + "0.1667": { + "vector": [0, 1, 1] + }, + "0.2083": { + "vector": [0, 1.42, 0.82] + }, + "0.25": { + "vector": [0, 1.84, 0.39] + }, + "0.2917": { + "vector": [0, 1.88, -0.12] + }, + "0.3333": { + "vector": [0, 1.45, -0.67] + }, + "0.375": { + "vector": [0, 0.71, -1.35] + }, + "0.4167": { + "vector": [0, -0.04, -1.92] + }, + "0.4583": { + "vector": [0, -0.54, -2.09] + }, + "0.5": { + "vector": [0, -0.67, -1.37] + }, + "0.5417": { + "vector": [0, -0.51, -0.12] + }, + "0.5833": { + "vector": [0, -0.33, 0.74] + }, + "0.625": { + "vector": [0, -0.27, 0.77] + }, + "0.6667": { + "vector": [0, -0.21, 0.48] + }, + "0.7083": { + "vector": [0, -0.13, 0.15] + }, + "0.75": { + "vector": [0, 0, 0] + } + } + }, + "topHeadClawThing": { + "rotation": { + "0.0": { + "vector": [35, 0, 0] + }, + "0.0417": { + "vector": [28.92, 0, 0] + }, + "0.0833": { + "vector": [22.22, 0, 0] + }, + "0.125": { + "vector": [15.94, 0, 0] + }, + "0.1667": { + "vector": [11.11, 0, 0] + }, + "0.2083": { + "vector": [8.78, 0, 0] + }, + "0.25": { + "vector": [10, 0, 0] + }, + "0.2917": { + "vector": [16.84, 0, 0] + }, + "0.3333": { + "vector": [28.89, 0, 0] + }, + "0.375": { + "vector": [43.44, 0, 0] + }, + "0.4167": { + "vector": [57.78, 0, 0] + }, + "0.4583": { + "vector": [69.2, 0, 0] + }, + "0.5": { + "vector": [75, 0, 0] + }, + "0.5417": { + "vector": [74.24, 0, 0] + }, + "0.5833": { + "vector": [68.89, 0, 0] + }, + "0.625": { + "vector": [60.62, 0, 0] + }, + "0.6667": { + "vector": [51.11, 0, 0] + }, + "0.7083": { + "vector": [42.01, 0, 0] + }, + "0.75": { + "vector": [35, 0, 0] + } + } + }, + "rightFrontThigh": { + "rotation": { + "0.0": { + "vector": [0, -15, -5] + }, + "0.0417": { + "vector": [-1.11, -14.94, -0.69] + }, + "0.0833": { + "vector": [-2.29, -14.83, 3.91] + }, + "0.125": { + "vector": [-2.66, -14.77, 5.35] + }, + "0.1667": { + "vector": [-1.4, -14.77, 0.46] + }, + "0.2083": { + "vector": [0.67, -14.82, -7.59] + }, + "0.25": { + "vector": [2, -14.87, -12.76] + }, + "0.2917": { + "vector": [1.85, -14.92, -12.19] + }, + "0.3333": { + "vector": [0.96, -14.98, -8.74] + }, + "0.375": { + "vector": [0, -15, -5] + }, + "0.4167": { + "vector": [-1.11, -14.94, -0.69] + }, + "0.4583": { + "vector": [-2.29, -14.83, 3.91] + }, + "0.5": { + "vector": [-2.66, -14.77, 5.35] + }, + "0.5417": { + "vector": [-1.4, -14.77, 0.46] + }, + "0.5833": { + "vector": [0.67, -14.82, -7.59] + }, + "0.625": { + "vector": [2, -14.87, -12.76] + }, + "0.6667": { + "vector": [1.85, -14.92, -12.19] + }, + "0.7083": { + "vector": [0.96, -14.98, -8.74] + }, + "0.75": { + "vector": [0, -15, -5] + } + } + }, + "rightFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -35] + }, + "0.0417": { + "vector": [0, 0, -32.66] + }, + "0.0833": { + "vector": [0, 0, -27.5] + }, + "0.125": { + "vector": [0, 0, -22.34] + }, + "0.1667": { + "vector": [0, 0, -20] + }, + "0.2083": { + "vector": [0, 0, -21.56] + }, + "0.25": { + "vector": [0, 0, -25.28] + }, + "0.2917": { + "vector": [0, 0, -29.72] + }, + "0.3333": { + "vector": [0, 0, -33.44] + }, + "0.375": { + "vector": [0, 0, -35] + }, + "0.4167": { + "vector": [0, 0, -32.66] + }, + "0.4583": { + "vector": [0, 0, -27.5] + }, + "0.5": { + "vector": [0, 0, -22.34] + }, + "0.5417": { + "vector": [0, 0, -20] + }, + "0.5833": { + "vector": [0, 0, -21.56] + }, + "0.625": { + "vector": [0, 0, -25.28] + }, + "0.6667": { + "vector": [0, 0, -29.72] + }, + "0.7083": { + "vector": [0, 0, -33.44] + }, + "0.75": { + "vector": [0, 0, -35] + } + } + }, + "rightFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 10] + }, + "0.0417": { + "vector": [0, 0, 5] + }, + "0.0833": { + "vector": [0, 0, 0.56] + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 7.22] + }, + "0.2083": { + "vector": [0, 0, 18.33] + }, + "0.25": { + "vector": [0, 0, 25] + }, + "0.2917": { + "vector": [0, 0, 22.78] + }, + "0.3333": { + "vector": [0, 0, 16.11] + }, + "0.375": { + "vector": [0, 0, 10] + }, + "0.4167": { + "vector": [0, 0, 5] + }, + "0.4583": { + "vector": [0, 0, 0.56] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [0, 0, 7.22] + }, + "0.5833": { + "vector": [0, 0, 18.33] + }, + "0.625": { + "vector": [0, 0, 25] + }, + "0.6667": { + "vector": [0, 0, 22.78] + }, + "0.7083": { + "vector": [0, 0, 16.11] + }, + "0.75": { + "vector": [0, 0, 10] + } + } + }, + "rightBackThigh": { + "rotation": { + "0.0": { + "vector": [0, 15, -5] + }, + "0.0417": { + "vector": [1.42, 14.83, 0.55] + }, + "0.0833": { + "vector": [3.21, 14.6, 7.54] + }, + "0.125": { + "vector": [3.97, 14.48, 10.5] + }, + "0.1667": { + "vector": [2.64, 14.57, 5.33] + }, + "0.2083": { + "vector": [0.28, 14.78, -3.86] + }, + "0.25": { + "vector": [-1.34, 14.94, -10.18] + }, + "0.2917": { + "vector": [-1.43, 15, -10.56] + }, + "0.3333": { + "vector": [-0.79, 15.02, -8.07] + }, + "0.375": { + "vector": [0, 15, -5] + }, + "0.4167": { + "vector": [1.01, 14.93, -1.07] + }, + "0.4583": { + "vector": [2.17, 14.82, 3.43] + }, + "0.5": { + "vector": [2.66, 14.77, 5.35] + }, + "0.5417": { + "vector": [1.85, 14.81, 2.18] + }, + "0.5833": { + "vector": [0.37, 14.91, -3.56] + }, + "0.625": { + "vector": [-0.67, 14.99, -7.59] + }, + "0.6667": { + "vector": [-0.87, 15.03, -8.35] + }, + "0.7083": { + "vector": [-0.62, 15.04, -7.39] + }, + "0.75": { + "vector": [0, 15, -5] + } + } + }, + "rightBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -5] + }, + "0.0417": { + "vector": [0, 0, -7.97] + }, + "0.0833": { + "vector": [0, 0, -9.17] + }, + "0.125": { + "vector": [0, 0, -4.53] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, -0.03] + }, + "0.25": { + "vector": [0, 0, -0.78] + }, + "0.2917": { + "vector": [0, 0, -2.02] + }, + "0.3333": { + "vector": [0, 0, -3.51] + }, + "0.375": { + "vector": [0, 0, -5] + }, + "0.4167": { + "vector": [0, 0, -10.78] + }, + "0.4583": { + "vector": [0, 0, -14.17] + }, + "0.5": { + "vector": [0, 0, -7.35] + }, + "0.5417": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0.21] + }, + "0.625": { + "vector": [0, 0, -0.66] + }, + "0.6667": { + "vector": [0, 0, -2.14] + }, + "0.7083": { + "vector": [0, 0, -3.75] + }, + "0.75": { + "vector": [0, 0, -5] + } + } + }, + "rightBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 30] + }, + "0.0417": { + "vector": [0, 0, 36.67] + }, + "0.0833": { + "vector": [0, 0, 42.22] + }, + "0.125": { + "vector": [0, 0, 42.5] + }, + "0.1667": { + "vector": [0, 0, 32.22] + }, + "0.2083": { + "vector": [0, 0, 16.67] + }, + "0.25": { + "vector": [0, 0, 7.5] + }, + "0.2917": { + "vector": [0, 0, 11.11] + }, + "0.3333": { + "vector": [0, 0, 21.11] + }, + "0.375": { + "vector": [0, 0, 30] + }, + "0.4167": { + "vector": [0, 0, 36.67] + }, + "0.4583": { + "vector": [0, 0, 42.22] + }, + "0.5": { + "vector": [0, 0, 42.5] + }, + "0.5417": { + "vector": [0, 0, 32.22] + }, + "0.5833": { + "vector": [0, 0, 16.67] + }, + "0.625": { + "vector": [0, 0, 7.5] + }, + "0.6667": { + "vector": [0, 0, 11.11] + }, + "0.7083": { + "vector": [0, 0, 21.11] + }, + "0.75": { + "vector": [0, 0, 30] + } + } + }, + "leftHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-35, 0, -25] + }, + "0.0417": { + "vector": [-28.92, 0, -25] + }, + "0.0833": { + "vector": [-22.22, 0, -25] + }, + "0.125": { + "vector": [-15.94, 0, -25] + }, + "0.1667": { + "vector": [-11.11, 0, -25] + }, + "0.2083": { + "vector": [-8.78, 0, -25] + }, + "0.25": { + "vector": [-10, 0, -25] + }, + "0.2917": { + "vector": [-16.84, 0, -25] + }, + "0.3333": { + "vector": [-28.89, 0, -25] + }, + "0.375": { + "vector": [-43.44, 0, -25] + }, + "0.4167": { + "vector": [-57.78, 0, -25] + }, + "0.4583": { + "vector": [-69.2, 0, -25] + }, + "0.5": { + "vector": [-75, 0, -25] + }, + "0.5417": { + "vector": [-74.24, 0, -25] + }, + "0.5833": { + "vector": [-68.89, 0, -25] + }, + "0.625": { + "vector": [-60.63, 0, -25] + }, + "0.6667": { + "vector": [-51.11, 0, -25] + }, + "0.7083": { + "vector": [-42.01, 0, -25] + }, + "0.75": { + "vector": [-35, 0, -25] + } + } + }, + "rightHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-35, 0, 25] + }, + "0.0417": { + "vector": [-28.92, 0, 25] + }, + "0.0833": { + "vector": [-22.22, 0, 25] + }, + "0.125": { + "vector": [-15.94, 0, 25] + }, + "0.1667": { + "vector": [-11.11, 0, 25] + }, + "0.2083": { + "vector": [-8.78, 0, 25] + }, + "0.25": { + "vector": [-10, 0, 25] + }, + "0.2917": { + "vector": [-16.84, 0, 25] + }, + "0.3333": { + "vector": [-28.89, 0, 25] + }, + "0.375": { + "vector": [-43.44, 0, 25] + }, + "0.4167": { + "vector": [-57.78, 0, 25] + }, + "0.4583": { + "vector": [-69.2, 0, 25] + }, + "0.5": { + "vector": [-75, 0, 25] + }, + "0.5417": { + "vector": [-74.24, 0, 25] + }, + "0.5833": { + "vector": [-68.89, 0, 25] + }, + "0.625": { + "vector": [-60.63, 0, 25] + }, + "0.6667": { + "vector": [-51.11, 0, 25] + }, + "0.7083": { + "vector": [-42.01, 0, 25] + }, + "0.75": { + "vector": [-35, 0, 25] + } + } + }, + "leftFrontThigh": { + "rotation": { + "0.0": { + "vector": [0, 15, 5] + }, + "0.0417": { + "vector": [-1.11, 14.94, 0.69] + }, + "0.0833": { + "vector": [-2.29, 14.83, -3.91] + }, + "0.125": { + "vector": [-2.66, 14.77, -5.35] + }, + "0.1667": { + "vector": [-1.4, 14.77, -0.46] + }, + "0.2083": { + "vector": [0.67, 14.82, 7.59] + }, + "0.25": { + "vector": [2, 14.87, 12.76] + }, + "0.2917": { + "vector": [1.85, 14.92, 12.19] + }, + "0.3333": { + "vector": [0.96, 14.98, 8.74] + }, + "0.375": { + "vector": [0, 15, 5] + }, + "0.4167": { + "vector": [-1.11, 14.94, 0.69] + }, + "0.4583": { + "vector": [-2.29, 14.83, -3.91] + }, + "0.5": { + "vector": [-2.66, 14.77, -5.35] + }, + "0.5417": { + "vector": [-1.4, 14.77, -0.46] + }, + "0.5833": { + "vector": [0.67, 14.82, 7.59] + }, + "0.625": { + "vector": [2, 14.87, 12.76] + }, + "0.6667": { + "vector": [1.85, 14.92, 12.19] + }, + "0.7083": { + "vector": [0.96, 14.98, 8.74] + }, + "0.75": { + "vector": [0, 15, 5] + } + } + }, + "leftBackThigh": { + "rotation": { + "0.0": { + "vector": [0, -15, 5] + }, + "0.0417": { + "vector": [1.42, -14.83, -0.55] + }, + "0.0833": { + "vector": [3.21, -14.6, -7.54] + }, + "0.125": { + "vector": [3.97, -14.48, -10.5] + }, + "0.1667": { + "vector": [2.64, -14.57, -5.33] + }, + "0.2083": { + "vector": [0.28, -14.78, 3.86] + }, + "0.25": { + "vector": [-1.34, -14.94, 10.18] + }, + "0.2917": { + "vector": [-1.43, -15, 10.56] + }, + "0.3333": { + "vector": [-0.79, -15.02, 8.07] + }, + "0.375": { + "vector": [0, -15, 5] + }, + "0.4167": { + "vector": [1.01, -14.93, 1.07] + }, + "0.4583": { + "vector": [2.17, -14.82, -3.43] + }, + "0.5": { + "vector": [2.66, -14.77, -5.35] + }, + "0.5417": { + "vector": [1.85, -14.81, -2.18] + }, + "0.5833": { + "vector": [0.37, -14.91, 3.56] + }, + "0.625": { + "vector": [-0.67, -14.99, 7.59] + }, + "0.6667": { + "vector": [-0.87, -15.03, 8.35] + }, + "0.7083": { + "vector": [-0.62, -15.04, 7.39] + }, + "0.75": { + "vector": [0, -15, 5] + } + } + }, + "leftBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 5] + }, + "0.0417": { + "vector": [0, 0, 7.97] + }, + "0.0833": { + "vector": [0, 0, 9.17] + }, + "0.125": { + "vector": [0, 0, 4.53] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 0.03] + }, + "0.25": { + "vector": [0, 0, 0.78] + }, + "0.2917": { + "vector": [0, 0, 2.02] + }, + "0.3333": { + "vector": [0, 0, 3.51] + }, + "0.375": { + "vector": [0, 0, 5] + }, + "0.4167": { + "vector": [0, 0, 10.78] + }, + "0.4583": { + "vector": [0, 0, 14.17] + }, + "0.5": { + "vector": [0, 0, 7.35] + }, + "0.5417": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [0, 0, -0.21] + }, + "0.625": { + "vector": [0, 0, 0.66] + }, + "0.6667": { + "vector": [0, 0, 2.14] + }, + "0.7083": { + "vector": [0, 0, 3.75] + }, + "0.75": { + "vector": [0, 0, 5] + } + } + }, + "leftBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, -30] + }, + "0.0417": { + "vector": [0, 0, -36.67] + }, + "0.0833": { + "vector": [0, 0, -42.22] + }, + "0.125": { + "vector": [0, 0, -42.5] + }, + "0.1667": { + "vector": [0, 0, -32.22] + }, + "0.2083": { + "vector": [0, 0, -16.67] + }, + "0.25": { + "vector": [0, 0, -7.5] + }, + "0.2917": { + "vector": [0, 0, -11.11] + }, + "0.3333": { + "vector": [0, 0, -21.11] + }, + "0.375": { + "vector": [0, 0, -30] + }, + "0.4167": { + "vector": [0, 0, -36.67] + }, + "0.4583": { + "vector": [0, 0, -42.22] + }, + "0.5": { + "vector": [0, 0, -42.5] + }, + "0.5417": { + "vector": [0, 0, -32.22] + }, + "0.5833": { + "vector": [0, 0, -16.67] + }, + "0.625": { + "vector": [0, 0, -7.5] + }, + "0.6667": { + "vector": [0, 0, -11.11] + }, + "0.7083": { + "vector": [0, 0, -21.11] + }, + "0.75": { + "vector": [0, 0, -30] + } + } + }, + "leftFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 35] + }, + "0.0417": { + "vector": [0, 0, 32.66] + }, + "0.0833": { + "vector": [0, 0, 27.5] + }, + "0.125": { + "vector": [0, 0, 22.34] + }, + "0.1667": { + "vector": [0, 0, 20] + }, + "0.2083": { + "vector": [0, 0, 21.56] + }, + "0.25": { + "vector": [0, 0, 25.28] + }, + "0.2917": { + "vector": [0, 0, 29.72] + }, + "0.3333": { + "vector": [0, 0, 33.44] + }, + "0.375": { + "vector": [0, 0, 35] + }, + "0.4167": { + "vector": [0, 0, 32.66] + }, + "0.4583": { + "vector": [0, 0, 27.5] + }, + "0.5": { + "vector": [0, 0, 22.34] + }, + "0.5417": { + "vector": [0, 0, 20] + }, + "0.5833": { + "vector": [0, 0, 21.56] + }, + "0.625": { + "vector": [0, 0, 25.28] + }, + "0.6667": { + "vector": [0, 0, 29.72] + }, + "0.7083": { + "vector": [0, 0, 33.44] + }, + "0.75": { + "vector": [0, 0, 35] + } + } + }, + "leftFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, -10] + }, + "0.0417": { + "vector": [0, 0, -5] + }, + "0.0833": { + "vector": [0, 0, -0.56] + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, -7.22] + }, + "0.2083": { + "vector": [0, 0, -18.33] + }, + "0.25": { + "vector": [0, 0, -25] + }, + "0.2917": { + "vector": [0, 0, -22.78] + }, + "0.3333": { + "vector": [0, 0, -16.11] + }, + "0.375": { + "vector": [0, 0, -10] + }, + "0.4167": { + "vector": [0, 0, -5] + }, + "0.4583": { + "vector": [0, 0, -0.56] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [0, 0, -7.22] + }, + "0.5833": { + "vector": [0, 0, -18.33] + }, + "0.625": { + "vector": [0, 0, -25] + }, + "0.6667": { + "vector": [0, 0, -22.78] + }, + "0.7083": { + "vector": [0, 0, -16.11] + }, + "0.75": { + "vector": [0, 0, -10] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/ant.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/ant.animation.json new file mode 100644 index 00000000..a266f40c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/ant.animation.json @@ -0,0 +1,2128 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, -17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.17875, 0.10358, 1.61888] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.17875, -0.10358, -1.61888] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "dance": { + "loop": true, + "animation_length": 1.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-13.85813, -24.26239, 5.93679] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-13.85813, -24.26239, 5.93679] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-24.00312, 18.43745, -15.27944] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-24.00312, 18.43745, -15.27944] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, -10, 0] + }, + "0.5": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.5": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.72631, 0.45349, -2.99327] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [9.72631, 0.45349, -2.99327] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [12.5, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "ant": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.25": { + "vector": [1, 0.4, 1] + }, + "0.5": { + "vector": [1, 0.4, 1] + }, + "0.75": { + "vector": [1, 1, 1] + } + } + }, + "l_eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.25": { + "vector": [1, 0.4, 1] + }, + "0.5": { + "vector": [1, 0.4, 1] + }, + "0.75": { + "vector": [1, 1, 1] + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.61003, 22.29711, -3.09472] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.47532, -19.82169, 2.71994] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.16955, 1.29256, -14.94548] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.15251, -17.67415, 62.21128] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5.74672, 4.98753, 33.20458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.49325, 15.74419, 39.23412] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [-30.04912, -35.07869, 44.72041] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [29.82269, 35.55522, 45.05671] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-30.04912, -35.07869, 44.72041] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-14.15251, 17.67415, -62.21128] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [5.74672, -4.98753, -33.20458] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-14.15251, 17.67415, -62.21128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [12.49325, -15.74419, -39.23412] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.49325, -15.74419, -39.23412] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [29.82269, -35.55522, -45.05671] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-30.04912, 35.07869, -44.72041] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [29.82269, -35.55522, -45.05671] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "ant": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.5": { + "vector": [1, 1, 1] + } + } + }, + "l_eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.5": { + "vector": [1, 1, 1] + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.16955, -1.29256, 14.94548] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10, 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" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [19.92514, 0.26438, -1.96682] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [19.92514, 0.26438, -1.96682] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.15251, -17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-14.15251, -17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.15251, 17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-14.15251, 17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "ant": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_eye": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0.4, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0.4, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_eye": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0.4, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0.4, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.27472, 52.98677, 1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.27472, 52.98677, 1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.2516, -39.58992, 6.25038] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.2516, -39.58992, 6.25038] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.27472, -52.98677, -1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.27472, -52.98677, -1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.2516, 39.58992, -6.25038] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.2516, 39.58992, -6.25038] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/apple_cow.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/apple_cow.animation.json new file mode 100644 index 00000000..fe45ad3b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/apple_cow.animation.json @@ -0,0 +1,2166 @@ +{ + "format_version": "1.8.0", + "animations": { + "quirk": { + "animation_length": 1.75, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [27.5, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [32.5, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-24.72908, 0, -10.59671] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "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, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "branch": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "apple": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leaves": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1.1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eyes": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "sleep": { + "loop": true, + "animation_length": 2.25, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [2.16541, -1.2497, 29.97638] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [2.16541, -1.2497, 29.97638] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4.99524, 0.2181] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -4.99524, 0.2181] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.9, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.2, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [1.2, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_r": { + "rotation": { + "0.0": { + "post": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_l": { + "rotation": { + "0.0": { + "post": { + "vector": [42.23278, -6.21687, -85.50272] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [42.23278, -6.21687, -85.50272] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_front_r": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.32648, -2.86313, 83.06512] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-22.32648, -2.86313, 83.06512] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_front_l": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "lerp_mode": "catmullrom" + } + } + }, + "branch": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "apple": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eyes_sleep": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.75, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [3.35621, -0.74359, 12.47822] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_r": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -0.68, 0.35] + }, + "0.4167": { + "vector": [0, 3, -2] + }, + "0.5": { + "vector": [0, 0.08, -1.41] + }, + "0.625": { + "vector": [0, -0.17, -0.82] + }, + "0.75": { + "vector": [0, -0.68, 0.35] + } + } + }, + "leg_back_l": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 3, -2] + }, + "0.125": { + "vector": [0, 0.07111, -2.64932] + }, + "0.25": { + "vector": [0, 0.07, 1.35] + }, + "0.3333": { + "vector": [0, 0.07, 0.35] + }, + "0.4167": { + "vector": [0, -0.68, 0.35] + }, + "0.5": { + "vector": [0, 1.32, 0.35] + }, + "0.75": { + "vector": [0, 3, -2] + } + } + }, + "leg_front_r": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 3, -2] + }, + "0.125": { + "vector": [0, 0.07111, -2.64932] + }, + "0.25": { + "vector": [0, 0.07, 1.35] + }, + "0.3333": { + "vector": [0, 0.07, 0.35] + }, + "0.4167": { + "vector": [0, -0.68, 0.35] + }, + "0.5": { + "vector": [0, 1.32, 0.35] + }, + "0.75": { + "vector": [0, 3, -2] + } + } + }, + "leg_front_l": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -0.68, 0.35] + }, + "0.4167": { + "vector": [0, 3, -2] + }, + "0.5": { + "vector": [0, 0.08, -1.41] + }, + "0.625": { + "vector": [0, -0.17, -0.82] + }, + "0.75": { + "vector": [0, -0.68, 0.35] + } + } + }, + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "branch": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "apple": { + "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": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "branch": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "apple": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "wake up": { + "animation_length": 1.5, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4.99524, 0.2181] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -4.99524, 0.2181] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_r": { + "rotation": { + "0.0": { + "post": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_l": { + "rotation": { + "0.0": { + "post": { + "vector": [42.23278, -6.21687, -85.50272] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [30.5405, -15.66318, -50.93688] + }, + "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.625": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_front_r": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.32648, -2.86313, 83.06512] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-17.39481, -16.65815, 52.6836] + }, + "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.25": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_front_l": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_ear": { + "rotation": { + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "branch": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 11.01] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "apple": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 35.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leaves": { + "rotation": { + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eyes": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.75": { + "pre": { + "vector": [0, 0, -1] + }, + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "vector": [0, 0, 0] + } + } + }, + "eyes_sleep": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "start sleep": { + "animation_length": 1.375, + "bones": { + "root": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, -1, 0] + }, + "0.25": { + "vector": [-1, -1, 0] + }, + "0.2917": { + "vector": [0.08, -1, 0] + }, + "0.3333": { + "vector": [-0.93, -1, 0] + }, + "0.375": { + "vector": [0.16, -1, 0] + }, + "0.4167": { + "vector": [-0.86, -1, 0] + }, + "0.4583": { + "vector": [0.25, -1, 0] + }, + "0.5": { + "vector": [-0.79, -1, 0] + }, + "0.5417": { + "vector": [0.34, -1, 0] + }, + "0.5833": { + "vector": [-0.73, -1, 0] + }, + "0.625": { + "vector": [0.45, -1, 0] + }, + "0.6667": { + "vector": [-0.7, -1, 0] + }, + "0.7083": { + "vector": [0.65, -1, 0] + }, + "0.75": { + "vector": [0, -1, 0] + }, + "1.0": { + "pre": { + "vector": [0, -9, 0] + }, + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.7083": { + "vector": [-72.92, 0, 0] + }, + "0.75": { + "vector": [-37.5, 0, 0] + }, + "1.0": { + "pre": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [0, -4.99524, 0.2181] + }, + "post": { + "vector": [0, -4.99524, 0.2181] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [27.5, 0, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, -2, 0] + }, + "1.0417": { + "vector": [0, -1, 0] + }, + "1.0833": { + "vector": [0, -2, 0] + } + }, + "scale": { + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_r": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 12.5] + }, + "0.75": { + "vector": [0, 0, 12.5] + }, + "1.0": { + "pre": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "post": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0.21644, 0.9763, 0] + }, + "0.75": { + "vector": [0.21644, 0.9763, 0] + } + } + }, + "leg_back_l": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, -12.5] + }, + "0.75": { + "vector": [0, 0, -12.5] + }, + "1.0": { + "pre": { + "vector": [42.23278, -6.21687, -85.50272] + }, + "post": { + "vector": [42.23278, -6.21687, -85.50272] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-0.21644, 0.9763, 0] + }, + "0.75": { + "vector": [-0.21644, 0.9763, 0] + } + } + }, + "leg_front_r": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 30] + }, + "0.75": { + "vector": [0, 0, 30] + }, + "1.0": { + "pre": { + "vector": [-22.32648, -2.86313, 83.06512] + }, + "post": { + "vector": [-22.32648, -2.86313, 83.06512] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 2, 0] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "leg_front_l": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, -30] + }, + "0.75": { + "vector": [0, 0, -30] + }, + "1.0": { + "pre": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "post": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "lerp_mode": "catmullrom" + } + } + }, + "branch": { + "rotation": { + "1.0": { + "pre": { + "vector": [0, 0, -35] + }, + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "apple": { + "rotation": { + "1.0": { + "pre": { + "vector": [0, 0, 32.5] + }, + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leaves": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + } + } + }, + "eyes": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, -0.05814, -0.99831] + }, + "0.7083": { + "vector": [0, -0.05814, -0.99831] + }, + "0.75": { + "vector": [0, 0, 0] + } + } + }, + "eyes_sleep": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/baby_apple_cow.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/baby_apple_cow.animation.json new file mode 100644 index 00000000..ef7fdeec --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/baby_apple_cow.animation.json @@ -0,0 +1,1800 @@ +{ + "format_version": "1.8.0", + "animations": { + "quirk": { + "animation_length": 1.75, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [27.5, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [32.5, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-24.72908, 0, -10.59671] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "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, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leaves": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1.1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eyes": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "sleep": { + "loop": true, + "animation_length": 2.25, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -6, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [2.16541, -1.2497, 29.97638] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [2.16541, -1.2497, 29.97638] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4.99524, 0.2181] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -4.99524, 0.2181] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.9, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.2, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [1.2, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_r": { + "rotation": { + "0.0": { + "post": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_l": { + "rotation": { + "0.0": { + "post": { + "vector": [42.23278, -6.21687, -85.50272] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [42.23278, -6.21687, -85.50272] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_front_r": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.32648, -2.86313, 83.06512] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-22.32648, -2.86313, 83.06512] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_front_l": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eyes_sleep": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.75, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [3.35621, -0.74359, 12.47822] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_r": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -0.68, 0.35] + }, + "0.4167": { + "vector": [0, 3, -2] + }, + "0.5": { + "vector": [0, 0.08, -1.41] + }, + "0.625": { + "vector": [0, -0.17, -0.82] + }, + "0.75": { + "vector": [0, -0.68, 0.35] + } + } + }, + "leg_back_l": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 3, -2] + }, + "0.125": { + "vector": [0, 0.07111, -2.64932] + }, + "0.25": { + "vector": [0, 0.07, 1.35] + }, + "0.3333": { + "vector": [0, 0.07, 0.35] + }, + "0.4167": { + "vector": [0, -0.68, 0.35] + }, + "0.5": { + "vector": [0, 1.32, 0.35] + }, + "0.75": { + "vector": [0, 3, -2] + } + } + }, + "leg_front_r": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 3, -2] + }, + "0.125": { + "vector": [0, 0.07111, -2.64932] + }, + "0.25": { + "vector": [0, 0.07, 1.35] + }, + "0.3333": { + "vector": [0, 0.07, 0.35] + }, + "0.4167": { + "vector": [0, -0.68, 0.35] + }, + "0.5": { + "vector": [0, 1.32, 0.35] + }, + "0.75": { + "vector": [0, 3, -2] + } + } + }, + "leg_front_l": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -0.68, 0.35] + }, + "0.4167": { + "vector": [0, 3, -2] + }, + "0.5": { + "vector": [0, 0.08, -1.41] + }, + "0.625": { + "vector": [0, -0.17, -0.82] + }, + "0.75": { + "vector": [0, -0.68, 0.35] + } + } + }, + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "wake up": { + "animation_length": 1.5, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4.99524, 0.2181] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -4.99524, 0.2181] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_r": { + "rotation": { + "0.0": { + "post": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_l": { + "rotation": { + "0.0": { + "post": { + "vector": [42.23278, -6.21687, -85.50272] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [30.5405, -15.66318, -50.93688] + }, + "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.625": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_front_r": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.32648, -2.86313, 83.06512] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-17.39481, -16.65815, 52.6836] + }, + "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.25": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_front_l": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_ear": { + "rotation": { + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leaves": { + "rotation": { + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eyes": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.75": { + "pre": { + "vector": [0, 0, -1] + }, + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "vector": [0, 0, 0] + } + } + }, + "eyes_sleep": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "start sleep": { + "animation_length": 1.375, + "bones": { + "root": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, -1, 0] + }, + "0.25": { + "vector": [-1, -1, 0] + }, + "0.2917": { + "vector": [0.08, -1, 0] + }, + "0.3333": { + "vector": [-0.93, -1, 0] + }, + "0.375": { + "vector": [0.16, -1, 0] + }, + "0.4167": { + "vector": [-0.86, -1, 0] + }, + "0.4583": { + "vector": [0.25, -1, 0] + }, + "0.5": { + "vector": [-0.79, -1, 0] + }, + "0.5417": { + "vector": [0.34, -1, 0] + }, + "0.5833": { + "vector": [-0.73, -1, 0] + }, + "0.625": { + "vector": [0.45, -1, 0] + }, + "0.6667": { + "vector": [-0.7, -1, 0] + }, + "0.7083": { + "vector": [0.65, -1, 0] + }, + "0.75": { + "vector": [0, -1, 0] + }, + "1.0": { + "pre": { + "vector": [0, -9, 0] + }, + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.7083": { + "vector": [-72.92, 0, 0] + }, + "0.75": { + "vector": [-37.5, 0, 0] + }, + "1.0": { + "pre": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "post": { + "vector": [1.76833, -1.76749, 44.97272] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [0, -4.99524, 0.2181] + }, + "post": { + "vector": [0, -4.99524, 0.2181] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [27.5, 0, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, -2, 0] + }, + "1.0417": { + "vector": [0, -1, 0] + }, + "1.0833": { + "vector": [0, -2, 0] + } + }, + "scale": { + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leg_back_r": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 12.5] + }, + "0.75": { + "vector": [0, 0, 12.5] + }, + "1.0": { + "pre": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "post": { + "vector": [42.23278, 6.21687, 85.50272] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0.21644, 0.9763, 0] + }, + "0.75": { + "vector": [0.21644, 0.9763, 0] + } + } + }, + "leg_back_l": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, -12.5] + }, + "0.75": { + "vector": [0, 0, -12.5] + }, + "1.0": { + "pre": { + "vector": [42.23278, -6.21687, -85.50272] + }, + "post": { + "vector": [42.23278, -6.21687, -85.50272] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-0.21644, 0.9763, 0] + }, + "0.75": { + "vector": [-0.21644, 0.9763, 0] + } + } + }, + "leg_front_r": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 30] + }, + "0.75": { + "vector": [0, 0, 30] + }, + "1.0": { + "pre": { + "vector": [-22.32648, -2.86313, 83.06512] + }, + "post": { + "vector": [-22.32648, -2.86313, 83.06512] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 2, 0] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "leg_front_l": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, -30] + }, + "0.75": { + "vector": [0, 0, -30] + }, + "1.0": { + "pre": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "post": { + "vector": [-22.32648, 2.86313, -83.06512] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leaves": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + } + } + }, + "eyes": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, -0.05814, -0.99831] + }, + "0.7083": { + "vector": [0, -0.05814, -0.99831] + }, + "0.75": { + "vector": [0, 0, 0] + } + } + }, + "eyes_sleep": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/basilisk.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/basilisk.animation.json new file mode 100644 index 00000000..c72e0698 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/basilisk.animation.json @@ -0,0 +1,1886 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "sound_effects": { + "0.0": { + "effect": "antarchy:basilisk_idle_loop|0.45|1.0" + } + }, + "bones": { + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_1": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25.77, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [25.77, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2083": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2917": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_3": { + "rotation": { + "0.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2083": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 72.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 72.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 72.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [25, 47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 47.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [30, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "loop": false, + "animation_length": 1, + "sound_effects": { + "0.3333": { + "effect": "antarchy:basilisk_bite|1.1|1.0" + } + }, + "bones": { + "Basilisk": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 7] + }, + "0.3333": { + "vector": [0, 0, 3] + }, + "0.4583": { + "vector": [0, 0, -4] + }, + "0.5833": { + "vector": [0, 0, -4] + }, + "0.625": { + "vector": [0, -16, -4] + }, + "0.6667": { + "vector": [0, 0, -4] + } + } + }, + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-27.5, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-27.5, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [-15, 0, 0] + }, + "0.3333": { + "vector": [-15, 0, 0] + }, + "0.5": { + "vector": [37.5, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "neck_1": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [62.45783, 0.00641, 0.64844] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [57.45783, 0.00641, 0.64844] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, 1.9981, -0.08724] + }, + "0.7083": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "tongue": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_3": { + "rotation": { + "0.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -77.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -77.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [15, 17.94647, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 72.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [20, 23.09326, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 72.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [47.5, 6.91589, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 47.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [27.5, 15.59174, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "death": { + "loop": false, + "animation_length": 1.25, + "bones": { + "Basilisk": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [0, 0, 16] + }, + "post": { + "vector": [0, 0, 16] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 16] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 16] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 16] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 16] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 16] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -5, 16] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 16] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-35, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-35, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-35, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-0.16461, 5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-20, 0, 0] + }, + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_1": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [6.6, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [31.6, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.6, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-35, 0, 0] + }, + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_3": { + "rotation": { + "0.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.5, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [17.5, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-5, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-4.24582, 37.31527, -6.26746] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 72.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [22.5, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [22.5, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [4.97463, 54.79564, 8.16735] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.5, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [17.5, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-7.5, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [5, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-8.30168, 54.47285, -12.53111] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [32.5, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [32.5, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-10, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10.49263, 59.18043, -17.49593] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eye_brow_r": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "vector": [0, -2, 0] + } + } + }, + "eye_brow_l": { + "position": { + "vector": [0, -2, 0] + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 2, + "sound_effects": { + "0.0": { + "effect": "antarchy:basilisk_slither_loop|0.45|1.0" + } + }, + "bones": { + "Basilisk": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-4.38, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_1": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_3": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_3": { + "rotation": { + "0.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 28.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -28.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -3.75, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -16.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -16.25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20.83, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -20.83, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/bed_bug.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/bed_bug.animation.json new file mode 100644 index 00000000..ac52f88b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/bed_bug.animation.json @@ -0,0 +1,1089 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_mandible": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.48715, 36.91205, 4.02438] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_mandible": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.48715, -36.91205, -4.02438] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [4.61409, 4.62735, 14.26231] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.54184, -37.80005, 1.94898] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [4.61409, 4.62735, 14.26231] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -37.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 35, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 35, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_mandible2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.16604, -32.15093, -2.3378] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [4.61409, -4.62735, -14.26231] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.54184, 37.80005, -1.94898] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [4.61409, -4.62735, -14.26231] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -35, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 37.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_mandible": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_mandible": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [4.61409, 4.62735, 14.26231] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [4.61409, 4.62735, 14.26231] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.61409, 4.62735, 14.26231] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-5.85463, -13.83447, 23.21088] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [9.00717, 20.70481, 24.14867] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [9.00717, 20.70481, 24.14867] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [4.8493, 11.53486, 22.99008] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_mandible2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [4.61409, -4.62735, -14.26231] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [4.61409, -4.62735, -14.26231] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.61409, -4.62735, -14.26231] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-10.68709, 24.11827, -24.78948] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [9.00717, -20.70481, -24.14867] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [8.09013, -21.33556, -21.23405] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [4.8493, -11.53486, -22.99008] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bed_bug": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "bite": { + "animation_length": 0.875, + "bones": { + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "vector": [-32.5, 0, 0] + }, + "0.25": { + "vector": [-32.5, 0, 0] + }, + "0.3333": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_mandible": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [16.56417, 81.89916, 20.62663] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [16.56417, 81.89916, 20.62663] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_mandible": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [16.56417, -81.89916, -20.62663] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [16.56417, -81.89916, -20.62663] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [4.61409, 4.62735, 14.26231] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [4.61409, 4.62735, 56.76231] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [4.61409, 4.62735, 14.26231] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [4.61409, 4.62735, 14.26231] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-49.77599, -44.23765, 51.40746] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-49.77599, -44.23765, 51.40746] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -37.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [10, 0, 0] + }, + "0.25": { + "vector": [10, 0, 0] + }, + "0.375": { + "vector": [0, 0, 0] + }, + "0.875": { + "vector": [0, 0, 0] + } + } + }, + "R_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [28.18445, 32.40875, 14.48921] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [28.18445, 32.40875, 14.48921] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 35, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_mandible2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [16.56417, -81.89916, -20.62663] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [16.56417, -81.89916, -20.62663] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [4.61409, -4.62735, -14.26231] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [4.61409, -4.62735, -56.76231] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [4.61409, -4.62735, -14.26231] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [4.61409, -4.62735, -14.26231] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-49.77599, 44.23765, -51.40746] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-49.77599, 44.23765, -51.40746] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 37.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg2": { + "rotation": { + "0.125": { + "vector": [10, 0, 0] + }, + "0.25": { + "vector": [10, 0, 0] + } + } + }, + "L_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [28.18445, -32.40875, -14.48921] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [28.18445, -32.40875, -14.48921] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -35, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bed_bug": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-12.5, 0, 0] + }, + "0.25": { + "vector": [-12.5, 0, 0] + }, + "0.375": { + "vector": [-5, 0, 0] + }, + "0.875": { + "vector": [0, 0, 0] + } + } + }, + "mouth": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 2.1] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 1, 2.1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "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/animations/bomber.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/bomber.animation.json new file mode 100644 index 00000000..30d3d351 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/bomber.animation.json @@ -0,0 +1,321 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "sound_effects": { + "0.0": { + "effect": "antarchy:bomber_walk|0.6|1.0" + } + }, + "bones": { + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [6.5662, 1.1551, -9.9337] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [6.5662, -1.1551, 9.9337] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.13, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [13.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -0.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 1, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1, -4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [13.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-13.13, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 1, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -0.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1, 3] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "explode": { + "loop": "hold_on_last_frame", + "animation_length": 1.25, + "bones": { + "root": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.9583": { + "vector": [1, 1, 1] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.25, 1.25, 1.25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1.25, 1.25, 1.25] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/brutalfly.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/brutalfly.animation.json new file mode 100644 index 00000000..51e5813f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/brutalfly.animation.json @@ -0,0 +1,8005 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation": { + "loop": true, + "bones": { + "left_wing": { + "rotation": { + "vector": [0, -42.5, 0] + }, + "position": { + "vector": [-7, 1, 0] + } + }, + "left_wing_back": { + "rotation": { + "vector": [0, 5, 0] + }, + "position": { + "vector": [-7, 0, -1] + } + }, + "right_wing_back": { + "rotation": { + "vector": [0, -5, 0] + }, + "position": { + "vector": [7, 0, -1] + } + }, + "right_wing": { + "rotation": { + "vector": [0, 42.5, 0] + }, + "position": { + "vector": [7, 1, 0] + } + }, + "coocon": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "animation2": { + "loop": true, + "bones": { + "left_mouth": { + "rotation": { + "vector": [46.0484, -19.0376, -6.246] + } + }, + "left_wings": { + "rotation": { + "vector": [-11.4283, -1.652, -15.5795] + } + }, + "left_wing": { + "rotation": { + "vector": [-12.6916, -42.7546, -12.3162] + }, + "position": { + "vector": [-5.35538, -2.57788, -6.64286] + } + }, + "left_wing_2": { + "rotation": { + "vector": [0, 0, -25] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "left_wing_back": { + "rotation": { + "vector": [11.0196, -12.4268, 16.7925] + }, + "position": { + "vector": [-0.84485, -0.52369, -5.16152] + } + }, + "left_wing_back_2": { + "rotation": { + "vector": [0, 0, -25] + } + }, + "bone": { + "rotation": { + "vector": [-17.5, 0, 0] + }, + "position": { + "vector": [0, 16, 0] + } + }, + "left_leg_1": { + "rotation": { + "vector": [-42.89, -43.1971, -4.8833] + }, + "position": { + "vector": [0, 0.95372, -0.30071] + } + }, + "left_knee_1": { + "rotation": { + "vector": [-5, 0, 0] + } + }, + "head": { + "rotation": { + "vector": [35, 0, 0] + }, + "position": { + "vector": [0, -1.25089, 4.85529] + } + }, + "upper_body": { + "rotation": { + "vector": [-17.5, 0, 0] + } + }, + "waist": { + "rotation": { + "vector": [-45, 0, 0] + }, + "position": { + "vector": [0, 0.3473, -1.96962] + } + }, + "tail_2": { + "rotation": { + "vector": [-30, 0, 0] + }, + "position": { + "vector": [0, 0.13397, -2.23205] + } + }, + "tongue": { + "rotation": { + "vector": [-10, 0, 0] + }, + "position": { + "vector": [0, -1.3321, -11.20403] + } + }, + "tongue_2": { + "rotation": { + "vector": [-107.5, 0, 0] + } + }, + "right_mouth": { + "rotation": { + "vector": [46.0484, 19.0376, 6.246] + } + }, + "left_knee_down_1": { + "rotation": { + "vector": [52.5, 0, 0] + } + }, + "left_leg_2": { + "rotation": { + "vector": [-32.4866, -19.5688, -10.0797] + } + }, + "left_knee_2": { + "rotation": { + "vector": [-30, 0, 0] + } + }, + "left_knee_down_2": { + "rotation": { + "vector": [60, 0, 0] + } + }, + "left_leg_3": { + "rotation": { + "vector": [-12.2905, -48.1434, -17.538] + } + }, + "left_knee_3": { + "rotation": { + "vector": [7.5, 0, 0] + } + }, + "left_knee_down_3": { + "rotation": { + "vector": [32.5, 0, 0] + } + }, + "right_leg_3": { + "rotation": { + "vector": [-12.2905, 48.1434, 17.538] + } + }, + "right_knee_3": { + "rotation": { + "vector": [7.5, 0, 0] + } + }, + "right_knee_down_3": { + "rotation": { + "vector": [32.5, 0, 0] + } + }, + "right_leg_2": { + "rotation": { + "vector": [-32.4866, 19.5688, 10.0797] + } + }, + "right_knee_2": { + "rotation": { + "vector": [-30, 0, 0] + } + }, + "right_knee_down_2": { + "rotation": { + "vector": [60, 0, 0] + } + }, + "right_leg_1": { + "rotation": { + "vector": [-42.89, 43.1971, 4.8833] + }, + "position": { + "vector": [0, 0.95372, -0.30071] + } + }, + "right_knee_1": { + "rotation": { + "vector": [-5, 0, 0] + } + }, + "right_knee_down_1": { + "rotation": { + "vector": [52.5, 0, 0] + } + }, + "right_wings": { + "rotation": { + "vector": [-11.4283, 1.652, 15.5795] + } + }, + "right_wing_back": { + "rotation": { + "vector": [11.0196, 12.4268, -16.7925] + }, + "position": { + "vector": [0.84485, -0.52369, -5.16152] + } + }, + "right_wing_back_2": { + "rotation": { + "vector": [0, 0, 25] + } + }, + "right_wing": { + "rotation": { + "vector": [-12.6916, 42.7546, 12.3162] + }, + "position": { + "vector": [5.35538, -2.57788, -6.64286] + } + }, + "right_wing_2": { + "rotation": { + "vector": [0, 0, 25] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "coocon": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 2.5, + "bones": { + "left_mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-7.5071, 2.4786, -0.3265] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5513, -4.7895, -1.3991] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [19.4827, -7.2884, 1.8444] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.5173, -7.2884, 1.8444] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wings": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, -32.5, 40] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -32.5, 40] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.7865, -41.5394, -32.9127] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [-15.7865, -41.5394, -32.9127] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [-6, 2, -4] + }, + "1.0833": { + "vector": [-5, 5, -4] + }, + "2.0": { + "vector": [-5.65, -1.94, -4] + }, + "2.5": { + "vector": [-6, 2, -4] + } + } + }, + "left_wing_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, -5, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -5, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "left_leg_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -0.7, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [19.4827, 7.2884, -1.8444] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.5173, 7.2884, -1.8444] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-7.5071, -2.4786, 0.3265] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5513, 4.7895, 1.3991] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -0.2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -0.2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -0.7, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wings": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "right_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 5, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 5, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 32.5, -40] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 32.5, -40] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.7865, 41.5394, 32.9127] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [-15.7865, 41.5394, 32.9127] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 27.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [6, 2, -4] + }, + "1.0833": { + "vector": [5, 5, -4] + }, + "2.0": { + "vector": [5.65, -1.94, -4] + }, + "2.5": { + "vector": [6, 2, -4] + } + } + }, + "right_wing_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "coocon": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "fly": { + "loop": true, + "animation_length": 0.25, + "bones": { + "left_mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-5.3769, -1.9541, 1.6043] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -27.5, -72.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -42.5, 50] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -27.5, -72.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-3, 4, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-3, -3, -3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, -72.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-5.9258, -6.02, 49.7365] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -10, -72.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.1, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-5.3769, 1.9541, -1.6043] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 72.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-5.9258, 6.02, -49.7365] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 10, 72.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-2.1, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 27.5, 72.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 42.5, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 27.5, 72.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [3, 4, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [3, -3, -3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "coocon": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "spit": { + "animation_length": 1, + "bones": { + "left_mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [76.1241, -18.7716, -20.0403] + }, + "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.5": { + "post": { + "vector": [0, -0.2, 0.6] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -0.2, -1.1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [54.3451, -14.1052, -5.4386] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-94.9842, -1.2393, 43.0381] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.486, -20.6549, -92.8151] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-45, 12.5, 30] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-4, -3, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3, -3, -3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.2466, -7.7125, -78.1484] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-19.3332, 33.359, 50.1163] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1.8, 7, -3.9] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-20, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [-32.8328, -32.4744, -1.3446] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "left_knee_1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-35, 0, 0] + }, + "0.5833": { + "vector": [35, 0, 0] + }, + "0.7917": { + "vector": [-17.5, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-19.9992, 0.1448, -0.0287] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0.0008, 0.1448, -0.0287] + }, + "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.5": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-34.9858, 0.2492, 0.4504] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.5123, -0.2055, 0.4719] + }, + "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.5": { + "post": { + "vector": [0, 9, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "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, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 11, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 5, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-57.9672, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10, 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.375": { + "post": { + "vector": [0, 0.14, -5.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -2, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1.375, 1.3703, 1.1203] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [1.1493, 1.1392, 1.0396] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [1.375, 1.3703, 1.1203] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.3, 1.3, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0.7, 0.9, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [54.3451, 14.1052, 5.4386] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-94.9842, 1.2393, -43.0381] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [76.1241, 18.7716, 20.0403] + }, + "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.5": { + "post": { + "vector": [0, -0.2, 0.6] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -0.2, -1.1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [55, 0, 0] + }, + "0.5833": { + "vector": [-55, 0, 0] + }, + "0.7917": { + "vector": [40, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "left_leg_2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-20, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [-32.8328, -32.4744, -1.3446] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "left_knee_2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-35, 0, 0] + }, + "0.5833": { + "vector": [35, 0, 0] + }, + "0.7917": { + "vector": [-17.5, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "left_knee_down_2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [55, 0, 0] + }, + "0.5833": { + "vector": [7.5, 0, 0] + }, + "0.7917": { + "vector": [40, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "left_leg_3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-20, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [-32.8328, -32.4744, -1.3446] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "left_knee_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [55, 0, 0] + }, + "0.5833": { + "vector": [-40.5825, 1.7402, -12.7753] + }, + "0.7917": { + "vector": [40, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_leg_3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-20, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [-32.8328, 32.4744, 1.3446] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_knee_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [55, 0, 0] + }, + "0.5833": { + "vector": [-40.5825, -1.7402, 12.7753] + }, + "0.7917": { + "vector": [40, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_leg_2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-20, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [-32.8328, 32.4744, 1.3446] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_knee_2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-35, 0, 0] + }, + "0.5833": { + "vector": [35, 0, 0] + }, + "0.7917": { + "vector": [-17.5, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_knee_down_2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [55, 0, 0] + }, + "0.5833": { + "vector": [7.5, 0, 0] + }, + "0.7917": { + "vector": [40, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_leg_1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-20, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [-32.8328, 32.4744, 1.3446] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_knee_1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-35, 0, 0] + }, + "0.5833": { + "vector": [35, 0, 0] + }, + "0.7917": { + "vector": [-17.5, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_knee_down_1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [55, 0, 0] + }, + "0.5833": { + "vector": [-55, 0, 0] + }, + "0.7917": { + "vector": [40, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.2466, 7.7125, 78.1484] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-19.3332, -33.359, -50.1163] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1.8, 7, -3.9] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.486, 20.6549, 92.8151] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-45, -12.5, -30] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 27.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [4, -3, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [3, -3, -3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "coocon": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "swipe": { + "animation_length": 1.5, + "bones": { + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-22.5, 20, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, 20, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [11.8886, 25.449, 35.127] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-17.6686, 30.2307, -34.394] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.6686, 30.2307, -34.394] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.81566, 2.4786, -0.25392] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-4.56227, -0.90212, -1.83626] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-4.56227, -0.90212, -1.83626] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-19.7379, -21.6126, -6.6797] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-19.7379, -21.6126, -6.6797] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [3.35392, 0, -15.58439] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1.35583, 0, -15.49715] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.9755, -19.8217, -2.72] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.9755, -19.8217, -2.72] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.68404, -0.24531, -1.86331] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-26.9436, -23.2938, -1.4557] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10.5564, -23.2938, -1.4557] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.4, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.4, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-30.2891, -12.212, -3.326] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [21.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-26.9436, 23.2938, 1.4557] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10.5564, 23.2938, 1.4557] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.4, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.4, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-30.2891, 12.212, 3.326] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [21.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-19.7379, 21.6126, 6.6797] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-19.7379, 21.6126, 6.6797] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [11.8886, -25.449, -35.127] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-17.6686, -30.2307, 34.394] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.6686, -30.2307, 34.394] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.81566, 2.4786, -0.25392] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [4.56227, -0.90212, -1.83626] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [4.56227, -0.90212, -1.83626] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-22.5, -20, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, -20, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "coocon": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "death": { + "loop": "hold_on_last_frame", + "animation_length": 2.4583, + "bones": { + "left_mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [46.7815, -20.2935, -9.9292] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [49.2815, -20.2935, -9.9292] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [6.7815, -20.2935, -9.9292] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [49.2815, -20.2935, -9.9292] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [49.2815, -20.2935, -9.9292] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [16.7815, -20.2935, -9.9292] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [41.7815, -20.2935, -9.9292] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-27.5552, -13.7314, 22.2484] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [40.9188, -6.4441, 2.6866] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [10.9188, -6.4441, 2.6866] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-54.0812, -6.4441, 2.6866] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-81.5812, -6.4441, 2.6866] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [46.3529, -11.3214, 1.5029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-9.3517, -52.4964, -61.2045] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.6286, -28.1471, 48.974] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-16.5811, -38.656, -13.1445] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-14.7247, -42.2349, -31.3574] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-13.861, -25.1761, 36.3353] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [22.7717, -30.6498, -54.5342] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [30.6653, -21.5627, -74.0252] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [4.116, -27.6856, 12.3063] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-7, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-5.7, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-5.7, -3, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-5.7, 3, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [-3.9248, -6.3399, -43.7069] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-1.0631, -7.1075, -61.4211] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [7.6899, -7.9854, 20.238] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-3, -2, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-2, 1, -2] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-2, -1.4, -2] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-3, -0.4, -2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 26, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 27, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 23, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-5.1283, -34.1848, -26.6955] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-35.1283, -34.1848, -26.6955] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-44.8025, -34.4323, 5.9748] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-37.2297, -24.8593, -3.0084] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-33.6244, -18.2422, -108.3416] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [-31.0808, -18.822, -95.5995] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.9324, 5.9749, 3.3229] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-17.9324, 5.9749, 3.3229] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [62.0676, 5.9749, 3.3229] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 1.77402, 0.9235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -0.09808, 5.83013] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, -0.22326, 7.23883] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, -0.09808, 5.83013] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 6.90192, -1.16987] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, -2.13504, 2.90545] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 2.21183, 2.02677] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 13, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 6.0792, 0.20829] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 2.06558, -3.37949] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 2.06558, -3.37949] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 13.06558, -3.37949] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, -24.84252, -2.53358] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0.76537, -1.84776] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-27.5552, 13.7314, -22.2484] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [40.9188, 6.4441, -2.6866] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [10.9188, 6.4441, -2.6866] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-54.0812, 6.4441, -2.6866] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-81.5812, 6.4441, -2.6866] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [46.3529, 11.3214, -1.5029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [46.7815, 20.2935, 9.9292] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [49.2815, 20.2935, 9.9292] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [6.7815, 20.2935, 9.9292] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [49.2815, 20.2935, 9.9292] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [49.2815, 20.2935, 9.9292] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [16.7815, 20.2935, 9.9292] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [41.7815, 20.2935, 9.9292] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-32.5, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-45, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-35.2954, -26.5019, 1.8304] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-26.9163, -30.3768, -77.4984] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [-19.9081, -41.4616, -59.3331] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [89.5813, -14.5739, -29.4716] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.5033, -27.0913, -3.2154] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-35.5033, -27.0913, -3.2154] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-25.7395, -30.1601, 3.5736] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-16.3652, -21.8284, -68.1997] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [-2.9793, -34.8186, -60.8632] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [40.4311, -13.9133, -20.6115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.5033, 27.0913, 3.2154] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-35.5033, 27.0913, 3.2154] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-25.7395, 30.1601, -3.5736] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-16.3652, 21.8284, 68.1997] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [-2.9793, 34.8186, 60.8632] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [40.4311, 13.9133, 20.6115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-32.5, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-45, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-35.2954, 26.5019, -1.8304] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-26.9163, 30.3768, 77.4984] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [-19.9081, 41.4616, 59.3331] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [89.5813, 14.5739, 29.4716] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-5.1283, 34.1848, 26.6955] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-35.1283, 34.1848, 26.6955] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-44.8025, 34.4323, -5.9748] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-37.2297, 24.8593, 3.0084] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-33.6244, 18.2422, 108.3416] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [-31.0808, 18.822, 95.5995] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.9324, -5.9749, -3.3229] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-17.9324, -5.9749, -3.3229] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [62.0676, -5.9749, -3.3229] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [-3.9248, 6.3399, 43.7069] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-1.0631, 7.1075, 61.4211] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [7.6899, 7.9854, -20.238] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [3, -2, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [2, 1, -2] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [2, -1.4, -2] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [3, -0.4, -2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-9.3517, 52.4964, 61.2045] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.6286, 28.1471, -48.974] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-16.5811, 38.656, 13.1445] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-14.7247, 42.2349, 31.3574] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-13.861, 25.1761, -36.3353] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [22.7717, 30.6498, 54.5342] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [30.6653, 21.5627, 74.0252] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [4.116, 27.6856, -12.3063] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [7, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [5.7, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [5.7, -3, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [5.7, 3, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "coocon": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "Coocon": { + "loop": "hold_on_last_frame", + "bones": { + "left_wings": { + "rotation": { + "vector": [0, 0, 75] + }, + "scale": { + "vector": [0.8, 1, 1] + } + }, + "bone": { + "rotation": { + "vector": [90, 0, 0] + }, + "position": { + "vector": [0, 0, -9.2] + } + }, + "Left_legs": { + "position": { + "vector": [0, 4, 0] + } + }, + "Right_legs": { + "position": { + "vector": [0, 4, 0] + } + }, + "right_wings": { + "rotation": { + "vector": [0, 0, -75] + }, + "scale": { + "vector": [0.8, 1, 1] + } + }, + "coocon": { + "rotation": { + "vector": [90, 0, 0] + } + } + } + }, + "Coocon_hatch": { + "loop": "hold_on_last_frame", + "animation_length": 2, + "bones": { + "left_mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [53.8299, -18.0669, -8.7254] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wings": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 75] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0.8, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "2.0": { + "pre": { + "vector": [0, -27.5, 0] + }, + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [-6, 2, -4] + }, + "post": { + "vector": [-6, 2, -4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_2": { + "rotation": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "2.0": { + "pre": { + "vector": [0, -15, 0] + }, + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [0, 0, -7] + }, + "post": { + "vector": [0, 0, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back_2": { + "rotation": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [105, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.28814, -10.15738] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-27.9532, -24.7894, -3.4323] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -0.96738, 2.65785] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [53.8299, 18.0669, 8.7254] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-18.7639, -28.6721, -9.2895] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-16.375, -13.8461, -19.3652] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_knee_down_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Left_legs": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Right_legs": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-16.375, 13.8461, 19.3652] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-18.7639, 28.6721, 9.2895] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-27.9532, 24.7894, 3.4323] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_knee_down_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wings": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -75] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0.8, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back": { + "rotation": { + "2.0": { + "pre": { + "vector": [0, 15, 0] + }, + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [0, 0, -7] + }, + "post": { + "vector": [0, 0, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back_2": { + "rotation": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "2.0": { + "pre": { + "vector": [0, 27.5, 0] + }, + "post": { + "vector": [0, 27.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "2.0": { + "pre": { + "vector": [6, 2, -4] + }, + "post": { + "vector": [6, 2, -4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_2": { + "rotation": { + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "coocon": { + "rotation": { + "0.0": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [105, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 6.36396, -6.36396] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1.22, 1.08] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_coocon": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [5.1303, -14.09539, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 0.2, 0.2] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0.2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_coocon": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-5.1303, -14.09539, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 0.2, 0.2] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0.2] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Coocon_hit": { + "loop": "hold_on_last_frame", + "animation_length": 1.5, + "bones": { + "left_wings": { + "rotation": { + "vector": [0, 0, 75] + }, + "scale": { + "vector": [0.8, 1, 1] + } + }, + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -5.67, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -14, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -14, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -14, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, -14, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -9.2] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 0.8] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1, 1, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 1, 0.8] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 1, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 0.8] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [1, 1, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 0.8] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1, 1, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 1, 0.8] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Left_legs": { + "position": { + "vector": [0, 4, 0] + } + }, + "Right_legs": { + "position": { + "vector": [0, 4, 0] + } + }, + "right_wings": { + "rotation": { + "vector": [0, 0, -75] + }, + "scale": { + "vector": [0.8, 1, 1] + } + }, + "coocon": { + "rotation": { + "vector": [90, 0, 0] + } + }, + "left_coocon": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 1, 0.8] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 0.9045] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1, 1, 0.8225] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 1, 1.0045] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 1, 0.9045] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1.0045] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [1, 1, 0.9045] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1.0045] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1, 1, 0.9045] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 1, 0.9045] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_coocon": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 1, 0.8] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 0.9045] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1, 1, 0.8225] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 1, 1.0045] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 1, 0.9045] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1.0045] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [1, 1, 0.9045] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1.0045] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1, 1, 0.9045] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 1, 0.9045] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Coocon_idle": { + "loop": true, + "animation_length": 3.5, + "bones": { + "left_wings": { + "rotation": { + "vector": [0, 0, 75] + }, + "scale": { + "vector": [0.8, 1, 1] + } + }, + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -9.2] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, -9.2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Left_legs": { + "position": { + "vector": [0, 4, 0] + } + }, + "Right_legs": { + "position": { + "vector": [0, 4, 0] + } + }, + "right_wings": { + "rotation": { + "vector": [0, 0, -75] + }, + "scale": { + "vector": [0.8, 1, 1] + } + }, + "coocon": { + "rotation": { + "0.0": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/butterfly.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/butterfly.animation.json new file mode 100644 index 00000000..d5c6958c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/butterfly.animation.json @@ -0,0 +1,1420 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2.5, + "bones": { + "cocoon": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 41.48] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 26.48] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 31.48] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, 26.48] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 31.48] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 0, 26.48] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -41.48] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, -26.48] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, -31.48] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, -26.48] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -31.48] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 0, -26.48] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "legs": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0.3, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -0.2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_bpdy": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -0.3, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0.2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2.3815, -1.2162, -0.6207] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -0.3, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0.1, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "fly": { + "loop": true, + "animation_length": 0.25, + "bones": { + "cocoon": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.4, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0.7, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.4, 0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.4, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-0.7, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.4, 0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "position": { + "0.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "legs": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "coocon": { + "loop": true, + "animation_length": 2.5, + "bones": { + "cocoon": { + "rotation": { + "0.0": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 20, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 19.6, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 20, -6] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 20, -6] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cocoon_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, -0.6] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cocoon_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, -0.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "coocon2": { + "loop": "hold_on_last_frame", + "animation_length": 3, + "bones": { + "cocoon": { + "rotation": { + "0.0": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [102.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [33.05, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-73.18, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-54.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 20, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 15.72842, -9.37107] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 16.8409, -7.62824] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 10.02886, -5.12609] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 12.23588, -3.87895] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, 15.55664, -7.34411] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0.6225, 0.5297, 0.6244] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.6, 0.5, 0.7] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.4, 0.2, 0.3] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -71.67] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 29.09] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 29.09] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 0.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 71.67] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, -29.09] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -29.09] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 0.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [105, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 8.89341, 3.27516] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 15.88322, -3.25861] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 13.78356, 1.0237] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 14, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 14, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 13, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 14, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 13, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, 14, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cocoon_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [9.06, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cocoon_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.34, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "eat": { + "animation_length": 1.7083, + "bones": { + "cocoon": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_bpdy": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "legs": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0.1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0.1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0.1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [64.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [64.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [64.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -1, -0.8] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -1, -0.8] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -1, -0.8] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.5, 0.5, 0.66] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.5, 0.5, 0.72] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.5, 0.5, 0.66] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.5, 0.5, 0.72] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0.5, 0.5, 0.66] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/caterpillar.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/caterpillar.animation.json new file mode 100644 index 00000000..2a4449d0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/caterpillar.animation.json @@ -0,0 +1,1540 @@ +{ + "format_version": "1.8.0", + "animations": { + "walk": { + "loop": true, + "animation_length": 0.8333, + "sound_effects": { + "0.0": { + "effect": "antarchy:caterpillar_crawl|0.28|1.0" + } + }, + "bones": { + "cocoon": { + "scale": { + "vector": [0, 0, 0] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0.04] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.6417, 7.151, -2.2671] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [14.7547, -2.5186, -4.8217] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0.3, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.6417, -7.151, 2.2671] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [14.7547, 2.5186, 4.8217] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 2.5, + "bones": { + "cocoon": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [4.9637, 0.3457, -0.2386] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 0.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0.2, 0.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 0.3] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0.2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [7.5284, 4.9571, 0.6542] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [-7.5571, 9.9142, -0.005] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 0.2] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0.2, -0.1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [7.5284, -4.9571, -0.6542] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [-7.5571, -9.9142, 0.005] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "eat": { + "animation_length": 2.125, + "bones": { + "cocoon": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [4.9158, -0.8407, -0.3971] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [4.9158, -0.8407, -0.3971] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [4.9158, -0.8407, -0.3971] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 1, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "cocoon": { + "loop": "hold_on_last_frame", + "animation_length": 2, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 5, 8.1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cocoon": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [9.78, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [59.61, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 3.23, -6.3] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 6.43, -1.7] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 16.08, -2.81] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 20, -6] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0.9664, 0.7064, 0.4064] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 2, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 7, 2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 3, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 9.6, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25, 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.8333": { + "post": { + "vector": [0, 1, -2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 1, -3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cocoon_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-105, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-60.73, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0.7, -1.6] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 1.58, -2.41] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -2.9, -5.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 1.13, -7.26] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 1.9, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cocoon_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [4.09, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 1.5, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "cocoon_chrysalis": { + "loop": true, + "animation_length": 2.5, + "bones": { + "bone": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cocoon": { + "rotation": { + "0.0": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 20, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 19.6, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 20, -6] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 20, -6] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cocoon_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, -0.6] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cocoon_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, -0.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/cheep.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/cheep.animation.json new file mode 100644 index 00000000..a6ef31c6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/cheep.animation.json @@ -0,0 +1,492 @@ +{ + "format_version": "1.8.0", + "animations": { + "pose": { + "loop": true, + "bones": { + "right_arm": { + "rotation": { + "vector": [0, 0, 52.5] + } + }, + "left_arm": { + "rotation": { + "vector": [0, 0, -52.5] + } + } + } + }, + "attack": { + "loop": "hold_on_last_frame", + "animation_length": 0.5, + "bones": { + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 110] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 1, 0.3] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 1, -2.7] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -110] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swim": { + "loop": true, + "animation_length": 1, + "bones": { + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 117.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 117.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "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": [0, 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" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -117.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -117.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 17.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0.4, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..7a3524e8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/cloud_shark.animation.json @@ -0,0 +1,1692 @@ +{ + "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 new file mode 100644 index 00000000..f9736e11 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/creeping_horror.animation.json @@ -0,0 +1,2372 @@ +{ + "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 new file mode 100644 index 00000000..9f0d23a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/dimensional_tear.animation.json @@ -0,0 +1,692 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 3, + "bones": { + "content": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.58276, 3.36591, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1.3, 1.3, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 13, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-7, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "light_left": { + "rotation": { + "0.0": { + "vector": [0, -45, 0] + }, + "1.0": { + "vector": [0, -45, 0] + }, + "2.0": { + "vector": [-22.5, -45, 0] + }, + "3.0": { + "vector": [0, -45, 0] + } + }, + "scale": { + "0.0": { + "vector": [1, 0, 1] + }, + "0.2917": { + "vector": [1, 1, 2.3] + }, + "0.5": { + "vector": [1, 0, 2.3] + }, + "1.0": { + "vector": [1, 0, 1] + }, + "1.2917": { + "vector": [1, 1, 2.3] + }, + "1.5": { + "vector": [1, 0, 2.3] + }, + "2.0": { + "vector": [1, 0, 1] + }, + "2.2917": { + "vector": [1, 1, 2.3] + }, + "2.5": { + "vector": [1, 0, 2.3] + }, + "3.0": { + "vector": [1, 0, 1] + } + } + }, + "light_right": { + "rotation": { + "0.3333": { + "vector": [0, 45, 0] + }, + "1.2917": { + "vector": [0, 45, 0] + }, + "2.4167": { + "vector": [-22.5, 45, 0] + } + }, + "scale": { + "0.3333": { + "vector": [1, 0, 1] + }, + "0.625": { + "vector": [1, 1, 2.3] + }, + "0.8333": { + "vector": [1, 0, 2.3] + }, + "1.2917": { + "vector": [1, 0, 1] + }, + "1.5833": { + "vector": [1, 1, 2.3] + }, + "1.7917": { + "vector": [1, 0, 2.3] + }, + "2.4167": { + "vector": [1, 0, 1] + }, + "2.7083": { + "vector": [1, 1, 2.3] + }, + "2.9167": { + "vector": [1, 0, 2.3] + } + } + }, + "group": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.4167": { + "vector": [1, 1, 1] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [1, 1, 1] + }, + "2.0": { + "vector": [1, 1, 1] + }, + "2.0833": { + "vector": [0, 0, 0] + }, + "2.1667": { + "vector": [1, 1, 1] + }, + "2.25": { + "vector": [1, 1, 1] + }, + "2.3333": { + "vector": [0, 0, 0] + }, + "2.4167": { + "vector": [1, 1, 1] + }, + "3.0": { + "vector": [1, 1, 1] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/dorrie.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/dorrie.animation.json new file mode 100644 index 00000000..542b2c0c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/dorrie.animation.json @@ -0,0 +1,4369 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle_ground": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [12.5, 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" + }, + "1.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck2": { + "rotation": { + "vector": [-15, 0, 0] + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, 0, 0] + } + }, + "right_arm": { + "rotation": { + "vector": [10, -22.5, -25] + } + }, + "right_finger": { + "rotation": { + "vector": [0, 0, 20] + } + }, + "left_arm": { + "rotation": { + "vector": [10, 22.5, 25] + } + }, + "left_finger": { + "rotation": { + "vector": [0, 0, -20] + } + }, + "left_leg": { + "rotation": { + "vector": [-7.5, -22.5, 22.5] + } + }, + "left_toe2": { + "rotation": { + "vector": [0, 0, -15] + } + }, + "right_leg": { + "rotation": { + "vector": [-7.5, 22.5, -22.5] + } + }, + "right_toe2": { + "rotation": { + "vector": [0, 0, 15] + } + } + } + }, + "idle_water": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [6.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "vector": [0, 0, 0] + } + }, + "neck": { + "rotation": { + "vector": [12.5, 0, 0] + } + }, + "neck2": { + "rotation": { + "vector": [-15, 0, 0] + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -15, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [16.46, -15, -27.53] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -15, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5, -15, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, -15, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0.15] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -21.29] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0.15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_thumb": { + "rotation": { + "vector": [15, 17.5, 12.5] + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 15, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [16.46, 15, 27.53] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 15, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5, 15, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 15, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_thumb": { + "rotation": { + "vector": [15, -17.5, -12.5] + } + }, + "left_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -0.15] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 21.29] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -0.15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.23, -22.5, 19.2] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-13.93, -22.5, 32.37] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [2.5, -22.5, 32.65] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-12.5, -22.5, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-22.5, -22.5, 10.37] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-17.23, -22.5, 19.2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_toe": { + "rotation": { + "vector": [15, -17.5, -12.5] + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -18.28] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -13.31] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 21.72] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -18.28] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.23, 22.5, -19.2] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-13.93, 22.5, -32.37] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [2.5, 22.5, -32.65] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-12.5, 22.5, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-22.5, 22.5, -10.37] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-17.23, 22.5, -19.2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_toe": { + "rotation": { + "vector": [15, 17.5, 12.5] + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 18.28] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 13.31] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -21.72] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 18.28] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-11.82, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-11.82, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.03, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.03, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -3, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swim": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-97.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-97.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-97.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, 4, -3] + } + }, + "jaw": { + "rotation": { + "vector": [22.5, 0, 0] + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [87.6, 1.09, -0.68] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [77.6, 1.09, -0.68] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [87.6, 1.09, -0.68] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [77.6, 1.09, -0.68] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [87.6, 1.09, -0.68] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -1] + } + }, + "neck2": { + "rotation": { + "vector": [17.39426, 0.53648, 1.1707] + } + }, + "right_arm": { + "rotation": { + "0.0": { + "vector": [-22.5, -30, 37.5] + }, + "0.125": { + "pre": { + "vector": [-32.56, -19.67, 2.51] + }, + "post": { + "vector": [-32.56, -19.67, 2.51] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-17.92, 13.33, -21.67] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 20, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-7.41, -24.81, 13.4] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-22.5, -30, 37.5] + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [0, 0, 30] + }, + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 39.72] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_thumb": { + "rotation": { + "vector": [10, 0, 0] + } + }, + "left_arm": { + "rotation": { + "0.0": { + "vector": [-22.5, 30, -37.5] + }, + "0.125": { + "pre": { + "vector": [-32.56, 19.67, -2.51] + }, + "post": { + "vector": [-32.56, 19.67, -2.51] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-17.92, -13.33, 21.67] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, -20, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-7.41, 24.81, -13.4] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-22.5, 30, -37.5] + } + } + }, + "left_thumb": { + "rotation": { + "vector": [10, 0, 0] + } + }, + "left_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -30] + }, + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -39.72] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [7.28, -29.82, 30.48] + }, + "0.5": { + "pre": { + "vector": [15, 20, -27.5] + }, + "post": { + "vector": [15, 20, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-19.43, 15.04, 12] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-2.84, -19.9, 33.82] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [7.28, -29.82, 30.48] + } + } + }, + "left_toe": { + "rotation": { + "vector": [0, -27.5, 0] + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.66] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 12.34] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.66] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [7.28, 29.82, -30.48] + }, + "0.5": { + "pre": { + "vector": [15, -20, 27.5] + }, + "post": { + "vector": [15, -20, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-19.43, -15.04, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-2.84, 19.9, -33.82] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [7.28, 29.82, -30.48] + } + } + }, + "right_toe": { + "rotation": { + "vector": [0, 27.5, 0] + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.66] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -12.34] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.66] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 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" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "vector": [-12.5, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [20, 0, 0] + }, + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-12.5, 0, 0] + }, + "0.6667": { + "pre": { + "vector": [20, 0, 0] + }, + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-12.5, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.6667": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 1.13, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 1.13, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-12.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-5, 0, 0] + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [12.02, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [20.42, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [6.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "vector": [-10, 0, 0] + }, + "0.375": { + "pre": { + "vector": [-15, 0, 0] + }, + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [-10, 0, 0] + }, + "0.9167": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-10, 0, 0] + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.1667": { + "pre": { + "vector": [-2.5, 0, 0] + }, + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.125": { + "pre": { + "vector": [0, 1, 0] + }, + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 1.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "vector": [-2.5, 5, -24.5] + }, + "0.125": { + "pre": { + "vector": [4.25, 5.45, -21.2] + }, + "post": { + "vector": [4.25, 5.45, -21.2] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [5.39, -2.07, -15.36] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-5.94, -16.98, -8.85] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [7.5, -27.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [12.5, -27.5, -27.5] + }, + "1.125": { + "vector": [8.75, -19.37, -25.5] + }, + "1.25": { + "vector": [5, -11.25, -25] + }, + "1.375": { + "vector": [1.25, -3.12, -24.25] + }, + "1.5": { + "vector": [-2.5, 5, -24.5] + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, 25] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 12.5] + }, + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 3.12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 35.31] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 35.31] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 25] + }, + "1.5": { + "vector": [0, 0, 25] + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "vector": [-2.5, -5, 24.5] + }, + "0.125": { + "pre": { + "vector": [4.25, -5.45, 21.2] + }, + "post": { + "vector": [4.25, -5.45, 21.2] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [5.39, 2.07, 15.36] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-5.94, 16.98, 8.85] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [7.5, 27.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [12.5, 27.5, 27.5] + }, + "1.125": { + "vector": [8.75, 19.37, 25.5] + }, + "1.25": { + "vector": [5, 11.25, 25] + }, + "1.375": { + "vector": [1.25, 3.12, 24.25] + }, + "1.5": { + "vector": [-2.5, -5, 24.5] + } + } + }, + "left_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, -25] + }, + "0.1667": { + "pre": { + "vector": [0, 0, -12.5] + }, + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -3.12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -35.31] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -35.31] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, -25] + }, + "1.5": { + "vector": [0, 0, -25] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0.41, 24.33] + }, + "0.0833": { + "vector": [-2.5, -5, 24.5] + }, + "0.2083": { + "pre": { + "vector": [4.25, -5.45, 21.2] + }, + "post": { + "vector": [4.25, -5.45, 21.2] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5.39, 2.07, 15.36] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-5.94, 16.98, 8.85] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, 27.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "vector": [12.5, 27.5, 27.5] + }, + "1.2083": { + "vector": [8.75, 19.37, 25.5] + }, + "1.3333": { + "vector": [5, 11.25, 25] + }, + "1.4583": { + "vector": [1.25, 3.12, 24.25] + }, + "1.5": { + "vector": [0, 0.41, 24.33] + } + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, -25] + }, + "0.0833": { + "vector": [0, 0, -25] + }, + "0.25": { + "pre": { + "vector": [0, 0, -15] + }, + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -3.12] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -35.31] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -35.31] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "vector": [0, 0, -25] + }, + "1.5": { + "vector": [0, 0, -25] + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [0, -0.41, -24.33] + }, + "0.0833": { + "vector": [-2.5, 5, -24.5] + }, + "0.2083": { + "pre": { + "vector": [4.25, 5.45, -21.2] + }, + "post": { + "vector": [4.25, 5.45, -21.2] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5.39, -2.07, -15.36] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-5.94, -16.98, -8.85] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, -27.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "vector": [12.5, -27.5, -27.5] + }, + "1.2083": { + "vector": [8.75, -19.37, -25.5] + }, + "1.3333": { + "vector": [5, -11.25, -25] + }, + "1.4583": { + "vector": [1.25, -3.12, -24.25] + }, + "1.5": { + "vector": [0, -0.41, -24.33] + } + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, 25] + }, + "0.0833": { + "vector": [0, 0, 25] + }, + "0.25": { + "pre": { + "vector": [0, 0, 15] + }, + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 3.12] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 35.31] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 35.31] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "vector": [0, 0, 25] + }, + "1.5": { + "vector": [0, 0, 25] + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [4.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.6667": { + "pre": { + "vector": [-10, 0, 0] + }, + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.71, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 12] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + } + } + }, + "jump_start": { + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.2083": { + "vector": [0, 0, 0] + }, + "0.5": { + "pre": { + "vector": [30, 0, 0] + }, + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -22.5, -26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [7.5, -22.5, -19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [15.33, -22.5, -35.35] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [25, -22.5, -49] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5.16, -22.5, -3.84] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, -22.5, 23.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, 25] + }, + "0.0833": { + "pre": { + "vector": [0, 0, 17.5] + }, + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [0, 0, -18.86] + }, + "0.5": { + "vector": [0, 0, 25] + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 22.5, 26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [7.5, 22.5, 19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [15.33, 22.5, 35.35] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [25, 22.5, 49] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5.16, 22.5, 3.84] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 22.5, -23.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, -25] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -17.5] + }, + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [0, 0, 18.86] + }, + "0.5": { + "vector": [0, 0, -25] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -22.5, 26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, -22.5, 19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15.33, -22.5, 35.35] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, -22.5, 49] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5.16, -22.5, 3.84] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, -22.5, -23.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, -25] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -17.5] + }, + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [0, 0, 18.86] + }, + "0.5": { + "vector": [0, 0, -25] + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 22.5, -26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, 22.5, -19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15.33, 22.5, -35.35] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, 22.5, -49] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5.16, 22.5, -3.84] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 22.5, 23.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, 25] + }, + "0.0833": { + "pre": { + "vector": [0, 0, 17.5] + }, + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [0, 0, -18.86] + }, + "0.5": { + "vector": [0, 0, 25] + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [-20, 0, 0] + }, + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 0] + }, + "0.5": { + "pre": { + "vector": [-5, 0, 0] + }, + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -3, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 13.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 14, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.0833": { + "pre": { + "vector": [1.1, 0.8, 1.1] + }, + "post": { + "vector": [1.1, 0.8, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.9, 1.2, 0.9] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "jump_idle": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [11.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [19.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [11.72, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "vector": [30, 0, 0] + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-11.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-11.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, -22.5, 23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, -22.5, 28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.5, -22.5, 18.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.5, -22.5, 23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-7.5, -22.5, 28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-7.5, -22.5, 18.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, -22.5, 23.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 23.75] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 23.75] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 22.5, -23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, 22.5, -28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.5, 22.5, -18.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.5, 22.5, -23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-7.5, 22.5, -28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-7.5, 22.5, -18.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 22.5, -23.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -23.75] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -23.75] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -22.5, -21.94] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [7.5, -22.5, -13.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.5, -22.5, -28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, -22.5, -21.94] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 22.5, 21.94] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [7.5, 22.5, 13.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.5, 22.5, 28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 22.5, 21.94] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "vector": [0, 0, 0] + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.59, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-4, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-4, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.59, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 14, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "jump_end": { + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [11.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-13.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.76, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [30, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [42.5, 0, 0] + }, + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [2.41, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.24, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-26.64, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-13.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-15, 0, 0] + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, -22.5, 23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, -22.5, 58.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-20, -22.5, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "vector": [10, -22.5, -25] + }, + "0.4167": { + "pre": { + "vector": [10, -22.5, -25] + }, + "post": { + "vector": [10, -22.5, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, -22.5, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 23.75] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 4.69] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 49.12] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 22.5, -23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, 22.5, -58.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-20, 22.5, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "vector": [10, 22.5, 25] + }, + "0.4167": { + "pre": { + "vector": [10, 22.5, 25] + }, + "post": { + "vector": [10, 22.5, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 22.5, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -23.75] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -4.69] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -49.12] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -22.5, -21.94] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [6.24, -22.5, -45.71] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.5, -22.5, 8.17] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-7.5, -22.5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, -22.5, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 15.36] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -43.55] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, -17.5] + }, + "0.375": { + "vector": [0, 0, -20.49] + }, + "0.4167": { + "pre": { + "vector": [0, 0, -21.77] + }, + "post": { + "vector": [0, 0, -21.77] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 22.5, 21.94] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [6.24, 22.5, 45.71] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.5, 22.5, -8.17] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-7.5, 22.5, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 22.5, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -15.36] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 43.55] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 17.5] + }, + "0.375": { + "vector": [0, 0, 20.49] + }, + "0.4167": { + "pre": { + "vector": [0, 0, 21.77] + }, + "post": { + "vector": [0, 0, 21.77] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "tail2": { + "rotation": { + "vector": [0, 0, 0] + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.59, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-14.09, 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.375": { + "post": { + "vector": [-1.59, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 9.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -3.91, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -2, 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.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0.8, 1.4, 0.8] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1.1, 0.8, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1.1, 0.8, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "quirk": { + "animation_length": 3.25, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [7.5, 0, 0] + }, + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [7.5, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [15, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-18.28, -16.25, -0.94] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-60.19, -66.12, -63.54] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-50.7606, -57.0882, -54.3983] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-1.6, -61.94, -14.84] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-1.6, -46.94, -14.84] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-0.8, 19.97, -22.42] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + } + } + }, + "neck": { + "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.375": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [80, -17.5, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [80, -17.5, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [80, -35, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [62.5, -35, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [14.43, -14.18, 8.77] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.2083": { + "pre": { + "vector": [9.35, 15.96, 17.33] + }, + "post": { + "vector": [9.35, 15.96, 17.33] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [12.5, 20, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [12.5, 20, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5, 20, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [0, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-10, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-10, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "vector": [0, -22.5, -22.5] + }, + "0.3333": { + "pre": { + "vector": [0, -22.5, -22.5] + }, + "post": { + "vector": [0, -22.5, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, -22.5, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, -22.5, 74.75] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, -22.5, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, -22.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [0, -22.5, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, -22.5, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, -22.5, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, -22.5, -30] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [0, -22.5, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4167": { + "vector": [0, 0, 0] + }, + "0.7917": { + "pre": { + "vector": [0, 0, 52.5] + }, + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, 52.25] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + }, + "3.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "vector": [0, 22.5, 22.5] + }, + "0.2917": { + "pre": { + "vector": [0, 22.5, 22.5] + }, + "post": { + "vector": [0, 22.5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 22.5, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 22.5, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 22.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 22.5, -50] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 22.5, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 22.5, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [0, 22.5, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 53.59] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 47] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, -35.94] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -9.06] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + }, + "3.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, -22.5, 22.5] + }, + "0.375": { + "pre": { + "vector": [0, -22.5, 55] + }, + "post": { + "vector": [0, -22.5, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -22.5, 76.16] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -22.5, 80] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -22.5, 53.96] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, -22.5, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, -22.5, -11.38] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, -22.5, -55] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, -22.5, -72.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, -22.5, -38.59] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, -22.5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, -22.5, 22.5] + } + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "pre": { + "vector": [0, 0, -36.39] + }, + "post": { + "vector": [0, 0, -36.39] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 75] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 44.22] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [0, 22.5, -22.5] + }, + "0.2083": { + "pre": { + "vector": [0, 22.5, -6.5] + }, + "post": { + "vector": [0, 22.5, -6.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 22.5, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 22.5, 60] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 22.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 22.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [0, 22.5, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [0, 22.5, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 22.5, -22.5] + } + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "pre": { + "vector": [0, 0, -22.5] + }, + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 48.48] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, -4.5] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 0, -19.64] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, -70] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -33.75] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -124.34] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -167.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 0, -180] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -180] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, 0, -130.25] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, -39.68] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -2, 0] + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/easter_bunny.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/easter_bunny.animation.json new file mode 100644 index 00000000..4a29f105 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/easter_bunny.animation.json @@ -0,0 +1,1195 @@ +{ + "format_version": "1.8.0", + "animations": { + "lay": { + "loop": false, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [92.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [92.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [13.31, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [13.31, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-99.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-99.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-32.5, 0, 25.03798] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-32.5, 0, 25.03798] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [13.22026, 23.73452, 145.28169] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [13.22026, 23.73452, 145.28169] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-32.5, 0, -25.03798] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-32.5, 0, -25.03798] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [13.22026, -23.73452, -145.28169] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [13.22026, -23.73452, -145.28169] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_paw": { + "rotation": { + "0.0": { + "post": { + "vector": [130, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [126.723, 17.37215, -21.76766] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [126.723, 17.37215, -21.76766] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [129.50738, -19.73601, 21.52773] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [15.97495, -24.23221, 26.1391] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [129.50738, -19.73601, 21.52773] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [148.81061, 15.09492, -8.95891] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [148.81061, 15.09492, -8.95891] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_paw": { + "rotation": { + "0.0": { + "post": { + "vector": [130, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [126.723, -17.37215, 21.76766] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [126.723, -17.37215, 21.76766] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [129.50738, 19.73601, -21.52773] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [15.97495, 24.23221, -26.1391] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [129.50738, 19.73601, -21.52773] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [148.81061, -15.09492, 8.95891] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [148.81061, -15.09492, 8.95891] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [55, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.5, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "vector": [0, -20, 0] + }, + "1.7083": { + "vector": [0, -20, 0] + }, + "1.8333": { + "pre": { + "vector": [37.5, -20, 0] + }, + "post": { + "vector": [37.5, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, -20, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [55, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.5, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "vector": [0, 20, 0] + }, + "1.7083": { + "vector": [0, 20, 0] + }, + "1.8333": { + "pre": { + "vector": [37.5, 20, 0] + }, + "post": { + "vector": [37.5, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 20, 0] + } + } + }, + "hat": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.47178, 0.65182, 14.95744] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-7.47178, 0.65182, 14.95744] + }, + "lerp_mode": "catmullrom" + } + } + }, + "egg": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 19] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 1, 19] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 4, 19] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 10, 19] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 6, 19] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "vector": [0, 0, 19] + }, + "1.5833": { + "vector": [0, 0, 19] + }, + "1.625": { + "vector": [1, 0, 19] + }, + "1.6667": { + "vector": [0, 0, 19] + }, + "1.7083": { + "vector": [1, 0, 19] + }, + "1.75": { + "vector": [0, 0, 19] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0.4, 0.5, 0.3] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1.2, 1.2, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [1, 1, 1] + }, + "1.75": { + "vector": [1, 1, 1] + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "bunny": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, -360, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -360, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 9, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-0.12, 15.86, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "vector": [0, 9, 0] + }, + "1.75": { + "vector": [0, 9, 0] + }, + "1.9167": { + "vector": [0, 0, 0] + } + } + } + } + }, + "hop": { + "loop": true, + "animation_length": 0.625, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_paw": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_paw": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "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" + }, + "0.625": { + "post": { + "vector": [82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "hat": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 1.98289, 0.26105] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0.04365, 0.00167] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "egg": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bunny": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 2, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 4, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.17365, -0.98481] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0.17365, -0.98481] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-80, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_paw": { + "rotation": { + "0.0": { + "post": { + "vector": [147.60064, 14.02846, 20.9057] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [175.10064, 14.02846, 20.9057] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [147.60064, 14.02846, 20.9057] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_paw": { + "rotation": { + "0.0": { + "post": { + "vector": [147.60064, -14.02846, -20.9057] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [175.10064, -14.02846, -20.9057] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [147.60064, -14.02846, -20.9057] + }, + "lerp_mode": "catmullrom" + } + } + }, + "hat": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-12.5, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "egg": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/elka.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/elka.animation.json new file mode 100644 index 00000000..9c7b5e9b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/elka.animation.json @@ -0,0 +1,3578 @@ +{ + "format_version": "1.8.0", + "animations": { + "walk": { + "loop": true, + "animation_length": 3, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [27.5, 0, 0] + }, + "0.7083": { + "pre": { + "vector": [31.53, 0, 0] + }, + "post": { + "vector": [31.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-27.5, 0, 0] + }, + "3.0": { + "vector": [27.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -0.25, 4] + }, + "0.375": { + "pre": { + "vector": [0, -0.25, 3] + }, + "post": { + "vector": [0, -0.25, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -0.25, -2.83] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [0, -0.25, -2] + }, + "1.7917": { + "vector": [0, 0.5, -0.83] + }, + "2.25": { + "vector": [0, -0.25, 1] + }, + "3.0": { + "vector": [0, -0.25, 4] + } + } + }, + "torso": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "pre": { + "vector": [0, 0, 5] + }, + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [0, 0, 0] + }, + "1.75": { + "pre": { + "vector": [0, 0, 5] + }, + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0.95, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [-27.5, 0, 0] + }, + "1.5": { + "vector": [27.5, 0, 0] + }, + "2.2083": { + "pre": { + "vector": [31.53, 0, 0] + }, + "post": { + "vector": [31.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [-27.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -0.25, -2] + }, + "0.2917": { + "vector": [0, 0.5, -0.83] + }, + "0.75": { + "vector": [0, -0.25, 1] + }, + "1.5": { + "vector": [0, -0.25, 4] + }, + "1.875": { + "pre": { + "vector": [0, -0.25, 3] + }, + "post": { + "vector": [0, -0.25, 3] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, -0.25, -2.83] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, -0.25, -2] + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "vector": [-18.5, 0, 0] + }, + "0.2083": { + "vector": [-27.5, 0, 0] + }, + "1.7083": { + "vector": [27.5, 0, 0] + }, + "2.4167": { + "pre": { + "vector": [31.53, 0, 0] + }, + "post": { + "vector": [31.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [-18.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -0.31, -2.59] + }, + "0.2083": { + "vector": [0, -0.25, -2] + }, + "0.5": { + "vector": [0, 0.5, -0.83] + }, + "0.9583": { + "vector": [0, -0.25, 1] + }, + "1.7083": { + "vector": [0, -0.25, 4] + }, + "2.0833": { + "pre": { + "vector": [0, -0.25, 3] + }, + "post": { + "vector": [0, -0.25, 3] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, -0.25, -2.83] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, -0.31, -2.59] + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "vector": [19.86, 0, 0] + }, + "0.2083": { + "vector": [27.5, 0, 0] + }, + "0.9167": { + "pre": { + "vector": [31.53, 0, 0] + }, + "post": { + "vector": [31.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-18.5, 0, 0] + }, + "1.7083": { + "vector": [-27.5, 0, 0] + }, + "3.0": { + "vector": [19.86, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -0.25, 3.17] + }, + "0.2083": { + "vector": [0, -0.25, 4] + }, + "0.5833": { + "pre": { + "vector": [0, -0.25, 3] + }, + "post": { + "vector": [0, -0.25, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, -0.25, -2.83] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [0, -0.31, -2.59] + }, + "1.7083": { + "vector": [0, -0.25, -2] + }, + "2.0": { + "vector": [0, 0.5, -0.83] + }, + "2.4583": { + "vector": [0, -0.25, 1] + }, + "3.0": { + "vector": [0, -0.25, 3.17] + } + } + }, + "panda": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, -1, 0] + }, + "0.375": { + "vector": [0, 0, 0] + }, + "1.5": { + "vector": [0, 0, 0] + }, + "1.625": { + "vector": [0, 0, 0] + }, + "1.75": { + "vector": [0, -1, 0] + }, + "1.875": { + "vector": [0, 0, 0] + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [1.40491, -0.06133, 2.49925] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [1.45366, 0.00412, -0.16804] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "sit": { + "animation_length": 1, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [15, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 2, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 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" + }, + "1.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 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" + }, + "1.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "panda": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "sit_idle": { + "loop": true, + "animation_length": 4, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [33.6659, -3.12234, 4.68136] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [33.41527, 2.75839, -4.1719] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-17.48436, 0.75155, 2.38443] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-17.48246, -0.84288, -2.67423] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "panda": { + "position": { + "0.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "cry": { + "animation_length": 1.25, + "bones": { + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 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" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "get_up": { + "animation_length": 1, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.5, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-62.91, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0.43, 2.68] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "panda": { + "position": { + "0.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "animation_length": 1, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [37.5, 0, 0] + }, + "0.7083": { + "vector": [37.5, 0, 0] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "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.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [-20, 0, 27.5] + }, + "0.7083": { + "vector": [-20, 0, 27.5] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 1, 2.67] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3, 6, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-3, 6, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 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": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [-20, 0, -27.5] + }, + "0.7083": { + "vector": [-20, 0, -27.5] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [3, 6, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [3, 6, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [3, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [3, 0, -2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -22.5, 0] + }, + "0.7083": { + "vector": [0, -22.5, 0] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 3, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.5": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.3333": { + "vector": [1, 1, 1] + }, + "0.375": { + "pre": { + "vector": [1.1, 1, 1] + }, + "post": { + "vector": [1.1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [1.1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "vector": [1.1, 1, 1] + }, + "0.5833": { + "vector": [1, 1, 1] + } + } + }, + "panda": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [0, -2, 2] + }, + "0.4167": { + "vector": [0, 0.33, 1] + }, + "0.625": { + "vector": [0, 0, -4] + }, + "0.7917": { + "vector": [0, 0, -4] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, -2, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + } + } + }, + "quirk": { + "loop": true, + "animation_length": 4, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [28.72, 0, -4.2] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-15.85903, 0, 0.31062] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [43.72, 0, 4.2] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-24.4684, 0, -0.31062] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3.42004, -17.47073, -1.02787] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [3.42004, -17.47073, -1.02787] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [3.05502, 16.23765, 0.86455] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [27.76497, 14.69599, 0.78246] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [-4.99339, 14.21392, 0.7568] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [15.62466, 6.79132, 0.36159] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [1.40491, -0.06133, 2.49925] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [2.37983, -0.63438, 14.84347] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-5.56124, -0.29927, 6.95604] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [1.45366, 0.00412, -0.16804] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "quirk_2": { + "animation_length": 3, + "bones": { + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-29.28825, 19.9034, 31.25201] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-29.28825, 19.9034, 31.25201] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, 24, 11] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1, 23, 11] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-1, 21, 11] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-46.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -0.75, 3.25] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 9, 13] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 6.11, 16.11] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-29.28825, -19.9034, -31.25201] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-29.28825, -19.9034, -31.25201] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 24, 11] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 23, 11] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [1, 21, 11] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "panda": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.5": { + "vector": [0, 0, 0] + }, + "2.625": { + "vector": [0, -3, 0] + }, + "2.75": { + "vector": [0, 0, 0] + } + } + } + } + }, + "quirk_3": { + "animation_length": 4, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [55, 0, -12.38251] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-24.72222, 0, -8.70491] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [28.29653, 0, -6.18874] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [55, 0, 12.38251] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-24.72222, 0, 8.70491] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [18.29653, 0, 6.18874] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [33.6659, -3.12234, 4.68136] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [49.00148, -1.52623, 2.29092] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [54.16098, 0.30871, -0.4661] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [54.16098, 0.30871, -0.4661] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [1.15437, 1.89129, -2.86005] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [33.41527, 2.75839, -4.1719] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-41.9978, -43.69869, -37.50059] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-14, 10, -4] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-11.55, 5.86, -3.81] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [-7.97, 7.38, -2.85] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-7.97, 7.38, -2.85] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-17.48436, 0.75155, 2.38443] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-11.54439, 0.89972, 2.85453] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-17.183, 0.76913, 2.4402] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-12.62965, 0.30631, 0.97183] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-7.85386, -0.32245, -1.02305] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-29.59683, -0.77679, -2.46453] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-17.48246, -0.84288, -2.67423] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [-14.46631, -0.78707, -2.49717] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [-17.48246, -0.84288, -2.67423] + }, + "lerp_mode": "catmullrom" + }, + "3.4583": { + "post": { + "vector": [-10.10109, -0.79418, -2.51972] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "panda": { + "position": { + "0.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/elka_baby.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/elka_baby.animation.json new file mode 100644 index 00000000..e97b0151 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/elka_baby.animation.json @@ -0,0 +1,1091 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.28, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.28, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 8.75] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, -4.45] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [2.5, 0, 3.96] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "vector": [0, 0, 10] + }, + "0.5": { + "vector": [0, 0, 8.75] + } + } + }, + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-1.5, 0, -2.4074] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1.5, 0, 2.08] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-1.5, 0, 2.4074] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1.5, 0, -2.08] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "vector": [0, -0.42, 0] + }, + "0.125": { + "vector": [0, -0.5, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0.58, 0] + }, + "post": { + "vector": [0, 0.58, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 1.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, -0.42, 0] + }, + "0.375": { + "vector": [0, -0.5, 0] + }, + "0.4167": { + "pre": { + "vector": [0, 0.58, 0] + }, + "post": { + "vector": [0, 0.58, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1.25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-30, 0, 0] + }, + "0.375": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0.25, 1, -0.25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0.5, 1, -1] + }, + "0.3333": { + "vector": [0, 0, 1.11] + }, + "0.4167": { + "pre": { + "vector": [0, 0, 2] + }, + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [-30, 0, 0] + }, + "0.125": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-30, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [-0.5, 1, -1] + }, + "0.0833": { + "vector": [0, 0, 1.11] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 2] + }, + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-0.25, 1, -0.25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-0.5, 1, -1] + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-31.2, 0, 0] + }, + "0.2917": { + "vector": [-30, 0, 0] + }, + "0.4167": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.06, 2.76] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0.25, 0.79, 0.47] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0.25, 1, -0.25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0.25, 1.13, -0.96] + }, + "0.2917": { + "vector": [0.25, 1, -1] + }, + "0.375": { + "vector": [0, 0, 1.11] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 2] + }, + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.06, 2.76] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [-31.2, 0, 0] + }, + "0.0417": { + "vector": [-30, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-31.2, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [-0.25, 1.13, -0.96] + }, + "0.0417": { + "vector": [-0.25, 1, -1] + }, + "0.125": { + "vector": [0, 0, 1.11] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 2] + }, + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -0.06, 2.76] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-0.25, 0.79, 0.47] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-0.25, 1, -0.25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-0.25, 1.13, -0.96] + } + } + } + } + }, + "quirk": { + "animation_length": 0.8333, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.8, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-2.5, 0, 0] + }, + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0.45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [0, 2, 0] + }, + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 1.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.4167": { + "pre": { + "vector": [0, 2, 0] + }, + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 1.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -0.36, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-45, 7.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-45, 7.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.8333": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-45, -7.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-45, -7.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.8333": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-27.5, 7.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-27.5, 7.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-27.5, -7.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-27.5, -7.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/emperor_scorpion.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/emperor_scorpion.animation.json new file mode 100644 index 00000000..ce875de5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/emperor_scorpion.animation.json @@ -0,0 +1,6920 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.76424, 15.58169, 6.41363] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.55159, -66.49678, 18.63503] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.76424, -15.58169, -6.41363] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.55159, 66.49678, -18.63503] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-14.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.01701, -1.932, -0.51681] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [-7.5, 0, 0] + }, + "4.0": { + "vector": [-7.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 2.97433, 0.39158] + }, + "4.0": { + "vector": [0, 2.97433, 0.39158] + } + } + } + } + }, + "snap": { + "animation_length": 1.1667, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3.7, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [23.42856, 32.02895, 39.9583] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [21.71157, 23.54515, 36.82727] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [23.42856, 32.02895, 39.9583] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [36.336, 33.21119, 61.27705] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [27.17428, -54.73839, -13.49464] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [30.90401, -59.1128, -17.94168] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [17.57153, -29.15131, 0.47837] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.00519, -46.91401, 10.92044] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.1917, -22.90321, 6.52626] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-7.45814, -34.54067, 8.56333] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-7.45814, -34.54067, 8.56333] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.96435, -39.49556, 9.40333] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-0.31701, -52.5214, -0.0116] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-7.69574, -37.01886, 8.96963] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.68128, -37.43886, 12.90265] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.68128, -37.43886, 12.90265] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-0.62424, -29.93934, 12.80003] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-0.58525, -22.43976, 12.71188] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-1.00506, -57.43681, 13.33557] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-0.54094, 0.05918, 12.48792] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-8.61309, 44.44348, -10.37251] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-0.62424, 29.93934, -12.80003] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-19.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-19.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-19.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.04217, 4.92423, 0.86613] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.04217, 4.92423, 0.86613] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-0.04217, 4.92423, 0.86613] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [9.19914, 3.52239, -38.53112] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [14.11306, 1.80961, -55.00433] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [14.06755, -1.76775, -41.10726] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [42.40833, -20.72687, -59.24866] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [9.19914, -3.52239, 38.53112] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [4.48533, -9.12111, 50.99268] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [14.11306, -1.80961, 55.00433] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [14.06755, 1.76775, 41.10726] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [42.40833, 20.72687, 59.24866] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Emperor_scorpion": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 12] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "sting": { + "animation_length": 1.25, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [40.59276, 9.44321, 19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [40.59276, 9.44321, 19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [25.59276, 9.44321, 19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [25.59276, 9.44321, 19.44192] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-13.01253, -61.64994, 15.81446] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-13.01253, -61.64994, 15.81446] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-0.59657, -24.93963, 12.74003] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-0.59657, -24.93963, 12.74003] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [40.59276, -9.44321, -19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [40.59276, -9.44321, -19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [25.59276, -9.44321, -19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [25.59276, -9.44321, -19.44192] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-13.01253, 61.64994, -15.81446] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-13.01253, 61.64994, -15.81446] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-0.59657, 24.93963, -12.74003] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-0.59657, 24.93963, -12.74003] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-22.47522, -0.248, -0.4204] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-22.47522, -0.248, -0.4204] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.52478, -0.248, -0.4204] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [37.52478, -0.248, -0.4204] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-0.06748, 7.39206, 3.05824] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-0.06748, 7.39206, 3.05824] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [27.5008, -0.21542, 0.08621] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [27.5008, -0.21542, 0.08621] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [25.0008, -0.21542, 0.08621] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [42.5008, -0.21542, 0.08621] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [25.0008, -0.21542, 0.08621] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [42.50154, -0.01397, 0.41232] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [42.50154, -0.01397, 0.41232] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.50154, -0.01397, 0.41232] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [50.00154, -0.01397, 0.41232] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [37.50154, -0.01397, 0.41232] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 10.90589, -1.43579] + }, + "0.4583": { + "vector": [0, 10.90589, -1.43579] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [8.93029, -6.60604, 45.80307] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [8.93029, -6.60604, 45.80307] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 10.90589, -1.43579] + }, + "0.4583": { + "vector": [0, 10.90589, -1.43579] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [0, 0, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [8.93029, 6.60604, -45.80307] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [8.93029, 6.60604, -45.80307] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [-7.5, 0, 0] + }, + "1.25": { + "vector": [-7.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 2.97433, 0.39158] + }, + "1.25": { + "vector": [0, 2.97433, 0.39158] + } + } + }, + "Emperor_scorpion": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.7083": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, -7, 0] + }, + "0.7917": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [0, 0, 0] + }, + "0.875": { + "vector": [0, -7, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "tail_base": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [90, 0, 0] + }, + "0.8333": { + "vector": [90, 0, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + } + } + }, + "death": { + "animation_length": 2, + "bones": { + "right_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-95, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-95, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10.90072, -2.02429, -7.48359] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-11.0335, -1.07248, -2.57317] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-58.57884, -69.14305, 63.52353] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.45814, -34.54067, 8.56333] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1.65088, -1.8911, 41.16658] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-0.58731, -2.4278, 13.42887] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0.43439, -2.462, -10.00933] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10.90072, 2.02429, 7.48359] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-11.0335, 1.07248, 2.57317] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-58.57884, 69.14305, -63.52353] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.45814, 34.54067, -8.56333] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1.65088, 1.8911, -41.16658] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-0.58731, 2.4278, -13.42887] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0.43439, 2.462, 10.00933] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-19.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0.65263, 4.95722] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [68.67, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [73.67, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.96013, 14.15594, 3.28955] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [8.24992, -11.63031, 6.43] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.16727, -27.01074, 12.61337] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.06542, -45.90473, 19.36303] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.96013, -14.15594, -3.28955] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [8.24992, 11.63031, -6.43] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.16727, 27.01074, -12.61337] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.06542, 45.90473, -19.36303] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Emperor_scorpion": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [17.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, -13, 0] + }, + "0.8333": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, -8, 0] + } + } + } + } + }, + "agro": { + "animation_length": 1.5, + "bones": { + "right_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-93.69768, 47.44052, -2.72535] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-110, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-93.69768, -47.44052, 2.72535] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-110, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20.24317, 40.3589, 22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.24317, 40.3589, 22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [20.24317, 40.3589, 22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20.24317, -40.3589, -22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.24317, -40.3589, -22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [20.24317, -40.3589, -22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20.02448, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.02448, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [20.02448, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 8.58419, 3.91301] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.44, 9.12, 4.16] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 8.58419, 3.91301] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, 8.58419, 3.91301] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 6.26, -13.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 5.84314, -16.90733] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [1, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [1, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [1, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 6.26, -13.74] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-1.64738, 2.1728, -37.76412] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [26.72762, -5.14185, -60.34804] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [23.97832, -13.07344, -43.46517] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-4, 0.26105, 1.98289] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [43.07231, -19.03, -61.20103] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [39.26594, -26.7138, -51.59932] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-5, 0.78316, 5.94867] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-1.64738, -2.1728, 37.76412] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [26.72762, 5.14185, 60.34804] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [23.97832, 13.07344, 43.46517] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [4, 0.26105, 1.98289] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [43.07231, 19.03, 61.20103] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [39.26594, 26.7138, 51.59932] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [5, 0.78316, 5.94867] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [-7.5, 0, 0] + }, + "0.625": { + "vector": [-7.5, 0, 0] + }, + "1.5": { + "vector": [-7.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 2.97433, 0.39158] + }, + "0.625": { + "vector": [0, 2.97433, 0.39158] + }, + "1.5": { + "vector": [0, 2.97433, 0.39158] + } + } + }, + "Emperor_scorpion": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [0, 0, 0] + }, + "1.5": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [0, 0, 0] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "vector": [17.5, 0, 0] + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [20.54, 14.15, -3.24] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [21.0706, 18.8197, -1.3935] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.54, 14.15, -3.24] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [21.0706, 18.8197, -1.3935] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.54, 14.15, -3.24] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "vector": [-87.84727, -83.85782, 92.15322] + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.96, -26.64, 18.35] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-2.91413, -24.7865, 18.24873] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.9769, -27.2832, 18.3917] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-2.91413, -24.7865, 18.24873] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-2.9769, -27.2832, 18.3917] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.96, -26.64, 18.35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [20.54, -14.15, 3.24] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [21.0706, -18.8197, 1.3935] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.54, -14.15, 3.24] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [21.0706, -18.8197, 1.3935] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.54, -14.15, 3.24] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "vector": [-26.01017, 75.88812, -29.64312] + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.96, 26.64, -18.35] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-2.91413, 24.7865, -18.24873] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.9769, 27.2832, -18.3917] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-2.91413, 24.7865, -18.24873] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-2.9769, 27.2832, -18.3917] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.96, 26.64, -18.35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "vector": [0, 40, 0] + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.5595, 0.0244, 2.4999] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.5062, 0.0203, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.5595, 0.0244, 2.4999] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "vector": [0, 0, 100] + }, + "0.125": { + "pre": { + "vector": [0, 0, 46.25] + }, + "post": { + "vector": [0, 0, 46.25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 37.5] + }, + "0.5": { + "vector": [0, 0, 100] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [-17.835, 32.8234, -50.8252] + }, + "0.0833": { + "pre": { + "vector": [-20.0712, 36.5326, -44.5604] + }, + "post": { + "vector": [-20.0712, 36.5326, -44.5604] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-6.2969, 50.0472, -11.6665] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-7.94, 50.66, -4.89] + }, + "0.375": { + "vector": [-17.8875, 41.7417, -27.8576] + }, + "0.5": { + "vector": [-17.835, 32.8234, -50.8252] + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "vector": [-1.44, 27.42, -21.33] + }, + "0.25": { + "vector": [17.1566, 10.2095, -27.2558] + }, + "0.375": { + "pre": { + "vector": [10.79, 18.48, -35.15] + }, + "post": { + "vector": [10.79, 18.48, -35.15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-1.44, 27.42, -21.33] + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "vector": [0, 0, 57.5] + }, + "0.25": { + "vector": [0, 0, 67.5] + }, + "0.3333": { + "pre": { + "vector": [0, 0, 76.67] + }, + "post": { + "vector": [0, 0, 76.67] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 57.5] + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "vector": [19.53, -19.29, -27.48] + }, + "0.0833": { + "pre": { + "vector": [34.4927, -6.1161, -39.5276] + }, + "post": { + "vector": [34.4927, -6.1161, -39.5276] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10.5576, -3.3509, -35.748] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [6.6225, -0.5857, -31.9684] + }, + "0.5": { + "vector": [19.53, -19.29, -27.48] + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "vector": [0, 0, 52.5] + }, + "0.125": { + "pre": { + "vector": [0, 0, 75.83] + }, + "post": { + "vector": [0, 0, 75.83] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 70] + }, + "0.5": { + "vector": [0, 0, 52.5] + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "vector": [49.9401, -51.5736, -59.3599] + }, + "0.0833": { + "pre": { + "vector": [46.73, -44.95, -59.15] + }, + "post": { + "vector": [46.73, -44.95, -59.15] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [44.9524, -15.2516, -64.3241] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [54.2, -15.58, -64.99] + }, + "0.5": { + "vector": [49.9401, -51.5736, -59.3599] + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "vector": [0, 0, 57.5] + }, + "0.125": { + "pre": { + "vector": [0, 0, 61.67] + }, + "post": { + "vector": [0, 0, 61.67] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 107.5] + }, + "0.5": { + "vector": [0, 0, 57.5] + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [-7.94, -50.66, 4.89] + }, + "0.125": { + "vector": [-17.8875, -41.7417, 27.8576] + }, + "0.25": { + "vector": [-17.835, -32.8234, 50.8252] + }, + "0.3333": { + "pre": { + "vector": [-20.0712, -36.5326, 44.5604] + }, + "post": { + "vector": [-20.0712, -36.5326, 44.5604] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-6.2969, -50.0472, 11.6665] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-7.94, -50.66, 4.89] + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "vector": [0, 0, -37.5] + }, + "0.25": { + "vector": [0, 0, -100] + }, + "0.375": { + "pre": { + "vector": [0, 0, -46.25] + }, + "post": { + "vector": [0, 0, -46.25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, -37.5] + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "vector": [17.1566, -10.2095, 27.2558] + }, + "0.125": { + "pre": { + "vector": [10.79, -18.48, 35.15] + }, + "post": { + "vector": [10.79, -18.48, 35.15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-1.44, -27.42, 21.33] + }, + "0.5": { + "vector": [17.1566, -10.2095, 27.2558] + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "vector": [0, 0, -67.5] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -76.67] + }, + "post": { + "vector": [0, 0, -76.67] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, -57.5] + }, + "0.5": { + "vector": [0, 0, -67.5] + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "vector": [6.6225, 0.5857, 31.9684] + }, + "0.25": { + "vector": [19.53, 19.29, 27.48] + }, + "0.3333": { + "pre": { + "vector": [34.4927, 6.1161, 39.5276] + }, + "post": { + "vector": [34.4927, 6.1161, 39.5276] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10.5576, 3.3509, 35.748] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [6.6225, 0.5857, 31.9684] + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "vector": [0, 0, -70] + }, + "0.25": { + "vector": [0, 0, -52.5] + }, + "0.375": { + "pre": { + "vector": [0, 0, -75.83] + }, + "post": { + "vector": [0, 0, -75.83] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, -70] + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "vector": [54.2, 15.58, 64.99] + }, + "0.25": { + "vector": [49.9401, 51.5736, 59.3599] + }, + "0.3333": { + "pre": { + "vector": [46.73, 44.95, 59.15] + }, + "post": { + "vector": [46.73, 44.95, 59.15] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [44.9524, 15.2516, 64.3241] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [54.2, 15.58, 64.99] + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "vector": [0, 0, -107.5] + }, + "0.25": { + "vector": [0, 0, -57.5] + }, + "0.375": { + "pre": { + "vector": [0, 0, -61.67] + }, + "post": { + "vector": [0, 0, -61.67] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, -107.5] + } + } + }, + "body": { + "rotation": { + "vector": [-9.98, -0.15, -0.46] + } + } + } + }, + "harden": { + "animation_length": 0.5417, + "bones": { + "right_mandibule": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [-107.5, 0, 0] + }, + "post": { + "vector": [-107.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-120, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-107.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_mandibule": { + "rotation": { + "0.375": { + "pre": { + "vector": [-107.5, 0, 0] + }, + "post": { + "vector": [-107.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-120, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-107.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15.05854, 26.48174, -25.94745] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15.05854, -26.48174, 25.94745] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [17.52448, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-145, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-5.49824, 16.37564, -51.24195] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0.01826, 1.73134, 136.80371] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [1.80191, -2.27789, 0.75121] + }, + "post": { + "vector": [1.80191, -2.27789, 0.75121] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [13.60123, 4.2104, -64.72603] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 145] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [1.70318, -3.54515, -0.72874] + }, + "post": { + "vector": [1.70318, -3.54515, -0.72874] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [27.13034, -1.74132, -67.04592] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 145] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [1.3197, -2.84723, -0.38945] + }, + "post": { + "vector": [1.3197, -2.84723, -0.38945] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [46.24426, -3.10601, -77.45876] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 150] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [2, -3.4641, 0] + }, + "post": { + "vector": [2, -3.4641, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-5.49824, -16.37564, 51.24195] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0.01826, -1.73134, -136.80371] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.375": { + "pre": { + "vector": [-1.80191, -2.27789, 0.75121] + }, + "post": { + "vector": [-1.80191, -2.27789, 0.75121] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [13.60123, -4.2104, 64.72603] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -145] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.375": { + "pre": { + "vector": [-1.70318, -3.54515, -0.72874] + }, + "post": { + "vector": [-1.70318, -3.54515, -0.72874] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [27.13034, 1.74132, 67.04592] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -145] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.375": { + "pre": { + "vector": [-1.3197, -2.84723, -0.38945] + }, + "post": { + "vector": [-1.3197, -2.84723, -0.38945] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [46.24426, 3.10601, 77.45876] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -150] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.375": { + "pre": { + "vector": [-2, -3.4641, 0] + }, + "post": { + "vector": [-2, -3.4641, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "vector": [-7.5, 0, 0] + }, + "position": { + "vector": [0, 2.97433, 0.39158] + } + } + } + }, + "harden_state": { + "loop": true, + "animation_length": 0.5, + "bones": { + "right_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-107.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-107.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.05854, 26.48174, -25.94745] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.05854, -26.48174, 25.94745] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [17.52448, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-145, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.49824, 16.37564, -51.24195] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.01826, 1.73134, 136.80371] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.80191, -2.27789, 0.75121] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [13.60123, 4.2104, -64.72603] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 145] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.70318, -3.54515, -0.72874] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [27.13034, -1.74132, -67.04592] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 145] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.3197, -2.84723, -0.38945] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [46.24426, -3.10601, -77.45876] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 150] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, -3.4641, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.49824, -16.37564, 51.24195] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.01826, -1.73134, -136.80371] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.80191, -2.27789, 0.75121] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [13.60123, -4.2104, 64.72603] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -145] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.70318, -3.54515, -0.72874] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [27.13034, 1.74132, 67.04592] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -145] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.3197, -2.84723, -0.38945] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [46.24426, 3.10601, 77.45876] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -150] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, -3.4641, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Emperor_scorpion": { + "rotation": { + "vector": [-7.5, 0, 0] + }, + "position": { + "vector": [0, 2.97433, 0.39158] + } + } + } + }, + "end_of_harden_state": { + "animation_length": 1, + "bones": { + "right_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-107.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-107.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.05854, 26.48174, -25.94745] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.05854, -26.48174, 25.94745] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [17.52448, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.49824, 16.37564, -51.24195] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.01826, 1.73134, 136.80371] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.80191, -2.27789, 0.75121] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [13.60123, 4.2104, -64.72603] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 145] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.70318, -3.54515, -0.72874] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [27.13034, -1.74132, -67.04592] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 145] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.3197, -2.84723, -0.38945] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [46.24426, -3.10601, -77.45876] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 150] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, -3.4641, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.49824, -16.37564, 51.24195] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.01826, -1.73134, -136.80371] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.80191, -2.27789, 0.75121] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [13.60123, -4.2104, 64.72603] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -145] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.70318, -3.54515, -0.72874] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [27.13034, 1.74132, 67.04592] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -145] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.3197, -2.84723, -0.38945] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [46.24426, 3.10601, 77.45876] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -150] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, -3.4641, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "1.0": { + "pre": { + "vector": [-7.5, 0, 0] + }, + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "1.0": { + "pre": { + "vector": [0, 2.97433, 0.39158] + }, + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Emperor_scorpion": { + "rotation": { + "0.0": { + "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" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/gamma_jerry.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/gamma_jerry.animation.json new file mode 100644 index 00000000..e7fb6946 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/gamma_jerry.animation.json @@ -0,0 +1,9461 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "root": { + "position": { + "0.0": { + "vector": [0, 4, 0] + }, + "0.0417": { + "vector": [0, 4.01, 0.02] + }, + "0.0833": { + "vector": [0, 4.02, 0.04] + }, + "0.125": { + "vector": [0, 4.04, 0.05] + }, + "0.1667": { + "vector": [0, 4.07, 0.07] + }, + "0.2083": { + "vector": [0, 4.11, 0.08] + }, + "0.25": { + "vector": [0, 4.16, 0.09] + }, + "0.2917": { + "vector": [0, 4.21, 0.1] + }, + "0.3333": { + "vector": [0, 4.26, 0.11] + }, + "0.375": { + "vector": [0, 4.32, 0.12] + }, + "0.4167": { + "vector": [0, 4.38, 0.12] + }, + "0.4583": { + "vector": [0, 4.44, 0.12] + }, + "0.5": { + "vector": [0, 4.5, 0.13] + }, + "0.5417": { + "vector": [0, 4.56, 0.12] + }, + "0.5833": { + "vector": [0, 4.62, 0.12] + }, + "0.625": { + "vector": [0, 4.68, 0.12] + }, + "0.6667": { + "vector": [0, 4.74, 0.11] + }, + "0.7083": { + "vector": [0, 4.79, 0.1] + }, + "0.75": { + "vector": [0, 4.84, 0.09] + }, + "0.7917": { + "vector": [0, 4.89, 0.08] + }, + "0.8333": { + "vector": [0, 4.93, 0.07] + }, + "0.875": { + "vector": [0, 4.96, 0.05] + }, + "0.9167": { + "vector": [0, 4.98, 0.04] + }, + "0.9583": { + "vector": [0, 4.99, 0.02] + }, + "1.0": { + "vector": [0, 5, 0] + }, + "1.0417": { + "vector": [0, 4.99, -0.02] + }, + "1.0833": { + "vector": [0, 4.98, -0.05] + }, + "1.125": { + "vector": [0, 4.96, -0.08] + }, + "1.1667": { + "vector": [0, 4.93, -0.12] + }, + "1.2083": { + "vector": [0, 4.89, -0.16] + }, + "1.25": { + "vector": [0, 4.84, -0.2] + }, + "1.2917": { + "vector": [0, 4.79, -0.25] + }, + "1.3333": { + "vector": [0, 4.74, -0.3] + }, + "1.375": { + "vector": [0, 4.68, -0.35] + }, + "1.4167": { + "vector": [0, 4.62, -0.4] + }, + "1.4583": { + "vector": [0, 4.56, -0.45] + }, + "1.5": { + "vector": [0, 4.5, -0.5] + }, + "1.5417": { + "vector": [0, 4.44, -0.55] + }, + "1.5833": { + "vector": [0, 4.38, -0.6] + }, + "1.625": { + "vector": [0, 4.32, -0.65] + }, + "1.6667": { + "vector": [0, 4.26, -0.7] + }, + "1.7083": { + "vector": [0, 4.21, -0.75] + }, + "1.75": { + "vector": [0, 4.16, -0.8] + }, + "1.7917": { + "vector": [0, 4.11, -0.84] + }, + "1.8333": { + "vector": [0, 4.07, -0.88] + }, + "1.875": { + "vector": [0, 4.04, -0.92] + }, + "1.9167": { + "vector": [0, 4.02, -0.95] + }, + "1.9583": { + "vector": [0, 4.01, -0.98] + }, + "2.0": { + "vector": [0, 4, -1] + }, + "2.0417": { + "vector": [0, 4.01, -1.02] + }, + "2.0833": { + "vector": [0, 4.02, -1.04] + }, + "2.125": { + "vector": [0, 4.04, -1.05] + }, + "2.1667": { + "vector": [0, 4.07, -1.07] + }, + "2.2083": { + "vector": [0, 4.11, -1.08] + }, + "2.25": { + "vector": [0, 4.16, -1.09] + }, + "2.2917": { + "vector": [0, 4.21, -1.1] + }, + "2.3333": { + "vector": [0, 4.26, -1.11] + }, + "2.375": { + "vector": [0, 4.32, -1.12] + }, + "2.4167": { + "vector": [0, 4.38, -1.12] + }, + "2.4583": { + "vector": [0, 4.44, -1.12] + }, + "2.5": { + "vector": [0, 4.5, -1.12] + }, + "2.5417": { + "vector": [0, 4.56, -1.12] + }, + "2.5833": { + "vector": [0, 4.62, -1.12] + }, + "2.625": { + "vector": [0, 4.68, -1.12] + }, + "2.6667": { + "vector": [0, 4.74, -1.11] + }, + "2.7083": { + "vector": [0, 4.79, -1.1] + }, + "2.75": { + "vector": [0, 4.84, -1.09] + }, + "2.7917": { + "vector": [0, 4.89, -1.08] + }, + "2.8333": { + "vector": [0, 4.93, -1.07] + }, + "2.875": { + "vector": [0, 4.96, -1.05] + }, + "2.9167": { + "vector": [0, 4.98, -1.04] + }, + "2.9583": { + "vector": [0, 4.99, -1.02] + }, + "3.0": { + "vector": [0, 5, -1] + }, + "3.0417": { + "vector": [0, 4.99, -0.98] + }, + "3.0833": { + "vector": [0, 4.98, -0.95] + }, + "3.125": { + "vector": [0, 4.96, -0.92] + }, + "3.1667": { + "vector": [0, 4.93, -0.88] + }, + "3.2083": { + "vector": [0, 4.89, -0.84] + }, + "3.25": { + "vector": [0, 4.84, -0.8] + }, + "3.2917": { + "vector": [0, 4.79, -0.75] + }, + "3.3333": { + "vector": [0, 4.74, -0.7] + }, + "3.375": { + "vector": [0, 4.68, -0.65] + }, + "3.4167": { + "vector": [0, 4.62, -0.6] + }, + "3.4583": { + "vector": [0, 4.56, -0.55] + }, + "3.5": { + "vector": [0, 4.5, -0.5] + }, + "3.5417": { + "vector": [0, 4.44, -0.45] + }, + "3.5833": { + "vector": [0, 4.38, -0.4] + }, + "3.625": { + "vector": [0, 4.32, -0.35] + }, + "3.6667": { + "vector": [0, 4.26, -0.3] + }, + "3.7083": { + "vector": [0, 4.21, -0.25] + }, + "3.75": { + "vector": [0, 4.16, -0.2] + }, + "3.7917": { + "vector": [0, 4.11, -0.16] + }, + "3.8333": { + "vector": [0, 4.07, -0.12] + }, + "3.875": { + "vector": [0, 4.04, -0.08] + }, + "3.9167": { + "vector": [0, 4.02, -0.05] + }, + "3.9583": { + "vector": [0, 4.01, -0.02] + }, + "4.0": { + "vector": [0, 4, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [-2.5, 0, 0] + }, + "0.0417": { + "vector": [-2.49, 0, 0] + }, + "0.0833": { + "vector": [-2.47, 0, 0] + }, + "0.125": { + "vector": [-2.43, 0, 0] + }, + "0.1667": { + "vector": [-2.37, 0, 0] + }, + "0.2083": { + "vector": [-2.31, 0, 0] + }, + "0.25": { + "vector": [-2.23, 0, 0] + }, + "0.2917": { + "vector": [-2.14, 0, 0] + }, + "0.3333": { + "vector": [-2.04, 0, 0] + }, + "0.375": { + "vector": [-1.93, 0, 0] + }, + "0.4167": { + "vector": [-1.81, 0, 0] + }, + "0.4583": { + "vector": [-1.69, 0, 0] + }, + "0.5": { + "vector": [-1.56, 0, 0] + }, + "0.5417": { + "vector": [-1.43, 0, 0] + }, + "0.5833": { + "vector": [-1.29, 0, 0] + }, + "0.625": { + "vector": [-1.16, 0, 0] + }, + "0.6667": { + "vector": [-1.02, 0, 0] + }, + "0.7083": { + "vector": [-0.88, 0, 0] + }, + "0.75": { + "vector": [-0.74, 0, 0] + }, + "0.7917": { + "vector": [-0.61, 0, 0] + }, + "0.8333": { + "vector": [-0.47, 0, 0] + }, + "0.875": { + "vector": [-0.35, 0, 0] + }, + "0.9167": { + "vector": [-0.22, 0, 0] + }, + "0.9583": { + "vector": [-0.11, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.0417": { + "vector": [0.11, 0, 0] + }, + "1.0833": { + "vector": [0.22, 0, 0] + }, + "1.125": { + "vector": [0.35, 0, 0] + }, + "1.1667": { + "vector": [0.47, 0, 0] + }, + "1.2083": { + "vector": [0.61, 0, 0] + }, + "1.25": { + "vector": [0.74, 0, 0] + }, + "1.2917": { + "vector": [0.88, 0, 0] + }, + "1.3333": { + "vector": [1.02, 0, 0] + }, + "1.375": { + "vector": [1.16, 0, 0] + }, + "1.4167": { + "vector": [1.29, 0, 0] + }, + "1.4583": { + "vector": [1.43, 0, 0] + }, + "1.5": { + "vector": [1.56, 0, 0] + }, + "1.5417": { + "vector": [1.69, 0, 0] + }, + "1.5833": { + "vector": [1.81, 0, 0] + }, + "1.625": { + "vector": [1.93, 0, 0] + }, + "1.6667": { + "vector": [2.04, 0, 0] + }, + "1.7083": { + "vector": [2.14, 0, 0] + }, + "1.75": { + "vector": [2.23, 0, 0] + }, + "1.7917": { + "vector": [2.31, 0, 0] + }, + "1.8333": { + "vector": [2.37, 0, 0] + }, + "1.875": { + "vector": [2.43, 0, 0] + }, + "1.9167": { + "vector": [2.47, 0, 0] + }, + "1.9583": { + "vector": [2.49, 0, 0] + }, + "2.0": { + "vector": [2.5, 0, 0] + }, + "2.0417": { + "vector": [2.49, 0, 0] + }, + "2.0833": { + "vector": [2.47, 0, 0] + }, + "2.125": { + "vector": [2.43, 0, 0] + }, + "2.1667": { + "vector": [2.37, 0, 0] + }, + "2.2083": { + "vector": [2.31, 0, 0] + }, + "2.25": { + "vector": [2.23, 0, 0] + }, + "2.2917": { + "vector": [2.14, 0, 0] + }, + "2.3333": { + "vector": [2.04, 0, 0] + }, + "2.375": { + "vector": [1.93, 0, 0] + }, + "2.4167": { + "vector": [1.81, 0, 0] + }, + "2.4583": { + "vector": [1.69, 0, 0] + }, + "2.5": { + "vector": [1.56, 0, 0] + }, + "2.5417": { + "vector": [1.43, 0, 0] + }, + "2.5833": { + "vector": [1.29, 0, 0] + }, + "2.625": { + "vector": [1.16, 0, 0] + }, + "2.6667": { + "vector": [1.02, 0, 0] + }, + "2.7083": { + "vector": [0.88, 0, 0] + }, + "2.75": { + "vector": [0.74, 0, 0] + }, + "2.7917": { + "vector": [0.61, 0, 0] + }, + "2.8333": { + "vector": [0.47, 0, 0] + }, + "2.875": { + "vector": [0.35, 0, 0] + }, + "2.9167": { + "vector": [0.22, 0, 0] + }, + "2.9583": { + "vector": [0.11, 0, 0] + }, + "3.0": { + "vector": [0, 0, 0] + }, + "3.0417": { + "vector": [-0.11, 0, 0] + }, + "3.0833": { + "vector": [-0.22, 0, 0] + }, + "3.125": { + "vector": [-0.35, 0, 0] + }, + "3.1667": { + "vector": [-0.47, 0, 0] + }, + "3.2083": { + "vector": [-0.61, 0, 0] + }, + "3.25": { + "vector": [-0.74, 0, 0] + }, + "3.2917": { + "vector": [-0.88, 0, 0] + }, + "3.3333": { + "vector": [-1.02, 0, 0] + }, + "3.375": { + "vector": [-1.16, 0, 0] + }, + "3.4167": { + "vector": [-1.29, 0, 0] + }, + "3.4583": { + "vector": [-1.43, 0, 0] + }, + "3.5": { + "vector": [-1.56, 0, 0] + }, + "3.5417": { + "vector": [-1.69, 0, 0] + }, + "3.5833": { + "vector": [-1.81, 0, 0] + }, + "3.625": { + "vector": [-1.93, 0, 0] + }, + "3.6667": { + "vector": [-2.04, 0, 0] + }, + "3.7083": { + "vector": [-2.14, 0, 0] + }, + "3.75": { + "vector": [-2.23, 0, 0] + }, + "3.7917": { + "vector": [-2.31, 0, 0] + }, + "3.8333": { + "vector": [-2.37, 0, 0] + }, + "3.875": { + "vector": [-2.43, 0, 0] + }, + "3.9167": { + "vector": [-2.47, 0, 0] + }, + "3.9583": { + "vector": [-2.49, 0, 0] + }, + "4.0": { + "vector": [-2.5, 0, 0] + } + } + }, + "leftFrontThigh": { + "rotation": { + "0.0": { + "vector": [9.57, 11.6, 44.98] + }, + "0.0417": { + "vector": [9.58, 11.65, 45.01] + }, + "0.0833": { + "vector": [9.59, 11.68, 45.09] + }, + "0.125": { + "vector": [9.62, 11.7, 45.22] + }, + "0.1667": { + "vector": [9.65, 11.71, 45.38] + }, + "0.2083": { + "vector": [9.69, 11.71, 45.58] + }, + "0.25": { + "vector": [9.73, 11.7, 45.8] + }, + "0.2917": { + "vector": [9.78, 11.68, 46.05] + }, + "0.3333": { + "vector": [9.83, 11.65, 46.33] + }, + "0.375": { + "vector": [9.89, 11.62, 46.62] + }, + "0.4167": { + "vector": [9.95, 11.57, 46.92] + }, + "0.4583": { + "vector": [10.01, 11.53, 47.23] + }, + "0.5": { + "vector": [10.07, 11.47, 47.54] + }, + "0.5417": { + "vector": [10.13, 11.42, 47.85] + }, + "0.5833": { + "vector": [10.19, 11.36, 48.16] + }, + "0.625": { + "vector": [10.25, 11.3, 48.46] + }, + "0.6667": { + "vector": [10.3, 11.23, 48.74] + }, + "0.7083": { + "vector": [10.35, 11.16, 49.01] + }, + "0.75": { + "vector": [10.4, 11.1, 49.25] + }, + "0.7917": { + "vector": [10.44, 11.03, 49.47] + }, + "0.8333": { + "vector": [10.48, 10.97, 49.65] + }, + "0.875": { + "vector": [10.51, 10.9, 49.8] + }, + "0.9167": { + "vector": [10.53, 10.84, 49.91] + }, + "0.9583": { + "vector": [10.54, 10.78, 49.98] + }, + "1.0": { + "vector": [10.54, 10.73, 49.99] + }, + "1.0417": { + "vector": [10.54, 10.68, 49.96] + }, + "1.0833": { + "vector": [10.52, 10.62, 49.87] + }, + "1.125": { + "vector": [10.5, 10.56, 49.74] + }, + "1.1667": { + "vector": [10.46, 10.5, 49.57] + }, + "1.2083": { + "vector": [10.42, 10.43, 49.36] + }, + "1.25": { + "vector": [10.38, 10.37, 49.12] + }, + "1.2917": { + "vector": [10.33, 10.3, 48.86] + }, + "1.3333": { + "vector": [10.27, 10.23, 48.57] + }, + "1.375": { + "vector": [10.21, 10.15, 48.26] + }, + "1.4167": { + "vector": [10.15, 10.08, 47.94] + }, + "1.4583": { + "vector": [10.08, 10.01, 47.61] + }, + "1.5": { + "vector": [10.02, 9.93, 47.28] + }, + "1.5417": { + "vector": [9.96, 9.86, 46.94] + }, + "1.5833": { + "vector": [9.89, 9.79, 46.61] + }, + "1.625": { + "vector": [9.83, 9.71, 46.29] + }, + "1.6667": { + "vector": [9.77, 9.64, 45.98] + }, + "1.7083": { + "vector": [9.71, 9.57, 45.69] + }, + "1.75": { + "vector": [9.66, 9.5, 45.43] + }, + "1.7917": { + "vector": [9.62, 9.43, 45.19] + }, + "1.8333": { + "vector": [9.58, 9.37, 44.98] + }, + "1.875": { + "vector": [9.54, 9.31, 44.81] + }, + "1.9167": { + "vector": [9.52, 9.25, 44.68] + }, + "1.9583": { + "vector": [9.5, 9.19, 44.59] + }, + "2.0": { + "vector": [9.5, 9.14, 44.55] + }, + "2.0417": { + "vector": [9.5, 9.08, 44.57] + }, + "2.0833": { + "vector": [9.51, 9.03, 44.63] + }, + "2.125": { + "vector": [9.53, 8.97, 44.74] + }, + "2.1667": { + "vector": [9.56, 8.9, 44.89] + }, + "2.2083": { + "vector": [9.6, 8.84, 45.07] + }, + "2.25": { + "vector": [9.64, 8.77, 45.29] + }, + "2.2917": { + "vector": [9.69, 8.71, 45.53] + }, + "2.3333": { + "vector": [9.74, 8.64, 45.79] + }, + "2.375": { + "vector": [9.79, 8.58, 46.08] + }, + "2.4167": { + "vector": [9.85, 8.51, 46.37] + }, + "2.4583": { + "vector": [9.91, 8.45, 46.68] + }, + "2.5": { + "vector": [9.97, 8.4, 46.99] + }, + "2.5417": { + "vector": [10.03, 8.35, 47.3] + }, + "2.5833": { + "vector": [10.09, 8.3, 47.61] + }, + "2.625": { + "vector": [10.15, 8.26, 47.91] + }, + "2.6667": { + "vector": [10.21, 8.22, 48.19] + }, + "2.7083": { + "vector": [10.26, 8.2, 48.46] + }, + "2.75": { + "vector": [10.31, 8.18, 48.71] + }, + "2.7917": { + "vector": [10.35, 8.17, 48.94] + }, + "2.8333": { + "vector": [10.39, 8.16, 49.13] + }, + "2.875": { + "vector": [10.42, 8.17, 49.29] + }, + "2.9167": { + "vector": [10.45, 8.19, 49.42] + }, + "2.9583": { + "vector": [10.46, 8.23, 49.5] + }, + "3.0": { + "vector": [10.47, 8.27, 49.53] + }, + "3.0417": { + "vector": [10.46, 8.33, 49.52] + }, + "3.0833": { + "vector": [10.45, 8.42, 49.45] + }, + "3.125": { + "vector": [10.43, 8.52, 49.35] + }, + "3.1667": { + "vector": [10.4, 8.63, 49.21] + }, + "3.2083": { + "vector": [10.37, 8.76, 49.04] + }, + "3.25": { + "vector": [10.33, 8.91, 48.84] + }, + "3.2917": { + "vector": [10.29, 9.06, 48.61] + }, + "3.3333": { + "vector": [10.24, 9.23, 48.36] + }, + "3.375": { + "vector": [10.19, 9.4, 48.1] + }, + "3.4167": { + "vector": [10.13, 9.58, 47.82] + }, + "3.4583": { + "vector": [10.08, 9.76, 47.54] + }, + "3.5": { + "vector": [10.02, 9.94, 47.25] + }, + "3.5417": { + "vector": [9.96, 10.12, 46.96] + }, + "3.5833": { + "vector": [9.91, 10.3, 46.68] + }, + "3.625": { + "vector": [9.85, 10.48, 46.4] + }, + "3.6667": { + "vector": [9.8, 10.65, 46.14] + }, + "3.7083": { + "vector": [9.75, 10.81, 45.89] + }, + "3.75": { + "vector": [9.71, 10.97, 45.66] + }, + "3.7917": { + "vector": [9.67, 11.11, 45.46] + }, + "3.8333": { + "vector": [9.63, 11.24, 45.29] + }, + "3.875": { + "vector": [9.61, 11.36, 45.15] + }, + "3.9167": { + "vector": [9.59, 11.46, 45.05] + }, + "3.9583": { + "vector": [9.57, 11.54, 44.99] + }, + "4.0": { + "vector": [9.57, 11.6, 44.98] + } + } + }, + "leftFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -30] + }, + "0.0417": { + "vector": [0, 0, -30.01] + }, + "0.0833": { + "vector": [0, 0, -30.05] + }, + "0.125": { + "vector": [0, 0, -30.11] + }, + "0.1667": { + "vector": [0, 0, -30.19] + }, + "0.2083": { + "vector": [0, 0, -30.28] + }, + "0.25": { + "vector": [0, 0, -30.39] + }, + "0.2917": { + "vector": [0, 0, -30.51] + }, + "0.3333": { + "vector": [0, 0, -30.65] + }, + "0.375": { + "vector": [0, 0, -30.79] + }, + "0.4167": { + "vector": [0, 0, -30.94] + }, + "0.4583": { + "vector": [0, 0, -31.09] + }, + "0.5": { + "vector": [0, 0, -31.25] + }, + "0.5417": { + "vector": [0, 0, -31.41] + }, + "0.5833": { + "vector": [0, 0, -31.56] + }, + "0.625": { + "vector": [0, 0, -31.71] + }, + "0.6667": { + "vector": [0, 0, -31.85] + }, + "0.7083": { + "vector": [0, 0, -31.99] + }, + "0.75": { + "vector": [0, 0, -32.11] + }, + "0.7917": { + "vector": [0, 0, -32.22] + }, + "0.8333": { + "vector": [0, 0, -32.31] + }, + "0.875": { + "vector": [0, 0, -32.39] + }, + "0.9167": { + "vector": [0, 0, -32.45] + }, + "0.9583": { + "vector": [0, 0, -32.49] + }, + "1.0": { + "vector": [0, 0, -32.5] + }, + "1.0417": { + "vector": [0, 0, -32.49] + }, + "1.0833": { + "vector": [0, 0, -32.45] + }, + "1.125": { + "vector": [0, 0, -32.39] + }, + "1.1667": { + "vector": [0, 0, -32.31] + }, + "1.2083": { + "vector": [0, 0, -32.22] + }, + "1.25": { + "vector": [0, 0, -32.11] + }, + "1.2917": { + "vector": [0, 0, -31.99] + }, + "1.3333": { + "vector": [0, 0, -31.85] + }, + "1.375": { + "vector": [0, 0, -31.71] + }, + "1.4167": { + "vector": [0, 0, -31.56] + }, + "1.4583": { + "vector": [0, 0, -31.41] + }, + "1.5": { + "vector": [0, 0, -31.25] + }, + "1.5417": { + "vector": [0, 0, -31.09] + }, + "1.5833": { + "vector": [0, 0, -30.94] + }, + "1.625": { + "vector": [0, 0, -30.79] + }, + "1.6667": { + "vector": [0, 0, -30.65] + }, + "1.7083": { + "vector": [0, 0, -30.51] + }, + "1.75": { + "vector": [0, 0, -30.39] + }, + "1.7917": { + "vector": [0, 0, -30.28] + }, + "1.8333": { + "vector": [0, 0, -30.19] + }, + "1.875": { + "vector": [0, 0, -30.11] + }, + "1.9167": { + "vector": [0, 0, -30.05] + }, + "1.9583": { + "vector": [0, 0, -30.01] + }, + "2.0": { + "vector": [0, 0, -30] + }, + "2.0417": { + "vector": [0, 0, -30.01] + }, + "2.0833": { + "vector": [0, 0, -30.05] + }, + "2.125": { + "vector": [0, 0, -30.11] + }, + "2.1667": { + "vector": [0, 0, -30.19] + }, + "2.2083": { + "vector": [0, 0, -30.28] + }, + "2.25": { + "vector": [0, 0, -30.39] + }, + "2.2917": { + "vector": [0, 0, -30.51] + }, + "2.3333": { + "vector": [0, 0, -30.65] + }, + "2.375": { + "vector": [0, 0, -30.79] + }, + "2.4167": { + "vector": [0, 0, -30.94] + }, + "2.4583": { + "vector": [0, 0, -31.09] + }, + "2.5": { + "vector": [0, 0, -31.25] + }, + "2.5417": { + "vector": [0, 0, -31.41] + }, + "2.5833": { + "vector": [0, 0, -31.56] + }, + "2.625": { + "vector": [0, 0, -31.71] + }, + "2.6667": { + "vector": [0, 0, -31.85] + }, + "2.7083": { + "vector": [0, 0, -31.99] + }, + "2.75": { + "vector": [0, 0, -32.11] + }, + "2.7917": { + "vector": [0, 0, -32.22] + }, + "2.8333": { + "vector": [0, 0, -32.31] + }, + "2.875": { + "vector": [0, 0, -32.39] + }, + "2.9167": { + "vector": [0, 0, -32.45] + }, + "2.9583": { + "vector": [0, 0, -32.49] + }, + "3.0": { + "vector": [0, 0, -32.5] + }, + "3.0417": { + "vector": [0, 0, -32.49] + }, + "3.0833": { + "vector": [0, 0, -32.45] + }, + "3.125": { + "vector": [0, 0, -32.39] + }, + "3.1667": { + "vector": [0, 0, -32.31] + }, + "3.2083": { + "vector": [0, 0, -32.22] + }, + "3.25": { + "vector": [0, 0, -32.11] + }, + "3.2917": { + "vector": [0, 0, -31.99] + }, + "3.3333": { + "vector": [0, 0, -31.85] + }, + "3.375": { + "vector": [0, 0, -31.71] + }, + "3.4167": { + "vector": [0, 0, -31.56] + }, + "3.4583": { + "vector": [0, 0, -31.41] + }, + "3.5": { + "vector": [0, 0, -31.25] + }, + "3.5417": { + "vector": [0, 0, -31.09] + }, + "3.5833": { + "vector": [0, 0, -30.94] + }, + "3.625": { + "vector": [0, 0, -30.79] + }, + "3.6667": { + "vector": [0, 0, -30.65] + }, + "3.7083": { + "vector": [0, 0, -30.51] + }, + "3.75": { + "vector": [0, 0, -30.39] + }, + "3.7917": { + "vector": [0, 0, -30.28] + }, + "3.8333": { + "vector": [0, 0, -30.19] + }, + "3.875": { + "vector": [0, 0, -30.11] + }, + "3.9167": { + "vector": [0, 0, -30.05] + }, + "3.9583": { + "vector": [0, 0, -30.01] + }, + "4.0": { + "vector": [0, 0, -30] + } + } + }, + "topHeadClawThing": { + "rotation": { + "0.0": { + "vector": [50, 0, 0] + }, + "0.0417": { + "vector": [49.99, 0, 0] + }, + "0.0833": { + "vector": [49.95, 0, 0] + }, + "0.125": { + "vector": [49.89, 0, 0] + }, + "0.1667": { + "vector": [49.8, 0, 0] + }, + "0.2083": { + "vector": [49.7, 0, 0] + }, + "0.25": { + "vector": [49.57, 0, 0] + }, + "0.2917": { + "vector": [49.42, 0, 0] + }, + "0.3333": { + "vector": [49.26, 0, 0] + }, + "0.375": { + "vector": [49.08, 0, 0] + }, + "0.4167": { + "vector": [48.88, 0, 0] + }, + "0.4583": { + "vector": [48.67, 0, 0] + }, + "0.5": { + "vector": [48.44, 0, 0] + }, + "0.5417": { + "vector": [48.2, 0, 0] + }, + "0.5833": { + "vector": [47.94, 0, 0] + }, + "0.625": { + "vector": [47.68, 0, 0] + }, + "0.6667": { + "vector": [47.41, 0, 0] + }, + "0.7083": { + "vector": [47.13, 0, 0] + }, + "0.75": { + "vector": [46.84, 0, 0] + }, + "0.7917": { + "vector": [46.54, 0, 0] + }, + "0.8333": { + "vector": [46.24, 0, 0] + }, + "0.875": { + "vector": [45.93, 0, 0] + }, + "0.9167": { + "vector": [45.62, 0, 0] + }, + "0.9583": { + "vector": [45.31, 0, 0] + }, + "1.0": { + "vector": [45, 0, 0] + }, + "1.0417": { + "vector": [44.69, 0, 0] + }, + "1.0833": { + "vector": [44.38, 0, 0] + }, + "1.125": { + "vector": [44.07, 0, 0] + }, + "1.1667": { + "vector": [43.76, 0, 0] + }, + "1.2083": { + "vector": [43.46, 0, 0] + }, + "1.25": { + "vector": [43.16, 0, 0] + }, + "1.2917": { + "vector": [42.87, 0, 0] + }, + "1.3333": { + "vector": [42.59, 0, 0] + }, + "1.375": { + "vector": [42.32, 0, 0] + }, + "1.4167": { + "vector": [42.06, 0, 0] + }, + "1.4583": { + "vector": [41.8, 0, 0] + }, + "1.5": { + "vector": [41.56, 0, 0] + }, + "1.5417": { + "vector": [41.33, 0, 0] + }, + "1.5833": { + "vector": [41.12, 0, 0] + }, + "1.625": { + "vector": [40.92, 0, 0] + }, + "1.6667": { + "vector": [40.74, 0, 0] + }, + "1.7083": { + "vector": [40.58, 0, 0] + }, + "1.75": { + "vector": [40.43, 0, 0] + }, + "1.7917": { + "vector": [40.3, 0, 0] + }, + "1.8333": { + "vector": [40.2, 0, 0] + }, + "1.875": { + "vector": [40.11, 0, 0] + }, + "1.9167": { + "vector": [40.05, 0, 0] + }, + "1.9583": { + "vector": [40.01, 0, 0] + }, + "2.0": { + "vector": [40, 0, 0] + }, + "2.0417": { + "vector": [40.01, 0, 0] + }, + "2.0833": { + "vector": [40.05, 0, 0] + }, + "2.125": { + "vector": [40.11, 0, 0] + }, + "2.1667": { + "vector": [40.2, 0, 0] + }, + "2.2083": { + "vector": [40.3, 0, 0] + }, + "2.25": { + "vector": [40.43, 0, 0] + }, + "2.2917": { + "vector": [40.58, 0, 0] + }, + "2.3333": { + "vector": [40.74, 0, 0] + }, + "2.375": { + "vector": [40.92, 0, 0] + }, + "2.4167": { + "vector": [41.12, 0, 0] + }, + "2.4583": { + "vector": [41.33, 0, 0] + }, + "2.5": { + "vector": [41.56, 0, 0] + }, + "2.5417": { + "vector": [41.8, 0, 0] + }, + "2.5833": { + "vector": [42.06, 0, 0] + }, + "2.625": { + "vector": [42.32, 0, 0] + }, + "2.6667": { + "vector": [42.59, 0, 0] + }, + "2.7083": { + "vector": [42.87, 0, 0] + }, + "2.75": { + "vector": [43.16, 0, 0] + }, + "2.7917": { + "vector": [43.46, 0, 0] + }, + "2.8333": { + "vector": [43.76, 0, 0] + }, + "2.875": { + "vector": [44.07, 0, 0] + }, + "2.9167": { + "vector": [44.38, 0, 0] + }, + "2.9583": { + "vector": [44.69, 0, 0] + }, + "3.0": { + "vector": [45, 0, 0] + }, + "3.0417": { + "vector": [45.31, 0, 0] + }, + "3.0833": { + "vector": [45.62, 0, 0] + }, + "3.125": { + "vector": [45.93, 0, 0] + }, + "3.1667": { + "vector": [46.24, 0, 0] + }, + "3.2083": { + "vector": [46.54, 0, 0] + }, + "3.25": { + "vector": [46.84, 0, 0] + }, + "3.2917": { + "vector": [47.13, 0, 0] + }, + "3.3333": { + "vector": [47.41, 0, 0] + }, + "3.375": { + "vector": [47.68, 0, 0] + }, + "3.4167": { + "vector": [47.94, 0, 0] + }, + "3.4583": { + "vector": [48.2, 0, 0] + }, + "3.5": { + "vector": [48.44, 0, 0] + }, + "3.5417": { + "vector": [48.67, 0, 0] + }, + "3.5833": { + "vector": [48.88, 0, 0] + }, + "3.625": { + "vector": [49.08, 0, 0] + }, + "3.6667": { + "vector": [49.26, 0, 0] + }, + "3.7083": { + "vector": [49.42, 0, 0] + }, + "3.75": { + "vector": [49.57, 0, 0] + }, + "3.7917": { + "vector": [49.7, 0, 0] + }, + "3.8333": { + "vector": [49.8, 0, 0] + }, + "3.875": { + "vector": [49.89, 0, 0] + }, + "3.9167": { + "vector": [49.95, 0, 0] + }, + "3.9583": { + "vector": [49.99, 0, 0] + }, + "4.0": { + "vector": [50, 0, 0] + } + } + }, + "rightFrontThigh": { + "rotation": { + "0.0": { + "vector": [9.57, -11.6, -44.97] + }, + "0.0417": { + "vector": [9.58, -11.65, -45.01] + }, + "0.0833": { + "vector": [9.59, -11.68, -45.09] + }, + "0.125": { + "vector": [9.62, -11.7, -45.22] + }, + "0.1667": { + "vector": [9.65, -11.71, -45.38] + }, + "0.2083": { + "vector": [9.69, -11.71, -45.58] + }, + "0.25": { + "vector": [9.73, -11.7, -45.8] + }, + "0.2917": { + "vector": [9.78, -11.68, -46.05] + }, + "0.3333": { + "vector": [9.83, -11.65, -46.33] + }, + "0.375": { + "vector": [9.89, -11.62, -46.62] + }, + "0.4167": { + "vector": [9.95, -11.57, -46.92] + }, + "0.4583": { + "vector": [10.01, -11.53, -47.23] + }, + "0.5": { + "vector": [10.07, -11.47, -47.54] + }, + "0.5417": { + "vector": [10.13, -11.42, -47.85] + }, + "0.5833": { + "vector": [10.19, -11.36, -48.16] + }, + "0.625": { + "vector": [10.25, -11.3, -48.46] + }, + "0.6667": { + "vector": [10.3, -11.23, -48.74] + }, + "0.7083": { + "vector": [10.35, -11.16, -49.01] + }, + "0.75": { + "vector": [10.4, -11.1, -49.25] + }, + "0.7917": { + "vector": [10.44, -11.03, -49.47] + }, + "0.8333": { + "vector": [10.48, -10.97, -49.65] + }, + "0.875": { + "vector": [10.51, -10.9, -49.8] + }, + "0.9167": { + "vector": [10.53, -10.84, -49.91] + }, + "0.9583": { + "vector": [10.54, -10.78, -49.98] + }, + "1.0": { + "vector": [10.54, -10.73, -49.99] + }, + "1.0417": { + "vector": [10.54, -10.68, -49.96] + }, + "1.0833": { + "vector": [10.52, -10.62, -49.87] + }, + "1.125": { + "vector": [10.5, -10.56, -49.74] + }, + "1.1667": { + "vector": [10.46, -10.5, -49.57] + }, + "1.2083": { + "vector": [10.42, -10.43, -49.36] + }, + "1.25": { + "vector": [10.38, -10.37, -49.12] + }, + "1.2917": { + "vector": [10.33, -10.3, -48.86] + }, + "1.3333": { + "vector": [10.27, -10.23, -48.57] + }, + "1.375": { + "vector": [10.21, -10.15, -48.26] + }, + "1.4167": { + "vector": [10.15, -10.08, -47.94] + }, + "1.4583": { + "vector": [10.08, -10.01, -47.61] + }, + "1.5": { + "vector": [10.02, -9.93, -47.28] + }, + "1.5417": { + "vector": [9.96, -9.86, -46.94] + }, + "1.5833": { + "vector": [9.89, -9.79, -46.61] + }, + "1.625": { + "vector": [9.83, -9.71, -46.29] + }, + "1.6667": { + "vector": [9.77, -9.64, -45.98] + }, + "1.7083": { + "vector": [9.71, -9.57, -45.69] + }, + "1.75": { + "vector": [9.66, -9.5, -45.43] + }, + "1.7917": { + "vector": [9.62, -9.43, -45.19] + }, + "1.8333": { + "vector": [9.58, -9.37, -44.98] + }, + "1.875": { + "vector": [9.54, -9.31, -44.81] + }, + "1.9167": { + "vector": [9.52, -9.25, -44.68] + }, + "1.9583": { + "vector": [9.5, -9.19, -44.59] + }, + "2.0": { + "vector": [9.5, -9.14, -44.55] + }, + "2.0417": { + "vector": [9.5, -9.08, -44.57] + }, + "2.0833": { + "vector": [9.51, -9.03, -44.63] + }, + "2.125": { + "vector": [9.53, -8.97, -44.74] + }, + "2.1667": { + "vector": [9.56, -8.9, -44.89] + }, + "2.2083": { + "vector": [9.6, -8.84, -45.07] + }, + "2.25": { + "vector": [9.64, -8.77, -45.29] + }, + "2.2917": { + "vector": [9.69, -8.71, -45.53] + }, + "2.3333": { + "vector": [9.74, -8.64, -45.79] + }, + "2.375": { + "vector": [9.79, -8.58, -46.08] + }, + "2.4167": { + "vector": [9.85, -8.51, -46.37] + }, + "2.4583": { + "vector": [9.91, -8.45, -46.68] + }, + "2.5": { + "vector": [9.97, -8.4, -46.99] + }, + "2.5417": { + "vector": [10.03, -8.35, -47.3] + }, + "2.5833": { + "vector": [10.09, -8.3, -47.61] + }, + "2.625": { + "vector": [10.15, -8.26, -47.91] + }, + "2.6667": { + "vector": [10.21, -8.22, -48.19] + }, + "2.7083": { + "vector": [10.26, -8.2, -48.46] + }, + "2.75": { + "vector": [10.31, -8.18, -48.71] + }, + "2.7917": { + "vector": [10.35, -8.17, -48.94] + }, + "2.8333": { + "vector": [10.39, -8.16, -49.13] + }, + "2.875": { + "vector": [10.42, -8.17, -49.29] + }, + "2.9167": { + "vector": [10.45, -8.19, -49.42] + }, + "2.9583": { + "vector": [10.46, -8.23, -49.5] + }, + "3.0": { + "vector": [10.47, -8.27, -49.53] + }, + "3.0417": { + "vector": [10.46, -8.33, -49.52] + }, + "3.0833": { + "vector": [10.45, -8.42, -49.45] + }, + "3.125": { + "vector": [10.43, -8.52, -49.35] + }, + "3.1667": { + "vector": [10.4, -8.63, -49.21] + }, + "3.2083": { + "vector": [10.37, -8.76, -49.04] + }, + "3.25": { + "vector": [10.33, -8.91, -48.84] + }, + "3.2917": { + "vector": [10.29, -9.06, -48.61] + }, + "3.3333": { + "vector": [10.24, -9.23, -48.36] + }, + "3.375": { + "vector": [10.19, -9.4, -48.1] + }, + "3.4167": { + "vector": [10.13, -9.58, -47.82] + }, + "3.4583": { + "vector": [10.08, -9.76, -47.54] + }, + "3.5": { + "vector": [10.02, -9.94, -47.25] + }, + "3.5417": { + "vector": [9.96, -10.12, -46.96] + }, + "3.5833": { + "vector": [9.91, -10.3, -46.68] + }, + "3.625": { + "vector": [9.85, -10.48, -46.4] + }, + "3.6667": { + "vector": [9.8, -10.65, -46.14] + }, + "3.7083": { + "vector": [9.75, -10.81, -45.89] + }, + "3.75": { + "vector": [9.71, -10.97, -45.66] + }, + "3.7917": { + "vector": [9.67, -11.11, -45.46] + }, + "3.8333": { + "vector": [9.63, -11.24, -45.29] + }, + "3.875": { + "vector": [9.61, -11.36, -45.15] + }, + "3.9167": { + "vector": [9.59, -11.46, -45.05] + }, + "3.9583": { + "vector": [9.57, -11.54, -44.99] + }, + "4.0": { + "vector": [9.57, -11.6, -44.97] + } + } + }, + "rightFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 30] + }, + "0.0417": { + "vector": [0, 0, 30.01] + }, + "0.0833": { + "vector": [0, 0, 30.05] + }, + "0.125": { + "vector": [0, 0, 30.11] + }, + "0.1667": { + "vector": [0, 0, 30.19] + }, + "0.2083": { + "vector": [0, 0, 30.28] + }, + "0.25": { + "vector": [0, 0, 30.39] + }, + "0.2917": { + "vector": [0, 0, 30.51] + }, + "0.3333": { + "vector": [0, 0, 30.65] + }, + "0.375": { + "vector": [0, 0, 30.79] + }, + "0.4167": { + "vector": [0, 0, 30.94] + }, + "0.4583": { + "vector": [0, 0, 31.09] + }, + "0.5": { + "vector": [0, 0, 31.25] + }, + "0.5417": { + "vector": [0, 0, 31.41] + }, + "0.5833": { + "vector": [0, 0, 31.56] + }, + "0.625": { + "vector": [0, 0, 31.71] + }, + "0.6667": { + "vector": [0, 0, 31.85] + }, + "0.7083": { + "vector": [0, 0, 31.99] + }, + "0.75": { + "vector": [0, 0, 32.11] + }, + "0.7917": { + "vector": [0, 0, 32.22] + }, + "0.8333": { + "vector": [0, 0, 32.31] + }, + "0.875": { + "vector": [0, 0, 32.39] + }, + "0.9167": { + "vector": [0, 0, 32.45] + }, + "0.9583": { + "vector": [0, 0, 32.49] + }, + "1.0": { + "vector": [0, 0, 32.5] + }, + "1.0417": { + "vector": [0, 0, 32.49] + }, + "1.0833": { + "vector": [0, 0, 32.45] + }, + "1.125": { + "vector": [0, 0, 32.39] + }, + "1.1667": { + "vector": [0, 0, 32.31] + }, + "1.2083": { + "vector": [0, 0, 32.22] + }, + "1.25": { + "vector": [0, 0, 32.11] + }, + "1.2917": { + "vector": [0, 0, 31.99] + }, + "1.3333": { + "vector": [0, 0, 31.85] + }, + "1.375": { + "vector": [0, 0, 31.71] + }, + "1.4167": { + "vector": [0, 0, 31.56] + }, + "1.4583": { + "vector": [0, 0, 31.41] + }, + "1.5": { + "vector": [0, 0, 31.25] + }, + "1.5417": { + "vector": [0, 0, 31.09] + }, + "1.5833": { + "vector": [0, 0, 30.94] + }, + "1.625": { + "vector": [0, 0, 30.79] + }, + "1.6667": { + "vector": [0, 0, 30.65] + }, + "1.7083": { + "vector": [0, 0, 30.51] + }, + "1.75": { + "vector": [0, 0, 30.39] + }, + "1.7917": { + "vector": [0, 0, 30.28] + }, + "1.8333": { + "vector": [0, 0, 30.19] + }, + "1.875": { + "vector": [0, 0, 30.11] + }, + "1.9167": { + "vector": [0, 0, 30.05] + }, + "1.9583": { + "vector": [0, 0, 30.01] + }, + "2.0": { + "vector": [0, 0, 30] + }, + "2.0417": { + "vector": [0, 0, 30.01] + }, + "2.0833": { + "vector": [0, 0, 30.05] + }, + "2.125": { + "vector": [0, 0, 30.11] + }, + "2.1667": { + "vector": [0, 0, 30.19] + }, + "2.2083": { + "vector": [0, 0, 30.28] + }, + "2.25": { + "vector": [0, 0, 30.39] + }, + "2.2917": { + "vector": [0, 0, 30.51] + }, + "2.3333": { + "vector": [0, 0, 30.65] + }, + "2.375": { + "vector": [0, 0, 30.79] + }, + "2.4167": { + "vector": [0, 0, 30.94] + }, + "2.4583": { + "vector": [0, 0, 31.09] + }, + "2.5": { + "vector": [0, 0, 31.25] + }, + "2.5417": { + "vector": [0, 0, 31.41] + }, + "2.5833": { + "vector": [0, 0, 31.56] + }, + "2.625": { + "vector": [0, 0, 31.71] + }, + "2.6667": { + "vector": [0, 0, 31.85] + }, + "2.7083": { + "vector": [0, 0, 31.99] + }, + "2.75": { + "vector": [0, 0, 32.11] + }, + "2.7917": { + "vector": [0, 0, 32.22] + }, + "2.8333": { + "vector": [0, 0, 32.31] + }, + "2.875": { + "vector": [0, 0, 32.39] + }, + "2.9167": { + "vector": [0, 0, 32.45] + }, + "2.9583": { + "vector": [0, 0, 32.49] + }, + "3.0": { + "vector": [0, 0, 32.5] + }, + "3.0417": { + "vector": [0, 0, 32.49] + }, + "3.0833": { + "vector": [0, 0, 32.45] + }, + "3.125": { + "vector": [0, 0, 32.39] + }, + "3.1667": { + "vector": [0, 0, 32.31] + }, + "3.2083": { + "vector": [0, 0, 32.22] + }, + "3.25": { + "vector": [0, 0, 32.11] + }, + "3.2917": { + "vector": [0, 0, 31.99] + }, + "3.3333": { + "vector": [0, 0, 31.85] + }, + "3.375": { + "vector": [0, 0, 31.71] + }, + "3.4167": { + "vector": [0, 0, 31.56] + }, + "3.4583": { + "vector": [0, 0, 31.41] + }, + "3.5": { + "vector": [0, 0, 31.25] + }, + "3.5417": { + "vector": [0, 0, 31.09] + }, + "3.5833": { + "vector": [0, 0, 30.94] + }, + "3.625": { + "vector": [0, 0, 30.79] + }, + "3.6667": { + "vector": [0, 0, 30.65] + }, + "3.7083": { + "vector": [0, 0, 30.51] + }, + "3.75": { + "vector": [0, 0, 30.39] + }, + "3.7917": { + "vector": [0, 0, 30.28] + }, + "3.8333": { + "vector": [0, 0, 30.19] + }, + "3.875": { + "vector": [0, 0, 30.11] + }, + "3.9167": { + "vector": [0, 0, 30.05] + }, + "3.9583": { + "vector": [0, 0, 30.01] + }, + "4.0": { + "vector": [0, 0, 30] + } + } + }, + "rightFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, -47.5] + }, + "0.0417": { + "vector": [0, 0, -47.49] + }, + "0.0833": { + "vector": [0, 0, -47.45] + }, + "0.125": { + "vector": [0, 0, -47.39] + }, + "0.1667": { + "vector": [0, 0, -47.31] + }, + "0.2083": { + "vector": [0, 0, -47.22] + }, + "0.25": { + "vector": [0, 0, -47.11] + }, + "0.2917": { + "vector": [0, 0, -46.99] + }, + "0.3333": { + "vector": [0, 0, -46.85] + }, + "0.375": { + "vector": [0, 0, -46.71] + }, + "0.4167": { + "vector": [0, 0, -46.56] + }, + "0.4583": { + "vector": [0, 0, -46.41] + }, + "0.5": { + "vector": [0, 0, -46.25] + }, + "0.5417": { + "vector": [0, 0, -46.09] + }, + "0.5833": { + "vector": [0, 0, -45.94] + }, + "0.625": { + "vector": [0, 0, -45.79] + }, + "0.6667": { + "vector": [0, 0, -45.65] + }, + "0.7083": { + "vector": [0, 0, -45.51] + }, + "0.75": { + "vector": [0, 0, -45.39] + }, + "0.7917": { + "vector": [0, 0, -45.28] + }, + "0.8333": { + "vector": [0, 0, -45.19] + }, + "0.875": { + "vector": [0, 0, -45.11] + }, + "0.9167": { + "vector": [0, 0, -45.05] + }, + "0.9583": { + "vector": [0, 0, -45.01] + }, + "1.0": { + "vector": [0, 0, -45] + }, + "1.0417": { + "vector": [0, 0, -45.01] + }, + "1.0833": { + "vector": [0, 0, -45.05] + }, + "1.125": { + "vector": [0, 0, -45.11] + }, + "1.1667": { + "vector": [0, 0, -45.19] + }, + "1.2083": { + "vector": [0, 0, -45.28] + }, + "1.25": { + "vector": [0, 0, -45.39] + }, + "1.2917": { + "vector": [0, 0, -45.51] + }, + "1.3333": { + "vector": [0, 0, -45.65] + }, + "1.375": { + "vector": [0, 0, -45.79] + }, + "1.4167": { + "vector": [0, 0, -45.94] + }, + "1.4583": { + "vector": [0, 0, -46.09] + }, + "1.5": { + "vector": [0, 0, -46.25] + }, + "1.5417": { + "vector": [0, 0, -46.41] + }, + "1.5833": { + "vector": [0, 0, -46.56] + }, + "1.625": { + "vector": [0, 0, -46.71] + }, + "1.6667": { + "vector": [0, 0, -46.85] + }, + "1.7083": { + "vector": [0, 0, -46.99] + }, + "1.75": { + "vector": [0, 0, -47.11] + }, + "1.7917": { + "vector": [0, 0, -47.22] + }, + "1.8333": { + "vector": [0, 0, -47.31] + }, + "1.875": { + "vector": [0, 0, -47.39] + }, + "1.9167": { + "vector": [0, 0, -47.45] + }, + "1.9583": { + "vector": [0, 0, -47.49] + }, + "2.0": { + "vector": [0, 0, -47.5] + }, + "2.0417": { + "vector": [0, 0, -47.49] + }, + "2.0833": { + "vector": [0, 0, -47.45] + }, + "2.125": { + "vector": [0, 0, -47.39] + }, + "2.1667": { + "vector": [0, 0, -47.31] + }, + "2.2083": { + "vector": [0, 0, -47.22] + }, + "2.25": { + "vector": [0, 0, -47.11] + }, + "2.2917": { + "vector": [0, 0, -46.99] + }, + "2.3333": { + "vector": [0, 0, -46.85] + }, + "2.375": { + "vector": [0, 0, -46.71] + }, + "2.4167": { + "vector": [0, 0, -46.56] + }, + "2.4583": { + "vector": [0, 0, -46.41] + }, + "2.5": { + "vector": [0, 0, -46.25] + }, + "2.5417": { + "vector": [0, 0, -46.09] + }, + "2.5833": { + "vector": [0, 0, -45.94] + }, + "2.625": { + "vector": [0, 0, -45.79] + }, + "2.6667": { + "vector": [0, 0, -45.65] + }, + "2.7083": { + "vector": [0, 0, -45.51] + }, + "2.75": { + "vector": [0, 0, -45.39] + }, + "2.7917": { + "vector": [0, 0, -45.28] + }, + "2.8333": { + "vector": [0, 0, -45.19] + }, + "2.875": { + "vector": [0, 0, -45.11] + }, + "2.9167": { + "vector": [0, 0, -45.05] + }, + "2.9583": { + "vector": [0, 0, -45.01] + }, + "3.0": { + "vector": [0, 0, -45] + }, + "3.0417": { + "vector": [0, 0, -45.01] + }, + "3.0833": { + "vector": [0, 0, -45.05] + }, + "3.125": { + "vector": [0, 0, -45.11] + }, + "3.1667": { + "vector": [0, 0, -45.19] + }, + "3.2083": { + "vector": [0, 0, -45.28] + }, + "3.25": { + "vector": [0, 0, -45.39] + }, + "3.2917": { + "vector": [0, 0, -45.51] + }, + "3.3333": { + "vector": [0, 0, -45.65] + }, + "3.375": { + "vector": [0, 0, -45.79] + }, + "3.4167": { + "vector": [0, 0, -45.94] + }, + "3.4583": { + "vector": [0, 0, -46.09] + }, + "3.5": { + "vector": [0, 0, -46.25] + }, + "3.5417": { + "vector": [0, 0, -46.41] + }, + "3.5833": { + "vector": [0, 0, -46.56] + }, + "3.625": { + "vector": [0, 0, -46.71] + }, + "3.6667": { + "vector": [0, 0, -46.85] + }, + "3.7083": { + "vector": [0, 0, -46.99] + }, + "3.75": { + "vector": [0, 0, -47.11] + }, + "3.7917": { + "vector": [0, 0, -47.22] + }, + "3.8333": { + "vector": [0, 0, -47.31] + }, + "3.875": { + "vector": [0, 0, -47.39] + }, + "3.9167": { + "vector": [0, 0, -47.45] + }, + "3.9583": { + "vector": [0, 0, -47.49] + }, + "4.0": { + "vector": [0, 0, -47.5] + } + } + }, + "rightBackThigh": { + "rotation": { + "0.0": { + "vector": [-14.41, 26.25, -29.69] + }, + "0.0417": { + "vector": [-14.43, 26.22, -29.73] + }, + "0.0833": { + "vector": [-14.5, 26.17, -29.89] + }, + "0.125": { + "vector": [-14.61, 26.11, -30.14] + }, + "0.1667": { + "vector": [-14.76, 26.04, -30.47] + }, + "0.2083": { + "vector": [-14.94, 25.95, -30.88] + }, + "0.25": { + "vector": [-15.15, 25.86, -31.36] + }, + "0.2917": { + "vector": [-15.38, 25.75, -31.9] + }, + "0.3333": { + "vector": [-15.64, 25.64, -32.48] + }, + "0.375": { + "vector": [-15.92, 25.53, -33.11] + }, + "0.4167": { + "vector": [-16.2, 25.41, -33.76] + }, + "0.4583": { + "vector": [-16.5, 25.3, -34.44] + }, + "0.5": { + "vector": [-16.8, 25.18, -35.12] + }, + "0.5417": { + "vector": [-17.1, 25.07, -35.8] + }, + "0.5833": { + "vector": [-17.4, 24.96, -36.48] + }, + "0.625": { + "vector": [-17.69, 24.86, -37.14] + }, + "0.6667": { + "vector": [-17.97, 24.77, -37.77] + }, + "0.7083": { + "vector": [-18.23, 24.68, -38.36] + }, + "0.75": { + "vector": [-18.47, 24.61, -38.91] + }, + "0.7917": { + "vector": [-18.69, 24.55, -39.4] + }, + "0.8333": { + "vector": [-18.87, 24.51, -39.83] + }, + "0.875": { + "vector": [-19.03, 24.49, -40.18] + }, + "0.9167": { + "vector": [-19.15, 24.48, -40.44] + }, + "0.9583": { + "vector": [-19.22, 24.5, -40.62] + }, + "1.0": { + "vector": [-19.25, 24.54, -40.69] + }, + "1.0417": { + "vector": [-19.24, 24.6, -40.65] + }, + "1.0833": { + "vector": [-19.17, 24.7, -40.51] + }, + "1.125": { + "vector": [-19.07, 24.82, -40.28] + }, + "1.1667": { + "vector": [-18.94, 24.97, -39.96] + }, + "1.2083": { + "vector": [-18.77, 25.14, -39.57] + }, + "1.25": { + "vector": [-18.57, 25.33, -39.12] + }, + "1.2917": { + "vector": [-18.34, 25.53, -38.61] + }, + "1.3333": { + "vector": [-18.1, 25.75, -38.06] + }, + "1.375": { + "vector": [-17.84, 25.98, -37.47] + }, + "1.4167": { + "vector": [-17.57, 26.21, -36.85] + }, + "1.4583": { + "vector": [-17.29, 26.45, -36.21] + }, + "1.5": { + "vector": [-17.01, 26.69, -35.56] + }, + "1.5417": { + "vector": [-16.72, 26.93, -34.91] + }, + "1.5833": { + "vector": [-16.44, 27.17, -34.28] + }, + "1.625": { + "vector": [-16.17, 27.4, -33.66] + }, + "1.6667": { + "vector": [-15.91, 27.61, -33.06] + }, + "1.7083": { + "vector": [-15.66, 27.82, -32.51] + }, + "1.75": { + "vector": [-15.44, 28.01, -31.99] + }, + "1.7917": { + "vector": [-15.24, 28.18, -31.54] + }, + "1.8333": { + "vector": [-15.07, 28.33, -31.14] + }, + "1.875": { + "vector": [-14.93, 28.46, -30.82] + }, + "1.9167": { + "vector": [-14.82, 28.56, -30.59] + }, + "1.9583": { + "vector": [-14.76, 28.63, -30.44] + }, + "2.0": { + "vector": [-14.74, 28.67, -30.39] + }, + "2.0417": { + "vector": [-14.76, 28.67, -30.46] + }, + "2.0833": { + "vector": [-14.84, 28.64, -30.62] + }, + "2.125": { + "vector": [-14.95, 28.59, -30.87] + }, + "2.1667": { + "vector": [-15.1, 28.51, -31.21] + }, + "2.2083": { + "vector": [-15.28, 28.41, -31.63] + }, + "2.25": { + "vector": [-15.49, 28.29, -32.1] + }, + "2.2917": { + "vector": [-15.72, 28.15, -32.63] + }, + "2.3333": { + "vector": [-15.97, 28, -33.21] + }, + "2.375": { + "vector": [-16.24, 27.83, -33.82] + }, + "2.4167": { + "vector": [-16.52, 27.66, -34.47] + }, + "2.4583": { + "vector": [-16.81, 27.47, -35.12] + }, + "2.5": { + "vector": [-17.1, 27.28, -35.79] + }, + "2.5417": { + "vector": [-17.39, 27.09, -36.46] + }, + "2.5833": { + "vector": [-17.68, 26.9, -37.11] + }, + "2.625": { + "vector": [-17.96, 26.71, -37.75] + }, + "2.6667": { + "vector": [-18.23, 26.52, -38.35] + }, + "2.7083": { + "vector": [-18.48, 26.34, -38.92] + }, + "2.75": { + "vector": [-18.7, 26.17, -39.44] + }, + "2.7917": { + "vector": [-18.91, 26.01, -39.91] + }, + "2.8333": { + "vector": [-19.08, 25.87, -40.31] + }, + "2.875": { + "vector": [-19.22, 25.74, -40.63] + }, + "2.9167": { + "vector": [-19.33, 25.63, -40.87] + }, + "2.9583": { + "vector": [-19.39, 25.54, -41.01] + }, + "3.0": { + "vector": [-19.41, 25.48, -41.05] + }, + "3.0417": { + "vector": [-19.38, 25.44, -40.98] + }, + "3.0833": { + "vector": [-19.3, 25.41, -40.8] + }, + "3.125": { + "vector": [-19.18, 25.4, -40.53] + }, + "3.1667": { + "vector": [-19.02, 25.41, -40.17] + }, + "3.2083": { + "vector": [-18.83, 25.42, -39.74] + }, + "3.25": { + "vector": [-18.61, 25.45, -39.23] + }, + "3.2917": { + "vector": [-18.36, 25.49, -38.67] + }, + "3.3333": { + "vector": [-18.09, 25.53, -38.07] + }, + "3.375": { + "vector": [-17.81, 25.59, -37.42] + }, + "3.4167": { + "vector": [-17.51, 25.64, -36.74] + }, + "3.4583": { + "vector": [-17.21, 25.71, -36.05] + }, + "3.5": { + "vector": [-16.9, 25.77, -35.35] + }, + "3.5417": { + "vector": [-16.59, 25.84, -34.64] + }, + "3.5833": { + "vector": [-16.28, 25.9, -33.95] + }, + "3.625": { + "vector": [-15.99, 25.97, -33.28] + }, + "3.6667": { + "vector": [-15.71, 26.03, -32.63] + }, + "3.7083": { + "vector": [-15.44, 26.08, -32.03] + }, + "3.75": { + "vector": [-15.19, 26.14, -31.47] + }, + "3.7917": { + "vector": [-14.98, 26.18, -30.97] + }, + "3.8333": { + "vector": [-14.79, 26.22, -30.54] + }, + "3.875": { + "vector": [-14.63, 26.24, -30.19] + }, + "3.9167": { + "vector": [-14.51, 26.26, -29.92] + }, + "3.9583": { + "vector": [-14.44, 26.26, -29.75] + }, + "4.0": { + "vector": [-14.41, 26.25, -29.69] + } + } + }, + "rightBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 7.5] + }, + "0.0417": { + "vector": [0, 0, 7.55] + }, + "0.0833": { + "vector": [0, 0, 7.7] + }, + "0.125": { + "vector": [0, 0, 7.93] + }, + "0.1667": { + "vector": [0, 0, 8.24] + }, + "0.2083": { + "vector": [0, 0, 8.62] + }, + "0.25": { + "vector": [0, 0, 9.06] + }, + "0.2917": { + "vector": [0, 0, 9.56] + }, + "0.3333": { + "vector": [0, 0, 10.09] + }, + "0.375": { + "vector": [0, 0, 10.66] + }, + "0.4167": { + "vector": [0, 0, 11.26] + }, + "0.4583": { + "vector": [0, 0, 11.88] + }, + "0.5": { + "vector": [0, 0, 12.5] + }, + "0.5417": { + "vector": [0, 0, 13.12] + }, + "0.5833": { + "vector": [0, 0, 13.74] + }, + "0.625": { + "vector": [0, 0, 14.34] + }, + "0.6667": { + "vector": [0, 0, 14.91] + }, + "0.7083": { + "vector": [0, 0, 15.44] + }, + "0.75": { + "vector": [0, 0, 15.94] + }, + "0.7917": { + "vector": [0, 0, 16.38] + }, + "0.8333": { + "vector": [0, 0, 16.76] + }, + "0.875": { + "vector": [0, 0, 17.07] + }, + "0.9167": { + "vector": [0, 0, 17.3] + }, + "0.9583": { + "vector": [0, 0, 17.45] + }, + "1.0": { + "vector": [0, 0, 17.5] + }, + "1.0417": { + "vector": [0, 0, 17.45] + }, + "1.0833": { + "vector": [0, 0, 17.3] + }, + "1.125": { + "vector": [0, 0, 17.07] + }, + "1.1667": { + "vector": [0, 0, 16.76] + }, + "1.2083": { + "vector": [0, 0, 16.38] + }, + "1.25": { + "vector": [0, 0, 15.94] + }, + "1.2917": { + "vector": [0, 0, 15.44] + }, + "1.3333": { + "vector": [0, 0, 14.91] + }, + "1.375": { + "vector": [0, 0, 14.34] + }, + "1.4167": { + "vector": [0, 0, 13.74] + }, + "1.4583": { + "vector": [0, 0, 13.12] + }, + "1.5": { + "vector": [0, 0, 12.5] + }, + "1.5417": { + "vector": [0, 0, 11.88] + }, + "1.5833": { + "vector": [0, 0, 11.26] + }, + "1.625": { + "vector": [0, 0, 10.66] + }, + "1.6667": { + "vector": [0, 0, 10.09] + }, + "1.7083": { + "vector": [0, 0, 9.56] + }, + "1.75": { + "vector": [0, 0, 9.06] + }, + "1.7917": { + "vector": [0, 0, 8.62] + }, + "1.8333": { + "vector": [0, 0, 8.24] + }, + "1.875": { + "vector": [0, 0, 7.93] + }, + "1.9167": { + "vector": [0, 0, 7.7] + }, + "1.9583": { + "vector": [0, 0, 7.55] + }, + "2.0": { + "vector": [0, 0, 7.5] + }, + "2.0417": { + "vector": [0, 0, 7.55] + }, + "2.0833": { + "vector": [0, 0, 7.7] + }, + "2.125": { + "vector": [0, 0, 7.93] + }, + "2.1667": { + "vector": [0, 0, 8.24] + }, + "2.2083": { + "vector": [0, 0, 8.62] + }, + "2.25": { + "vector": [0, 0, 9.06] + }, + "2.2917": { + "vector": [0, 0, 9.56] + }, + "2.3333": { + "vector": [0, 0, 10.09] + }, + "2.375": { + "vector": [0, 0, 10.66] + }, + "2.4167": { + "vector": [0, 0, 11.26] + }, + "2.4583": { + "vector": [0, 0, 11.88] + }, + "2.5": { + "vector": [0, 0, 12.5] + }, + "2.5417": { + "vector": [0, 0, 13.12] + }, + "2.5833": { + "vector": [0, 0, 13.74] + }, + "2.625": { + "vector": [0, 0, 14.34] + }, + "2.6667": { + "vector": [0, 0, 14.91] + }, + "2.7083": { + "vector": [0, 0, 15.44] + }, + "2.75": { + "vector": [0, 0, 15.94] + }, + "2.7917": { + "vector": [0, 0, 16.38] + }, + "2.8333": { + "vector": [0, 0, 16.76] + }, + "2.875": { + "vector": [0, 0, 17.07] + }, + "2.9167": { + "vector": [0, 0, 17.3] + }, + "2.9583": { + "vector": [0, 0, 17.45] + }, + "3.0": { + "vector": [0, 0, 17.5] + }, + "3.0417": { + "vector": [0, 0, 17.45] + }, + "3.0833": { + "vector": [0, 0, 17.3] + }, + "3.125": { + "vector": [0, 0, 17.07] + }, + "3.1667": { + "vector": [0, 0, 16.76] + }, + "3.2083": { + "vector": [0, 0, 16.38] + }, + "3.25": { + "vector": [0, 0, 15.94] + }, + "3.2917": { + "vector": [0, 0, 15.44] + }, + "3.3333": { + "vector": [0, 0, 14.91] + }, + "3.375": { + "vector": [0, 0, 14.34] + }, + "3.4167": { + "vector": [0, 0, 13.74] + }, + "3.4583": { + "vector": [0, 0, 13.12] + }, + "3.5": { + "vector": [0, 0, 12.5] + }, + "3.5417": { + "vector": [0, 0, 11.88] + }, + "3.5833": { + "vector": [0, 0, 11.26] + }, + "3.625": { + "vector": [0, 0, 10.66] + }, + "3.6667": { + "vector": [0, 0, 10.09] + }, + "3.7083": { + "vector": [0, 0, 9.56] + }, + "3.75": { + "vector": [0, 0, 9.06] + }, + "3.7917": { + "vector": [0, 0, 8.62] + }, + "3.8333": { + "vector": [0, 0, 8.24] + }, + "3.875": { + "vector": [0, 0, 7.93] + }, + "3.9167": { + "vector": [0, 0, 7.7] + }, + "3.9583": { + "vector": [0, 0, 7.55] + }, + "4.0": { + "vector": [0, 0, 7.5] + } + } + }, + "rightBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, -50] + }, + "0.0417": { + "vector": [0, 0, -49.99] + }, + "0.0833": { + "vector": [0, 0, -49.95] + }, + "0.125": { + "vector": [0, 0, -49.89] + }, + "0.1667": { + "vector": [0, 0, -49.81] + }, + "0.2083": { + "vector": [0, 0, -49.72] + }, + "0.25": { + "vector": [0, 0, -49.61] + }, + "0.2917": { + "vector": [0, 0, -49.49] + }, + "0.3333": { + "vector": [0, 0, -49.35] + }, + "0.375": { + "vector": [0, 0, -49.21] + }, + "0.4167": { + "vector": [0, 0, -49.06] + }, + "0.4583": { + "vector": [0, 0, -48.91] + }, + "0.5": { + "vector": [0, 0, -48.75] + }, + "0.5417": { + "vector": [0, 0, -48.59] + }, + "0.5833": { + "vector": [0, 0, -48.44] + }, + "0.625": { + "vector": [0, 0, -48.29] + }, + "0.6667": { + "vector": [0, 0, -48.15] + }, + "0.7083": { + "vector": [0, 0, -48.01] + }, + "0.75": { + "vector": [0, 0, -47.89] + }, + "0.7917": { + "vector": [0, 0, -47.78] + }, + "0.8333": { + "vector": [0, 0, -47.69] + }, + "0.875": { + "vector": [0, 0, -47.61] + }, + "0.9167": { + "vector": [0, 0, -47.55] + }, + "0.9583": { + "vector": [0, 0, -47.51] + }, + "1.0": { + "vector": [0, 0, -47.5] + }, + "1.0417": { + "vector": [0, 0, -47.51] + }, + "1.0833": { + "vector": [0, 0, -47.55] + }, + "1.125": { + "vector": [0, 0, -47.61] + }, + "1.1667": { + "vector": [0, 0, -47.69] + }, + "1.2083": { + "vector": [0, 0, -47.78] + }, + "1.25": { + "vector": [0, 0, -47.89] + }, + "1.2917": { + "vector": [0, 0, -48.01] + }, + "1.3333": { + "vector": [0, 0, -48.15] + }, + "1.375": { + "vector": [0, 0, -48.29] + }, + "1.4167": { + "vector": [0, 0, -48.44] + }, + "1.4583": { + "vector": [0, 0, -48.59] + }, + "1.5": { + "vector": [0, 0, -48.75] + }, + "1.5417": { + "vector": [0, 0, -48.91] + }, + "1.5833": { + "vector": [0, 0, -49.06] + }, + "1.625": { + "vector": [0, 0, -49.21] + }, + "1.6667": { + "vector": [0, 0, -49.35] + }, + "1.7083": { + "vector": [0, 0, -49.49] + }, + "1.75": { + "vector": [0, 0, -49.61] + }, + "1.7917": { + "vector": [0, 0, -49.72] + }, + "1.8333": { + "vector": [0, 0, -49.81] + }, + "1.875": { + "vector": [0, 0, -49.89] + }, + "1.9167": { + "vector": [0, 0, -49.95] + }, + "1.9583": { + "vector": [0, 0, -49.99] + }, + "2.0": { + "vector": [0, 0, -50] + }, + "2.0417": { + "vector": [0, 0, -49.99] + }, + "2.0833": { + "vector": [0, 0, -49.95] + }, + "2.125": { + "vector": [0, 0, -49.89] + }, + "2.1667": { + "vector": [0, 0, -49.81] + }, + "2.2083": { + "vector": [0, 0, -49.72] + }, + "2.25": { + "vector": [0, 0, -49.61] + }, + "2.2917": { + "vector": [0, 0, -49.49] + }, + "2.3333": { + "vector": [0, 0, -49.35] + }, + "2.375": { + "vector": [0, 0, -49.21] + }, + "2.4167": { + "vector": [0, 0, -49.06] + }, + "2.4583": { + "vector": [0, 0, -48.91] + }, + "2.5": { + "vector": [0, 0, -48.75] + }, + "2.5417": { + "vector": [0, 0, -48.59] + }, + "2.5833": { + "vector": [0, 0, -48.44] + }, + "2.625": { + "vector": [0, 0, -48.29] + }, + "2.6667": { + "vector": [0, 0, -48.15] + }, + "2.7083": { + "vector": [0, 0, -48.01] + }, + "2.75": { + "vector": [0, 0, -47.89] + }, + "2.7917": { + "vector": [0, 0, -47.78] + }, + "2.8333": { + "vector": [0, 0, -47.69] + }, + "2.875": { + "vector": [0, 0, -47.61] + }, + "2.9167": { + "vector": [0, 0, -47.55] + }, + "2.9583": { + "vector": [0, 0, -47.51] + }, + "3.0": { + "vector": [0, 0, -47.5] + }, + "3.0417": { + "vector": [0, 0, -47.51] + }, + "3.0833": { + "vector": [0, 0, -47.55] + }, + "3.125": { + "vector": [0, 0, -47.61] + }, + "3.1667": { + "vector": [0, 0, -47.69] + }, + "3.2083": { + "vector": [0, 0, -47.78] + }, + "3.25": { + "vector": [0, 0, -47.89] + }, + "3.2917": { + "vector": [0, 0, -48.01] + }, + "3.3333": { + "vector": [0, 0, -48.15] + }, + "3.375": { + "vector": [0, 0, -48.29] + }, + "3.4167": { + "vector": [0, 0, -48.44] + }, + "3.4583": { + "vector": [0, 0, -48.59] + }, + "3.5": { + "vector": [0, 0, -48.75] + }, + "3.5417": { + "vector": [0, 0, -48.91] + }, + "3.5833": { + "vector": [0, 0, -49.06] + }, + "3.625": { + "vector": [0, 0, -49.21] + }, + "3.6667": { + "vector": [0, 0, -49.35] + }, + "3.7083": { + "vector": [0, 0, -49.49] + }, + "3.75": { + "vector": [0, 0, -49.61] + }, + "3.7917": { + "vector": [0, 0, -49.72] + }, + "3.8333": { + "vector": [0, 0, -49.81] + }, + "3.875": { + "vector": [0, 0, -49.89] + }, + "3.9167": { + "vector": [0, 0, -49.95] + }, + "3.9583": { + "vector": [0, 0, -49.99] + }, + "4.0": { + "vector": [0, 0, -50] + } + } + }, + "leftBackThigh": { + "rotation": { + "0.0": { + "vector": [-14.41, -26.25, 29.69] + }, + "0.0417": { + "vector": [-14.43, -26.22, 29.73] + }, + "0.0833": { + "vector": [-14.5, -26.17, 29.89] + }, + "0.125": { + "vector": [-14.61, -26.11, 30.14] + }, + "0.1667": { + "vector": [-14.76, -26.04, 30.47] + }, + "0.2083": { + "vector": [-14.94, -25.95, 30.88] + }, + "0.25": { + "vector": [-15.15, -25.86, 31.36] + }, + "0.2917": { + "vector": [-15.38, -25.75, 31.9] + }, + "0.3333": { + "vector": [-15.64, -25.64, 32.48] + }, + "0.375": { + "vector": [-15.92, -25.53, 33.11] + }, + "0.4167": { + "vector": [-16.2, -25.41, 33.76] + }, + "0.4583": { + "vector": [-16.5, -25.3, 34.44] + }, + "0.5": { + "vector": [-16.8, -25.18, 35.12] + }, + "0.5417": { + "vector": [-17.1, -25.07, 35.8] + }, + "0.5833": { + "vector": [-17.4, -24.96, 36.48] + }, + "0.625": { + "vector": [-17.69, -24.86, 37.14] + }, + "0.6667": { + "vector": [-17.97, -24.77, 37.77] + }, + "0.7083": { + "vector": [-18.23, -24.68, 38.36] + }, + "0.75": { + "vector": [-18.47, -24.61, 38.91] + }, + "0.7917": { + "vector": [-18.69, -24.55, 39.4] + }, + "0.8333": { + "vector": [-18.87, -24.51, 39.83] + }, + "0.875": { + "vector": [-19.03, -24.49, 40.18] + }, + "0.9167": { + "vector": [-19.15, -24.48, 40.44] + }, + "0.9583": { + "vector": [-19.22, -24.5, 40.62] + }, + "1.0": { + "vector": [-19.25, -24.54, 40.69] + }, + "1.0417": { + "vector": [-19.24, -24.6, 40.65] + }, + "1.0833": { + "vector": [-19.17, -24.7, 40.51] + }, + "1.125": { + "vector": [-19.07, -24.82, 40.28] + }, + "1.1667": { + "vector": [-18.94, -24.97, 39.96] + }, + "1.2083": { + "vector": [-18.77, -25.14, 39.57] + }, + "1.25": { + "vector": [-18.57, -25.33, 39.12] + }, + "1.2917": { + "vector": [-18.34, -25.53, 38.61] + }, + "1.3333": { + "vector": [-18.1, -25.75, 38.06] + }, + "1.375": { + "vector": [-17.84, -25.98, 37.47] + }, + "1.4167": { + "vector": [-17.57, -26.21, 36.85] + }, + "1.4583": { + "vector": [-17.29, -26.45, 36.21] + }, + "1.5": { + "vector": [-17.01, -26.69, 35.56] + }, + "1.5417": { + "vector": [-16.72, -26.93, 34.91] + }, + "1.5833": { + "vector": [-16.44, -27.17, 34.28] + }, + "1.625": { + "vector": [-16.17, -27.4, 33.66] + }, + "1.6667": { + "vector": [-15.91, -27.61, 33.06] + }, + "1.7083": { + "vector": [-15.66, -27.82, 32.51] + }, + "1.75": { + "vector": [-15.44, -28.01, 31.99] + }, + "1.7917": { + "vector": [-15.24, -28.18, 31.54] + }, + "1.8333": { + "vector": [-15.07, -28.33, 31.14] + }, + "1.875": { + "vector": [-14.93, -28.46, 30.82] + }, + "1.9167": { + "vector": [-14.82, -28.56, 30.59] + }, + "1.9583": { + "vector": [-14.76, -28.63, 30.44] + }, + "2.0": { + "vector": [-14.74, -28.67, 30.39] + }, + "2.0417": { + "vector": [-14.76, -28.67, 30.46] + }, + "2.0833": { + "vector": [-14.84, -28.64, 30.62] + }, + "2.125": { + "vector": [-14.95, -28.59, 30.87] + }, + "2.1667": { + "vector": [-15.1, -28.51, 31.21] + }, + "2.2083": { + "vector": [-15.28, -28.41, 31.63] + }, + "2.25": { + "vector": [-15.49, -28.29, 32.1] + }, + "2.2917": { + "vector": [-15.72, -28.15, 32.63] + }, + "2.3333": { + "vector": [-15.97, -28, 33.21] + }, + "2.375": { + "vector": [-16.24, -27.83, 33.82] + }, + "2.4167": { + "vector": [-16.52, -27.66, 34.47] + }, + "2.4583": { + "vector": [-16.81, -27.47, 35.12] + }, + "2.5": { + "vector": [-17.1, -27.28, 35.79] + }, + "2.5417": { + "vector": [-17.39, -27.09, 36.46] + }, + "2.5833": { + "vector": [-17.68, -26.9, 37.11] + }, + "2.625": { + "vector": [-17.96, -26.71, 37.75] + }, + "2.6667": { + "vector": [-18.23, -26.52, 38.35] + }, + "2.7083": { + "vector": [-18.48, -26.34, 38.92] + }, + "2.75": { + "vector": [-18.7, -26.17, 39.44] + }, + "2.7917": { + "vector": [-18.91, -26.01, 39.91] + }, + "2.8333": { + "vector": [-19.08, -25.87, 40.31] + }, + "2.875": { + "vector": [-19.22, -25.74, 40.63] + }, + "2.9167": { + "vector": [-19.33, -25.63, 40.87] + }, + "2.9583": { + "vector": [-19.39, -25.54, 41.01] + }, + "3.0": { + "vector": [-19.41, -25.48, 41.05] + }, + "3.0417": { + "vector": [-19.38, -25.44, 40.98] + }, + "3.0833": { + "vector": [-19.3, -25.41, 40.8] + }, + "3.125": { + "vector": [-19.18, -25.4, 40.53] + }, + "3.1667": { + "vector": [-19.02, -25.41, 40.17] + }, + "3.2083": { + "vector": [-18.83, -25.42, 39.74] + }, + "3.25": { + "vector": [-18.61, -25.45, 39.23] + }, + "3.2917": { + "vector": [-18.36, -25.49, 38.67] + }, + "3.3333": { + "vector": [-18.09, -25.53, 38.07] + }, + "3.375": { + "vector": [-17.81, -25.59, 37.42] + }, + "3.4167": { + "vector": [-17.51, -25.64, 36.74] + }, + "3.4583": { + "vector": [-17.21, -25.71, 36.05] + }, + "3.5": { + "vector": [-16.9, -25.77, 35.35] + }, + "3.5417": { + "vector": [-16.59, -25.84, 34.64] + }, + "3.5833": { + "vector": [-16.28, -25.9, 33.95] + }, + "3.625": { + "vector": [-15.99, -25.97, 33.28] + }, + "3.6667": { + "vector": [-15.71, -26.03, 32.63] + }, + "3.7083": { + "vector": [-15.44, -26.08, 32.03] + }, + "3.75": { + "vector": [-15.19, -26.14, 31.47] + }, + "3.7917": { + "vector": [-14.98, -26.18, 30.97] + }, + "3.8333": { + "vector": [-14.79, -26.22, 30.54] + }, + "3.875": { + "vector": [-14.63, -26.24, 30.19] + }, + "3.9167": { + "vector": [-14.51, -26.26, 29.92] + }, + "3.9583": { + "vector": [-14.44, -26.26, 29.75] + }, + "4.0": { + "vector": [-14.41, -26.25, 29.69] + } + } + }, + "leftBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -7.5] + }, + "0.0417": { + "vector": [0, 0, -7.55] + }, + "0.0833": { + "vector": [0, 0, -7.7] + }, + "0.125": { + "vector": [0, 0, -7.93] + }, + "0.1667": { + "vector": [0, 0, -8.24] + }, + "0.2083": { + "vector": [0, 0, -8.62] + }, + "0.25": { + "vector": [0, 0, -9.06] + }, + "0.2917": { + "vector": [0, 0, -9.56] + }, + "0.3333": { + "vector": [0, 0, -10.09] + }, + "0.375": { + "vector": [0, 0, -10.66] + }, + "0.4167": { + "vector": [0, 0, -11.26] + }, + "0.4583": { + "vector": [0, 0, -11.88] + }, + "0.5": { + "vector": [0, 0, -12.5] + }, + "0.5417": { + "vector": [0, 0, -13.12] + }, + "0.5833": { + "vector": [0, 0, -13.74] + }, + "0.625": { + "vector": [0, 0, -14.34] + }, + "0.6667": { + "vector": [0, 0, -14.91] + }, + "0.7083": { + "vector": [0, 0, -15.44] + }, + "0.75": { + "vector": [0, 0, -15.94] + }, + "0.7917": { + "vector": [0, 0, -16.38] + }, + "0.8333": { + "vector": [0, 0, -16.76] + }, + "0.875": { + "vector": [0, 0, -17.07] + }, + "0.9167": { + "vector": [0, 0, -17.3] + }, + "0.9583": { + "vector": [0, 0, -17.45] + }, + "1.0": { + "vector": [0, 0, -17.5] + }, + "1.0417": { + "vector": [0, 0, -17.45] + }, + "1.0833": { + "vector": [0, 0, -17.3] + }, + "1.125": { + "vector": [0, 0, -17.07] + }, + "1.1667": { + "vector": [0, 0, -16.76] + }, + "1.2083": { + "vector": [0, 0, -16.38] + }, + "1.25": { + "vector": [0, 0, -15.94] + }, + "1.2917": { + "vector": [0, 0, -15.44] + }, + "1.3333": { + "vector": [0, 0, -14.91] + }, + "1.375": { + "vector": [0, 0, -14.34] + }, + "1.4167": { + "vector": [0, 0, -13.74] + }, + "1.4583": { + "vector": [0, 0, -13.12] + }, + "1.5": { + "vector": [0, 0, -12.5] + }, + "1.5417": { + "vector": [0, 0, -11.88] + }, + "1.5833": { + "vector": [0, 0, -11.26] + }, + "1.625": { + "vector": [0, 0, -10.66] + }, + "1.6667": { + "vector": [0, 0, -10.09] + }, + "1.7083": { + "vector": [0, 0, -9.56] + }, + "1.75": { + "vector": [0, 0, -9.06] + }, + "1.7917": { + "vector": [0, 0, -8.62] + }, + "1.8333": { + "vector": [0, 0, -8.24] + }, + "1.875": { + "vector": [0, 0, -7.93] + }, + "1.9167": { + "vector": [0, 0, -7.7] + }, + "1.9583": { + "vector": [0, 0, -7.55] + }, + "2.0": { + "vector": [0, 0, -7.5] + }, + "2.0417": { + "vector": [0, 0, -7.55] + }, + "2.0833": { + "vector": [0, 0, -7.7] + }, + "2.125": { + "vector": [0, 0, -7.93] + }, + "2.1667": { + "vector": [0, 0, -8.24] + }, + "2.2083": { + "vector": [0, 0, -8.62] + }, + "2.25": { + "vector": [0, 0, -9.06] + }, + "2.2917": { + "vector": [0, 0, -9.56] + }, + "2.3333": { + "vector": [0, 0, -10.09] + }, + "2.375": { + "vector": [0, 0, -10.66] + }, + "2.4167": { + "vector": [0, 0, -11.26] + }, + "2.4583": { + "vector": [0, 0, -11.88] + }, + "2.5": { + "vector": [0, 0, -12.5] + }, + "2.5417": { + "vector": [0, 0, -13.12] + }, + "2.5833": { + "vector": [0, 0, -13.74] + }, + "2.625": { + "vector": [0, 0, -14.34] + }, + "2.6667": { + "vector": [0, 0, -14.91] + }, + "2.7083": { + "vector": [0, 0, -15.44] + }, + "2.75": { + "vector": [0, 0, -15.94] + }, + "2.7917": { + "vector": [0, 0, -16.38] + }, + "2.8333": { + "vector": [0, 0, -16.76] + }, + "2.875": { + "vector": [0, 0, -17.07] + }, + "2.9167": { + "vector": [0, 0, -17.3] + }, + "2.9583": { + "vector": [0, 0, -17.45] + }, + "3.0": { + "vector": [0, 0, -17.5] + }, + "3.0417": { + "vector": [0, 0, -17.45] + }, + "3.0833": { + "vector": [0, 0, -17.3] + }, + "3.125": { + "vector": [0, 0, -17.07] + }, + "3.1667": { + "vector": [0, 0, -16.76] + }, + "3.2083": { + "vector": [0, 0, -16.38] + }, + "3.25": { + "vector": [0, 0, -15.94] + }, + "3.2917": { + "vector": [0, 0, -15.44] + }, + "3.3333": { + "vector": [0, 0, -14.91] + }, + "3.375": { + "vector": [0, 0, -14.34] + }, + "3.4167": { + "vector": [0, 0, -13.74] + }, + "3.4583": { + "vector": [0, 0, -13.12] + }, + "3.5": { + "vector": [0, 0, -12.5] + }, + "3.5417": { + "vector": [0, 0, -11.88] + }, + "3.5833": { + "vector": [0, 0, -11.26] + }, + "3.625": { + "vector": [0, 0, -10.66] + }, + "3.6667": { + "vector": [0, 0, -10.09] + }, + "3.7083": { + "vector": [0, 0, -9.56] + }, + "3.75": { + "vector": [0, 0, -9.06] + }, + "3.7917": { + "vector": [0, 0, -8.62] + }, + "3.8333": { + "vector": [0, 0, -8.24] + }, + "3.875": { + "vector": [0, 0, -7.93] + }, + "3.9167": { + "vector": [0, 0, -7.7] + }, + "3.9583": { + "vector": [0, 0, -7.55] + }, + "4.0": { + "vector": [0, 0, -7.5] + } + } + }, + "leftHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-50, 0, -50] + }, + "0.0417": { + "vector": [-49.99, 0, -50] + }, + "0.0833": { + "vector": [-49.95, 0, -50] + }, + "0.125": { + "vector": [-49.89, 0, -50] + }, + "0.1667": { + "vector": [-49.8, 0, -50] + }, + "0.2083": { + "vector": [-49.7, 0, -50] + }, + "0.25": { + "vector": [-49.57, 0, -50] + }, + "0.2917": { + "vector": [-49.42, 0, -50] + }, + "0.3333": { + "vector": [-49.26, 0, -50] + }, + "0.375": { + "vector": [-49.08, 0, -50] + }, + "0.4167": { + "vector": [-48.88, 0, -50] + }, + "0.4583": { + "vector": [-48.67, 0, -50] + }, + "0.5": { + "vector": [-48.44, 0, -50] + }, + "0.5417": { + "vector": [-48.2, 0, -50] + }, + "0.5833": { + "vector": [-47.94, 0, -50] + }, + "0.625": { + "vector": [-47.68, 0, -50] + }, + "0.6667": { + "vector": [-47.41, 0, -50] + }, + "0.7083": { + "vector": [-47.13, 0, -50] + }, + "0.75": { + "vector": [-46.84, 0, -50] + }, + "0.7917": { + "vector": [-46.54, 0, -50] + }, + "0.8333": { + "vector": [-46.24, 0, -50] + }, + "0.875": { + "vector": [-45.93, 0, -50] + }, + "0.9167": { + "vector": [-45.62, 0, -50] + }, + "0.9583": { + "vector": [-45.31, 0, -50] + }, + "1.0": { + "vector": [-45, 0, -50] + }, + "1.0417": { + "vector": [-44.69, 0, -50] + }, + "1.0833": { + "vector": [-44.38, 0, -50] + }, + "1.125": { + "vector": [-44.07, 0, -50] + }, + "1.1667": { + "vector": [-43.76, 0, -50] + }, + "1.2083": { + "vector": [-43.46, 0, -50] + }, + "1.25": { + "vector": [-43.16, 0, -50] + }, + "1.2917": { + "vector": [-42.87, 0, -50] + }, + "1.3333": { + "vector": [-42.59, 0, -50] + }, + "1.375": { + "vector": [-42.32, 0, -50] + }, + "1.4167": { + "vector": [-42.06, 0, -50] + }, + "1.4583": { + "vector": [-41.8, 0, -50] + }, + "1.5": { + "vector": [-41.56, 0, -50] + }, + "1.5417": { + "vector": [-41.33, 0, -50] + }, + "1.5833": { + "vector": [-41.12, 0, -50] + }, + "1.625": { + "vector": [-40.92, 0, -50] + }, + "1.6667": { + "vector": [-40.74, 0, -50] + }, + "1.7083": { + "vector": [-40.58, 0, -50] + }, + "1.75": { + "vector": [-40.43, 0, -50] + }, + "1.7917": { + "vector": [-40.3, 0, -50] + }, + "1.8333": { + "vector": [-40.2, 0, -50] + }, + "1.875": { + "vector": [-40.11, 0, -50] + }, + "1.9167": { + "vector": [-40.05, 0, -50] + }, + "1.9583": { + "vector": [-40.01, 0, -50] + }, + "2.0": { + "vector": [-40, 0, -50] + }, + "2.0417": { + "vector": [-40.01, 0, -50] + }, + "2.0833": { + "vector": [-40.05, 0, -50] + }, + "2.125": { + "vector": [-40.11, 0, -50] + }, + "2.1667": { + "vector": [-40.2, 0, -50] + }, + "2.2083": { + "vector": [-40.3, 0, -50] + }, + "2.25": { + "vector": [-40.43, 0, -50] + }, + "2.2917": { + "vector": [-40.58, 0, -50] + }, + "2.3333": { + "vector": [-40.74, 0, -50] + }, + "2.375": { + "vector": [-40.92, 0, -50] + }, + "2.4167": { + "vector": [-41.12, 0, -50] + }, + "2.4583": { + "vector": [-41.33, 0, -50] + }, + "2.5": { + "vector": [-41.56, 0, -50] + }, + "2.5417": { + "vector": [-41.8, 0, -50] + }, + "2.5833": { + "vector": [-42.06, 0, -50] + }, + "2.625": { + "vector": [-42.32, 0, -50] + }, + "2.6667": { + "vector": [-42.59, 0, -50] + }, + "2.7083": { + "vector": [-42.87, 0, -50] + }, + "2.75": { + "vector": [-43.16, 0, -50] + }, + "2.7917": { + "vector": [-43.46, 0, -50] + }, + "2.8333": { + "vector": [-43.76, 0, -50] + }, + "2.875": { + "vector": [-44.07, 0, -50] + }, + "2.9167": { + "vector": [-44.38, 0, -50] + }, + "2.9583": { + "vector": [-44.69, 0, -50] + }, + "3.0": { + "vector": [-45, 0, -50] + }, + "3.0417": { + "vector": [-45.31, 0, -50] + }, + "3.0833": { + "vector": [-45.62, 0, -50] + }, + "3.125": { + "vector": [-45.93, 0, -50] + }, + "3.1667": { + "vector": [-46.24, 0, -50] + }, + "3.2083": { + "vector": [-46.54, 0, -50] + }, + "3.25": { + "vector": [-46.84, 0, -50] + }, + "3.2917": { + "vector": [-47.13, 0, -50] + }, + "3.3333": { + "vector": [-47.41, 0, -50] + }, + "3.375": { + "vector": [-47.68, 0, -50] + }, + "3.4167": { + "vector": [-47.94, 0, -50] + }, + "3.4583": { + "vector": [-48.2, 0, -50] + }, + "3.5": { + "vector": [-48.44, 0, -50] + }, + "3.5417": { + "vector": [-48.67, 0, -50] + }, + "3.5833": { + "vector": [-48.88, 0, -50] + }, + "3.625": { + "vector": [-49.08, 0, -50] + }, + "3.6667": { + "vector": [-49.26, 0, -50] + }, + "3.7083": { + "vector": [-49.42, 0, -50] + }, + "3.75": { + "vector": [-49.57, 0, -50] + }, + "3.7917": { + "vector": [-49.7, 0, -50] + }, + "3.8333": { + "vector": [-49.8, 0, -50] + }, + "3.875": { + "vector": [-49.89, 0, -50] + }, + "3.9167": { + "vector": [-49.95, 0, -50] + }, + "3.9583": { + "vector": [-49.99, 0, -50] + }, + "4.0": { + "vector": [-50, 0, -50] + } + } + }, + "rightHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-50, 0, 50] + }, + "0.0417": { + "vector": [-49.99, 0, 50] + }, + "0.0833": { + "vector": [-49.95, 0, 50] + }, + "0.125": { + "vector": [-49.89, 0, 50] + }, + "0.1667": { + "vector": [-49.8, 0, 50] + }, + "0.2083": { + "vector": [-49.7, 0, 50] + }, + "0.25": { + "vector": [-49.57, 0, 50] + }, + "0.2917": { + "vector": [-49.42, 0, 50] + }, + "0.3333": { + "vector": [-49.26, 0, 50] + }, + "0.375": { + "vector": [-49.08, 0, 50] + }, + "0.4167": { + "vector": [-48.88, 0, 50] + }, + "0.4583": { + "vector": [-48.67, 0, 50] + }, + "0.5": { + "vector": [-48.44, 0, 50] + }, + "0.5417": { + "vector": [-48.2, 0, 50] + }, + "0.5833": { + "vector": [-47.94, 0, 50] + }, + "0.625": { + "vector": [-47.68, 0, 50] + }, + "0.6667": { + "vector": [-47.41, 0, 50] + }, + "0.7083": { + "vector": [-47.13, 0, 50] + }, + "0.75": { + "vector": [-46.84, 0, 50] + }, + "0.7917": { + "vector": [-46.54, 0, 50] + }, + "0.8333": { + "vector": [-46.24, 0, 50] + }, + "0.875": { + "vector": [-45.93, 0, 50] + }, + "0.9167": { + "vector": [-45.62, 0, 50] + }, + "0.9583": { + "vector": [-45.31, 0, 50] + }, + "1.0": { + "vector": [-45, 0, 50] + }, + "1.0417": { + "vector": [-44.69, 0, 50] + }, + "1.0833": { + "vector": [-44.38, 0, 50] + }, + "1.125": { + "vector": [-44.07, 0, 50] + }, + "1.1667": { + "vector": [-43.76, 0, 50] + }, + "1.2083": { + "vector": [-43.46, 0, 50] + }, + "1.25": { + "vector": [-43.16, 0, 50] + }, + "1.2917": { + "vector": [-42.87, 0, 50] + }, + "1.3333": { + "vector": [-42.59, 0, 50] + }, + "1.375": { + "vector": [-42.32, 0, 50] + }, + "1.4167": { + "vector": [-42.06, 0, 50] + }, + "1.4583": { + "vector": [-41.8, 0, 50] + }, + "1.5": { + "vector": [-41.56, 0, 50] + }, + "1.5417": { + "vector": [-41.33, 0, 50] + }, + "1.5833": { + "vector": [-41.12, 0, 50] + }, + "1.625": { + "vector": [-40.92, 0, 50] + }, + "1.6667": { + "vector": [-40.74, 0, 50] + }, + "1.7083": { + "vector": [-40.58, 0, 50] + }, + "1.75": { + "vector": [-40.43, 0, 50] + }, + "1.7917": { + "vector": [-40.3, 0, 50] + }, + "1.8333": { + "vector": [-40.2, 0, 50] + }, + "1.875": { + "vector": [-40.11, 0, 50] + }, + "1.9167": { + "vector": [-40.05, 0, 50] + }, + "1.9583": { + "vector": [-40.01, 0, 50] + }, + "2.0": { + "vector": [-40, 0, 50] + }, + "2.0417": { + "vector": [-40.01, 0, 50] + }, + "2.0833": { + "vector": [-40.05, 0, 50] + }, + "2.125": { + "vector": [-40.11, 0, 50] + }, + "2.1667": { + "vector": [-40.2, 0, 50] + }, + "2.2083": { + "vector": [-40.3, 0, 50] + }, + "2.25": { + "vector": [-40.43, 0, 50] + }, + "2.2917": { + "vector": [-40.58, 0, 50] + }, + "2.3333": { + "vector": [-40.74, 0, 50] + }, + "2.375": { + "vector": [-40.92, 0, 50] + }, + "2.4167": { + "vector": [-41.12, 0, 50] + }, + "2.4583": { + "vector": [-41.33, 0, 50] + }, + "2.5": { + "vector": [-41.56, 0, 50] + }, + "2.5417": { + "vector": [-41.8, 0, 50] + }, + "2.5833": { + "vector": [-42.06, 0, 50] + }, + "2.625": { + "vector": [-42.32, 0, 50] + }, + "2.6667": { + "vector": [-42.59, 0, 50] + }, + "2.7083": { + "vector": [-42.87, 0, 50] + }, + "2.75": { + "vector": [-43.16, 0, 50] + }, + "2.7917": { + "vector": [-43.46, 0, 50] + }, + "2.8333": { + "vector": [-43.76, 0, 50] + }, + "2.875": { + "vector": [-44.07, 0, 50] + }, + "2.9167": { + "vector": [-44.38, 0, 50] + }, + "2.9583": { + "vector": [-44.69, 0, 50] + }, + "3.0": { + "vector": [-45, 0, 50] + }, + "3.0417": { + "vector": [-45.31, 0, 50] + }, + "3.0833": { + "vector": [-45.62, 0, 50] + }, + "3.125": { + "vector": [-45.93, 0, 50] + }, + "3.1667": { + "vector": [-46.24, 0, 50] + }, + "3.2083": { + "vector": [-46.54, 0, 50] + }, + "3.25": { + "vector": [-46.84, 0, 50] + }, + "3.2917": { + "vector": [-47.13, 0, 50] + }, + "3.3333": { + "vector": [-47.41, 0, 50] + }, + "3.375": { + "vector": [-47.68, 0, 50] + }, + "3.4167": { + "vector": [-47.94, 0, 50] + }, + "3.4583": { + "vector": [-48.2, 0, 50] + }, + "3.5": { + "vector": [-48.44, 0, 50] + }, + "3.5417": { + "vector": [-48.67, 0, 50] + }, + "3.5833": { + "vector": [-48.88, 0, 50] + }, + "3.625": { + "vector": [-49.08, 0, 50] + }, + "3.6667": { + "vector": [-49.26, 0, 50] + }, + "3.7083": { + "vector": [-49.42, 0, 50] + }, + "3.75": { + "vector": [-49.57, 0, 50] + }, + "3.7917": { + "vector": [-49.7, 0, 50] + }, + "3.8333": { + "vector": [-49.8, 0, 50] + }, + "3.875": { + "vector": [-49.89, 0, 50] + }, + "3.9167": { + "vector": [-49.95, 0, 50] + }, + "3.9583": { + "vector": [-49.99, 0, 50] + }, + "4.0": { + "vector": [-50, 0, 50] + } + } + }, + "tail1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [-0.01, 0, 0] + }, + "0.125": { + "vector": [-0.03, 0, 0] + }, + "0.1667": { + "vector": [-0.05, 0, 0] + }, + "0.2083": { + "vector": [-0.08, 0, 0] + }, + "0.25": { + "vector": [-0.11, 0, 0] + }, + "0.2917": { + "vector": [-0.14, 0, 0] + }, + "0.3333": { + "vector": [-0.19, 0, 0] + }, + "0.375": { + "vector": [-0.23, 0, 0] + }, + "0.4167": { + "vector": [-0.28, 0, 0] + }, + "0.4583": { + "vector": [-0.33, 0, 0] + }, + "0.5": { + "vector": [-0.39, 0, 0] + }, + "0.5417": { + "vector": [-0.45, 0, 0] + }, + "0.5833": { + "vector": [-0.51, 0, 0] + }, + "0.625": { + "vector": [-0.58, 0, 0] + }, + "0.6667": { + "vector": [-0.65, 0, 0] + }, + "0.7083": { + "vector": [-0.72, 0, 0] + }, + "0.75": { + "vector": [-0.79, 0, 0] + }, + "0.7917": { + "vector": [-0.87, 0, 0] + }, + "0.8333": { + "vector": [-0.94, 0, 0] + }, + "0.875": { + "vector": [-1.02, 0, 0] + }, + "0.9167": { + "vector": [-1.09, 0, 0] + }, + "0.9583": { + "vector": [-1.17, 0, 0] + }, + "1.0": { + "vector": [-1.25, 0, 0] + }, + "1.0417": { + "vector": [-1.33, 0, 0] + }, + "1.0833": { + "vector": [-1.41, 0, 0] + }, + "1.125": { + "vector": [-1.48, 0, 0] + }, + "1.1667": { + "vector": [-1.56, 0, 0] + }, + "1.2083": { + "vector": [-1.63, 0, 0] + }, + "1.25": { + "vector": [-1.71, 0, 0] + }, + "1.2917": { + "vector": [-1.78, 0, 0] + }, + "1.3333": { + "vector": [-1.85, 0, 0] + }, + "1.375": { + "vector": [-1.92, 0, 0] + }, + "1.4167": { + "vector": [-1.99, 0, 0] + }, + "1.4583": { + "vector": [-2.05, 0, 0] + }, + "1.5": { + "vector": [-2.11, 0, 0] + }, + "1.5417": { + "vector": [-2.17, 0, 0] + }, + "1.5833": { + "vector": [-2.22, 0, 0] + }, + "1.625": { + "vector": [-2.27, 0, 0] + }, + "1.6667": { + "vector": [-2.31, 0, 0] + }, + "1.7083": { + "vector": [-2.36, 0, 0] + }, + "1.75": { + "vector": [-2.39, 0, 0] + }, + "1.7917": { + "vector": [-2.42, 0, 0] + }, + "1.8333": { + "vector": [-2.45, 0, 0] + }, + "1.875": { + "vector": [-2.47, 0, 0] + }, + "1.9167": { + "vector": [-2.49, 0, 0] + }, + "1.9583": { + "vector": [-2.5, 0, 0] + }, + "2.0": { + "vector": [-2.5, 0, 0] + }, + "2.0417": { + "vector": [-2.5, 0, 0] + }, + "2.0833": { + "vector": [-2.49, 0, 0] + }, + "2.125": { + "vector": [-2.47, 0, 0] + }, + "2.1667": { + "vector": [-2.45, 0, 0] + }, + "2.2083": { + "vector": [-2.42, 0, 0] + }, + "2.25": { + "vector": [-2.39, 0, 0] + }, + "2.2917": { + "vector": [-2.36, 0, 0] + }, + "2.3333": { + "vector": [-2.31, 0, 0] + }, + "2.375": { + "vector": [-2.27, 0, 0] + }, + "2.4167": { + "vector": [-2.22, 0, 0] + }, + "2.4583": { + "vector": [-2.17, 0, 0] + }, + "2.5": { + "vector": [-2.11, 0, 0] + }, + "2.5417": { + "vector": [-2.05, 0, 0] + }, + "2.5833": { + "vector": [-1.99, 0, 0] + }, + "2.625": { + "vector": [-1.92, 0, 0] + }, + "2.6667": { + "vector": [-1.85, 0, 0] + }, + "2.7083": { + "vector": [-1.78, 0, 0] + }, + "2.75": { + "vector": [-1.71, 0, 0] + }, + "2.7917": { + "vector": [-1.63, 0, 0] + }, + "2.8333": { + "vector": [-1.56, 0, 0] + }, + "2.875": { + "vector": [-1.48, 0, 0] + }, + "2.9167": { + "vector": [-1.41, 0, 0] + }, + "2.9583": { + "vector": [-1.33, 0, 0] + }, + "3.0": { + "vector": [-1.25, 0, 0] + }, + "3.0417": { + "vector": [-1.17, 0, 0] + }, + "3.0833": { + "vector": [-1.09, 0, 0] + }, + "3.125": { + "vector": [-1.02, 0, 0] + }, + "3.1667": { + "vector": [-0.94, 0, 0] + }, + "3.2083": { + "vector": [-0.87, 0, 0] + }, + "3.25": { + "vector": [-0.79, 0, 0] + }, + "3.2917": { + "vector": [-0.72, 0, 0] + }, + "3.3333": { + "vector": [-0.65, 0, 0] + }, + "3.375": { + "vector": [-0.58, 0, 0] + }, + "3.4167": { + "vector": [-0.51, 0, 0] + }, + "3.4583": { + "vector": [-0.45, 0, 0] + }, + "3.5": { + "vector": [-0.39, 0, 0] + }, + "3.5417": { + "vector": [-0.33, 0, 0] + }, + "3.5833": { + "vector": [-0.28, 0, 0] + }, + "3.625": { + "vector": [-0.23, 0, 0] + }, + "3.6667": { + "vector": [-0.19, 0, 0] + }, + "3.7083": { + "vector": [-0.14, 0, 0] + }, + "3.75": { + "vector": [-0.11, 0, 0] + }, + "3.7917": { + "vector": [-0.08, 0, 0] + }, + "3.8333": { + "vector": [-0.05, 0, 0] + }, + "3.875": { + "vector": [-0.03, 0, 0] + }, + "3.9167": { + "vector": [-0.01, 0, 0] + }, + "3.9583": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [0, 0, 0] + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [-0.01, 0, 0] + }, + "0.125": { + "vector": [-0.03, 0, 0] + }, + "0.1667": { + "vector": [-0.05, 0, 0] + }, + "0.2083": { + "vector": [-0.08, 0, 0] + }, + "0.25": { + "vector": [-0.11, 0, 0] + }, + "0.2917": { + "vector": [-0.14, 0, 0] + }, + "0.3333": { + "vector": [-0.19, 0, 0] + }, + "0.375": { + "vector": [-0.23, 0, 0] + }, + "0.4167": { + "vector": [-0.28, 0, 0] + }, + "0.4583": { + "vector": [-0.33, 0, 0] + }, + "0.5": { + "vector": [-0.39, 0, 0] + }, + "0.5417": { + "vector": [-0.45, 0, 0] + }, + "0.5833": { + "vector": [-0.51, 0, 0] + }, + "0.625": { + "vector": [-0.58, 0, 0] + }, + "0.6667": { + "vector": [-0.65, 0, 0] + }, + "0.7083": { + "vector": [-0.72, 0, 0] + }, + "0.75": { + "vector": [-0.79, 0, 0] + }, + "0.7917": { + "vector": [-0.87, 0, 0] + }, + "0.8333": { + "vector": [-0.94, 0, 0] + }, + "0.875": { + "vector": [-1.02, 0, 0] + }, + "0.9167": { + "vector": [-1.09, 0, 0] + }, + "0.9583": { + "vector": [-1.17, 0, 0] + }, + "1.0": { + "vector": [-1.25, 0, 0] + }, + "1.0417": { + "vector": [-1.33, 0, 0] + }, + "1.0833": { + "vector": [-1.41, 0, 0] + }, + "1.125": { + "vector": [-1.48, 0, 0] + }, + "1.1667": { + "vector": [-1.56, 0, 0] + }, + "1.2083": { + "vector": [-1.63, 0, 0] + }, + "1.25": { + "vector": [-1.71, 0, 0] + }, + "1.2917": { + "vector": [-1.78, 0, 0] + }, + "1.3333": { + "vector": [-1.85, 0, 0] + }, + "1.375": { + "vector": [-1.92, 0, 0] + }, + "1.4167": { + "vector": [-1.99, 0, 0] + }, + "1.4583": { + "vector": [-2.05, 0, 0] + }, + "1.5": { + "vector": [-2.11, 0, 0] + }, + "1.5417": { + "vector": [-2.17, 0, 0] + }, + "1.5833": { + "vector": [-2.22, 0, 0] + }, + "1.625": { + "vector": [-2.27, 0, 0] + }, + "1.6667": { + "vector": [-2.31, 0, 0] + }, + "1.7083": { + "vector": [-2.36, 0, 0] + }, + "1.75": { + "vector": [-2.39, 0, 0] + }, + "1.7917": { + "vector": [-2.42, 0, 0] + }, + "1.8333": { + "vector": [-2.45, 0, 0] + }, + "1.875": { + "vector": [-2.47, 0, 0] + }, + "1.9167": { + "vector": [-2.49, 0, 0] + }, + "1.9583": { + "vector": [-2.5, 0, 0] + }, + "2.0": { + "vector": [-2.5, 0, 0] + }, + "2.0417": { + "vector": [-2.5, 0, 0] + }, + "2.0833": { + "vector": [-2.49, 0, 0] + }, + "2.125": { + "vector": [-2.47, 0, 0] + }, + "2.1667": { + "vector": [-2.45, 0, 0] + }, + "2.2083": { + "vector": [-2.42, 0, 0] + }, + "2.25": { + "vector": [-2.39, 0, 0] + }, + "2.2917": { + "vector": [-2.36, 0, 0] + }, + "2.3333": { + "vector": [-2.31, 0, 0] + }, + "2.375": { + "vector": [-2.27, 0, 0] + }, + "2.4167": { + "vector": [-2.22, 0, 0] + }, + "2.4583": { + "vector": [-2.17, 0, 0] + }, + "2.5": { + "vector": [-2.11, 0, 0] + }, + "2.5417": { + "vector": [-2.05, 0, 0] + }, + "2.5833": { + "vector": [-1.99, 0, 0] + }, + "2.625": { + "vector": [-1.92, 0, 0] + }, + "2.6667": { + "vector": [-1.85, 0, 0] + }, + "2.7083": { + "vector": [-1.78, 0, 0] + }, + "2.75": { + "vector": [-1.71, 0, 0] + }, + "2.7917": { + "vector": [-1.63, 0, 0] + }, + "2.8333": { + "vector": [-1.56, 0, 0] + }, + "2.875": { + "vector": [-1.48, 0, 0] + }, + "2.9167": { + "vector": [-1.41, 0, 0] + }, + "2.9583": { + "vector": [-1.33, 0, 0] + }, + "3.0": { + "vector": [-1.25, 0, 0] + }, + "3.0417": { + "vector": [-1.17, 0, 0] + }, + "3.0833": { + "vector": [-1.09, 0, 0] + }, + "3.125": { + "vector": [-1.02, 0, 0] + }, + "3.1667": { + "vector": [-0.94, 0, 0] + }, + "3.2083": { + "vector": [-0.87, 0, 0] + }, + "3.25": { + "vector": [-0.79, 0, 0] + }, + "3.2917": { + "vector": [-0.72, 0, 0] + }, + "3.3333": { + "vector": [-0.65, 0, 0] + }, + "3.375": { + "vector": [-0.58, 0, 0] + }, + "3.4167": { + "vector": [-0.51, 0, 0] + }, + "3.4583": { + "vector": [-0.45, 0, 0] + }, + "3.5": { + "vector": [-0.39, 0, 0] + }, + "3.5417": { + "vector": [-0.33, 0, 0] + }, + "3.5833": { + "vector": [-0.28, 0, 0] + }, + "3.625": { + "vector": [-0.23, 0, 0] + }, + "3.6667": { + "vector": [-0.19, 0, 0] + }, + "3.7083": { + "vector": [-0.14, 0, 0] + }, + "3.75": { + "vector": [-0.11, 0, 0] + }, + "3.7917": { + "vector": [-0.08, 0, 0] + }, + "3.8333": { + "vector": [-0.05, 0, 0] + }, + "3.875": { + "vector": [-0.03, 0, 0] + }, + "3.9167": { + "vector": [-0.01, 0, 0] + }, + "3.9583": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [0, 0, 0] + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [-0.01, 0, 0] + }, + "0.125": { + "vector": [-0.03, 0, 0] + }, + "0.1667": { + "vector": [-0.05, 0, 0] + }, + "0.2083": { + "vector": [-0.08, 0, 0] + }, + "0.25": { + "vector": [-0.11, 0, 0] + }, + "0.2917": { + "vector": [-0.14, 0, 0] + }, + "0.3333": { + "vector": [-0.19, 0, 0] + }, + "0.375": { + "vector": [-0.23, 0, 0] + }, + "0.4167": { + "vector": [-0.28, 0, 0] + }, + "0.4583": { + "vector": [-0.33, 0, 0] + }, + "0.5": { + "vector": [-0.39, 0, 0] + }, + "0.5417": { + "vector": [-0.45, 0, 0] + }, + "0.5833": { + "vector": [-0.51, 0, 0] + }, + "0.625": { + "vector": [-0.58, 0, 0] + }, + "0.6667": { + "vector": [-0.65, 0, 0] + }, + "0.7083": { + "vector": [-0.72, 0, 0] + }, + "0.75": { + "vector": [-0.79, 0, 0] + }, + "0.7917": { + "vector": [-0.87, 0, 0] + }, + "0.8333": { + "vector": [-0.94, 0, 0] + }, + "0.875": { + "vector": [-1.02, 0, 0] + }, + "0.9167": { + "vector": [-1.09, 0, 0] + }, + "0.9583": { + "vector": [-1.17, 0, 0] + }, + "1.0": { + "vector": [-1.25, 0, 0] + }, + "1.0417": { + "vector": [-1.33, 0, 0] + }, + "1.0833": { + "vector": [-1.41, 0, 0] + }, + "1.125": { + "vector": [-1.48, 0, 0] + }, + "1.1667": { + "vector": [-1.56, 0, 0] + }, + "1.2083": { + "vector": [-1.63, 0, 0] + }, + "1.25": { + "vector": [-1.71, 0, 0] + }, + "1.2917": { + "vector": [-1.78, 0, 0] + }, + "1.3333": { + "vector": [-1.85, 0, 0] + }, + "1.375": { + "vector": [-1.92, 0, 0] + }, + "1.4167": { + "vector": [-1.99, 0, 0] + }, + "1.4583": { + "vector": [-2.05, 0, 0] + }, + "1.5": { + "vector": [-2.11, 0, 0] + }, + "1.5417": { + "vector": [-2.17, 0, 0] + }, + "1.5833": { + "vector": [-2.22, 0, 0] + }, + "1.625": { + "vector": [-2.27, 0, 0] + }, + "1.6667": { + "vector": [-2.31, 0, 0] + }, + "1.7083": { + "vector": [-2.36, 0, 0] + }, + "1.75": { + "vector": [-2.39, 0, 0] + }, + "1.7917": { + "vector": [-2.42, 0, 0] + }, + "1.8333": { + "vector": [-2.45, 0, 0] + }, + "1.875": { + "vector": [-2.47, 0, 0] + }, + "1.9167": { + "vector": [-2.49, 0, 0] + }, + "1.9583": { + "vector": [-2.5, 0, 0] + }, + "2.0": { + "vector": [-2.5, 0, 0] + }, + "2.0417": { + "vector": [-2.5, 0, 0] + }, + "2.0833": { + "vector": [-2.49, 0, 0] + }, + "2.125": { + "vector": [-2.47, 0, 0] + }, + "2.1667": { + "vector": [-2.45, 0, 0] + }, + "2.2083": { + "vector": [-2.42, 0, 0] + }, + "2.25": { + "vector": [-2.39, 0, 0] + }, + "2.2917": { + "vector": [-2.36, 0, 0] + }, + "2.3333": { + "vector": [-2.31, 0, 0] + }, + "2.375": { + "vector": [-2.27, 0, 0] + }, + "2.4167": { + "vector": [-2.22, 0, 0] + }, + "2.4583": { + "vector": [-2.17, 0, 0] + }, + "2.5": { + "vector": [-2.11, 0, 0] + }, + "2.5417": { + "vector": [-2.05, 0, 0] + }, + "2.5833": { + "vector": [-1.99, 0, 0] + }, + "2.625": { + "vector": [-1.92, 0, 0] + }, + "2.6667": { + "vector": [-1.85, 0, 0] + }, + "2.7083": { + "vector": [-1.78, 0, 0] + }, + "2.75": { + "vector": [-1.71, 0, 0] + }, + "2.7917": { + "vector": [-1.63, 0, 0] + }, + "2.8333": { + "vector": [-1.56, 0, 0] + }, + "2.875": { + "vector": [-1.48, 0, 0] + }, + "2.9167": { + "vector": [-1.41, 0, 0] + }, + "2.9583": { + "vector": [-1.33, 0, 0] + }, + "3.0": { + "vector": [-1.25, 0, 0] + }, + "3.0417": { + "vector": [-1.17, 0, 0] + }, + "3.0833": { + "vector": [-1.09, 0, 0] + }, + "3.125": { + "vector": [-1.02, 0, 0] + }, + "3.1667": { + "vector": [-0.94, 0, 0] + }, + "3.2083": { + "vector": [-0.87, 0, 0] + }, + "3.25": { + "vector": [-0.79, 0, 0] + }, + "3.2917": { + "vector": [-0.72, 0, 0] + }, + "3.3333": { + "vector": [-0.65, 0, 0] + }, + "3.375": { + "vector": [-0.58, 0, 0] + }, + "3.4167": { + "vector": [-0.51, 0, 0] + }, + "3.4583": { + "vector": [-0.45, 0, 0] + }, + "3.5": { + "vector": [-0.39, 0, 0] + }, + "3.5417": { + "vector": [-0.33, 0, 0] + }, + "3.5833": { + "vector": [-0.28, 0, 0] + }, + "3.625": { + "vector": [-0.23, 0, 0] + }, + "3.6667": { + "vector": [-0.19, 0, 0] + }, + "3.7083": { + "vector": [-0.14, 0, 0] + }, + "3.75": { + "vector": [-0.11, 0, 0] + }, + "3.7917": { + "vector": [-0.08, 0, 0] + }, + "3.8333": { + "vector": [-0.05, 0, 0] + }, + "3.875": { + "vector": [-0.03, 0, 0] + }, + "3.9167": { + "vector": [-0.01, 0, 0] + }, + "3.9583": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [0, 0, 0] + } + } + }, + "tail4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0.01, 0, 0] + }, + "0.125": { + "vector": [0.03, 0, 0] + }, + "0.1667": { + "vector": [0.05, 0, 0] + }, + "0.2083": { + "vector": [0.08, 0, 0] + }, + "0.25": { + "vector": [0.11, 0, 0] + }, + "0.2917": { + "vector": [0.14, 0, 0] + }, + "0.3333": { + "vector": [0.19, 0, 0] + }, + "0.375": { + "vector": [0.23, 0, 0] + }, + "0.4167": { + "vector": [0.28, 0, 0] + }, + "0.4583": { + "vector": [0.33, 0, 0] + }, + "0.5": { + "vector": [0.39, 0, 0] + }, + "0.5417": { + "vector": [0.45, 0, 0] + }, + "0.5833": { + "vector": [0.51, 0, 0] + }, + "0.625": { + "vector": [0.58, 0, 0] + }, + "0.6667": { + "vector": [0.65, 0, 0] + }, + "0.7083": { + "vector": [0.72, 0, 0] + }, + "0.75": { + "vector": [0.79, 0, 0] + }, + "0.7917": { + "vector": [0.87, 0, 0] + }, + "0.8333": { + "vector": [0.94, 0, 0] + }, + "0.875": { + "vector": [1.02, 0, 0] + }, + "0.9167": { + "vector": [1.09, 0, 0] + }, + "0.9583": { + "vector": [1.17, 0, 0] + }, + "1.0": { + "vector": [1.25, 0, 0] + }, + "1.0417": { + "vector": [1.33, 0, 0] + }, + "1.0833": { + "vector": [1.41, 0, 0] + }, + "1.125": { + "vector": [1.48, 0, 0] + }, + "1.1667": { + "vector": [1.56, 0, 0] + }, + "1.2083": { + "vector": [1.63, 0, 0] + }, + "1.25": { + "vector": [1.71, 0, 0] + }, + "1.2917": { + "vector": [1.78, 0, 0] + }, + "1.3333": { + "vector": [1.85, 0, 0] + }, + "1.375": { + "vector": [1.92, 0, 0] + }, + "1.4167": { + "vector": [1.99, 0, 0] + }, + "1.4583": { + "vector": [2.05, 0, 0] + }, + "1.5": { + "vector": [2.11, 0, 0] + }, + "1.5417": { + "vector": [2.17, 0, 0] + }, + "1.5833": { + "vector": [2.22, 0, 0] + }, + "1.625": { + "vector": [2.27, 0, 0] + }, + "1.6667": { + "vector": [2.31, 0, 0] + }, + "1.7083": { + "vector": [2.36, 0, 0] + }, + "1.75": { + "vector": [2.39, 0, 0] + }, + "1.7917": { + "vector": [2.42, 0, 0] + }, + "1.8333": { + "vector": [2.45, 0, 0] + }, + "1.875": { + "vector": [2.47, 0, 0] + }, + "1.9167": { + "vector": [2.49, 0, 0] + }, + "1.9583": { + "vector": [2.5, 0, 0] + }, + "2.0": { + "vector": [2.5, 0, 0] + }, + "2.0417": { + "vector": [2.5, 0, 0] + }, + "2.0833": { + "vector": [2.49, 0, 0] + }, + "2.125": { + "vector": [2.47, 0, 0] + }, + "2.1667": { + "vector": [2.45, 0, 0] + }, + "2.2083": { + "vector": [2.42, 0, 0] + }, + "2.25": { + "vector": [2.39, 0, 0] + }, + "2.2917": { + "vector": [2.36, 0, 0] + }, + "2.3333": { + "vector": [2.31, 0, 0] + }, + "2.375": { + "vector": [2.27, 0, 0] + }, + "2.4167": { + "vector": [2.22, 0, 0] + }, + "2.4583": { + "vector": [2.17, 0, 0] + }, + "2.5": { + "vector": [2.11, 0, 0] + }, + "2.5417": { + "vector": [2.05, 0, 0] + }, + "2.5833": { + "vector": [1.99, 0, 0] + }, + "2.625": { + "vector": [1.92, 0, 0] + }, + "2.6667": { + "vector": [1.85, 0, 0] + }, + "2.7083": { + "vector": [1.78, 0, 0] + }, + "2.75": { + "vector": [1.71, 0, 0] + }, + "2.7917": { + "vector": [1.63, 0, 0] + }, + "2.8333": { + "vector": [1.56, 0, 0] + }, + "2.875": { + "vector": [1.48, 0, 0] + }, + "2.9167": { + "vector": [1.41, 0, 0] + }, + "2.9583": { + "vector": [1.33, 0, 0] + }, + "3.0": { + "vector": [1.25, 0, 0] + }, + "3.0417": { + "vector": [1.17, 0, 0] + }, + "3.0833": { + "vector": [1.09, 0, 0] + }, + "3.125": { + "vector": [1.02, 0, 0] + }, + "3.1667": { + "vector": [0.94, 0, 0] + }, + "3.2083": { + "vector": [0.87, 0, 0] + }, + "3.25": { + "vector": [0.79, 0, 0] + }, + "3.2917": { + "vector": [0.72, 0, 0] + }, + "3.3333": { + "vector": [0.65, 0, 0] + }, + "3.375": { + "vector": [0.58, 0, 0] + }, + "3.4167": { + "vector": [0.51, 0, 0] + }, + "3.4583": { + "vector": [0.45, 0, 0] + }, + "3.5": { + "vector": [0.39, 0, 0] + }, + "3.5417": { + "vector": [0.33, 0, 0] + }, + "3.5833": { + "vector": [0.28, 0, 0] + }, + "3.625": { + "vector": [0.23, 0, 0] + }, + "3.6667": { + "vector": [0.19, 0, 0] + }, + "3.7083": { + "vector": [0.14, 0, 0] + }, + "3.75": { + "vector": [0.11, 0, 0] + }, + "3.7917": { + "vector": [0.08, 0, 0] + }, + "3.8333": { + "vector": [0.05, 0, 0] + }, + "3.875": { + "vector": [0.03, 0, 0] + }, + "3.9167": { + "vector": [0.01, 0, 0] + }, + "3.9583": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [0, 0, 0] + } + } + }, + "tail5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0.01, 0, 0] + }, + "0.125": { + "vector": [0.03, 0, 0] + }, + "0.1667": { + "vector": [0.05, 0, 0] + }, + "0.2083": { + "vector": [0.08, 0, 0] + }, + "0.25": { + "vector": [0.11, 0, 0] + }, + "0.2917": { + "vector": [0.14, 0, 0] + }, + "0.3333": { + "vector": [0.19, 0, 0] + }, + "0.375": { + "vector": [0.23, 0, 0] + }, + "0.4167": { + "vector": [0.28, 0, 0] + }, + "0.4583": { + "vector": [0.33, 0, 0] + }, + "0.5": { + "vector": [0.39, 0, 0] + }, + "0.5417": { + "vector": [0.45, 0, 0] + }, + "0.5833": { + "vector": [0.51, 0, 0] + }, + "0.625": { + "vector": [0.58, 0, 0] + }, + "0.6667": { + "vector": [0.65, 0, 0] + }, + "0.7083": { + "vector": [0.72, 0, 0] + }, + "0.75": { + "vector": [0.79, 0, 0] + }, + "0.7917": { + "vector": [0.87, 0, 0] + }, + "0.8333": { + "vector": [0.94, 0, 0] + }, + "0.875": { + "vector": [1.02, 0, 0] + }, + "0.9167": { + "vector": [1.09, 0, 0] + }, + "0.9583": { + "vector": [1.17, 0, 0] + }, + "1.0": { + "vector": [1.25, 0, 0] + }, + "1.0417": { + "vector": [1.33, 0, 0] + }, + "1.0833": { + "vector": [1.41, 0, 0] + }, + "1.125": { + "vector": [1.48, 0, 0] + }, + "1.1667": { + "vector": [1.56, 0, 0] + }, + "1.2083": { + "vector": [1.63, 0, 0] + }, + "1.25": { + "vector": [1.71, 0, 0] + }, + "1.2917": { + "vector": [1.78, 0, 0] + }, + "1.3333": { + "vector": [1.85, 0, 0] + }, + "1.375": { + "vector": [1.92, 0, 0] + }, + "1.4167": { + "vector": [1.99, 0, 0] + }, + "1.4583": { + "vector": [2.05, 0, 0] + }, + "1.5": { + "vector": [2.11, 0, 0] + }, + "1.5417": { + "vector": [2.17, 0, 0] + }, + "1.5833": { + "vector": [2.22, 0, 0] + }, + "1.625": { + "vector": [2.27, 0, 0] + }, + "1.6667": { + "vector": [2.31, 0, 0] + }, + "1.7083": { + "vector": [2.36, 0, 0] + }, + "1.75": { + "vector": [2.39, 0, 0] + }, + "1.7917": { + "vector": [2.42, 0, 0] + }, + "1.8333": { + "vector": [2.45, 0, 0] + }, + "1.875": { + "vector": [2.47, 0, 0] + }, + "1.9167": { + "vector": [2.49, 0, 0] + }, + "1.9583": { + "vector": [2.5, 0, 0] + }, + "2.0": { + "vector": [2.5, 0, 0] + }, + "2.0417": { + "vector": [2.5, 0, 0] + }, + "2.0833": { + "vector": [2.49, 0, 0] + }, + "2.125": { + "vector": [2.47, 0, 0] + }, + "2.1667": { + "vector": [2.45, 0, 0] + }, + "2.2083": { + "vector": [2.42, 0, 0] + }, + "2.25": { + "vector": [2.39, 0, 0] + }, + "2.2917": { + "vector": [2.36, 0, 0] + }, + "2.3333": { + "vector": [2.31, 0, 0] + }, + "2.375": { + "vector": [2.27, 0, 0] + }, + "2.4167": { + "vector": [2.22, 0, 0] + }, + "2.4583": { + "vector": [2.17, 0, 0] + }, + "2.5": { + "vector": [2.11, 0, 0] + }, + "2.5417": { + "vector": [2.05, 0, 0] + }, + "2.5833": { + "vector": [1.99, 0, 0] + }, + "2.625": { + "vector": [1.92, 0, 0] + }, + "2.6667": { + "vector": [1.85, 0, 0] + }, + "2.7083": { + "vector": [1.78, 0, 0] + }, + "2.75": { + "vector": [1.71, 0, 0] + }, + "2.7917": { + "vector": [1.63, 0, 0] + }, + "2.8333": { + "vector": [1.56, 0, 0] + }, + "2.875": { + "vector": [1.48, 0, 0] + }, + "2.9167": { + "vector": [1.41, 0, 0] + }, + "2.9583": { + "vector": [1.33, 0, 0] + }, + "3.0": { + "vector": [1.25, 0, 0] + }, + "3.0417": { + "vector": [1.17, 0, 0] + }, + "3.0833": { + "vector": [1.09, 0, 0] + }, + "3.125": { + "vector": [1.02, 0, 0] + }, + "3.1667": { + "vector": [0.94, 0, 0] + }, + "3.2083": { + "vector": [0.87, 0, 0] + }, + "3.25": { + "vector": [0.79, 0, 0] + }, + "3.2917": { + "vector": [0.72, 0, 0] + }, + "3.3333": { + "vector": [0.65, 0, 0] + }, + "3.375": { + "vector": [0.58, 0, 0] + }, + "3.4167": { + "vector": [0.51, 0, 0] + }, + "3.4583": { + "vector": [0.45, 0, 0] + }, + "3.5": { + "vector": [0.39, 0, 0] + }, + "3.5417": { + "vector": [0.33, 0, 0] + }, + "3.5833": { + "vector": [0.28, 0, 0] + }, + "3.625": { + "vector": [0.23, 0, 0] + }, + "3.6667": { + "vector": [0.19, 0, 0] + }, + "3.7083": { + "vector": [0.14, 0, 0] + }, + "3.75": { + "vector": [0.11, 0, 0] + }, + "3.7917": { + "vector": [0.08, 0, 0] + }, + "3.8333": { + "vector": [0.05, 0, 0] + }, + "3.875": { + "vector": [0.03, 0, 0] + }, + "3.9167": { + "vector": [0.01, 0, 0] + }, + "3.9583": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [0, 0, 0] + } + } + }, + "leftBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 50] + }, + "0.0417": { + "vector": [0, 0, 49.99] + }, + "0.0833": { + "vector": [0, 0, 49.95] + }, + "0.125": { + "vector": [0, 0, 49.89] + }, + "0.1667": { + "vector": [0, 0, 49.81] + }, + "0.2083": { + "vector": [0, 0, 49.72] + }, + "0.25": { + "vector": [0, 0, 49.61] + }, + "0.2917": { + "vector": [0, 0, 49.49] + }, + "0.3333": { + "vector": [0, 0, 49.35] + }, + "0.375": { + "vector": [0, 0, 49.21] + }, + "0.4167": { + "vector": [0, 0, 49.06] + }, + "0.4583": { + "vector": [0, 0, 48.91] + }, + "0.5": { + "vector": [0, 0, 48.75] + }, + "0.5417": { + "vector": [0, 0, 48.59] + }, + "0.5833": { + "vector": [0, 0, 48.44] + }, + "0.625": { + "vector": [0, 0, 48.29] + }, + "0.6667": { + "vector": [0, 0, 48.15] + }, + "0.7083": { + "vector": [0, 0, 48.01] + }, + "0.75": { + "vector": [0, 0, 47.89] + }, + "0.7917": { + "vector": [0, 0, 47.78] + }, + "0.8333": { + "vector": [0, 0, 47.69] + }, + "0.875": { + "vector": [0, 0, 47.61] + }, + "0.9167": { + "vector": [0, 0, 47.55] + }, + "0.9583": { + "vector": [0, 0, 47.51] + }, + "1.0": { + "vector": [0, 0, 47.5] + }, + "1.0417": { + "vector": [0, 0, 47.51] + }, + "1.0833": { + "vector": [0, 0, 47.55] + }, + "1.125": { + "vector": [0, 0, 47.61] + }, + "1.1667": { + "vector": [0, 0, 47.69] + }, + "1.2083": { + "vector": [0, 0, 47.78] + }, + "1.25": { + "vector": [0, 0, 47.89] + }, + "1.2917": { + "vector": [0, 0, 48.01] + }, + "1.3333": { + "vector": [0, 0, 48.15] + }, + "1.375": { + "vector": [0, 0, 48.29] + }, + "1.4167": { + "vector": [0, 0, 48.44] + }, + "1.4583": { + "vector": [0, 0, 48.59] + }, + "1.5": { + "vector": [0, 0, 48.75] + }, + "1.5417": { + "vector": [0, 0, 48.91] + }, + "1.5833": { + "vector": [0, 0, 49.06] + }, + "1.625": { + "vector": [0, 0, 49.21] + }, + "1.6667": { + "vector": [0, 0, 49.35] + }, + "1.7083": { + "vector": [0, 0, 49.49] + }, + "1.75": { + "vector": [0, 0, 49.61] + }, + "1.7917": { + "vector": [0, 0, 49.72] + }, + "1.8333": { + "vector": [0, 0, 49.81] + }, + "1.875": { + "vector": [0, 0, 49.89] + }, + "1.9167": { + "vector": [0, 0, 49.95] + }, + "1.9583": { + "vector": [0, 0, 49.99] + }, + "2.0": { + "vector": [0, 0, 50] + }, + "2.0417": { + "vector": [0, 0, 49.99] + }, + "2.0833": { + "vector": [0, 0, 49.95] + }, + "2.125": { + "vector": [0, 0, 49.89] + }, + "2.1667": { + "vector": [0, 0, 49.81] + }, + "2.2083": { + "vector": [0, 0, 49.72] + }, + "2.25": { + "vector": [0, 0, 49.61] + }, + "2.2917": { + "vector": [0, 0, 49.49] + }, + "2.3333": { + "vector": [0, 0, 49.35] + }, + "2.375": { + "vector": [0, 0, 49.21] + }, + "2.4167": { + "vector": [0, 0, 49.06] + }, + "2.4583": { + "vector": [0, 0, 48.91] + }, + "2.5": { + "vector": [0, 0, 48.75] + }, + "2.5417": { + "vector": [0, 0, 48.59] + }, + "2.5833": { + "vector": [0, 0, 48.44] + }, + "2.625": { + "vector": [0, 0, 48.29] + }, + "2.6667": { + "vector": [0, 0, 48.15] + }, + "2.7083": { + "vector": [0, 0, 48.01] + }, + "2.75": { + "vector": [0, 0, 47.89] + }, + "2.7917": { + "vector": [0, 0, 47.78] + }, + "2.8333": { + "vector": [0, 0, 47.69] + }, + "2.875": { + "vector": [0, 0, 47.61] + }, + "2.9167": { + "vector": [0, 0, 47.55] + }, + "2.9583": { + "vector": [0, 0, 47.51] + }, + "3.0": { + "vector": [0, 0, 47.5] + }, + "3.0417": { + "vector": [0, 0, 47.51] + }, + "3.0833": { + "vector": [0, 0, 47.55] + }, + "3.125": { + "vector": [0, 0, 47.61] + }, + "3.1667": { + "vector": [0, 0, 47.69] + }, + "3.2083": { + "vector": [0, 0, 47.78] + }, + "3.25": { + "vector": [0, 0, 47.89] + }, + "3.2917": { + "vector": [0, 0, 48.01] + }, + "3.3333": { + "vector": [0, 0, 48.15] + }, + "3.375": { + "vector": [0, 0, 48.29] + }, + "3.4167": { + "vector": [0, 0, 48.44] + }, + "3.4583": { + "vector": [0, 0, 48.59] + }, + "3.5": { + "vector": [0, 0, 48.75] + }, + "3.5417": { + "vector": [0, 0, 48.91] + }, + "3.5833": { + "vector": [0, 0, 49.06] + }, + "3.625": { + "vector": [0, 0, 49.21] + }, + "3.6667": { + "vector": [0, 0, 49.35] + }, + "3.7083": { + "vector": [0, 0, 49.49] + }, + "3.75": { + "vector": [0, 0, 49.61] + }, + "3.7917": { + "vector": [0, 0, 49.72] + }, + "3.8333": { + "vector": [0, 0, 49.81] + }, + "3.875": { + "vector": [0, 0, 49.89] + }, + "3.9167": { + "vector": [0, 0, 49.95] + }, + "3.9583": { + "vector": [0, 0, 49.99] + }, + "4.0": { + "vector": [0, 0, 50] + } + } + }, + "leftFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 47.5] + }, + "0.0417": { + "vector": [0, 0, 47.49] + }, + "0.0833": { + "vector": [0, 0, 47.45] + }, + "0.125": { + "vector": [0, 0, 47.39] + }, + "0.1667": { + "vector": [0, 0, 47.31] + }, + "0.2083": { + "vector": [0, 0, 47.22] + }, + "0.25": { + "vector": [0, 0, 47.11] + }, + "0.2917": { + "vector": [0, 0, 46.99] + }, + "0.3333": { + "vector": [0, 0, 46.85] + }, + "0.375": { + "vector": [0, 0, 46.71] + }, + "0.4167": { + "vector": [0, 0, 46.56] + }, + "0.4583": { + "vector": [0, 0, 46.41] + }, + "0.5": { + "vector": [0, 0, 46.25] + }, + "0.5417": { + "vector": [0, 0, 46.09] + }, + "0.5833": { + "vector": [0, 0, 45.94] + }, + "0.625": { + "vector": [0, 0, 45.79] + }, + "0.6667": { + "vector": [0, 0, 45.65] + }, + "0.7083": { + "vector": [0, 0, 45.51] + }, + "0.75": { + "vector": [0, 0, 45.39] + }, + "0.7917": { + "vector": [0, 0, 45.28] + }, + "0.8333": { + "vector": [0, 0, 45.19] + }, + "0.875": { + "vector": [0, 0, 45.11] + }, + "0.9167": { + "vector": [0, 0, 45.05] + }, + "0.9583": { + "vector": [0, 0, 45.01] + }, + "1.0": { + "vector": [0, 0, 45] + }, + "1.0417": { + "vector": [0, 0, 45.01] + }, + "1.0833": { + "vector": [0, 0, 45.05] + }, + "1.125": { + "vector": [0, 0, 45.11] + }, + "1.1667": { + "vector": [0, 0, 45.19] + }, + "1.2083": { + "vector": [0, 0, 45.28] + }, + "1.25": { + "vector": [0, 0, 45.39] + }, + "1.2917": { + "vector": [0, 0, 45.51] + }, + "1.3333": { + "vector": [0, 0, 45.65] + }, + "1.375": { + "vector": [0, 0, 45.79] + }, + "1.4167": { + "vector": [0, 0, 45.94] + }, + "1.4583": { + "vector": [0, 0, 46.09] + }, + "1.5": { + "vector": [0, 0, 46.25] + }, + "1.5417": { + "vector": [0, 0, 46.41] + }, + "1.5833": { + "vector": [0, 0, 46.56] + }, + "1.625": { + "vector": [0, 0, 46.71] + }, + "1.6667": { + "vector": [0, 0, 46.85] + }, + "1.7083": { + "vector": [0, 0, 46.99] + }, + "1.75": { + "vector": [0, 0, 47.11] + }, + "1.7917": { + "vector": [0, 0, 47.22] + }, + "1.8333": { + "vector": [0, 0, 47.31] + }, + "1.875": { + "vector": [0, 0, 47.39] + }, + "1.9167": { + "vector": [0, 0, 47.45] + }, + "1.9583": { + "vector": [0, 0, 47.49] + }, + "2.0": { + "vector": [0, 0, 47.5] + }, + "2.0417": { + "vector": [0, 0, 47.49] + }, + "2.0833": { + "vector": [0, 0, 47.45] + }, + "2.125": { + "vector": [0, 0, 47.39] + }, + "2.1667": { + "vector": [0, 0, 47.31] + }, + "2.2083": { + "vector": [0, 0, 47.22] + }, + "2.25": { + "vector": [0, 0, 47.11] + }, + "2.2917": { + "vector": [0, 0, 46.99] + }, + "2.3333": { + "vector": [0, 0, 46.85] + }, + "2.375": { + "vector": [0, 0, 46.71] + }, + "2.4167": { + "vector": [0, 0, 46.56] + }, + "2.4583": { + "vector": [0, 0, 46.41] + }, + "2.5": { + "vector": [0, 0, 46.25] + }, + "2.5417": { + "vector": [0, 0, 46.09] + }, + "2.5833": { + "vector": [0, 0, 45.94] + }, + "2.625": { + "vector": [0, 0, 45.79] + }, + "2.6667": { + "vector": [0, 0, 45.65] + }, + "2.7083": { + "vector": [0, 0, 45.51] + }, + "2.75": { + "vector": [0, 0, 45.39] + }, + "2.7917": { + "vector": [0, 0, 45.28] + }, + "2.8333": { + "vector": [0, 0, 45.19] + }, + "2.875": { + "vector": [0, 0, 45.11] + }, + "2.9167": { + "vector": [0, 0, 45.05] + }, + "2.9583": { + "vector": [0, 0, 45.01] + }, + "3.0": { + "vector": [0, 0, 45] + }, + "3.0417": { + "vector": [0, 0, 45.01] + }, + "3.0833": { + "vector": [0, 0, 45.05] + }, + "3.125": { + "vector": [0, 0, 45.11] + }, + "3.1667": { + "vector": [0, 0, 45.19] + }, + "3.2083": { + "vector": [0, 0, 45.28] + }, + "3.25": { + "vector": [0, 0, 45.39] + }, + "3.2917": { + "vector": [0, 0, 45.51] + }, + "3.3333": { + "vector": [0, 0, 45.65] + }, + "3.375": { + "vector": [0, 0, 45.79] + }, + "3.4167": { + "vector": [0, 0, 45.94] + }, + "3.4583": { + "vector": [0, 0, 46.09] + }, + "3.5": { + "vector": [0, 0, 46.25] + }, + "3.5417": { + "vector": [0, 0, 46.41] + }, + "3.5833": { + "vector": [0, 0, 46.56] + }, + "3.625": { + "vector": [0, 0, 46.71] + }, + "3.6667": { + "vector": [0, 0, 46.85] + }, + "3.7083": { + "vector": [0, 0, 46.99] + }, + "3.75": { + "vector": [0, 0, 47.11] + }, + "3.7917": { + "vector": [0, 0, 47.22] + }, + "3.8333": { + "vector": [0, 0, 47.31] + }, + "3.875": { + "vector": [0, 0, 47.39] + }, + "3.9167": { + "vector": [0, 0, 47.45] + }, + "3.9583": { + "vector": [0, 0, 47.49] + }, + "4.0": { + "vector": [0, 0, 47.5] + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.6667, + "bones": { + "root": { + "position": { + "0.0": { + "vector": [0, 13, 0] + }, + "0.0417": { + "vector": [0, 11.14, 0] + }, + "0.0833": { + "vector": [0, 9.42, 0] + }, + "0.125": { + "vector": [0, 10.63, 0] + }, + "0.1667": { + "vector": [0, 12.5, 0] + }, + "0.2083": { + "vector": [0, 13.63, 0] + }, + "0.25": { + "vector": [0, 12.75, 0] + }, + "0.2917": { + "vector": [0, 12.88, 0] + }, + "0.3333": { + "vector": [0, 13, 0] + }, + "0.375": { + "vector": [0, 11.14, 0] + }, + "0.4167": { + "vector": [0, 9.42, 0] + }, + "0.4583": { + "vector": [0, 10.63, 0] + }, + "0.5": { + "vector": [0, 12.5, 0] + }, + "0.5417": { + "vector": [0, 13.63, 0] + }, + "0.5833": { + "vector": [0, 12.75, 0] + }, + "0.625": { + "vector": [0, 12.88, 0] + }, + "0.6667": { + "vector": [0, 13, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [-2.5, 0, 0] + }, + "0.0417": { + "vector": [-2.23, 0, 0] + }, + "0.0833": { + "vector": [-1.56, 0, 0] + }, + "0.125": { + "vector": [-0.74, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0.74, 0, 0] + }, + "0.25": { + "vector": [1.56, 0, 0] + }, + "0.2917": { + "vector": [2.23, 0, 0] + }, + "0.3333": { + "vector": [2.5, 0, 0] + }, + "0.375": { + "vector": [2.23, 0, 0] + }, + "0.4167": { + "vector": [1.56, 0, 0] + }, + "0.4583": { + "vector": [0.74, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [-0.74, 0, 0] + }, + "0.5833": { + "vector": [-1.56, 0, 0] + }, + "0.625": { + "vector": [-2.23, 0, 0] + }, + "0.6667": { + "vector": [-2.5, 0, 0] + } + } + }, + "leftFrontThigh": { + "rotation": { + "0.0": { + "vector": [13.67, 58.61, 23.2] + }, + "0.0417": { + "vector": [13.27, 59.08, 23.78] + }, + "0.0833": { + "vector": [9.89, 50.3, 23.58] + }, + "0.125": { + "vector": [5.21, 37.36, 23] + }, + "0.1667": { + "vector": [0.9, 25.37, 22.42] + }, + "0.2083": { + "vector": [-3.25, 14.04, 21.95] + }, + "0.25": { + "vector": [-7.91, 1.19, 21.38] + }, + "0.2917": { + "vector": [-12.09, -10.9, 20.64] + }, + "0.3333": { + "vector": [-14.8, -19.97, 19.67] + }, + "0.375": { + "vector": [-15.99, -27.06, 18.02] + }, + "0.4167": { + "vector": [-16.11, -32.84, 15.86] + }, + "0.4583": { + "vector": [-14.94, -34.45, 14.08] + }, + "0.5": { + "vector": [-12.23, -29.08, 13.59] + }, + "0.5417": { + "vector": [-6.48, -11.13, 15.13] + }, + "0.5833": { + "vector": [1.68, 16.27, 18.06] + }, + "0.625": { + "vector": [9.37, 42.92, 21.16] + }, + "0.6667": { + "vector": [13.67, 58.61, 23.2] + } + } + }, + "leftFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 10] + }, + "0.0417": { + "vector": [0, 0, 11.72] + }, + "0.0833": { + "vector": [0, 0, 14.06] + }, + "0.125": { + "vector": [0, 0, 17.5] + }, + "0.1667": { + "vector": [0, 0, 22.5] + }, + "0.2083": { + "vector": [0, 0, 31.6] + }, + "0.25": { + "vector": [0, 0, 43.75] + }, + "0.2917": { + "vector": [0, 0, 54.02] + }, + "0.3333": { + "vector": [0, 0, 57.5] + }, + "0.375": { + "vector": [0, 0, 50.31] + }, + "0.4167": { + "vector": [0, 0, 35.94] + }, + "0.4583": { + "vector": [0, 0, 20.47] + }, + "0.5": { + "vector": [0, 0, 10] + }, + "0.5417": { + "vector": [0, 0, 6.37] + }, + "0.5833": { + "vector": [0, 0, 6.25] + }, + "0.625": { + "vector": [0, 0, 8.01] + }, + "0.6667": { + "vector": [0, 0, 10] + } + } + }, + "topHeadClawThing": { + "rotation": { + "0.0": { + "vector": [50, 0, 0] + }, + "0.0417": { + "vector": [49.57, 0, 0] + }, + "0.0833": { + "vector": [48.44, 0, 0] + }, + "0.125": { + "vector": [46.84, 0, 0] + }, + "0.1667": { + "vector": [45, 0, 0] + }, + "0.2083": { + "vector": [43.16, 0, 0] + }, + "0.25": { + "vector": [41.56, 0, 0] + }, + "0.2917": { + "vector": [40.43, 0, 0] + }, + "0.3333": { + "vector": [40, 0, 0] + }, + "0.375": { + "vector": [40.43, 0, 0] + }, + "0.4167": { + "vector": [41.56, 0, 0] + }, + "0.4583": { + "vector": [43.16, 0, 0] + }, + "0.5": { + "vector": [45, 0, 0] + }, + "0.5417": { + "vector": [46.84, 0, 0] + }, + "0.5833": { + "vector": [48.44, 0, 0] + }, + "0.625": { + "vector": [49.57, 0, 0] + }, + "0.6667": { + "vector": [50, 0, 0] + } + } + }, + "rightFrontThigh": { + "rotation": { + "0.0": { + "vector": [-14.8, 19.96, -19.67] + }, + "0.0417": { + "vector": [-15.98, 27.06, -18.02] + }, + "0.0833": { + "vector": [-16.11, 32.83, -15.86] + }, + "0.125": { + "vector": [-14.94, 34.45, -14.08] + }, + "0.1667": { + "vector": [-12.23, 29.08, -13.58] + }, + "0.2083": { + "vector": [-6.48, 11.13, -15.13] + }, + "0.25": { + "vector": [1.68, -16.27, -18.06] + }, + "0.2917": { + "vector": [9.37, -42.92, -21.16] + }, + "0.3333": { + "vector": [13.67, -58.61, -23.2] + }, + "0.375": { + "vector": [13.27, -59.08, -23.78] + }, + "0.4167": { + "vector": [9.89, -50.3, -23.58] + }, + "0.4583": { + "vector": [5.21, -37.36, -23] + }, + "0.5": { + "vector": [0.9, -25.37, -22.42] + }, + "0.5417": { + "vector": [-3.25, -14.04, -21.95] + }, + "0.5833": { + "vector": [-7.91, -1.2, -21.38] + }, + "0.625": { + "vector": [-12.09, 10.89, -20.64] + }, + "0.6667": { + "vector": [-14.8, 19.96, -19.67] + } + } + }, + "rightFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -57.5] + }, + "0.0417": { + "vector": [0, 0, -50.31] + }, + "0.0833": { + "vector": [0, 0, -35.94] + }, + "0.125": { + "vector": [0, 0, -20.47] + }, + "0.1667": { + "vector": [0, 0, -10] + }, + "0.2083": { + "vector": [0, 0, -6.37] + }, + "0.25": { + "vector": [0, 0, -6.25] + }, + "0.2917": { + "vector": [0, 0, -8.01] + }, + "0.3333": { + "vector": [0, 0, -10] + }, + "0.375": { + "vector": [0, 0, -11.72] + }, + "0.4167": { + "vector": [0, 0, -14.06] + }, + "0.4583": { + "vector": [0, 0, -17.5] + }, + "0.5": { + "vector": [0, 0, -22.5] + }, + "0.5417": { + "vector": [0, 0, -31.6] + }, + "0.5833": { + "vector": [0, 0, -43.75] + }, + "0.625": { + "vector": [0, 0, -54.02] + }, + "0.6667": { + "vector": [0, 0, -57.5] + } + } + }, + "rightFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 30] + }, + "0.0417": { + "vector": [0, 0, 26.45] + }, + "0.0833": { + "vector": [0, 0, 14.06] + }, + "0.125": { + "vector": [0, 0, -0.35] + }, + "0.1667": { + "vector": [0, 0, -10] + }, + "0.2083": { + "vector": [0, 0, -12.23] + }, + "0.25": { + "vector": [0, 0, -10.94] + }, + "0.2917": { + "vector": [0, 0, -9.18] + }, + "0.3333": { + "vector": [0, 0, -10] + }, + "0.375": { + "vector": [0, 0, -16.6] + }, + "0.4167": { + "vector": [0, 0, -26.56] + }, + "0.4583": { + "vector": [0, 0, -34.49] + }, + "0.5": { + "vector": [0, 0, -35] + }, + "0.5417": { + "vector": [0, 0, -22.62] + }, + "0.5833": { + "vector": [0, 0, -1.56] + }, + "0.625": { + "vector": [0, 0, 19.02] + }, + "0.6667": { + "vector": [0, 0, 30] + } + } + }, + "rightBackThigh": { + "rotation": { + "0.0": { + "vector": [-23.56, 44.83, -14.27] + }, + "0.0417": { + "vector": [-16.52, 48.8, -13.92] + }, + "0.0833": { + "vector": [-7.62, 53.76, -15.64] + }, + "0.125": { + "vector": [0.49, 57.55, -17.83] + }, + "0.1667": { + "vector": [5.15, 57.99, -18.92] + }, + "0.2083": { + "vector": [5.37, 52.91, -17.86] + }, + "0.25": { + "vector": [2.65, 44.01, -15.69] + }, + "0.2917": { + "vector": [-1.89, 34.9, -14] + }, + "0.3333": { + "vector": [-7.12, 29.22, -14.36] + }, + "0.375": { + "vector": [-14.27, 28.36, -18.53] + }, + "0.4167": { + "vector": [-23.43, 30.23, -25.23] + }, + "0.4583": { + "vector": [-31.79, 33.29, -31.45] + }, + "0.5": { + "vector": [-36.57, 35.96, -34.18] + }, + "0.5417": { + "vector": [-36.67, 37.92, -31.42] + }, + "0.5833": { + "vector": [-33.7, 39.99, -25.17] + }, + "0.625": { + "vector": [-28.91, 42.26, -18.45] + }, + "0.6667": { + "vector": [-23.56, 44.83, -14.27] + } + } + }, + "rightBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -57.5] + }, + "0.0417": { + "vector": [0, 0, -50.31] + }, + "0.0833": { + "vector": [0, 0, -35.94] + }, + "0.125": { + "vector": [0, 0, -20.47] + }, + "0.1667": { + "vector": [0, 0, -10] + }, + "0.2083": { + "vector": [0, 0, -6.37] + }, + "0.25": { + "vector": [0, 0, -6.25] + }, + "0.2917": { + "vector": [0, 0, -8.01] + }, + "0.3333": { + "vector": [0, 0, -10] + }, + "0.375": { + "vector": [0, 0, -11.72] + }, + "0.4167": { + "vector": [0, 0, -14.06] + }, + "0.4583": { + "vector": [0, 0, -17.5] + }, + "0.5": { + "vector": [0, 0, -22.5] + }, + "0.5417": { + "vector": [0, 0, -31.6] + }, + "0.5833": { + "vector": [0, 0, -43.75] + }, + "0.625": { + "vector": [0, 0, -54.02] + }, + "0.6667": { + "vector": [0, 0, -57.5] + } + } + }, + "rightBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 5] + }, + "0.0417": { + "vector": [0, 0, 4.77] + }, + "0.0833": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, -6.02] + }, + "0.1667": { + "vector": [0, 0, -10] + }, + "0.2083": { + "vector": [0, 0, -10.47] + }, + "0.25": { + "vector": [0, 0, -9.37] + }, + "0.2917": { + "vector": [0, 0, -8.59] + }, + "0.3333": { + "vector": [0, 0, -10] + }, + "0.375": { + "vector": [0, 0, -16.02] + }, + "0.4167": { + "vector": [0, 0, -25] + }, + "0.4583": { + "vector": [0, 0, -32.73] + }, + "0.5": { + "vector": [0, 0, -35] + }, + "0.5417": { + "vector": [0, 0, -28.28] + }, + "0.5833": { + "vector": [0, 0, -15.63] + }, + "0.625": { + "vector": [0, 0, -2.66] + }, + "0.6667": { + "vector": [0, 0, 5] + } + } + }, + "leftBackThigh": { + "rotation": { + "0.0": { + "vector": [-7.12, -29.22, 14.36] + }, + "0.0417": { + "vector": [-14.27, -28.36, 18.53] + }, + "0.0833": { + "vector": [-23.43, -30.23, 25.23] + }, + "0.125": { + "vector": [-31.79, -33.29, 31.44] + }, + "0.1667": { + "vector": [-36.57, -35.96, 34.18] + }, + "0.2083": { + "vector": [-36.67, -37.92, 31.42] + }, + "0.25": { + "vector": [-33.7, -39.99, 25.17] + }, + "0.2917": { + "vector": [-28.91, -42.26, 18.45] + }, + "0.3333": { + "vector": [-23.56, -44.83, 14.27] + }, + "0.375": { + "vector": [-16.52, -48.8, 13.92] + }, + "0.4167": { + "vector": [-7.62, -53.76, 15.64] + }, + "0.4583": { + "vector": [0.49, -57.55, 17.83] + }, + "0.5": { + "vector": [5.15, -57.99, 18.92] + }, + "0.5417": { + "vector": [5.37, -52.91, 17.86] + }, + "0.5833": { + "vector": [2.65, -44.01, 15.69] + }, + "0.625": { + "vector": [-1.89, -34.9, 14] + }, + "0.6667": { + "vector": [-7.12, -29.22, 14.36] + } + } + }, + "leftBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 10] + }, + "0.0417": { + "vector": [0, 0, 11.72] + }, + "0.0833": { + "vector": [0, 0, 14.06] + }, + "0.125": { + "vector": [0, 0, 17.5] + }, + "0.1667": { + "vector": [0, 0, 22.5] + }, + "0.2083": { + "vector": [0, 0, 31.6] + }, + "0.25": { + "vector": [0, 0, 43.75] + }, + "0.2917": { + "vector": [0, 0, 54.02] + }, + "0.3333": { + "vector": [0, 0, 57.5] + }, + "0.375": { + "vector": [0, 0, 50.31] + }, + "0.4167": { + "vector": [0, 0, 35.94] + }, + "0.4583": { + "vector": [0, 0, 20.47] + }, + "0.5": { + "vector": [0, 0, 10] + }, + "0.5417": { + "vector": [0, 0, 6.37] + }, + "0.5833": { + "vector": [0, 0, 6.25] + }, + "0.625": { + "vector": [0, 0, 8.01] + }, + "0.6667": { + "vector": [0, 0, 10] + } + } + }, + "leftHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-50, 0, -50] + }, + "0.0417": { + "vector": [-49.57, 0, -50] + }, + "0.0833": { + "vector": [-48.44, 0, -50] + }, + "0.125": { + "vector": [-46.84, 0, -50] + }, + "0.1667": { + "vector": [-45, 0, -50] + }, + "0.2083": { + "vector": [-43.16, 0, -50] + }, + "0.25": { + "vector": [-41.56, 0, -50] + }, + "0.2917": { + "vector": [-40.43, 0, -50] + }, + "0.3333": { + "vector": [-40, 0, -50] + }, + "0.375": { + "vector": [-40.43, 0, -50] + }, + "0.4167": { + "vector": [-41.56, 0, -50] + }, + "0.4583": { + "vector": [-43.16, 0, -50] + }, + "0.5": { + "vector": [-45, 0, -50] + }, + "0.5417": { + "vector": [-46.84, 0, -50] + }, + "0.5833": { + "vector": [-48.44, 0, -50] + }, + "0.625": { + "vector": [-49.57, 0, -50] + }, + "0.6667": { + "vector": [-50, 0, -50] + } + } + }, + "rightHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-50, 0, 50] + }, + "0.0417": { + "vector": [-49.57, 0, 50] + }, + "0.0833": { + "vector": [-48.44, 0, 50] + }, + "0.125": { + "vector": [-46.84, 0, 50] + }, + "0.1667": { + "vector": [-45, 0, 50] + }, + "0.2083": { + "vector": [-43.16, 0, 50] + }, + "0.25": { + "vector": [-41.56, 0, 50] + }, + "0.2917": { + "vector": [-40.43, 0, 50] + }, + "0.3333": { + "vector": [-40, 0, 50] + }, + "0.375": { + "vector": [-40.43, 0, 50] + }, + "0.4167": { + "vector": [-41.56, 0, 50] + }, + "0.4583": { + "vector": [-43.16, 0, 50] + }, + "0.5": { + "vector": [-45, 0, 50] + }, + "0.5417": { + "vector": [-46.84, 0, 50] + }, + "0.5833": { + "vector": [-48.44, 0, 50] + }, + "0.625": { + "vector": [-49.57, 0, 50] + }, + "0.6667": { + "vector": [-50, 0, 50] + } + } + }, + "tail1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [-0.11, 0, 0] + }, + "0.0833": { + "vector": [-0.39, 0, 0] + }, + "0.125": { + "vector": [-0.79, 0, 0] + }, + "0.1667": { + "vector": [-1.25, 0, 0] + }, + "0.2083": { + "vector": [-1.71, 0, 0] + }, + "0.25": { + "vector": [-2.11, 0, 0] + }, + "0.2917": { + "vector": [-2.39, 0, 0] + }, + "0.3333": { + "vector": [-2.5, 0, 0] + }, + "0.375": { + "vector": [-2.39, 0, 0] + }, + "0.4167": { + "vector": [-2.11, 0, 0] + }, + "0.4583": { + "vector": [-1.71, 0, 0] + }, + "0.5": { + "vector": [-1.25, 0, 0] + }, + "0.5417": { + "vector": [-0.79, 0, 0] + }, + "0.5833": { + "vector": [-0.39, 0, 0] + }, + "0.625": { + "vector": [-0.11, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [-0.11, 0, 0] + }, + "0.0833": { + "vector": [-0.39, 0, 0] + }, + "0.125": { + "vector": [-0.79, 0, 0] + }, + "0.1667": { + "vector": [-1.25, 0, 0] + }, + "0.2083": { + "vector": [-1.71, 0, 0] + }, + "0.25": { + "vector": [-2.11, 0, 0] + }, + "0.2917": { + "vector": [-2.39, 0, 0] + }, + "0.3333": { + "vector": [-2.5, 0, 0] + }, + "0.375": { + "vector": [-2.39, 0, 0] + }, + "0.4167": { + "vector": [-2.11, 0, 0] + }, + "0.4583": { + "vector": [-1.71, 0, 0] + }, + "0.5": { + "vector": [-1.25, 0, 0] + }, + "0.5417": { + "vector": [-0.79, 0, 0] + }, + "0.5833": { + "vector": [-0.39, 0, 0] + }, + "0.625": { + "vector": [-0.11, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [-0.11, 0, 0] + }, + "0.0833": { + "vector": [-0.39, 0, 0] + }, + "0.125": { + "vector": [-0.79, 0, 0] + }, + "0.1667": { + "vector": [-1.25, 0, 0] + }, + "0.2083": { + "vector": [-1.71, 0, 0] + }, + "0.25": { + "vector": [-2.11, 0, 0] + }, + "0.2917": { + "vector": [-2.39, 0, 0] + }, + "0.3333": { + "vector": [-2.5, 0, 0] + }, + "0.375": { + "vector": [-2.39, 0, 0] + }, + "0.4167": { + "vector": [-2.11, 0, 0] + }, + "0.4583": { + "vector": [-1.71, 0, 0] + }, + "0.5": { + "vector": [-1.25, 0, 0] + }, + "0.5417": { + "vector": [-0.79, 0, 0] + }, + "0.5833": { + "vector": [-0.39, 0, 0] + }, + "0.625": { + "vector": [-0.11, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + } + } + }, + "tail4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0.11, 0, 0] + }, + "0.0833": { + "vector": [0.39, 0, 0] + }, + "0.125": { + "vector": [0.79, 0, 0] + }, + "0.1667": { + "vector": [1.25, 0, 0] + }, + "0.2083": { + "vector": [1.71, 0, 0] + }, + "0.25": { + "vector": [2.11, 0, 0] + }, + "0.2917": { + "vector": [2.39, 0, 0] + }, + "0.3333": { + "vector": [2.5, 0, 0] + }, + "0.375": { + "vector": [2.39, 0, 0] + }, + "0.4167": { + "vector": [2.11, 0, 0] + }, + "0.4583": { + "vector": [1.71, 0, 0] + }, + "0.5": { + "vector": [1.25, 0, 0] + }, + "0.5417": { + "vector": [0.79, 0, 0] + }, + "0.5833": { + "vector": [0.39, 0, 0] + }, + "0.625": { + "vector": [0.11, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + } + } + }, + "tail5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0.11, 0, 0] + }, + "0.0833": { + "vector": [0.39, 0, 0] + }, + "0.125": { + "vector": [0.79, 0, 0] + }, + "0.1667": { + "vector": [1.25, 0, 0] + }, + "0.2083": { + "vector": [1.71, 0, 0] + }, + "0.25": { + "vector": [2.11, 0, 0] + }, + "0.2917": { + "vector": [2.39, 0, 0] + }, + "0.3333": { + "vector": [2.5, 0, 0] + }, + "0.375": { + "vector": [2.39, 0, 0] + }, + "0.4167": { + "vector": [2.11, 0, 0] + }, + "0.4583": { + "vector": [1.71, 0, 0] + }, + "0.5": { + "vector": [1.25, 0, 0] + }, + "0.5417": { + "vector": [0.79, 0, 0] + }, + "0.5833": { + "vector": [0.39, 0, 0] + }, + "0.625": { + "vector": [0.11, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + } + } + }, + "leftBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 10] + }, + "0.0417": { + "vector": [0, 0, 16.02] + }, + "0.0833": { + "vector": [0, 0, 25] + }, + "0.125": { + "vector": [0, 0, 32.73] + }, + "0.1667": { + "vector": [0, 0, 35] + }, + "0.2083": { + "vector": [0, 0, 28.28] + }, + "0.25": { + "vector": [0, 0, 15.63] + }, + "0.2917": { + "vector": [0, 0, 2.66] + }, + "0.3333": { + "vector": [0, 0, -5] + }, + "0.375": { + "vector": [0, 0, -4.77] + }, + "0.4167": { + "vector": [0, 0, 0] + }, + "0.4583": { + "vector": [0, 0, 6.02] + }, + "0.5": { + "vector": [0, 0, 10] + }, + "0.5417": { + "vector": [0, 0, 10.47] + }, + "0.5833": { + "vector": [0, 0, 9.38] + }, + "0.625": { + "vector": [0, 0, 8.59] + }, + "0.6667": { + "vector": [0, 0, 10] + } + } + }, + "leftFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 10] + }, + "0.0417": { + "vector": [0, 0, 16.6] + }, + "0.0833": { + "vector": [0, 0, 26.56] + }, + "0.125": { + "vector": [0, 0, 34.49] + }, + "0.1667": { + "vector": [0, 0, 35] + }, + "0.2083": { + "vector": [0, 0, 22.62] + }, + "0.25": { + "vector": [0, 0, 1.56] + }, + "0.2917": { + "vector": [0, 0, -19.02] + }, + "0.3333": { + "vector": [0, 0, -30] + }, + "0.375": { + "vector": [0, 0, -26.44] + }, + "0.4167": { + "vector": [0, 0, -14.06] + }, + "0.4583": { + "vector": [0, 0, 0.35] + }, + "0.5": { + "vector": [0, 0, 10] + }, + "0.5417": { + "vector": [0, 0, 12.23] + }, + "0.5833": { + "vector": [0, 0, 10.94] + }, + "0.625": { + "vector": [0, 0, 9.18] + }, + "0.6667": { + "vector": [0, 0, 10] + } + } + } + } + }, + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "root": { + "position": { + "0.0": { + "vector": [0, 4, 0] + }, + "0.0417": { + "vector": [0, 4.13, 0.28] + }, + "0.0833": { + "vector": [0, 4.33, 0.44] + }, + "0.125": { + "vector": [0, 4.56, 0.5] + }, + "0.1667": { + "vector": [0, 4.78, 0.44] + }, + "0.2083": { + "vector": [0, 4.94, 0.28] + }, + "0.25": { + "vector": [0, 5, 0] + }, + "0.2917": { + "vector": [0, 4.94, -0.53] + }, + "0.3333": { + "vector": [0, 4.78, -1.33] + }, + "0.375": { + "vector": [0, 4.56, -2.25] + }, + "0.4167": { + "vector": [0, 4.33, -3.11] + }, + "0.4583": { + "vector": [0, 4.13, -3.75] + }, + "0.5": { + "vector": [0, 4, -4] + }, + "0.5417": { + "vector": [0, 3.96, -3.93] + }, + "0.5833": { + "vector": [0, 3.93, -3.75] + }, + "0.625": { + "vector": [0, 3.91, -3.47] + }, + "0.6667": { + "vector": [0, 3.89, -3.11] + }, + "0.7083": { + "vector": [0, 3.88, -2.7] + }, + "0.75": { + "vector": [0, 3.88, -2.25] + }, + "0.7917": { + "vector": [0, 3.88, -1.79] + }, + "0.8333": { + "vector": [0, 3.89, -1.33] + }, + "0.875": { + "vector": [0, 3.91, -0.91] + }, + "0.9167": { + "vector": [0, 3.93, -0.53] + }, + "0.9583": { + "vector": [0, 3.96, -0.22] + }, + "1.0": { + "vector": [0, 4, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [-2.5, 0, 0] + }, + "0.0417": { + "vector": [-2.52, 0, 0] + }, + "0.0833": { + "vector": [-2.22, 0, 0] + }, + "0.125": { + "vector": [-1.72, 0, 0] + }, + "0.1667": { + "vector": [-1.11, 0, 0] + }, + "0.2083": { + "vector": [-0.5, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0.5, 0, 0] + }, + "0.3333": { + "vector": [1.11, 0, 0] + }, + "0.375": { + "vector": [1.72, 0, 0] + }, + "0.4167": { + "vector": [2.22, 0, 0] + }, + "0.4583": { + "vector": [2.52, 0, 0] + }, + "0.5": { + "vector": [2.5, 0, 0] + }, + "0.5417": { + "vector": [2.32, 0, 0] + }, + "0.5833": { + "vector": [2.01, 0, 0] + }, + "0.625": { + "vector": [1.6, 0, 0] + }, + "0.6667": { + "vector": [1.11, 0, 0] + }, + "0.7083": { + "vector": [0.57, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [-0.57, 0, 0] + }, + "0.8333": { + "vector": [-1.11, 0, 0] + }, + "0.875": { + "vector": [-1.6, 0, 0] + }, + "0.9167": { + "vector": [-2.01, 0, 0] + }, + "0.9583": { + "vector": [-2.32, 0, 0] + }, + "1.0": { + "vector": [-2.5, 0, 0] + } + } + }, + "leftFrontThigh": { + "rotation": { + "0.0": { + "vector": [9.57, 11.6, 44.98] + }, + "0.0417": { + "vector": [9.71, 12.07, 45.74] + }, + "0.0833": { + "vector": [9.92, 12.24, 46.8] + }, + "0.125": { + "vector": [10.14, 12.16, 47.97] + }, + "0.1667": { + "vector": [10.35, 11.86, 49.03] + }, + "0.2083": { + "vector": [10.5, 11.37, 49.78] + }, + "0.25": { + "vector": [10.54, 10.73, 49.99] + }, + "0.2917": { + "vector": [10.46, 9.68, 49.49] + }, + "0.3333": { + "vector": [10.27, 8.13, 48.41] + }, + "0.375": { + "vector": [10.02, 6.4, 47] + }, + "0.4167": { + "vector": [9.75, 4.79, 45.55] + }, + "0.4583": { + "vector": [9.53, 3.63, 44.31] + }, + "0.5": { + "vector": [9.39, 3.22, 43.56] + }, + "0.5417": { + "vector": [9.35, 3.39, 43.4] + }, + "0.5833": { + "vector": [9.33, 3.8, 43.3] + }, + "0.625": { + "vector": [9.32, 4.41, 43.28] + }, + "0.6667": { + "vector": [9.32, 5.18, 43.32] + }, + "0.7083": { + "vector": [9.33, 6.05, 43.41] + }, + "0.75": { + "vector": [9.35, 7, 43.55] + }, + "0.7917": { + "vector": [9.37, 7.96, 43.73] + }, + "0.8333": { + "vector": [9.4, 8.91, 43.95] + }, + "0.875": { + "vector": [9.44, 9.79, 44.18] + }, + "0.9167": { + "vector": [9.48, 10.56, 44.44] + }, + "0.9583": { + "vector": [9.52, 11.18, 44.71] + }, + "1.0": { + "vector": [9.57, 11.6, 44.98] + } + } + }, + "leftFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -30] + }, + "0.0417": { + "vector": [0, 0, -30.33] + }, + "0.0833": { + "vector": [0, 0, -30.83] + }, + "0.125": { + "vector": [0, 0, -31.41] + }, + "0.1667": { + "vector": [0, 0, -31.94] + }, + "0.2083": { + "vector": [0, 0, -32.34] + }, + "0.25": { + "vector": [0, 0, -32.5] + }, + "0.2917": { + "vector": [0, 0, -32.34] + }, + "0.3333": { + "vector": [0, 0, -31.94] + }, + "0.375": { + "vector": [0, 0, -31.41] + }, + "0.4167": { + "vector": [0, 0, -30.83] + }, + "0.4583": { + "vector": [0, 0, -30.33] + }, + "0.5": { + "vector": [0, 0, -30] + }, + "0.5417": { + "vector": [0, 0, -29.9] + }, + "0.5833": { + "vector": [0, 0, -29.83] + }, + "0.625": { + "vector": [0, 0, -29.77] + }, + "0.6667": { + "vector": [0, 0, -29.72] + }, + "0.7083": { + "vector": [0, 0, -29.7] + }, + "0.75": { + "vector": [0, 0, -29.69] + }, + "0.7917": { + "vector": [0, 0, -29.7] + }, + "0.8333": { + "vector": [0, 0, -29.72] + }, + "0.875": { + "vector": [0, 0, -29.77] + }, + "0.9167": { + "vector": [0, 0, -29.83] + }, + "0.9583": { + "vector": [0, 0, -29.9] + }, + "1.0": { + "vector": [0, 0, -30] + } + } + }, + "topHeadClawThing": { + "rotation": { + "0.0": { + "vector": [50, 0, 0] + }, + "0.0417": { + "vector": [44.62, 0, 0] + }, + "0.0833": { + "vector": [38.33, 0, 0] + }, + "0.125": { + "vector": [32.19, 0, 0] + }, + "0.1667": { + "vector": [27.22, 0, 0] + }, + "0.2083": { + "vector": [24.48, 0, 0] + }, + "0.25": { + "vector": [25, 0, 0] + }, + "0.2917": { + "vector": [30.52, 0, 0] + }, + "0.3333": { + "vector": [40.56, 0, 0] + }, + "0.375": { + "vector": [52.81, 0, 0] + }, + "0.4167": { + "vector": [65, 0, 0] + }, + "0.4583": { + "vector": [74.83, 0, 0] + }, + "0.5": { + "vector": [80, 0, 0] + }, + "0.5417": { + "vector": [80.46, 0, 0] + }, + "0.5833": { + "vector": [79.86, 0, 0] + }, + "0.625": { + "vector": [78.36, 0, 0] + }, + "0.6667": { + "vector": [76.11, 0, 0] + }, + "0.7083": { + "vector": [73.27, 0, 0] + }, + "0.75": { + "vector": [70, 0, 0] + }, + "0.7917": { + "vector": [66.45, 0, 0] + }, + "0.8333": { + "vector": [62.78, 0, 0] + }, + "0.875": { + "vector": [59.14, 0, 0] + }, + "0.9167": { + "vector": [55.69, 0, 0] + }, + "0.9583": { + "vector": [52.6, 0, 0] + }, + "1.0": { + "vector": [50, 0, 0] + } + } + }, + "rightFrontThigh": { + "rotation": { + "0.0": { + "vector": [9.57, -11.6, -44.97] + }, + "0.0417": { + "vector": [9.71, -12.07, -45.74] + }, + "0.0833": { + "vector": [9.92, -12.24, -46.8] + }, + "0.125": { + "vector": [10.14, -12.16, -47.97] + }, + "0.1667": { + "vector": [10.35, -11.86, -49.03] + }, + "0.2083": { + "vector": [10.5, -11.37, -49.78] + }, + "0.25": { + "vector": [10.54, -10.73, -49.99] + }, + "0.2917": { + "vector": [10.46, -9.68, -49.49] + }, + "0.3333": { + "vector": [10.27, -8.13, -48.41] + }, + "0.375": { + "vector": [10.02, -6.4, -47] + }, + "0.4167": { + "vector": [9.75, -4.79, -45.55] + }, + "0.4583": { + "vector": [9.53, -3.63, -44.31] + }, + "0.5": { + "vector": [9.39, -3.22, -43.56] + }, + "0.5417": { + "vector": [9.35, -3.39, -43.4] + }, + "0.5833": { + "vector": [9.33, -3.8, -43.3] + }, + "0.625": { + "vector": [9.32, -4.41, -43.28] + }, + "0.6667": { + "vector": [9.32, -5.18, -43.32] + }, + "0.7083": { + "vector": [9.33, -6.05, -43.41] + }, + "0.75": { + "vector": [9.35, -7, -43.55] + }, + "0.7917": { + "vector": [9.37, -7.96, -43.73] + }, + "0.8333": { + "vector": [9.4, -8.91, -43.95] + }, + "0.875": { + "vector": [9.44, -9.79, -44.18] + }, + "0.9167": { + "vector": [9.48, -10.56, -44.44] + }, + "0.9583": { + "vector": [9.52, -11.18, -44.71] + }, + "1.0": { + "vector": [9.57, -11.6, -44.97] + } + } + }, + "rightFrontLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 30] + }, + "0.0417": { + "vector": [0, 0, 30.33] + }, + "0.0833": { + "vector": [0, 0, 30.83] + }, + "0.125": { + "vector": [0, 0, 31.41] + }, + "0.1667": { + "vector": [0, 0, 31.94] + }, + "0.2083": { + "vector": [0, 0, 32.34] + }, + "0.25": { + "vector": [0, 0, 32.5] + }, + "0.2917": { + "vector": [0, 0, 32.34] + }, + "0.3333": { + "vector": [0, 0, 31.94] + }, + "0.375": { + "vector": [0, 0, 31.41] + }, + "0.4167": { + "vector": [0, 0, 30.83] + }, + "0.4583": { + "vector": [0, 0, 30.33] + }, + "0.5": { + "vector": [0, 0, 30] + }, + "0.5417": { + "vector": [0, 0, 29.9] + }, + "0.5833": { + "vector": [0, 0, 29.83] + }, + "0.625": { + "vector": [0, 0, 29.77] + }, + "0.6667": { + "vector": [0, 0, 29.72] + }, + "0.7083": { + "vector": [0, 0, 29.7] + }, + "0.75": { + "vector": [0, 0, 29.69] + }, + "0.7917": { + "vector": [0, 0, 29.7] + }, + "0.8333": { + "vector": [0, 0, 29.72] + }, + "0.875": { + "vector": [0, 0, 29.77] + }, + "0.9167": { + "vector": [0, 0, 29.83] + }, + "0.9583": { + "vector": [0, 0, 29.9] + }, + "1.0": { + "vector": [0, 0, 30] + } + } + }, + "rightFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, -47.5] + }, + "0.0417": { + "vector": [0, 0, -47.17] + }, + "0.0833": { + "vector": [0, 0, -46.67] + }, + "0.125": { + "vector": [0, 0, -46.09] + }, + "0.1667": { + "vector": [0, 0, -45.56] + }, + "0.2083": { + "vector": [0, 0, -45.16] + }, + "0.25": { + "vector": [0, 0, -45] + }, + "0.2917": { + "vector": [0, 0, -45.16] + }, + "0.3333": { + "vector": [0, 0, -45.56] + }, + "0.375": { + "vector": [0, 0, -46.09] + }, + "0.4167": { + "vector": [0, 0, -46.67] + }, + "0.4583": { + "vector": [0, 0, -47.17] + }, + "0.5": { + "vector": [0, 0, -47.5] + }, + "0.5417": { + "vector": [0, 0, -47.6] + }, + "0.5833": { + "vector": [0, 0, -47.67] + }, + "0.625": { + "vector": [0, 0, -47.73] + }, + "0.6667": { + "vector": [0, 0, -47.78] + }, + "0.7083": { + "vector": [0, 0, -47.8] + }, + "0.75": { + "vector": [0, 0, -47.81] + }, + "0.7917": { + "vector": [0, 0, -47.8] + }, + "0.8333": { + "vector": [0, 0, -47.78] + }, + "0.875": { + "vector": [0, 0, -47.73] + }, + "0.9167": { + "vector": [0, 0, -47.67] + }, + "0.9583": { + "vector": [0, 0, -47.6] + }, + "1.0": { + "vector": [0, 0, -47.5] + } + } + }, + "rightBackThigh": { + "rotation": { + "0.0": { + "vector": [-14.41, 26.25, -29.69] + }, + "0.0417": { + "vector": [-14.97, 25.52, -30.98] + }, + "0.0833": { + "vector": [-15.9, 24.87, -33.1] + }, + "0.125": { + "vector": [-16.99, 24.38, -35.59] + }, + "0.1667": { + "vector": [-18.05, 24.11, -37.99] + }, + "0.2083": { + "vector": [-18.87, 24.14, -39.84] + }, + "0.25": { + "vector": [-19.25, 24.54, -40.69] + }, + "0.2917": { + "vector": [-19.1, 25.6, -40.29] + }, + "0.3333": { + "vector": [-18.55, 27.33, -38.99] + }, + "0.375": { + "vector": [-17.76, 29.36, -37.13] + }, + "0.4167": { + "vector": [-16.89, 31.31, -35.09] + }, + "0.4583": { + "vector": [-16.09, 32.81, -33.23] + }, + "0.5": { + "vector": [-15.52, 33.49, -31.92] + }, + "0.5417": { + "vector": [-15.32, 33.44, -31.46] + }, + "0.5833": { + "vector": [-15.12, 33.16, -31.01] + }, + "0.625": { + "vector": [-14.92, 32.69, -30.59] + }, + "0.6667": { + "vector": [-14.74, 32.07, -30.2] + }, + "0.7083": { + "vector": [-14.57, 31.34, -29.85] + }, + "0.75": { + "vector": [-14.43, 30.54, -29.57] + }, + "0.7917": { + "vector": [-14.32, 29.69, -29.35] + }, + "0.8333": { + "vector": [-14.24, 28.85, -29.21] + }, + "0.875": { + "vector": [-14.21, 28.05, -29.16] + }, + "0.9167": { + "vector": [-14.22, 27.32, -29.22] + }, + "0.9583": { + "vector": [-14.29, 26.71, -29.39] + }, + "1.0": { + "vector": [-14.41, 26.25, -29.69] + } + } + }, + "rightBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, 7.5] + }, + "0.0417": { + "vector": [0, 0, 9.17] + }, + "0.0833": { + "vector": [0, 0, 11.39] + }, + "0.125": { + "vector": [0, 0, 13.75] + }, + "0.1667": { + "vector": [0, 0, 15.83] + }, + "0.2083": { + "vector": [0, 0, 17.22] + }, + "0.25": { + "vector": [0, 0, 17.5] + }, + "0.2917": { + "vector": [0, 0, 16.22] + }, + "0.3333": { + "vector": [0, 0, 13.61] + }, + "0.375": { + "vector": [0, 0, 10.31] + }, + "0.4167": { + "vector": [0, 0, 6.94] + }, + "0.4583": { + "vector": [0, 0, 4.13] + }, + "0.5": { + "vector": [0, 0, 2.5] + }, + "0.5417": { + "vector": [0, 0, 2.2] + }, + "0.5833": { + "vector": [0, 0, 2.12] + }, + "0.625": { + "vector": [0, 0, 2.23] + }, + "0.6667": { + "vector": [0, 0, 2.5] + }, + "0.7083": { + "vector": [0, 0, 2.91] + }, + "0.75": { + "vector": [0, 0, 3.44] + }, + "0.7917": { + "vector": [0, 0, 4.05] + }, + "0.8333": { + "vector": [0, 0, 4.72] + }, + "0.875": { + "vector": [0, 0, 5.43] + }, + "0.9167": { + "vector": [0, 0, 6.15] + }, + "0.9583": { + "vector": [0, 0, 6.84] + }, + "1.0": { + "vector": [0, 0, 7.5] + } + } + }, + "rightBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, -50] + }, + "0.0417": { + "vector": [0, 0, -50.02] + }, + "0.0833": { + "vector": [0, 0, -49.72] + }, + "0.125": { + "vector": [0, 0, -49.22] + }, + "0.1667": { + "vector": [0, 0, -48.61] + }, + "0.2083": { + "vector": [0, 0, -48] + }, + "0.25": { + "vector": [0, 0, -47.5] + }, + "0.2917": { + "vector": [0, 0, -47] + }, + "0.3333": { + "vector": [0, 0, -46.39] + }, + "0.375": { + "vector": [0, 0, -45.78] + }, + "0.4167": { + "vector": [0, 0, -45.28] + }, + "0.4583": { + "vector": [0, 0, -44.98] + }, + "0.5": { + "vector": [0, 0, -45] + }, + "0.5417": { + "vector": [0, 0, -45.18] + }, + "0.5833": { + "vector": [0, 0, -45.49] + }, + "0.625": { + "vector": [0, 0, -45.9] + }, + "0.6667": { + "vector": [0, 0, -46.39] + }, + "0.7083": { + "vector": [0, 0, -46.93] + }, + "0.75": { + "vector": [0, 0, -47.5] + }, + "0.7917": { + "vector": [0, 0, -48.07] + }, + "0.8333": { + "vector": [0, 0, -48.61] + }, + "0.875": { + "vector": [0, 0, -49.1] + }, + "0.9167": { + "vector": [0, 0, -49.51] + }, + "0.9583": { + "vector": [0, 0, -49.82] + }, + "1.0": { + "vector": [0, 0, -50] + } + } + }, + "leftBackThigh": { + "rotation": { + "0.0": { + "vector": [-14.41, -26.25, 29.69] + }, + "0.0417": { + "vector": [-14.97, -25.52, 30.98] + }, + "0.0833": { + "vector": [-15.9, -24.87, 33.1] + }, + "0.125": { + "vector": [-16.99, -24.38, 35.59] + }, + "0.1667": { + "vector": [-18.05, -24.11, 37.99] + }, + "0.2083": { + "vector": [-18.87, -24.14, 39.84] + }, + "0.25": { + "vector": [-19.25, -24.54, 40.69] + }, + "0.2917": { + "vector": [-19.1, -25.6, 40.29] + }, + "0.3333": { + "vector": [-18.55, -27.33, 38.99] + }, + "0.375": { + "vector": [-17.76, -29.36, 37.13] + }, + "0.4167": { + "vector": [-16.89, -31.31, 35.09] + }, + "0.4583": { + "vector": [-16.09, -32.81, 33.23] + }, + "0.5": { + "vector": [-15.52, -33.49, 31.92] + }, + "0.5417": { + "vector": [-15.32, -33.44, 31.46] + }, + "0.5833": { + "vector": [-15.12, -33.16, 31.01] + }, + "0.625": { + "vector": [-14.92, -32.69, 30.59] + }, + "0.6667": { + "vector": [-14.74, -32.07, 30.2] + }, + "0.7083": { + "vector": [-14.57, -31.34, 29.85] + }, + "0.75": { + "vector": [-14.43, -30.54, 29.57] + }, + "0.7917": { + "vector": [-14.32, -29.69, 29.35] + }, + "0.8333": { + "vector": [-14.24, -28.85, 29.21] + }, + "0.875": { + "vector": [-14.21, -28.05, 29.16] + }, + "0.9167": { + "vector": [-14.22, -27.32, 29.22] + }, + "0.9583": { + "vector": [-14.29, -26.71, 29.39] + }, + "1.0": { + "vector": [-14.41, -26.25, 29.69] + } + } + }, + "leftBackLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -7.5] + }, + "0.0417": { + "vector": [0, 0, -9.17] + }, + "0.0833": { + "vector": [0, 0, -11.39] + }, + "0.125": { + "vector": [0, 0, -13.75] + }, + "0.1667": { + "vector": [0, 0, -15.83] + }, + "0.2083": { + "vector": [0, 0, -17.22] + }, + "0.25": { + "vector": [0, 0, -17.5] + }, + "0.2917": { + "vector": [0, 0, -16.22] + }, + "0.3333": { + "vector": [0, 0, -13.61] + }, + "0.375": { + "vector": [0, 0, -10.31] + }, + "0.4167": { + "vector": [0, 0, -6.94] + }, + "0.4583": { + "vector": [0, 0, -4.13] + }, + "0.5": { + "vector": [0, 0, -2.5] + }, + "0.5417": { + "vector": [0, 0, -2.2] + }, + "0.5833": { + "vector": [0, 0, -2.12] + }, + "0.625": { + "vector": [0, 0, -2.23] + }, + "0.6667": { + "vector": [0, 0, -2.5] + }, + "0.7083": { + "vector": [0, 0, -2.91] + }, + "0.75": { + "vector": [0, 0, -3.44] + }, + "0.7917": { + "vector": [0, 0, -4.05] + }, + "0.8333": { + "vector": [0, 0, -4.72] + }, + "0.875": { + "vector": [0, 0, -5.43] + }, + "0.9167": { + "vector": [0, 0, -6.15] + }, + "0.9583": { + "vector": [0, 0, -6.84] + }, + "1.0": { + "vector": [0, 0, -7.5] + } + } + }, + "leftHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-50, 0, -50] + }, + "0.0417": { + "vector": [-44.62, 0, -50] + }, + "0.0833": { + "vector": [-38.33, 0, -50] + }, + "0.125": { + "vector": [-32.19, 0, -50] + }, + "0.1667": { + "vector": [-27.22, 0, -50] + }, + "0.2083": { + "vector": [-24.48, 0, -50] + }, + "0.25": { + "vector": [-25, 0, -50] + }, + "0.2917": { + "vector": [-30.52, 0, -50] + }, + "0.3333": { + "vector": [-40.56, 0, -50] + }, + "0.375": { + "vector": [-52.81, 0, -50] + }, + "0.4167": { + "vector": [-65, 0, -50] + }, + "0.4583": { + "vector": [-74.83, 0, -50] + }, + "0.5": { + "vector": [-80, 0, -50] + }, + "0.5417": { + "vector": [-80.46, 0, -50] + }, + "0.5833": { + "vector": [-79.86, 0, -50] + }, + "0.625": { + "vector": [-78.36, 0, -50] + }, + "0.6667": { + "vector": [-76.11, 0, -50] + }, + "0.7083": { + "vector": [-73.27, 0, -50] + }, + "0.75": { + "vector": [-70, 0, -50] + }, + "0.7917": { + "vector": [-66.45, 0, -50] + }, + "0.8333": { + "vector": [-62.78, 0, -50] + }, + "0.875": { + "vector": [-59.14, 0, -50] + }, + "0.9167": { + "vector": [-55.69, 0, -50] + }, + "0.9583": { + "vector": [-52.6, 0, -50] + }, + "1.0": { + "vector": [-50, 0, -50] + } + } + }, + "rightHeadClawThing": { + "rotation": { + "0.0": { + "vector": [-50, 0, 50] + }, + "0.0417": { + "vector": [-44.62, 0, 50] + }, + "0.0833": { + "vector": [-38.33, 0, 50] + }, + "0.125": { + "vector": [-32.19, 0, 50] + }, + "0.1667": { + "vector": [-27.22, 0, 50] + }, + "0.2083": { + "vector": [-24.48, 0, 50] + }, + "0.25": { + "vector": [-25, 0, 50] + }, + "0.2917": { + "vector": [-30.52, 0, 50] + }, + "0.3333": { + "vector": [-40.56, 0, 50] + }, + "0.375": { + "vector": [-52.81, 0, 50] + }, + "0.4167": { + "vector": [-65, 0, 50] + }, + "0.4583": { + "vector": [-74.83, 0, 50] + }, + "0.5": { + "vector": [-80, 0, 50] + }, + "0.5417": { + "vector": [-80.46, 0, 50] + }, + "0.5833": { + "vector": [-79.86, 0, 50] + }, + "0.625": { + "vector": [-78.36, 0, 50] + }, + "0.6667": { + "vector": [-76.11, 0, 50] + }, + "0.7083": { + "vector": [-73.27, 0, 50] + }, + "0.75": { + "vector": [-70, 0, 50] + }, + "0.7917": { + "vector": [-66.45, 0, 50] + }, + "0.8333": { + "vector": [-62.78, 0, 50] + }, + "0.875": { + "vector": [-59.14, 0, 50] + }, + "0.9167": { + "vector": [-55.69, 0, 50] + }, + "0.9583": { + "vector": [-52.6, 0, 50] + }, + "1.0": { + "vector": [-50, 0, 50] + } + } + }, + "tail1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [-0.05, 0, 0] + }, + "0.0833": { + "vector": [-0.19, 0, 0] + }, + "0.125": { + "vector": [-0.39, 0, 0] + }, + "0.1667": { + "vector": [-0.65, 0, 0] + }, + "0.2083": { + "vector": [-0.94, 0, 0] + }, + "0.25": { + "vector": [-1.25, 0, 0] + }, + "0.2917": { + "vector": [-1.56, 0, 0] + }, + "0.3333": { + "vector": [-1.85, 0, 0] + }, + "0.375": { + "vector": [-2.11, 0, 0] + }, + "0.4167": { + "vector": [-2.31, 0, 0] + }, + "0.4583": { + "vector": [-2.45, 0, 0] + }, + "0.5": { + "vector": [-2.5, 0, 0] + }, + "0.5417": { + "vector": [-2.45, 0, 0] + }, + "0.5833": { + "vector": [-2.31, 0, 0] + }, + "0.625": { + "vector": [-2.11, 0, 0] + }, + "0.6667": { + "vector": [-1.85, 0, 0] + }, + "0.7083": { + "vector": [-1.56, 0, 0] + }, + "0.75": { + "vector": [-1.25, 0, 0] + }, + "0.7917": { + "vector": [-0.94, 0, 0] + }, + "0.8333": { + "vector": [-0.65, 0, 0] + }, + "0.875": { + "vector": [-0.39, 0, 0] + }, + "0.9167": { + "vector": [-0.19, 0, 0] + }, + "0.9583": { + "vector": [-0.05, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [-0.05, 0, 0] + }, + "0.0833": { + "vector": [-0.19, 0, 0] + }, + "0.125": { + "vector": [-0.39, 0, 0] + }, + "0.1667": { + "vector": [-0.65, 0, 0] + }, + "0.2083": { + "vector": [-0.94, 0, 0] + }, + "0.25": { + "vector": [-1.25, 0, 0] + }, + "0.2917": { + "vector": [-1.56, 0, 0] + }, + "0.3333": { + "vector": [-1.85, 0, 0] + }, + "0.375": { + "vector": [-2.11, 0, 0] + }, + "0.4167": { + "vector": [-2.31, 0, 0] + }, + "0.4583": { + "vector": [-2.45, 0, 0] + }, + "0.5": { + "vector": [-2.5, 0, 0] + }, + "0.5417": { + "vector": [-2.45, 0, 0] + }, + "0.5833": { + "vector": [-2.31, 0, 0] + }, + "0.625": { + "vector": [-2.11, 0, 0] + }, + "0.6667": { + "vector": [-1.85, 0, 0] + }, + "0.7083": { + "vector": [-1.56, 0, 0] + }, + "0.75": { + "vector": [-1.25, 0, 0] + }, + "0.7917": { + "vector": [-0.94, 0, 0] + }, + "0.8333": { + "vector": [-0.65, 0, 0] + }, + "0.875": { + "vector": [-0.39, 0, 0] + }, + "0.9167": { + "vector": [-0.19, 0, 0] + }, + "0.9583": { + "vector": [-0.05, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [-0.05, 0, 0] + }, + "0.0833": { + "vector": [-0.19, 0, 0] + }, + "0.125": { + "vector": [-0.39, 0, 0] + }, + "0.1667": { + "vector": [-0.65, 0, 0] + }, + "0.2083": { + "vector": [-0.94, 0, 0] + }, + "0.25": { + "vector": [-1.25, 0, 0] + }, + "0.2917": { + "vector": [-1.56, 0, 0] + }, + "0.3333": { + "vector": [-1.85, 0, 0] + }, + "0.375": { + "vector": [-2.11, 0, 0] + }, + "0.4167": { + "vector": [-2.31, 0, 0] + }, + "0.4583": { + "vector": [-2.45, 0, 0] + }, + "0.5": { + "vector": [-2.5, 0, 0] + }, + "0.5417": { + "vector": [-2.45, 0, 0] + }, + "0.5833": { + "vector": [-2.31, 0, 0] + }, + "0.625": { + "vector": [-2.11, 0, 0] + }, + "0.6667": { + "vector": [-1.85, 0, 0] + }, + "0.7083": { + "vector": [-1.56, 0, 0] + }, + "0.75": { + "vector": [-1.25, 0, 0] + }, + "0.7917": { + "vector": [-0.94, 0, 0] + }, + "0.8333": { + "vector": [-0.65, 0, 0] + }, + "0.875": { + "vector": [-0.39, 0, 0] + }, + "0.9167": { + "vector": [-0.19, 0, 0] + }, + "0.9583": { + "vector": [-0.05, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "tail4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0.05, 0, 0] + }, + "0.0833": { + "vector": [0.19, 0, 0] + }, + "0.125": { + "vector": [0.39, 0, 0] + }, + "0.1667": { + "vector": [0.65, 0, 0] + }, + "0.2083": { + "vector": [0.94, 0, 0] + }, + "0.25": { + "vector": [1.25, 0, 0] + }, + "0.2917": { + "vector": [1.56, 0, 0] + }, + "0.3333": { + "vector": [1.85, 0, 0] + }, + "0.375": { + "vector": [2.11, 0, 0] + }, + "0.4167": { + "vector": [2.31, 0, 0] + }, + "0.4583": { + "vector": [2.45, 0, 0] + }, + "0.5": { + "vector": [2.5, 0, 0] + }, + "0.5417": { + "vector": [2.45, 0, 0] + }, + "0.5833": { + "vector": [2.31, 0, 0] + }, + "0.625": { + "vector": [2.11, 0, 0] + }, + "0.6667": { + "vector": [1.85, 0, 0] + }, + "0.7083": { + "vector": [1.56, 0, 0] + }, + "0.75": { + "vector": [1.25, 0, 0] + }, + "0.7917": { + "vector": [0.94, 0, 0] + }, + "0.8333": { + "vector": [0.65, 0, 0] + }, + "0.875": { + "vector": [0.39, 0, 0] + }, + "0.9167": { + "vector": [0.19, 0, 0] + }, + "0.9583": { + "vector": [0.05, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "tail5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0.05, 0, 0] + }, + "0.0833": { + "vector": [0.19, 0, 0] + }, + "0.125": { + "vector": [0.39, 0, 0] + }, + "0.1667": { + "vector": [0.65, 0, 0] + }, + "0.2083": { + "vector": [0.94, 0, 0] + }, + "0.25": { + "vector": [1.25, 0, 0] + }, + "0.2917": { + "vector": [1.56, 0, 0] + }, + "0.3333": { + "vector": [1.85, 0, 0] + }, + "0.375": { + "vector": [2.11, 0, 0] + }, + "0.4167": { + "vector": [2.31, 0, 0] + }, + "0.4583": { + "vector": [2.45, 0, 0] + }, + "0.5": { + "vector": [2.5, 0, 0] + }, + "0.5417": { + "vector": [2.45, 0, 0] + }, + "0.5833": { + "vector": [2.31, 0, 0] + }, + "0.625": { + "vector": [2.11, 0, 0] + }, + "0.6667": { + "vector": [1.85, 0, 0] + }, + "0.7083": { + "vector": [1.56, 0, 0] + }, + "0.75": { + "vector": [1.25, 0, 0] + }, + "0.7917": { + "vector": [0.94, 0, 0] + }, + "0.8333": { + "vector": [0.65, 0, 0] + }, + "0.875": { + "vector": [0.39, 0, 0] + }, + "0.9167": { + "vector": [0.19, 0, 0] + }, + "0.9583": { + "vector": [0.05, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "leftBackFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 50] + }, + "0.0417": { + "vector": [0, 0, 50.02] + }, + "0.0833": { + "vector": [0, 0, 49.72] + }, + "0.125": { + "vector": [0, 0, 49.22] + }, + "0.1667": { + "vector": [0, 0, 48.61] + }, + "0.2083": { + "vector": [0, 0, 48] + }, + "0.25": { + "vector": [0, 0, 47.5] + }, + "0.2917": { + "vector": [0, 0, 47] + }, + "0.3333": { + "vector": [0, 0, 46.39] + }, + "0.375": { + "vector": [0, 0, 45.78] + }, + "0.4167": { + "vector": [0, 0, 45.28] + }, + "0.4583": { + "vector": [0, 0, 44.98] + }, + "0.5": { + "vector": [0, 0, 45] + }, + "0.5417": { + "vector": [0, 0, 45.18] + }, + "0.5833": { + "vector": [0, 0, 45.49] + }, + "0.625": { + "vector": [0, 0, 45.9] + }, + "0.6667": { + "vector": [0, 0, 46.39] + }, + "0.7083": { + "vector": [0, 0, 46.93] + }, + "0.75": { + "vector": [0, 0, 47.5] + }, + "0.7917": { + "vector": [0, 0, 48.07] + }, + "0.8333": { + "vector": [0, 0, 48.61] + }, + "0.875": { + "vector": [0, 0, 49.1] + }, + "0.9167": { + "vector": [0, 0, 49.51] + }, + "0.9583": { + "vector": [0, 0, 49.82] + }, + "1.0": { + "vector": [0, 0, 50] + } + } + }, + "leftFrontFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 47.5] + }, + "0.0417": { + "vector": [0, 0, 47.17] + }, + "0.0833": { + "vector": [0, 0, 46.67] + }, + "0.125": { + "vector": [0, 0, 46.09] + }, + "0.1667": { + "vector": [0, 0, 45.56] + }, + "0.2083": { + "vector": [0, 0, 45.16] + }, + "0.25": { + "vector": [0, 0, 45] + }, + "0.2917": { + "vector": [0, 0, 45.16] + }, + "0.3333": { + "vector": [0, 0, 45.56] + }, + "0.375": { + "vector": [0, 0, 46.09] + }, + "0.4167": { + "vector": [0, 0, 46.67] + }, + "0.4583": { + "vector": [0, 0, 47.17] + }, + "0.5": { + "vector": [0, 0, 47.5] + }, + "0.5417": { + "vector": [0, 0, 47.6] + }, + "0.5833": { + "vector": [0, 0, 47.67] + }, + "0.625": { + "vector": [0, 0, 47.73] + }, + "0.6667": { + "vector": [0, 0, 47.78] + }, + "0.7083": { + "vector": [0, 0, 47.8] + }, + "0.75": { + "vector": [0, 0, 47.81] + }, + "0.7917": { + "vector": [0, 0, 47.8] + }, + "0.8333": { + "vector": [0, 0, 47.78] + }, + "0.875": { + "vector": [0, 0, 47.73] + }, + "0.9167": { + "vector": [0, 0, 47.67] + }, + "0.9583": { + "vector": [0, 0, 47.6] + }, + "1.0": { + "vector": [0, 0, 47.5] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/gravity_gun.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/gravity_gun.animation.json new file mode 100644 index 00000000..1db2bc10 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/gravity_gun.animation.json @@ -0,0 +1,445 @@ +{ + "format_version": "1.8.0", + "animations": { + "toggle_on": { + "loop": "hold_on_last_frame", + "animation_length": 0.4583, + "bones": { + "tip": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "barrel": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "vector": [0, 0, -0.5], + "easing": "easeInBounce", + "easingArgs": [0.1] + } + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "handle": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [-5, 0, 0], + "easing": "easeOutQuart" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, -0.25, 0.1], + "easing": "easeOutQuart" + } + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "handle_all": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [5, 0, 0], + "easing": "easeOutQuart" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 0.3, 0], + "easing": "easeOutQuart" + } + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "gravity_gun": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [-1, 0, 0], + "easing": "easeInOutCubic" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [0, 0, -0.1], + "easing": "easeInOutSine" + } + }, + "scale": { + "vector": [1, 1, 1] + } + } + } + }, + "toggle_off": { + "loop": "hold_on_last_frame", + "animation_length": 0.5, + "bones": { + "tip": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "barrel": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "vector": [0, 0, -0.5], + "easing": "easeInBounce", + "easingArgs": [0.1] + }, + "0.5": { + "vector": [0, 0, 0], + "easing": "easeOutQuad" + } + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "handle": { + "rotation": { + "0.0": { + "vector": [-5, 0, 0], + "easing": "easeOutQuart" + }, + "0.4583": { + "vector": [0, 0, 0], + "easing": "easeOutSine" + } + }, + "position": { + "0.0": { + "vector": [0, -0.25, 0.1], + "easing": "easeOutQuart" + }, + "0.5": { + "vector": [0, 0, 0], + "easing": "easeOutSine" + } + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "handle_all": { + "rotation": { + "0.0": { + "vector": [5, 0, 0], + "easing": "easeOutQuart" + }, + "0.5": { + "vector": [0, 0, 0], + "easing": "easeOutSine" + } + }, + "position": { + "0.0": { + "vector": [0, 0.3, 0], + "easing": "easeOutQuart" + }, + "0.5": { + "vector": [0, 0, 0], + "easing": "easeOutSine" + } + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "gravity_gun": { + "rotation": { + "0.0": { + "vector": [-1, 0, 0], + "easing": "easeInOutCubic" + }, + "0.4583": { + "vector": [0, 0, 0], + "easing": "easeOutSine" + } + }, + "position": { + "0.0": { + "vector": [0, 0, -0.1], + "easing": "easeInOutSine" + }, + "0.4167": { + "vector": [0, 0, 0], + "easing": "easeOutSine" + } + }, + "scale": { + "vector": [1, 1, 1] + } + } + } + }, + "on": { + "loop": true, + "animation_length": 0.6667, + "bones": { + "tip": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.6667": { + "pre": [0, 0, 360], + "post": [0, 0, 0], + "easing": "linear" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.3333": { + "vector": [1.025, 1.025, 1.025], + "easing": "easeInOutSine" + }, + "0.6667": { + "vector": [1, 1, 1] + } + } + }, + "barrel": { + "rotation": { + "0.0": { + "vector": [0, 0, 0], + "easing": "easeInOutQuart" + }, + "0.3333": { + "vector": [1, 0, 0], + "easing": "easeInOutQuart" + }, + "0.6667": { + "vector": [0, 0, 0], + "easing": "easeInOutQuart" + } + }, + "position": { + "0.0": { + "vector": [0, 0, -0.5], + "easing": "easeInOutSine" + }, + "0.3333": { + "vector": [0, 0, -0.2], + "easing": "easeInOutQuart" + }, + "0.6667": { + "vector": [0, 0, -0.5], + "easing": "easeInOutSine" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.3333": { + "vector": [1.025, 1.025, 1.025], + "easing": "easeInOutQuad" + }, + "0.6667": { + "vector": [1, 1, 1] + } + } + }, + "handle": { + "rotation": { + "0.0": { + "vector": [-5, 0, 0], + "easing": "easeOutQuart" + }, + "0.3333": { + "vector": [-8, 0, 0], + "easing": "easeInOutSine" + }, + "0.6667": { + "vector": [-5, 0, 0], + "easing": "easeInOutSine" + } + }, + "position": { + "0.0": { + "vector": [0, -0.25, 0.1], + "easing": "easeOutQuart" + }, + "0.3333": { + "vector": [0, -0.25, -0.075], + "easing": "easeInOutSine" + }, + "0.6667": { + "vector": [0, -0.25, 0.1], + "easing": "easeInOutSine" + } + } + }, + "handle_all": { + "rotation": { + "0.0": { + "vector": [5, 0, 0], + "easing": "easeOutQuart" + }, + "0.6667": { + "vector": [5, 0, 0], + "easing": "easeOutQuart" + } + }, + "position": { + "0.0": { + "vector": [0, 0.3, 0], + "easing": "easeOutQuart" + }, + "0.6667": { + "vector": [0, 0.3, 0], + "easing": "easeOutQuart" + } + } + }, + "gravity_gun": { + "rotation": { + "0.0": { + "vector": [-1, 0, 0], + "easing": "easeInOutCubic" + }, + "0.3333": { + "vector": [-2, 0, 0], + "easing": "easeInOutQuart" + }, + "0.6667": { + "vector": [-1, 0, 0], + "easing": "easeInOutCubic" + } + }, + "position": { + "0.0": { + "vector": [0, 0, -0.1], + "easing": "easeInOutSine" + }, + "0.3333": { + "vector": [0, 0.2, -0.1], + "easing": "easeInOutQuad" + }, + "0.6667": { + "vector": [0, 0, -0.1], + "easing": "easeInOutSine" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.3333": { + "vector": [1.015, 1.015, 1.015] + }, + "0.6667": { + "vector": [1, 1, 1] + } + } + } + } + }, + "off": { + "animation_length": 1, + "bones": { + "tip": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "barrel": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "handle": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "handle_all": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "gravity_gun": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/growth_ray.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/growth_ray.animation.json new file mode 100644 index 00000000..ed15f14e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/growth_ray.animation.json @@ -0,0 +1,88 @@ +{ + "format_version": "1.8.0", + "animations": { + "growth_ray_active": { + "loop": true, + "animation_length": 1, + "bones": { + "blaster_rotating": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, -360], + "easing": "easeInOutSine" + } + } + }, + "growth_ray": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "0.5": { + "vector": [0, 0, 0], + "easing": "linear" + }, + "0.75": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "blaster": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "0.5": { + "vector": [0, 0, 0], + "easing": "linear" + }, + "0.75": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "blaster_end": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "0.5": { + "vector": [0, 0, 0], + "easing": "linear" + }, + "0.75": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/hercules_beetle.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/hercules_beetle.animation.json new file mode 100644 index 00000000..7a4fde8d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/hercules_beetle.animation.json @@ -0,0 +1,5146 @@ +{ + "format_version": "1.8.0", + "animations": { + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-7.5, 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" + }, + "0.9167": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-16.57975, 43.25372, -16.57975] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-0.93039, 32.02562, 6.52939] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-16.57975, -43.25372, 16.57975] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-0.93039, -32.02562, -6.52939] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-16.57975, -43.25372, 16.57975] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-11.74513, 43.76124, -16.7308] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -11.73] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [11.74513, -43.76124, -16.7308] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-11.74513, 43.76124, -16.7308] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [6.73, -34.87, 0.43] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [15.97027, -43.38318, -15.97027] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.11, 30.62, -16.19] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-6.64862, 44.32489, -16.23144] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [2.96236, -24.4491, 2.91702] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [6.73, -34.87, 0.43] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [11.74513, 43.76124, 16.7308] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-11.74513, -43.76124, 16.7308] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 11.73] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.74513, 43.76124, 16.7308] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.11, -30.62, 16.19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-6.64862, -44.32489, 16.23144] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [2.96236, 24.4491, -2.91702] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15.97027, 43.38318, 15.97027] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.11, -30.62, 16.19] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "vector": [0, -0.5, 0] + }, + "0.0417": { + "vector": [0, 2.5, 0] + }, + "0.0833": { + "vector": [0, 1.5, 0] + }, + "0.125": { + "vector": [0, -0.5, 0] + }, + "0.1667": { + "vector": [0, 2.5, 0] + }, + "0.2083": { + "vector": [0, 1.5, 0] + }, + "0.25": { + "vector": [0, -0.5, -3] + }, + "0.5": { + "vector": [0, -0.5, 0] + }, + "0.5417": { + "vector": [0, 2.5, 0] + }, + "0.5833": { + "vector": [0, 1.5, 0] + }, + "0.625": { + "vector": [0, -0.5, 0] + }, + "0.6667": { + "vector": [0, 2.5, 0] + }, + "0.7083": { + "vector": [0, 1.5, 0] + }, + "0.75": { + "vector": [0, -0.5, 0] + }, + "1.0": { + "vector": [0, -0.5, 0] + } + } + } + } + }, + "fly": { + "loop": true, + "animation_length": 0.5, + "bones": { + "neck": { + "rotation": { + "vector": [2.5, 0, 0] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "vector": [-10, 0, 0] + } + }, + "lower_mandibule": { + "rotation": { + "vector": [5, 0, 0] + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, -20.46503, -59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.46212, -18.88323, -72.6448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.00964, -20.46503, -59.47267] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, 20.46503, 59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.46212, 18.88323, 72.6448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.00964, 20.46503, 59.47267] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, 57.1835, -75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.86765, 55.97144, -89.0885] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.61644, 57.1835, -75.62758] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, -57.1835, 75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.86765, -55.97144, 89.0885] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.61644, -57.1835, 75.62758] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.79959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.79959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-45, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-45, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "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": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 47, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 47, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [11.91861, -0.27828, 2.31334] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "cry": { + "animation_length": 1.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.24721, 1.93597, 14.87739] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-22.49294, 0.32621, 2.47864] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-22.49294, 0.32621, 2.47864] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [7.95081, -4.9739, 6.58427] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [7.95081, -4.9739, 6.58427] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-31.33009, -33.67379, 40.64063] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-31.33009, -33.67379, 40.64063] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [-1.45479, 6.82059, -0.6026] + }, + "1.25": { + "vector": [-1.45479, 6.82059, -0.6026] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-31.33009, 33.67379, -40.64063] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-31.33009, 33.67379, -40.64063] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [1.45479, 6.82059, -0.6026] + }, + "1.25": { + "vector": [1.45479, 6.82059, -0.6026] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 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.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 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.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "vector": [0, -0.5, 0] + }, + "0.7083": { + "vector": [1, -0.5, 0] + }, + "0.75": { + "vector": [0, -0.5, 0] + }, + "0.7917": { + "vector": [0, -0.5, 0] + }, + "0.8333": { + "vector": [1, -0.5, 0] + }, + "0.875": { + "vector": [0, -0.5, 0] + }, + "0.9167": { + "vector": [0, -0.5, 0] + }, + "0.9583": { + "vector": [1, -0.5, 0] + }, + "1.0": { + "vector": [0, -0.5, 0] + }, + "1.0417": { + "vector": [0, -0.5, 0] + }, + "1.0833": { + "vector": [1, -0.5, 0] + }, + "1.125": { + "vector": [0, -0.5, 0] + }, + "1.1667": { + "vector": [1, -0.5, 0] + }, + "1.5": { + "pre": { + "vector": [0, -0.5, 0] + }, + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "animation_length": 0.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [4.97887, -0.26087, -0.6191] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [4.97887, -0.26087, -0.6191] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-2.52113, -0.26087, -0.6191] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-2.52113, -0.26087, -0.6191] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-0.05473, 0.86734, 9.96216] + }, + "0.2083": { + "vector": [-0.05473, 0.86734, 9.96216] + }, + "0.2917": { + "vector": [0.05947, -0.86469, -9.96433] + }, + "0.375": { + "vector": [0.05947, -0.86469, -9.96433] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [5, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-9.81813, -0.79148, 1.79756] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-9.81813, -0.79148, 1.79756] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "knocked_down": { + "animation_length": 1.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [11.65239, -43.46301, -23.71876] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [11.65239, -43.46301, -23.71876] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.25": { + "pre": { + "vector": [-1.24697, 5.84622, -0.51651] + }, + "post": { + "vector": [-1.24697, 5.84622, -0.51651] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1.24697, 5.84622, -0.51651] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [11.65239, 43.46301, 23.71876] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [11.65239, 43.46301, 23.71876] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.24697, 5.84622, -0.51651] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.24697, 5.84622, -0.51651] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -8.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "knocked_down_idle": { + "loop": true, + "animation_length": 3.9583, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "get_up": { + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-2.46207, 0.43399, 9.99067] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-2.4905, -0.21782, -4.99527] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-2.49067, 0.21359, 4.89821] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0.72569, 0.10178, 14.7325] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-1.97477, -1.27275, -21.99496] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-4.29571, 1.86279, 16.90721] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [1.72284, -0.71348, 22.48927] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [2.6458, 1.39813, -20.13565] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [3.83112, -1.6697, 21.99487] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "charge_start": { + "loop": true, + "animation_length": 0.7917, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 8, 11] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-9.36483, 31.64082, -21.76303] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-9.36483, -31.64082, 21.76303] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.5": { + "pre": { + "vector": [0, 6, 0] + }, + "post": { + "vector": [0, 6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "charge": { + "loop": true, + "animation_length": 0.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.36335, 22.93078, -9.94559] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [4.3039, 23.14148, -12.65259] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.36335, 22.93078, -9.94559] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.36335, -22.93078, 9.94559] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [4.3039, -23.14148, 12.65259] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.36335, -22.93078, 9.94559] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-11.62486, 43.40317, -19.12057] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.28065, 43.85689, -15.72372] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-11.62486, 43.40317, -19.12057] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.88845, 54.95252, -16.09531] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10.38874, 54.57678, -20.38005] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.88845, 54.95252, -16.09531] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-11.62486, -43.40317, 19.12057] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.28065, -43.85689, 15.72372] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-11.62486, -43.40317, 19.12057] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.88845, -54.95252, 16.09531] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10.38874, -54.57678, 20.38005] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.88845, -54.95252, 16.09531] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -1.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "fly_attack": { + "loop": true, + "animation_length": 0.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "pre": { + "vector": [-15, 0, 0] + }, + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "vector": [2.5, 0, 0] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [43.48302, 43.39816, 33.08878] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-39.00258, -42.80378, 28.82357] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, -20.46503, -59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.46212, -18.88323, -72.6448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.00964, -20.46503, -59.47267] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, 20.46503, 59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.46212, 18.88323, 72.6448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.00964, 20.46503, 59.47267] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, 57.1835, -75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.86765, 55.97144, -89.0885] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.61644, 57.1835, -75.62758] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, -57.1835, 75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.86765, -55.97144, 89.0885] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.61644, -57.1835, 75.62758] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.79959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.79959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-45, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-45, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.53852, -9.99038, -0.44067] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 47, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 47, 9] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 47, -14] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 47, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "death": { + "loop": true, + "animation_length": 1.25, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 7] + }, + "0.25": { + "vector": [0, 0, 7] + }, + "0.5": { + "vector": [0, -3.96578, 7.5221] + }, + "0.6667": { + "vector": [0, -12, 0] + }, + "0.75": { + "vector": [0, -12, 0] + }, + "0.8333": { + "vector": [0, -12, 0] + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-45, 0, 0] + }, + "0.25": { + "vector": [-45, 0, 0] + }, + "0.5": { + "vector": [-45, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-38.30391, -25.06046, 54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-38.30391, -25.06046, 54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-38.30391, -25.06046, 54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-7.81107, -44.15009, 4.11111] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.81107, -44.15009, 4.11111] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.81107, -44.15009, 4.11111] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 23, 0] + }, + "0.25": { + "vector": [0, 23, 0] + }, + "0.5": { + "vector": [0, 23, 0] + }, + "0.5833": { + "vector": [0, -6.47431, 0.78484] + }, + "0.6667": { + "vector": [0, -12, 0] + }, + "0.75": { + "vector": [0, -12, 0] + }, + "0.8333": { + "vector": [0, -12, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-38.30391, 25.06046, -54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-38.30391, 25.06046, -54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-38.30391, 25.06046, -54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-7.81107, 44.15009, -4.11111] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.81107, 44.15009, -4.11111] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.81107, 44.15009, -4.11111] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.125": { + "vector": [0, 23, 0] + }, + "0.25": { + "vector": [0, 23, 0] + }, + "0.5": { + "vector": [0, 23, 0] + }, + "0.5833": { + "vector": [0, -6.47431, 0.78484] + }, + "0.6667": { + "vector": [0, -12, 0] + }, + "0.75": { + "vector": [0, -12, 0] + }, + "0.8333": { + "vector": [0, -12, 0] + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-8.46408, 0.47881, -1.03624] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-8.46408, 0.47881, -1.03624] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-8.46408, 0.47881, -1.03624] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 15, 0] + }, + "0.25": { + "vector": [0, 15, 0] + }, + "0.4583": { + "vector": [0, 1.11977, 1.82737] + }, + "0.5": { + "vector": [0, -3.83745, 2.48] + }, + "0.6667": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "0.8333": { + "vector": [0, -10, 0] + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1.74746, 32.81788, -1.08936] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.74746, 32.81788, -1.08936] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1.74746, 32.81788, -1.08936] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "0.8333": { + "vector": [0, -10, 0] + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-8.46408, -0.47881, 1.03624] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-8.46408, -0.47881, 1.03624] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-8.46408, -0.47881, 1.03624] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.125": { + "vector": [0, 15, 0] + }, + "0.25": { + "vector": [0, 15, 0] + }, + "0.4583": { + "vector": [0, 1.11977, 1.82737] + }, + "0.5": { + "vector": [0, -3.83745, 2.48] + }, + "0.6667": { + "vector": [0, -10, 0] + }, + "0.7917": { + "vector": [0, -10, 0] + }, + "0.875": { + "vector": [0, -10, 0] + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1.74746, -32.81788, 1.08936] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.74746, -32.81788, 1.08936] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1.74746, -32.81788, 1.08936] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.5": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "0.8333": { + "vector": [0, -10, 0] + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-7.5, 0, 0] + }, + "0.25": { + "vector": [-7.5, 0, 0] + }, + "0.5": { + "vector": [-7.5, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [0, 0, 0] + }, + "0.875": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 3.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 3.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 3.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -3.65, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, -9.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "open_wings": { + "animation_length": 0.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.5": { + "pre": { + "vector": [67.5, -22.5, 0] + }, + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.5": { + "pre": { + "vector": [67.5, 22.5, 0] + }, + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "close_wings": { + "animation_length": 0.25, + "bones": { + "torso": { + "rotation": { + "0.25": { + "pre": { + "vector": [-5, 0, 0] + }, + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "vector": [2.5, 0, 0] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "vector": [-10, 0, 0] + }, + "0.25": { + "pre": { + "vector": [-5, 0, 0] + }, + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "vector": [5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [7.5, 0, 0] + }, + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, -20.46503, -59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, 20.46503, 59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, 57.1835, -75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, -57.1835, 75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 47, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/infant_jerry.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/infant_jerry.animation.json new file mode 100644 index 00000000..ebaa4675 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/infant_jerry.animation.json @@ -0,0 +1,169 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 1, + "bones": { + "body": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.0417": { + "vector": [1.0023, 0.9977, 1.0023] + }, + "0.0833": { + "vector": [1.005, 0.995, 1.005] + }, + "0.125": { + "vector": [1.008, 0.992, 1.008] + }, + "0.1667": { + "vector": [1.0111, 0.9889, 1.0111] + }, + "0.2083": { + "vector": [1.0142, 0.9858, 1.0142] + }, + "0.25": { + "vector": [1.0172, 0.9828, 1.0172] + }, + "0.2917": { + "vector": [1.0199, 0.9801, 1.0199] + }, + "0.3333": { + "vector": [1.0222, 0.9778, 1.0222] + }, + "0.375": { + "vector": [1.024, 0.976, 1.024] + }, + "0.4167": { + "vector": [1.0252, 0.9748, 1.0252] + }, + "0.4583": { + "vector": [1.0255, 0.9745, 1.0255] + }, + "0.5": { + "vector": [1.025, 0.975, 1.025] + }, + "0.5417": { + "vector": [1.0201, 0.9799, 1.0201] + }, + "0.5833": { + "vector": [1.0111, 0.9889, 1.0111] + }, + "0.625": { + "vector": [1, 1, 1] + }, + "0.6667": { + "vector": [0.9889, 1.0111, 0.9889] + }, + "0.7083": { + "vector": [0.9799, 1.0201, 0.9799] + }, + "0.75": { + "vector": [0.975, 1.025, 0.975] + }, + "0.7917": { + "vector": [0.9748, 1.0252, 0.9748] + }, + "0.8333": { + "vector": [0.9778, 1.0222, 0.9778] + }, + "0.875": { + "vector": [0.9828, 1.0172, 0.9828] + }, + "0.9167": { + "vector": [0.9889, 1.0111, 0.9889] + }, + "0.9583": { + "vector": [0.995, 1.005, 0.995] + }, + "1.0": { + "vector": [1, 1, 1] + } + } + }, + "gel": { + "scale": { + "0.0": { + "vector": [0.975, 1.025, 0.975] + }, + "0.0417": { + "vector": [0.9748, 1.0252, 0.9748] + }, + "0.0833": { + "vector": [0.9778, 1.0222, 0.9778] + }, + "0.125": { + "vector": [0.9828, 1.0172, 0.9828] + }, + "0.1667": { + "vector": [0.9889, 1.0111, 0.9889] + }, + "0.2083": { + "vector": [0.995, 1.005, 0.995] + }, + "0.25": { + "vector": [1, 1, 1] + }, + "0.2917": { + "vector": [1.0023, 0.9977, 1.0023] + }, + "0.3333": { + "vector": [1.005, 0.995, 1.005] + }, + "0.375": { + "vector": [1.008, 0.992, 1.008] + }, + "0.4167": { + "vector": [1.0111, 0.9889, 1.0111] + }, + "0.4583": { + "vector": [1.0142, 0.9858, 1.0142] + }, + "0.5": { + "vector": [1.0172, 0.9828, 1.0172] + }, + "0.5417": { + "vector": [1.0199, 0.9801, 1.0199] + }, + "0.5833": { + "vector": [1.0222, 0.9778, 1.0222] + }, + "0.625": { + "vector": [1.024, 0.976, 1.024] + }, + "0.6667": { + "vector": [1.0252, 0.9748, 1.0252] + }, + "0.7083": { + "vector": [1.0255, 0.9745, 1.0255] + }, + "0.75": { + "vector": [1.025, 0.975, 1.025] + }, + "0.7917": { + "vector": [1.0201, 0.9799, 1.0201] + }, + "0.8333": { + "vector": [1.0111, 0.9889, 1.0111] + }, + "0.875": { + "vector": [1, 1, 1] + }, + "0.9167": { + "vector": [0.9889, 1.0111, 0.9889] + }, + "0.9583": { + "vector": [0.9799, 1.0201, 0.9799] + }, + "1.0": { + "vector": [0.975, 1.025, 0.975] + } + } + } + } + } + } +} \ 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 new file mode 100644 index 00000000..210f6cab --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/jumpy_bug.animation.json @@ -0,0 +1,5790 @@ +{ + "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/kraken.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/kraken.animation.json new file mode 100644 index 00000000..e5877521 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/kraken.animation.json @@ -0,0 +1,7141 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 218.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 214, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 254, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 218.48, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [-4.33604, 2.0532, 6.91145] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [-4.33604, -2.0532, -6.91145] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.56505, 52.23876, 39.23152] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.49762, 45.05451, 3.53329] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-26.56505, 52.23876, 39.23152] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0.28, -3.36, 20.79] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [2.37727, -2.38933, -19.24988] + }, + "lerp_mode": "catmullrom" + }, + "3.625": { + "post": { + "vector": [0.28409, -3.35803, 20.79138] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0.28, -3.36, 20.79] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [20.94102, 49.21053, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [26.56505, 52.23876, -39.23152] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [20.94102, 49.21053, -30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [13.44102, -49.21053, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [26.56505, -52.23876, 39.23152] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [13.44102, -49.21053, 30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.2083": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.56505, -52.23876, -39.23152] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-2.61271, -47.32765, -14.82844] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.49762, -45.05451, -3.53329] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-26.56505, -52.23876, -39.23152] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0.28, 3.36, -20.79] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [2.37727, 2.38933, 19.24988] + }, + "lerp_mode": "catmullrom" + }, + "3.625": { + "post": { + "vector": [0.28409, 3.35803, -20.79138] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0.28, 3.36, -20.79] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [17.5, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "death": { + "animation_length": 3, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.28919, 0.1664, -7.35346] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1.2985, -0.05997, 2.64399] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1.28919, 0.1664, -7.35346] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [1.2985, -0.05997, 2.64399] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 218.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 179.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 120.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 41.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, -19.52, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -36.52, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -19.52, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 0.7, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_eye": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0.9, 0.8] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 0.9, 0.8] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "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" + } + } + }, + "l_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.08] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.08] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -12.08] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -19.58] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -12.08] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.73087, -0.80647, -27.979] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-4.73087, -0.80647, -27.979] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-4.42508, 1.85893, 4.41586] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-4.67998, 1.06319, -5.55576] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-4.42508, 1.85893, 4.41586] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "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" + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.08] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.08] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 12.08] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 19.58] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 12.08] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.73087, 0.80647, 27.979] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-4.73087, 0.80647, 27.979] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-4.42508, -1.85893, -4.41586] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-4.67998, -1.06319, 5.55576] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-4.42508, -1.85893, -4.41586] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.56505, 52.23876, 39.23152] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-37.45372, 62.96598, 59.31794] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0.28, -3.36, 20.79] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1.41335, -3.06141, 0.76044] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [1.00134, -3.21967, 8.27007] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1.41335, -3.06141, 0.76044] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [20.94102, 49.21053, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [34.04258, 58.57824, -52.34365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.04258, 58.57824, -52.34365] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [20.94102, -49.21053, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [34.04258, -58.57824, 52.34365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.04258, -58.57824, 52.34365] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -49.96822, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.56505, -52.23876, -39.23152] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-37.45372, -62.96598, -59.31794] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0.28, 3.36, -20.79] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1.41335, 3.06141, -0.76044] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [1.00134, 3.21967, -8.27007] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1.41335, 3.06141, -0.76044] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 42.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swing_left": { + "loop": true, + "animation_length": 2, + "bones": { + "l_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [45.72113, 14.60559, -31.31465] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-63.96509, -9.93654, -27.61842] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [7.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.6667": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1.6] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [1, 1, 1] + } + } + }, + "l_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [22.5, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.5, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-40, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [20, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-27.5, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swing_right": { + "loop": true, + "animation_length": 2, + "bones": { + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [45.72113, -14.60559, 31.31465] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-63.96509, 9.93654, 27.61842] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [7.5, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.6667": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1.6] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [1, 1, 1] + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [22.5, 0, -0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15, 0, -0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-40, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [20, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-27.5, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "grab": { + "animation_length": 3, + "bones": { + "l_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-38.70323, -17.28727, -18.81969] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-38.70323, -17.28727, -18.81969] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-38.7, -17.29, -18.82] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [65.28208, 28.06275, -9.17543] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [65.28, 28.06, -9.18] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-64.46949, -11.31255, -22.85254] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-64.47, -11.31, -22.85] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [55, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [55, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-15, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [47.5, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [47.5, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [-30, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-30, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-36.42321, 3.55705, 18.49778] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-36.42321, 3.55705, 18.49778] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-35.81018, 7.98198, 24.58578] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-35.81018, 7.98198, 24.58578] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [39.18982, 7.98198, 24.58578] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [39.19, 7.98, 24.59] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-25, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10.59061, 6.6782, 31.88034] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-8.51814, 9.18229, 46.81472] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-8.51814, 9.18229, 46.81472] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-8.52, 9.18, 46.81] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.81406, 8.27617, 59.61272] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.89833, 9.12028, 72.23] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.89833, 9.12028, 72.23] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-2.9, 9.12, 72.23] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.60659, 14.2906, 71.92221] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.60659, 14.2906, 71.92221] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-14.60659, 14.2906, 71.92221] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-14.61, 14.29, 71.92] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "animation_length": 2, + "bones": { + "jaw": { + "rotation": { + "0.6667": { + "vector": [0, 0, 0] + }, + "0.9167": { + "pre": { + "vector": [40, 0, 0] + }, + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "pre": { + "vector": [-18.33, 0, 0] + }, + "post": { + "vector": [-18.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-23.92, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-49.13, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-3.22, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 279, 0] + }, + "0.0833": { + "pre": { + "vector": [0, 290, 15] + }, + "post": { + "vector": [0, 290, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 330.19, 27.44] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 302, 101] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 173, 91] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 144, -61] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 134, -100] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 220.31, -39.81] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 262.74, -9.25] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 269, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 279, 0] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.25": { + "pre": { + "vector": [0.9, 1.2, 0.9] + }, + "post": { + "vector": [0.9, 1.2, 0.9] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1, 1, 1] + }, + "0.7917": { + "vector": [1, 1, 1] + }, + "0.9583": { + "pre": { + "vector": [1.2, 0.6, 1.2] + }, + "post": { + "vector": [1.2, 0.6, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_shoulder": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -8.75] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -51.27] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 3.31] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -10.53] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "l_arm2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [0, 0, 15] + }, + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, -11.94] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "l_arm3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -39.75] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 20.95] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -8.24] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_shoulder": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 8.75] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 51.27] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, -3.31] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 10.53] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [0, 0, -15] + }, + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 11.94] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 39.75] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -20.95] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule": { + "rotation": { + "0.0": { + "vector": [0, 45, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 45, 0] + }, + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-8.75, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-51.27, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-57.5, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [5, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [15, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [3.31, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 45, 0] + } + } + }, + "r_tentacule2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "r_tentacule3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [15, 0, 0] + }, + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "r_tentacule4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule": { + "rotation": { + "0.0": { + "vector": [0, 45, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 45, 0] + }, + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [8.75, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [51.27, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [57.5, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-5, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-15, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-3.31, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 45, 0] + } + } + }, + "l_back_tentacule2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "l_back_tentacule3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-15, 0, 0] + }, + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "l_back_tentacule4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule": { + "rotation": { + "0.0": { + "vector": [0, -45, 0] + }, + "0.1667": { + "pre": { + "vector": [0, -45, 0] + }, + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [8.75, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [51.27, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [57.5, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-5, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-15, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-3.31, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, -45, 0] + } + } + }, + "r_back_tentacule2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "r_back_tentacule3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-15, 0, 0] + }, + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "r_back_tentacule4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-51.27, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [3.31, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [15, 0, 0] + }, + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule": { + "rotation": { + "0.0": { + "vector": [0, -45, 0] + }, + "0.1667": { + "pre": { + "vector": [0, -45, 0] + }, + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-8.75, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-51.27, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-57.5, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [5, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [15, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [3.31, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, -45, 0] + } + } + }, + "l_tentacule2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "l_tentacule3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [15, 0, 0] + }, + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "l_tentacule4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [51.27, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-3.31, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule_back2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule_back3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-15, 0, 0] + }, + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule_back4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "cry": { + "animation_length": 3, + "bones": { + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [4.93, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-22.82, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-27.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-27.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-22.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [-16.23, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -102.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -102.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [0, 0, -6.67] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, 0, -35.38] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [0, 0, -39.58] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 102.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 102.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [0, 0, 6.67] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, 0, 35.38] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [0, 0, 39.58] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/lucid.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/lucid.animation.json new file mode 100644 index 00000000..3f24c5fd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/lucid.animation.json @@ -0,0 +1,759 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "ring": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 180] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 225] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 270] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, 315] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "ring2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [135, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "ring3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -180] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Iris": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-3, 1, 0] + }, + "1.0": { + "vector": [-3, 1, 0] + }, + "1.2083": { + "vector": [4, 1, 0] + }, + "1.8333": { + "vector": [4, 1, 0] + }, + "2.125": { + "vector": [0, -1, 0] + } + } + }, + "Lucid": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 8, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eyelid": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.5": { + "vector": [0, 0, 0] + }, + "2.6667": { + "vector": [0, -2, 0] + }, + "2.7917": { + "vector": [0, -2, 0] + }, + "2.9583": { + "vector": [0, 0, 0] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "2.5": { + "vector": [1, 1, 1] + }, + "2.6667": { + "vector": [1, 2.8, 1] + }, + "2.7917": { + "vector": [1, 2.8, 1] + }, + "2.9583": { + "vector": [1, 1, 1] + } + } + } + } + }, + "attack": { + "animation_length": 1, + "bones": { + "ring": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [0, 0, 180] + }, + "0.7083": { + "vector": [0, 0, 0] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2, 2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2, 2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [2, 2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [2, 2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "ring2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [180, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "ring3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 270] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eye": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [-1, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-1, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [-1, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [-1, 0, 0] + }, + "0.375": { + "vector": [0, 0, 0] + }, + "0.4167": { + "vector": [-1, 0, 0] + }, + "0.4583": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [-1, 0, 0] + }, + "0.5417": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "Iris": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0.2, 0.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.2, 0.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0.2, 0.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eyelid": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0.7, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0.7, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "fly": { + "loop": true, + "animation_length": 1, + "bones": { + "ring": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 360] + } + } + }, + "ring2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [630, 0, 0] + } + } + }, + "ring3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 360] + } + } + }, + "Lucid": { + "rotation": { + "vector": [25, 0, 0] + }, + "position": { + "0.0": { + "post": { + "vector": [0, -6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -6, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "death": { + "animation_length": 0.75, + "bones": { + "ring": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [87.5, 0, 0] + }, + "0.25": { + "vector": [87.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, -29, 0] + }, + "0.2083": { + "vector": [0, -27, 0] + }, + "0.25": { + "vector": [0, -29, 0] + } + } + }, + "ring2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 92.5] + }, + "0.25": { + "vector": [0, 0, 92.5] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, -28, 0] + }, + "0.2083": { + "vector": [0, -26, 0] + }, + "0.25": { + "vector": [0, -28, 0] + } + } + }, + "ring3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [92.5, 0, 0] + }, + "0.25": { + "vector": [92.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, -28, 0] + }, + "0.2083": { + "vector": [0, -26, 0] + }, + "0.25": { + "vector": [0, -28, 0] + } + } + }, + "eye": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 6] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.4167": { + "vector": [1, 1, 1] + }, + "0.5": { + "vector": [0, 0, 1] + } + } + }, + "Iris": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0.6, 0.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.6, 0.2, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eyelid": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [0, -1.9981, 0.08724] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.2917": { + "vector": [1, 1, 1] + }, + "0.4167": { + "vector": [1, 2.9, 1] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/lucid_bolt.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/lucid_bolt.animation.json new file mode 100644 index 00000000..21a7e4c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/lucid_bolt.animation.json @@ -0,0 +1,222 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 0.5, + "bones": { + "projectile": { + "rotation": { + "vector": [0, 0, 0] + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 1, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [1, 1, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 5] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.2917": { + "vector": [1, 0, 1] + } + } + }, + "particle_right2": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 4] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.125": { + "vector": [1, 0, 1] + } + } + }, + "particle_right3": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 8] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.25": { + "vector": [1, 0, 1] + } + } + }, + "particle_right4": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 4] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.125": { + "vector": [1, 0, 1] + } + } + }, + "particle_left4": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 4] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.125": { + "vector": [1, 0, 1] + } + } + }, + "particle_left2": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 4] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.125": { + "vector": [1, 0, 1] + } + } + }, + "particle_left": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 5] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.2917": { + "vector": [1, 0, 1] + } + } + }, + "particle_left3": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 8] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.25": { + "vector": [1, 0, 1] + } + } + }, + "ring": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 360] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.8, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "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/animations/lucid_bolt_impact.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/lucid_bolt_impact.animation.json new file mode 100644 index 00000000..ebe66d9b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/lucid_bolt_impact.animation.json @@ -0,0 +1,700 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation": { + "animation_length": 1.5, + "bones": { + "eye": { + "rotation": { + "0.25": { + "pre": { + "vector": [72.5, 0, 0] + }, + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.25": { + "pre": { + "vector": [0, -10, 0] + }, + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [1, 0, 0] + }, + "0.7083": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [1, 0, 0] + }, + "0.7917": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [1, 0, 0] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [1, 0, 0] + }, + "0.9583": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [1, 0, 0] + }, + "1.0417": { + "vector": [0, 0, 0] + }, + "1.0833": { + "vector": [1, 0, 0] + }, + "1.125": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [1, 0, 0] + }, + "1.2083": { + "vector": [0, 0, 0] + }, + "1.25": { + "vector": [1, 0, 0] + }, + "1.2917": { + "vector": [0, 0, 0] + }, + "1.3333": { + "vector": [1, 0, 0] + }, + "1.375": { + "vector": [0, 0, 0] + } + }, + "scale": { + "0.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [1, 1, 1] + }, + "1.375": { + "vector": [1, 1, 1] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "Iris": { + "scale": { + "0.25": { + "vector": [1, 1, 1] + }, + "0.6667": { + "vector": [1, 1, 1] + }, + "0.7917": { + "vector": [0.3, 0.3, 1] + }, + "1.2917": { + "vector": [0.3, 0.3, 1] + }, + "1.375": { + "vector": [1, 1, 1] + } + } + }, + "particle": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 15, 0] + }, + "0.5": { + "vector": [0, 25, 0] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle2": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 25, 0] + }, + "0.4583": { + "vector": [0, 35, 0] + }, + "0.5833": { + "vector": [0, 44, 0] + } + }, + "scale": { + "0.125": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle3": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 33, 0] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0.2, 0.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle4": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 25, 0] + }, + "0.4583": { + "vector": [0, 35, 0] + }, + "0.5833": { + "vector": [0, 44, 0] + } + }, + "scale": { + "0.125": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle5": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 33, 0] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0.2, 0.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle6": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 25, 0] + }, + "0.4583": { + "vector": [0, 35, 0] + }, + "0.5833": { + "vector": [0, 44, 0] + } + }, + "scale": { + "0.125": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "impact_particle": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -24] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle2": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -30] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle3": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -36] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle4": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -25] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle5": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -38] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle6": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -20] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle7": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -32] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle8": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -24] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle9": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -36] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle10": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -25] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle11": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -30] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle12": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -38] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle13": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -20] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle20": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -24] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle21": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -36] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle22": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -25] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle23": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -30] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle24": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -38] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle25": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -20] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 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 new file mode 100644 index 00000000..8f8c3f13 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/lurking_terror.animation.json @@ -0,0 +1,6934 @@ +{ + "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/mantis.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/mantis.animation.json new file mode 100644 index 00000000..bb40f4e9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/mantis.animation.json @@ -0,0 +1,6591 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4.5, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -13, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -13, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -13, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.2957, -6.3504, 13.1764] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [42.2957, -6.3504, 13.1764] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [42.2957, -6.3504, 13.1764] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightUpperWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [40, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [40, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntennaBend": { + "rotation": { + "0.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [32.9987, -60.3233, -31.883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [32.9987, -60.3233, -31.883] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [32.9987, -60.3233, -31.883] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 57.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [11.5723, 22.8801, -14.3942] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.5723, 22.8801, -14.3942] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [14.0723, 22.8801, -14.3942] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [14.0723, 22.8801, -14.3942] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [11.5723, 22.8801, -14.3942] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-115, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-115, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-110, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-110, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-115, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [44.0025, 27.6044, 9.1387] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [44.0025, 27.6044, 9.1387] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [44.0025, 27.6044, 9.1387] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [49.5447, -60.6291, -53.1412] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [49.5447, -60.6291, -53.1412] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [49.5447, -60.6291, -53.1412] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 52.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 52.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 52.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [44.0025, -27.6044, -9.1387] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [44.0025, -27.6044, -9.1387] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [44.0025, -27.6044, -9.1387] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [49.5447, 60.6291, 53.1412] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [49.5447, 60.6291, 53.1412] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [49.5447, 60.6291, 53.1412] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -52.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -52.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -52.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.2957, 6.3504, -13.1764] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [42.2957, 6.3504, -13.1764] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [42.2957, 6.3504, -13.1764] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [32.9987, 60.3233, 31.883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [32.9987, 60.3233, 31.883] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [32.9987, 60.3233, 31.883] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [11.5723, -22.8801, 14.3942] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.5723, -22.8801, 14.3942] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [14.0723, -22.8801, 14.3942] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [14.0723, -22.8801, 14.3942] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [11.5723, -22.8801, 14.3942] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-115, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-115, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-110, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-110, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-115, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [40, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [40, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntennaBend": { + "rotation": { + "0.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightLowerWing": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.6405, -59.0256, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-6.6405, -59.0256, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-7.7989, -63.9863, 1.3167] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-7.7989, -63.9863, 1.3167] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-6.6405, -59.0256, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftUpperWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftLowerWing": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.6405, 59.0256, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-6.6405, 59.0256, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-7.7989, 63.9863, -1.3167] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-7.7989, 63.9863, -1.3167] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-6.6405, 59.0256, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -2.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -13, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -13, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "vector": [47.9747, -45.148, 16.2167] + }, + "0.0417": { + "vector": [48.736, -45.048, 14.3356] + }, + "0.25": { + "pre": { + "vector": [52.5026, -17.8309, 14.9255] + }, + "post": { + "vector": [52.5026, -17.8309, 14.9255] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [55.2344, -1.683, 13.2379] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [57.2084, 8.1878, 13.2048] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [56.6692, 8.6611, 12.7291] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [49.0852, 1.9395, 38.9189] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [47.9747, -45.148, 16.2167] + } + } + }, + "rightUpperWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [40, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [40, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntennaBend": { + "rotation": { + "0.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [16.2191, -25.6226, 8.3492] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [6.7657, -23.4256, 8.0985] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [11.842, -27.0652, 7.2266] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [10.3559, -34.2927, 3.7268] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.8333, -54.5501, -6.7123] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5794, -74.6396, -11.0318] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [9.6203, -76.5605, -7.6452] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25.1419, -84.4683, -22.0117] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [96.0986, -78.0845, -85.2337] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [36.1165, -29.1989, -10.0069] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [11.7564, -25.3726, 12.117] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [16.2191, -25.6226, 8.3492] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 70.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 30.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 64.47, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 35, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [1.5723, 22.8801, -14.3942] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [19.0723, 22.8801, -14.3942] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1.5723, 22.8801, -14.3942] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-122.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [62.5639, 47.1524, 15.2554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [66.6663, 35.071, 26.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [56.642, 11.6348, 12.021] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5639, 47.1524, 15.2554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [102.6708, -67.5103, -111.195] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [39.5333, -58.2896, -38.1208] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [3.4633, -63.0017, 4.3297] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [102.6708, -67.5103, -111.195] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 67.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [56.642, -11.6348, -12.021] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [62.5639, -47.1524, -15.2554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [68.1644, -20.2626, -30.7248] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [56.642, -11.6348, -12.021] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [3.4633, 63.0017, -4.3297] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [24.946, 65.1543, 19.7878] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [56.6174, 71.1408, 54.4995] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [91.2326, 75.6979, 91.044] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [124.8322, 75.9135, 117.2593] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [10.1596, 53.2153, -0.0205] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [3.4633, 63.0017, -4.3297] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -65, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -13.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -47.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [58.6639, -12.979, -10.1555] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [51.9743, -7.3457, -41.6133] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [49.1247, 46.1409, -14.6085] + }, + "0.5417": { + "vector": [47.4924, 46.8086, -17.2919] + }, + "0.625": { + "pre": { + "vector": [48.498, 32.7332, -19.6633] + }, + "post": { + "vector": [48.498, 32.7332, -19.6633] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [50.3209, 18.4195, -21.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [52.3595, 12.0761, -18.5729] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [54.6865, 0.5484, -17.7725] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [58.6639, -12.979, -10.1555] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "vector": [368.5638, 85.1905, 357.7539] + }, + "0.25": { + "pre": { + "vector": [398.7882, 80.5299, 391.5684] + }, + "post": { + "vector": [398.7882, 80.5299, 391.5684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [381.0458, 32.5228, 371.1889] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [372.4405, 22.848, 365.7827] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [373.1434, 32.8887, 366.1943] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [377.0789, 68.6154, 369.202] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "vector": [364.786, 79.9017, 354.0811] + }, + "1.0": { + "vector": [368.5638, 85.1905, 357.7539] + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -71.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -63.52, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -36.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -63.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -71.25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [19.0723, -22.8801, 14.3942] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.5723, -22.8801, 14.3942] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.0723, -22.8801, 14.3942] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-122.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-122.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [40, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [40, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntennaBend": { + "rotation": { + "0.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightLowerWing": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.6405, -59.0256, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.6405, -59.0256, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.7989, -63.9863, 1.3167] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.7989, -63.9863, 1.3167] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-6.6405, -59.0256, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftUpperWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftLowerWing": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.6405, 59.0256, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.6405, 59.0256, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.7989, 63.9863, -1.3167] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.7989, 63.9863, -1.3167] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-6.6405, 59.0256, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "animation_length": 1, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -13, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.2957, -6.3504, 13.1764] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightUpperWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [50, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [15, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntennaBend": { + "rotation": { + "0.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [32.9987, -60.3233, -31.883] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 57.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [11.5723, 22.8801, -14.3942] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-55.1487, 14.2759, -19.7773] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.8623, -3.0275, -54.1446] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-26.4455, -12.0081, -49.703] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.5723, 22.8801, -14.3942] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-115, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-150, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-116.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-115, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [131.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -4, 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, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [44.0025, 27.6044, 9.1387] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [49.5447, -60.6291, -53.1412] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 52.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [44.0025, -27.6044, -9.1387] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [49.5447, 60.6291, 53.1412] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -52.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.2957, 6.3504, -13.1764] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [32.9987, 60.3233, 31.883] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [11.5723, -22.8801, 14.3942] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-55.1487, -14.2759, 19.7773] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.8623, 3.0275, 54.1446] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-26.4455, 12.0081, 49.703] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.5723, -22.8801, 14.3942] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-115, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-150, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-116.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-115, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [131.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -4, 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, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [50, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [15, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntennaBend": { + "rotation": { + "0.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightLowerWing": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.6405, -59.0256, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftUpperWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftLowerWing": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.6405, 59.0256, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "fly": { + "loop": true, + "animation_length": 4, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [29.9734, -1.4059, 2.4362] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [29.9764, 1.2497, -2.1654] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [88.5323, -43.0051, -69.1102] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [90.865, -43.0183, -72.5294] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [88.5323, -43.0051, -69.1102] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightUpperWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2917": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.625": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.7917": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.875": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [40, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [40, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntennaBend": { + "rotation": { + "0.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [16.7997, -21.1027, -8.655] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [16.54, -18.7077, -7.8923] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [16.7997, -21.1027, -8.655] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [41.185, 31.5584, -5.7988] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [51.185, 31.5584, -5.7988] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [41.185, 31.5584, -5.7988] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [35.4513, -24.2065, -71.9369] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [36.1401, -26.2344, -73.5531] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [35.4513, -24.2065, -71.9369] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [23.5194, -20.7397, -16.2801] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [23.1668, -18.4443, -15.2287] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [23.5194, -20.7397, -16.2801] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [35.4513, 24.2065, 71.9369] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [36.1401, 26.2344, 73.5531] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [35.4513, 24.2065, 71.9369] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [23.5194, 20.7397, 16.2801] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [23.1668, 18.4443, 15.2287] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [23.5194, 20.7397, 16.2801] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [88.5323, 43.0051, 69.1102] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [90.865, 43.0183, 72.5294] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [88.5323, 43.0051, 69.1102] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [16.7997, 21.1027, 8.655] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [16.54, 18.7077, 7.8923] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [16.7997, 21.1027, 8.655] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [41.185, -31.5584, 5.7988] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [51.185, -31.5584, 5.7988] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [41.185, -31.5584, 5.7988] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [40, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [40, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntennaBend": { + "rotation": { + "0.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightLowerWing": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "3.2917": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "3.625": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "3.7917": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "3.875": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftUpperWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2917": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.625": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.7917": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.875": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftLowerWing": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "3.2917": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "3.625": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "3.7917": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "3.875": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "flyattack": { + "loop": true, + "animation_length": 1, + "bones": { + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [12.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.3333": { + "post": { + "vector": [0, 7, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -4, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [29.9734, -1.4059, 2.4362] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [29.9764, 1.2497, -2.1654] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [88.5323, -43.0051, -69.1102] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [90.865, -43.0183, -72.5294] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [88.5323, -43.0051, -69.1102] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightUpperWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [40, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [40, -5, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, -5, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntennaBend": { + "rotation": { + "0.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [16.7997, -21.1027, -8.655] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [16.54, -18.7077, -7.8923] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [16.7997, -21.1027, -8.655] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [41.185, 31.5584, -5.7988] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-55.1487, 14.2759, -19.7773] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.8623, -3.0275, -54.1446] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15.8623, -3.0275, -54.1446] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [41.185, 31.5584, -5.7988] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-150, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-116.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [131.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.125": { + "pre": { + "vector": [0, -4, 0] + }, + "post": { + "vector": [0, -4, 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, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -3.75, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [35.4513, -24.2065, -71.9369] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [36.1401, -26.2344, -73.5531] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35.4513, -24.2065, -71.9369] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [23.5194, -20.7397, -16.2801] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [23.1668, -18.4443, -15.2287] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.5194, -20.7397, -16.2801] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [35.4513, 24.2065, 71.9369] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [36.1401, 26.2344, 73.5531] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35.4513, 24.2065, 71.9369] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [23.5194, 20.7397, 16.2801] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [23.1668, 18.4443, 15.2287] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.5194, 20.7397, 16.2801] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [88.5323, 43.0051, 69.1102] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [90.865, 43.0183, 72.5294] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [88.5323, 43.0051, 69.1102] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [16.7997, 21.1027, 8.655] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [16.54, 18.7077, 7.8923] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [16.7997, 21.1027, 8.655] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [41.185, -31.5584, 5.7988] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-55.1487, -14.2759, 19.7773] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.8623, 3.0275, 54.1446] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15.8623, 3.0275, 54.1446] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [41.185, -31.5584, 5.7988] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-150, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-116.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [145, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [131.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.125": { + "pre": { + "vector": [0, -4, 0] + }, + "post": { + "vector": [0, -4, 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, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -3.75, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [40, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [40, 5, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 5, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntennaBend": { + "rotation": { + "0.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightLowerWing": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-3.7398, -24.1499, -4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-157.4836, -82.8025, 151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.6124, -19.1601, -4.5132] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftUpperWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftLowerWing": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-3.7398, 24.1499, 4.1684] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-157.4836, 82.8025, -151.46] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.6124, 19.1601, 4.5132] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/mature_jerry.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/mature_jerry.animation.json new file mode 100644 index 00000000..8c2eaa68 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/mature_jerry.animation.json @@ -0,0 +1,485 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 1, + "bones": { + "gel": { + "scale": { + "0.0": { + "vector": [0.975, 1.025, 0.975] + }, + "0.0417": { + "vector": [0.9748, 1.0252, 0.9748] + }, + "0.0833": { + "vector": [0.9778, 1.0222, 0.9778] + }, + "0.125": { + "vector": [0.9828, 1.0172, 0.9828] + }, + "0.1667": { + "vector": [0.9889, 1.0111, 0.9889] + }, + "0.2083": { + "vector": [0.995, 1.005, 0.995] + }, + "0.25": { + "vector": [1, 1, 1] + }, + "0.2917": { + "vector": [1.0023, 0.9977, 1.0023] + }, + "0.3333": { + "vector": [1.005, 0.995, 1.005] + }, + "0.375": { + "vector": [1.008, 0.992, 1.008] + }, + "0.4167": { + "vector": [1.0111, 0.9889, 1.0111] + }, + "0.4583": { + "vector": [1.0142, 0.9858, 1.0142] + }, + "0.5": { + "vector": [1.0172, 0.9828, 1.0172] + }, + "0.5417": { + "vector": [1.0199, 0.9801, 1.0199] + }, + "0.5833": { + "vector": [1.0222, 0.9778, 1.0222] + }, + "0.625": { + "vector": [1.024, 0.976, 1.024] + }, + "0.6667": { + "vector": [1.0252, 0.9748, 1.0252] + }, + "0.7083": { + "vector": [1.0255, 0.9745, 1.0255] + }, + "0.75": { + "vector": [1.025, 0.975, 1.025] + }, + "0.7917": { + "vector": [1.0201, 0.9799, 1.0201] + }, + "0.8333": { + "vector": [1.0111, 0.9889, 1.0111] + }, + "0.875": { + "vector": [1, 1, 1] + }, + "0.9167": { + "vector": [0.9889, 1.0111, 0.9889] + }, + "0.9583": { + "vector": [0.9799, 1.0201, 0.9799] + }, + "1.0": { + "vector": [0.975, 1.025, 0.975] + } + } + }, + "body": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.0417": { + "vector": [1.0023, 0.9977, 1.0023] + }, + "0.0833": { + "vector": [1.005, 0.995, 1.005] + }, + "0.125": { + "vector": [1.008, 0.992, 1.008] + }, + "0.1667": { + "vector": [1.0111, 0.9889, 1.0111] + }, + "0.2083": { + "vector": [1.0142, 0.9858, 1.0142] + }, + "0.25": { + "vector": [1.0172, 0.9828, 1.0172] + }, + "0.2917": { + "vector": [1.0199, 0.9801, 1.0199] + }, + "0.3333": { + "vector": [1.0222, 0.9778, 1.0222] + }, + "0.375": { + "vector": [1.024, 0.976, 1.024] + }, + "0.4167": { + "vector": [1.0252, 0.9748, 1.0252] + }, + "0.4583": { + "vector": [1.0255, 0.9745, 1.0255] + }, + "0.5": { + "vector": [1.025, 0.975, 1.025] + }, + "0.5417": { + "vector": [1.0201, 0.9799, 1.0201] + }, + "0.5833": { + "vector": [1.0111, 0.9889, 1.0111] + }, + "0.625": { + "vector": [1, 1, 1] + }, + "0.6667": { + "vector": [0.9889, 1.0111, 0.9889] + }, + "0.7083": { + "vector": [0.9799, 1.0201, 0.9799] + }, + "0.75": { + "vector": [0.975, 1.025, 0.975] + }, + "0.7917": { + "vector": [0.9748, 1.0252, 0.9748] + }, + "0.8333": { + "vector": [0.9778, 1.0222, 0.9778] + }, + "0.875": { + "vector": [0.9828, 1.0172, 0.9828] + }, + "0.9167": { + "vector": [0.9889, 1.0111, 0.9889] + }, + "0.9583": { + "vector": [0.995, 1.005, 0.995] + }, + "1.0": { + "vector": [1, 1, 1] + } + } + }, + "rightTooth": { + "rotation": { + "0.0": { + "vector": [0, 0, 25] + }, + "0.0417": { + "vector": [0, 0, 24.7] + }, + "0.0833": { + "vector": [0, 0, 23.89] + }, + "0.125": { + "vector": [0, 0, 22.66] + }, + "0.1667": { + "vector": [0, 0, 21.11] + }, + "0.2083": { + "vector": [0, 0, 19.36] + }, + "0.25": { + "vector": [0, 0, 17.5] + }, + "0.2917": { + "vector": [0, 0, 15.64] + }, + "0.3333": { + "vector": [0, 0, 13.89] + }, + "0.375": { + "vector": [0, 0, 12.34] + }, + "0.4167": { + "vector": [0, 0, 11.11] + }, + "0.4583": { + "vector": [0, 0, 10.3] + }, + "0.5": { + "vector": [0, 0, 10] + }, + "0.5417": { + "vector": [0, 0, 10.3] + }, + "0.5833": { + "vector": [0, 0, 11.11] + }, + "0.625": { + "vector": [0, 0, 12.34] + }, + "0.6667": { + "vector": [0, 0, 13.89] + }, + "0.7083": { + "vector": [0, 0, 15.64] + }, + "0.75": { + "vector": [0, 0, 17.5] + }, + "0.7917": { + "vector": [0, 0, 19.36] + }, + "0.8333": { + "vector": [0, 0, 21.11] + }, + "0.875": { + "vector": [0, 0, 22.66] + }, + "0.9167": { + "vector": [0, 0, 23.89] + }, + "0.9583": { + "vector": [0, 0, 24.7] + }, + "1.0": { + "vector": [0, 0, 25] + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "vector": [-25, 0, 0] + }, + "0.0417": { + "vector": [-24.58, 0.88, 2.83] + }, + "0.0833": { + "vector": [-23.47, 1.86, 5.97] + }, + "0.125": { + "vector": [-21.91, 2.82, 9.07] + }, + "0.1667": { + "vector": [-20.14, 3.66, 11.75] + }, + "0.2083": { + "vector": [-18.4, 4.24, 13.63] + }, + "0.25": { + "vector": [-16.94, 4.46, 14.34] + }, + "0.2917": { + "vector": [-15.56, 4.24, 13.63] + }, + "0.3333": { + "vector": [-14.03, 3.66, 11.75] + }, + "0.375": { + "vector": [-12.54, 2.82, 9.07] + }, + "0.4167": { + "vector": [-11.25, 1.86, 5.97] + }, + "0.4583": { + "vector": [-10.34, 0.88, 2.83] + }, + "0.5": { + "vector": [-10, 0, 0] + }, + "0.5417": { + "vector": [-10.33, -0.92, -2.96] + }, + "0.5833": { + "vector": [-11.22, -2, -6.44] + }, + "0.625": { + "vector": [-12.49, -3.1, -9.97] + }, + "0.6667": { + "vector": [-13.97, -4.07, -13.08] + }, + "0.7083": { + "vector": [-15.49, -4.76, -15.29] + }, + "0.75": { + "vector": [-16.87, -5.02, -16.13] + }, + "0.7917": { + "vector": [-18.34, -4.76, -15.29] + }, + "0.8333": { + "vector": [-20.08, -4.07, -13.08] + }, + "0.875": { + "vector": [-21.87, -3.1, -9.97] + }, + "0.9167": { + "vector": [-23.44, -2, -6.44] + }, + "0.9583": { + "vector": [-24.57, -0.92, -2.96] + }, + "1.0": { + "vector": [-25, 0, 0] + } + } + }, + "leftTooth": { + "rotation": { + "0.0": { + "vector": [0, 0, -25] + }, + "0.0417": { + "vector": [0, 0, -24.7] + }, + "0.0833": { + "vector": [0, 0, -23.89] + }, + "0.125": { + "vector": [0, 0, -22.66] + }, + "0.1667": { + "vector": [0, 0, -21.11] + }, + "0.2083": { + "vector": [0, 0, -19.36] + }, + "0.25": { + "vector": [0, 0, -17.5] + }, + "0.2917": { + "vector": [0, 0, -15.64] + }, + "0.3333": { + "vector": [0, 0, -13.89] + }, + "0.375": { + "vector": [0, 0, -12.34] + }, + "0.4167": { + "vector": [0, 0, -11.11] + }, + "0.4583": { + "vector": [0, 0, -10.3] + }, + "0.5": { + "vector": [0, 0, -10] + }, + "0.5417": { + "vector": [0, 0, -10.3] + }, + "0.5833": { + "vector": [0, 0, -11.11] + }, + "0.625": { + "vector": [0, 0, -12.34] + }, + "0.6667": { + "vector": [0, 0, -13.89] + }, + "0.7083": { + "vector": [0, 0, -15.64] + }, + "0.75": { + "vector": [0, 0, -17.5] + }, + "0.7917": { + "vector": [0, 0, -19.36] + }, + "0.8333": { + "vector": [0, 0, -21.11] + }, + "0.875": { + "vector": [0, 0, -22.66] + }, + "0.9167": { + "vector": [0, 0, -23.89] + }, + "0.9583": { + "vector": [0, 0, -24.7] + }, + "1.0": { + "vector": [0, 0, -25] + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "vector": [-25, 0, 0] + }, + "0.0417": { + "vector": [-24.58, -0.88, -2.83] + }, + "0.0833": { + "vector": [-23.47, -1.86, -5.97] + }, + "0.125": { + "vector": [-21.91, -2.82, -9.07] + }, + "0.1667": { + "vector": [-20.14, -3.66, -11.75] + }, + "0.2083": { + "vector": [-18.4, -4.24, -13.63] + }, + "0.25": { + "vector": [-16.94, -4.46, -14.33] + }, + "0.2917": { + "vector": [-15.56, -4.24, -13.63] + }, + "0.3333": { + "vector": [-14.03, -3.66, -11.75] + }, + "0.375": { + "vector": [-12.54, -2.82, -9.07] + }, + "0.4167": { + "vector": [-11.25, -1.86, -5.97] + }, + "0.4583": { + "vector": [-10.34, -0.88, -2.83] + }, + "0.5": { + "vector": [-10, 0, 0] + }, + "0.5417": { + "vector": [-10.33, 0.92, 2.96] + }, + "0.5833": { + "vector": [-11.22, 2, 6.44] + }, + "0.625": { + "vector": [-12.49, 3.1, 9.97] + }, + "0.6667": { + "vector": [-13.97, 4.07, 13.08] + }, + "0.7083": { + "vector": [-15.49, 4.76, 15.29] + }, + "0.75": { + "vector": [-16.87, 5.02, 16.13] + }, + "0.7917": { + "vector": [-18.34, 4.76, 15.29] + }, + "0.8333": { + "vector": [-20.08, 4.07, 13.08] + }, + "0.875": { + "vector": [-21.87, 3.1, 9.97] + }, + "0.9167": { + "vector": [-23.44, 2, 6.44] + }, + "0.9583": { + "vector": [-24.57, 0.92, 2.96] + }, + "1.0": { + "vector": [-25, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/missile_squid.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/missile_squid.animation.json new file mode 100644 index 00000000..1fb84b6c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/missile_squid.animation.json @@ -0,0 +1,2565 @@ +{ + "format_version": "1.8.0", + "animations": { + "pose": { + "loop": true, + "bones": { + "tentacle_left": { + "rotation": { + "vector": [-46.0351, -16.2295, -25.9524] + } + }, + "arm_left_1": { + "rotation": { + "vector": [-9.6888, 6.046, -31.6589] + } + }, + "bone": { + "rotation": { + "vector": [-47.5, 0, 0] + } + }, + "elbow_left_1": { + "rotation": { + "vector": [-18.2562, -8.3107, -6.1624] + } + }, + "mouth_left": { + "rotation": { + "vector": [0, 0, -25] + }, + "position": { + "vector": [0.79335, 0.60876, 0] + } + }, + "mouth_right": { + "rotation": { + "vector": [0, 0, 25] + }, + "position": { + "vector": [-0.79335, 0.60876, 0] + } + }, + "tentacle_right": { + "rotation": { + "vector": [-46.0351, 16.2295, 25.9524] + } + }, + "tentacle_left_2": { + "rotation": { + "vector": [-7.5, 0, 42.5] + } + }, + "tentacle_left_3": { + "rotation": { + "vector": [17.5, 0, 32.5] + } + }, + "tentacle_right_2": { + "rotation": { + "vector": [-7.5, 0, -42.5] + } + }, + "tentacle_right_3": { + "rotation": { + "vector": [17.5, 0, -32.5] + } + }, + "arm_right_1": { + "rotation": { + "vector": [-9.6888, -6.046, 31.6589] + } + }, + "arm_left_2": { + "rotation": { + "vector": [0, 0, -50] + } + }, + "elbow_left_2": { + "rotation": { + "vector": [0, 0, 17.5] + } + }, + "arm_left_3": { + "rotation": { + "vector": [18.204, -27.7997, -37.3157] + } + }, + "elbow_left_3": { + "rotation": { + "vector": [0, 0, -15] + } + }, + "arm_left_4": { + "rotation": { + "vector": [28.6453, 12.809, -12.025] + } + }, + "elbow_left_4": { + "rotation": { + "vector": [-32.5, 0, 0] + } + }, + "elbow_right_1": { + "rotation": { + "vector": [-18.2562, 8.3107, 6.1624] + } + }, + "arm_right_2": { + "rotation": { + "vector": [0, 0, 50] + } + }, + "elbow_right_2": { + "rotation": { + "vector": [0, 0, -17.5] + } + }, + "arm_right_3": { + "rotation": { + "vector": [18.204, 27.7997, 37.3157] + } + }, + "elbow_right_3": { + "rotation": { + "vector": [0, 0, 15] + } + }, + "arm_right_4": { + "rotation": { + "vector": [28.6453, -12.809, 12.025] + } + }, + "elbow_right_4": { + "rotation": { + "vector": [-32.5, 0, 0] + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 1.9231, + "bones": { + "tentacle_left": { + "rotation": { + "0.0": { + "post": { + "vector": [-30.742, 48.7483, -30.1391] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [-39.4208, 41.9349, -42.6052] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [-42.547, 39.7149, -46.9482] + }, + "lerp_mode": "catmullrom" + }, + "1.3622": { + "post": { + "vector": [-28.8665, 48.9872, -27.8471] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [-30.742, 48.7483, -30.1391] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, -47.71] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, 38.96] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4423": { + "post": { + "vector": [0, 0, -33.75] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, 21.46] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.3622": { + "post": { + "vector": [0, 0, -13.96] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, 26.88] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.3622": { + "post": { + "vector": [0, 0, -29.37] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right": { + "rotation": { + "0.0": { + "post": { + "vector": [-30.742, -48.7483, 30.1391] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [-39.4208, -41.9349, 42.6052] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [-42.547, -39.7149, 46.9482] + }, + "lerp_mode": "catmullrom" + }, + "1.3622": { + "post": { + "vector": [-28.8665, -48.9872, 27.8471] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [-30.742, -48.7483, 30.1391] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [-0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, -21.46] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.3622": { + "post": { + "vector": [0, 0, 13.96] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, -26.88] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.3622": { + "post": { + "vector": [0, 0, 29.37] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_2": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [7.9497, -10.6894, -34.9729] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [8.5509, -10.4184, -37.7331] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [5, -12.5, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, 34.38] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.4423": { + "post": { + "vector": [0, 0, -23.75] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_3": { + "rotation": { + "0.0": { + "post": { + "vector": [8.3511, -32.3819, -14.417] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [16.2172, -29.1618, -29.9214] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [17.1026, -29.0496, -31.4503] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [8.3511, -32.3819, -14.417] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [-0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, 35.42] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4423": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_4": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [44.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_4": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [-38.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4423": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, 47.71] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, -38.96] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4423": { + "post": { + "vector": [0, 0, 33.75] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_2": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [7.9497, 10.6894, 34.9729] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [8.5509, 10.4184, 37.7331] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [5, 12.5, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, -34.38] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.4423": { + "post": { + "vector": [0, 0, 23.75] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_3": { + "rotation": { + "0.0": { + "post": { + "vector": [8.3511, 32.3819, 14.417] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [16.2172, 29.1618, 29.9214] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [17.1026, 29.0496, 31.4503] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [8.3511, 32.3819, 14.417] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [0, 0, -35.42] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4423": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_4": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [44.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_4": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4006": { + "post": { + "vector": [-38.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9615": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4423": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9231": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "loop": "hold_on_last_frame", + "animation_length": 1.0016, + "bones": { + "tentacle_left": { + "rotation": { + "0.0": { + "post": { + "vector": [-30.742, 48.7483, -30.1391] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-5.0139, 57.1314, -21.7342] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [24.9861, 57.1314, -21.7342] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30.742, 48.7483, -30.1391] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [5, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-12.5, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [21.4754, -28.565, 1.2447] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [15, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [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" + } + } + }, + "tentacle_left_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-20, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [12.7342, -7.9939, 24.1067] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-4.352, -0.9207, -6.3899] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-4.0149, 1.9164, 31.0079] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right": { + "rotation": { + "0.0": { + "post": { + "vector": [-30.742, -48.7483, 30.1391] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-39.9669, 22.5426, 103.1313] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-39.97, 22.54, 103.13] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-63.3609, -19.3972, 11.8529] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-61.9148, -26.0607, 8.1176] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30.742, -48.7483, 30.1391] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-0.57, 0.33, -0.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_2": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [16.8953, -9.7456, -29.7987] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [71.9903, -6.8245, -86.7077] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -12.5, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [14.3351, 4.4639, 10.5616] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [29.3351, 4.4639, 10.5616] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_3": { + "rotation": { + "0.0": { + "post": { + "vector": [8.3511, -32.3819, -14.417] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [34.6552, -27.4718, -36.8375] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [87.0175, -17.1777, -81.3365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [8.3511, -32.3819, -14.417] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [12.5, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [12.0869, 3.2114, -4.6598] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_4": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [17.3908, 3.5333, -3.54] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [71.143, -12.2766, 12.5684] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_4": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [22.5, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-30.4713, 0, -25.4713] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [27.5, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_2": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [17.6522, 8.26, 34.6326] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [41.8481, 1.8546, 53.6641] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 12.5, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-22.5, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.5458, -2.9932, -10.2499] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_3": { + "rotation": { + "0.0": { + "post": { + "vector": [8.3511, 32.3819, 14.417] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [38.4047, 28.2871, 34.1639] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [48.6747, -4.7699, 69.5982] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [8.3511, 32.3819, 14.417] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-18.586, -7.5206, -38.7677] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [12.5, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_4": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [71.9222, -14.2905, 4.6065] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_4": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swim": { + "loop": true, + "animation_length": 1, + "bones": { + "tentacle_left": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.4946, 51.1084, -23.2869] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-39.4208, 41.9349, -42.6052] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-52.6084, 21.0557, -66.4374] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-26.265, 50.1446, -24.4298] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.4946, 51.1084, -23.2869] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -47.71] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 3.62] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -9, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -9, 2] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -9, -2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -26.04] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 8.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 11.46] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 11.04] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -20.62] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 45.63] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.4946, -51.1084, 23.2869] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-39.4208, -41.9349, 42.6052] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-52.6084, -21.0557, 66.4374] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-26.265, -50.1446, 24.4298] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.4946, -51.1084, 23.2869] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.57023, 0.33107, -0.75182] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -11.46] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -11.04] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 20.62] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -45.63] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.4408, -13.3722, 8.2167] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [9.2761, -9.5646, -42.5058] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10.5941, -8.3313, -50.2258] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.1376, -11.6292, 1.1231] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.4408, -13.3722, 8.2167] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -35.62] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 13.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_3": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.3807, -33.3023, 3.4247] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [23.333, -24.0512, -45.7136] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.8525, -26.6062, -39.4709] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.1541, -31.5716, 0.7626] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.3807, -33.3023, 3.4247] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -39.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 9.16] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_left_4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [43.6831, 8.7053, -9.0052] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [6.93, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_left_4": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [19.0179, 2.4565, -7.0884] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 47.71] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -3.62] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_1": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 26.04] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -8.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.4408, 13.3722, -8.2167] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [9.2761, 9.5646, 42.5058] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10.5941, 8.3313, 50.2258] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.1376, 11.6292, -1.1231] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.4408, 13.3722, -8.2167] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 35.62] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -13.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_3": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.3807, 33.3023, -3.4247] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [23.333, 24.0512, 45.7136] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.8525, 26.6062, 39.4709] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.1541, 31.5716, -0.7626] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.3807, 33.3023, -3.4247] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.54936, 0.00874, 0.83554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 39.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -9.16] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "arm_right_4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [43.6831, -8.7053, 9.0052] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [6.93, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "elbow_right_4": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [19.0179, -2.4565, 7.0884] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/molevore.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/molevore.animation.json new file mode 100644 index 00000000..1c619fdd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/molevore.animation.json @@ -0,0 +1,3442 @@ +{ + "format_version": "1.8.0", + "animations": { + "digging up": { + "animation_length": 3, + "bones": { + "all": { + "rotation": { + "0.0": { + "post": { + "vector": [-67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-39.82, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-22.32, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-17.32, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-7.32, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [0.18, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -19, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, -3.56, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, -11, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -2.68, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, -3.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-0.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [11.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-4.07, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [2.3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [9.7341, -0.2574, -1.0971] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [17.2341, -0.2574, -1.0971] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-26.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-42.5, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [62.5, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [25, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [45.9148, -29.7644, -6.3649] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [45.9148, -29.7644, -6.3649] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0.1255, -30.2932, 5.1742] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [72, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [27.5, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [44.4894, 21.5715, 10.2702] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [44.4894, 21.5715, 10.2702] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0.8781, 22.6078, -5.8874] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 1.6473, + "bones": { + "all": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6783": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.1628": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.6473": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4845": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0659": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6473": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.969": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6473": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "jaw2": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "left_arm": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "left_leg": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "right_arm": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "right_leg": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "vector": [1, 1, 1] + } + } + } + }, + "claw swiping": { + "loop": true, + "animation_length": 1.5298, + "bones": { + "all": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5609": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8669": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9689": { + "post": { + "vector": [13.854, -27.1034, -16.6486] + }, + "lerp_mode": "catmullrom" + }, + "1.0709": { + "post": { + "vector": [13.854, -27.1034, -16.6486] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [13.854, 27.1034, 16.6486] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5609": { + "post": { + "vector": [0, 2.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9689": { + "post": { + "vector": [0, 1.2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0709": { + "post": { + "vector": [0, 1.2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [0, 1.2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.102": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5609": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6629": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.102": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.204": { + "post": { + "vector": [-9.9575, 0.6518, 7.4718] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7139": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0709": { + "post": { + "vector": [-6.3503, 9.9399, -1.1005] + }, + "lerp_mode": "catmullrom" + }, + "1.3259": { + "post": { + "vector": [-3.5679, -5.7717, 0.0348] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.255": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5609": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8669": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2239": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.255": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6119": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7139": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.408": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5099": { + "post": { + "vector": [-20.8885, -16.4136, 6.1548] + }, + "lerp_mode": "catmullrom" + }, + "0.6629": { + "post": { + "vector": [-51.2002, -20.8406, -4.8547] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [-65.9681, -29.0322, 12.2348] + }, + "lerp_mode": "catmullrom" + }, + "0.8669": { + "post": { + "vector": [-65.9681, -29.0322, 12.2348] + }, + "lerp_mode": "catmullrom" + }, + "0.9689": { + "post": { + "vector": [-65.9681, -29.0322, 12.2348] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [-80.1332, -29.7801, 26.9544] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [38.3217, 20.0938, 69.0278] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6629": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9689": { + "post": { + "vector": [-31.4426, 29.9684, -2.886] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3259": { + "post": { + "vector": [-12.2919, -29.3508, -12.2922] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.408": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5099": { + "post": { + "vector": [-20.8885, 16.4136, -6.1548] + }, + "lerp_mode": "catmullrom" + }, + "0.6629": { + "post": { + "vector": [-51.2002, 20.8406, 4.8547] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [-80.1332, 29.7801, -26.9544] + }, + "lerp_mode": "catmullrom" + }, + "0.8669": { + "post": { + "vector": [-80.1332, 29.7801, -26.9544] + }, + "lerp_mode": "catmullrom" + }, + "0.9689": { + "post": { + "vector": [38.3217, -20.0938, -69.0278] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [38.3217, -20.0938, -69.0278] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [-65.9681, 29.0322, -12.2348] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6629": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9689": { + "post": { + "vector": [-10, 37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3259": { + "post": { + "vector": [-77.0302, -57.2943, 27.1217] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5298": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "hurt": { + "animation_length": 0.838, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2328": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3724": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5819": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7449": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1164": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2328": { + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.5121": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.7449": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1397": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2328": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5819": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7449": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3026": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5819": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7449": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1397": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2328": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7449": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "death": { + "animation_length": 2.1881, + "bones": { + "all": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2561": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3957": { + "post": { + "vector": [-0.0189, -0.4352, 4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.5819": { + "post": { + "vector": [-0.0189, -0.4352, 4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.7216": { + "post": { + "vector": [11.7582, 1.0115, 4.4183] + }, + "lerp_mode": "catmullrom" + }, + "0.838": { + "post": { + "vector": [9.0992, 7.5463, -30.0843] + }, + "lerp_mode": "catmullrom" + }, + "1.0242": { + "post": { + "vector": [14.6877, 6.3027, -25.2057] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2328": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3724": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7216": { + "post": { + "vector": [-12.3964, -1.6189, -7.3241] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1164": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2328": { + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1397": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2328": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3026": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0242": { + "post": { + "vector": [22.5971, 1.5929, -3.9291] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1397": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2328": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0242": { + "post": { + "vector": [-14.7822, -2.576, -9.6658] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4655": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7449": { + "post": { + "vector": [-31.063, -13.6689, -18.7459] + }, + "lerp_mode": "catmullrom" + }, + "0.8845": { + "post": { + "vector": [-12.3343, -13.4533, 0.2399] + }, + "lerp_mode": "catmullrom" + }, + "1.0242": { + "post": { + "vector": [2.2157, -2.6382, 49.9489] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4655": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7449": { + "post": { + "vector": [0, 5.5, 1.61] + }, + "lerp_mode": "catmullrom" + }, + "1.1639": { + "post": { + "vector": [0, 4, 1.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3957": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7449": { + "post": { + "vector": [-13.9219, 28.3807, 6.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.8845": { + "post": { + "vector": [-5.6414, 40.9918, 8.677] + }, + "lerp_mode": "catmullrom" + }, + "1.0242": { + "post": { + "vector": [-59.7184, 44.4936, 9.4182] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4655": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7216": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0242": { + "post": { + "vector": [-17.5018, 12.1365, 15.9764] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4655": { + "post": { + "vector": [0, 0, 2.25] + }, + "lerp_mode": "catmullrom" + }, + "1.0242": { + "post": { + "vector": [0, 10.09, 2.29] + }, + "lerp_mode": "catmullrom" + }, + "1.1639": { + "post": { + "vector": [0, 6, 2.25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3957": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1639": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "digging down": { + "animation_length": 3, + "bones": { + "all": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-21.91, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [54.7684, 6.1379, -4.3184] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [54.5869, -8.1777, 5.775] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [71.2144, 14.26, -10.2511] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [82.3973, -4.0941, 2.8728] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [72.3272, -6.4766, 3.6335] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 5.3, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -3.7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -15.7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, -31.7, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, -50.7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-0.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [11.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-4.07, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [2.3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [9.7341, -0.2574, -1.0971] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-26.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-42.5, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [62.5, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-25, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-42.5, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [62.5, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-25, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [-42.5, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [62.5, -35, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [72, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [30, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [72, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [30, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [72, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-20, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "spinning": { + "loop": true, + "animation_length": 2.4987, + "bones": { + "mole_big": { + "rotation": { + "0.7649": { + "vector": [0, 0, 0] + }, + "1.2239": { + "vector": [0, 0, 358.87] + }, + "1.6318": { + "vector": [0, 0, 718.87] + } + }, + "position": { + "1.2239": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "all": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5609": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9179": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5609": { + "post": { + "vector": [0, 2.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9179": { + "post": { + "vector": [0, 0, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.9689": { + "post": { + "vector": [0, 0, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.102": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5609": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6629": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.102": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.204": { + "post": { + "vector": [-9.9575, 0.6518, 7.4718] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9179": { + "post": { + "vector": [0.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0199": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9179": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.255": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5609": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8669": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0199": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.255": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6119": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7139": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0199": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1729": { + "vector": [0, 0, 0] + }, + "1.2749": { + "vector": [0, 0, 0] + }, + "2.0398": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.408": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5099": { + "post": { + "vector": [-20.8885, -16.4136, 6.1548] + }, + "lerp_mode": "catmullrom" + }, + "0.6629": { + "post": { + "vector": [-51.2002, -20.8406, -4.8547] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [-65.9681, -29.0322, 12.2348] + }, + "lerp_mode": "catmullrom" + }, + "0.8669": { + "post": { + "vector": [9.0072, 20.7048, 24.1487] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6629": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8159": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2239": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.408": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5099": { + "post": { + "vector": [-20.8885, 16.4136, -6.1548] + }, + "lerp_mode": "catmullrom" + }, + "0.6629": { + "post": { + "vector": [-51.2002, 20.8406, 4.8547] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [-80.1332, 29.7801, -26.9544] + }, + "lerp_mode": "catmullrom" + }, + "0.8669": { + "post": { + "vector": [9.0072, -20.7048, -24.1487] + }, + "lerp_mode": "catmullrom" + }, + "1.2749": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.357": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6629": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8159": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2239": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.7649": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0398": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1.3158, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0.0757, 0.8647, 7.4818] + }, + "lerp_mode": "catmullrom" + }, + "0.3289": { + "post": { + "vector": [2.8425, -2.3463, -2.1753] + }, + "lerp_mode": "catmullrom" + }, + "0.7127": { + "post": { + "vector": [5.0121, -2.6971, 5.3237] + }, + "lerp_mode": "catmullrom" + }, + "1.0965": { + "post": { + "vector": [-7.3587, -1.6645, 0.5636] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [0.0757, 0.8647, 7.4818] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [0, 0.75, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.3289": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6031": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8772": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0965": { + "post": { + "vector": [1, 0.8125, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6579": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6579": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3289": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7127": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9868": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.3289": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.7127": { + "post": { + "vector": [0, 6, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.9868": { + "post": { + "vector": [0, 2, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3289": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7127": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9868": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 6, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.3289": { + "post": { + "vector": [0, 2, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.7127": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.9868": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [0, 6, -2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3289": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7127": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9868": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 6, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.3289": { + "post": { + "vector": [0, 2, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.7127": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.9868": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [0, 6, 2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3289": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7127": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9868": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.3289": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.7127": { + "post": { + "vector": [0, 6, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.9868": { + "post": { + "vector": [0, 2, -4] + }, + "lerp_mode": "catmullrom" + }, + "1.3158": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/moleworm.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/moleworm.animation.json new file mode 100644 index 00000000..1a11a49f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/moleworm.animation.json @@ -0,0 +1,869 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 0.7083, + "bones": { + "mole_little": { + "scale": { + "0.0": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Dig": { + "animation_length": 2, + "bones": { + "mole_little": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-4.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [34.6161, 5.7201, -8.2161] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [39.5686, -6.4087, 7.6926] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [64.025, 9.5767, -11.5994] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [90.0451, -3.5217, 0.3068] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -0.4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, -1.4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, -2.65, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -7.65, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-22.299, -10.5497, 22.299] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [135.201, -10.5497, 22.299] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [61.0074, 14.3391, -31.3647] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [166.0074, 14.3391, -31.3647] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [78.5074, 14.3391, -31.3647] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-27.1784, 16.3634, -18.5125] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [120.3216, 16.3634, -18.5125] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [83.0009, 14.3242, 9.9483] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [150.5009, 14.3242, 9.9483] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [-17.5, 0, 0] + }, + "1.25": { + "vector": [10, 0, 0] + }, + "1.5": { + "vector": [-10, 0, 0] + }, + "1.75": { + "vector": [10, 0, 0] + }, + "2.0": { + "vector": [32.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, -1] + }, + "1.25": { + "vector": [0, 0.75, -1] + }, + "1.5": { + "vector": [0, 0.25, -1] + }, + "1.75": { + "vector": [0, 0.5, -1] + }, + "2.0": { + "vector": [0, -1, -2.5] + } + } + } + } + }, + "Death": { + "animation_length": 2.2083, + "bones": { + "mole_little": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [3.2935, 0.2479, 0.3764] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.7661, 0.5755, 0.8739] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-19.7661, 0.5755, 0.8739] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-19.7661, 0.5755, 0.8739] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0.2339, 0.5755, 0.8739] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [5.2339, 0.5755, 0.8739] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2.7339, 0.5755, 0.8739] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [1, 0.7, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-30, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-30, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-10, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0.3, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-28.9855, 17.6606, -9.54] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-28.9855, 17.6606, -9.54] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-11.4855, 17.6606, -9.54] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0.7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.4, 0.7, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [1.1, 0.8, 1.1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "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.25": { + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 2, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 2, 2] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0.0757, 0.8647, 7.4818] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.8425, -2.3463, -2.1753] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [5.0121, -2.6971, 5.3237] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.3587, -1.6645, 0.5636] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.0757, 0.8647, 7.4818] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0.75, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 0.8125, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "vector": [0, 15, 0] + }, + "0.5": { + "vector": [0, -15, 0] + }, + "1.0": { + "vector": [0, 15, 0] + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "vector": [0, 22.5, 0] + }, + "0.5": { + "vector": [0, -22.5, 0] + }, + "1.0": { + "vector": [0, 22.5, 0] + } + } + } + } + } + } +} \ 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 new file mode 100644 index 00000000..13782188 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json @@ -0,0 +1,3643 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "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" + } + } + } + } + }, + "walk": { + "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" + } + } + } + } + }, + "fly": { + "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": [27.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" + } + } + } + } + }, + "attack": { + "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" + } + } + } + } + }, + "attack2": { + "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" + } + } + } + } + }, + "roar": { + "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" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare_bite.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare_bite.animation.json new file mode 100644 index 00000000..a0839a22 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare_bite.animation.json @@ -0,0 +1,308 @@ +{ + "format_version": "1.8.0", + "animations": { + "bite": { + "animation_length": 1.5, + "bones": { + "upper_jaw": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_jaw": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Bite": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "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" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -12, 0] + }, + "0.5417": { + "vector": [0, 0, 0] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "1.25": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "impact": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -2, 6] + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0.4, 1, 1] + }, + "0.75": { + "pre": { + "vector": [3.4, 1, 1] + }, + "post": { + "vector": [3.4, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [2.2667, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particles_left": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [14.14214, 14.14214, 0] + }, + "post": { + "vector": [14.14214, 14.14214, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particles_right": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-14.14214, 14.14214, 0] + }, + "post": { + "vector": [-14.14214, 14.14214, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particles_left_bottom": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [14.02043, -14.01429, -2.65088] + }, + "post": { + "vector": [14.02043, -14.01429, -2.65088] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 0.8] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particles_right_bottom": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-14.02043, -14.01429, -2.65088] + }, + "post": { + "vector": [-14.02043, -14.01429, -2.65088] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 0.8] + }, + "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 new file mode 100644 index 00000000..56931263 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/nightmare_portal.animation.json @@ -0,0 +1,1176 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 720] + } + } + }, + "Portal_Layer_Highlight": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 360] + } + } + }, + "Back_Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -720] + } + } + }, + "Back_Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Back_Portal_Layer3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.9, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.9, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0.9, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0.9, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left_bottom": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right_bottom": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Beam": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "close": { + "loop": true, + "animation_length": 2, + "bones": { + "Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 720] + } + } + }, + "Portal_Layer_Highlight": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 360] + } + } + }, + "Back_Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -720] + } + } + }, + "Back_Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Back_Portal_Layer3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left_bottom": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right_bottom": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Beam": { + "scale": { + "0.0": { + "vector": [0, 0.5, 1] + }, + "1.5": { + "vector": [0, 0.5, 1] + }, + "1.75": { + "pre": { + "vector": [1, 0.5, 1] + }, + "post": { + "vector": [1, 0.5, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "open": { + "loop": true, + "animation_length": 2, + "bones": { + "Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 720] + } + } + }, + "Portal_Layer_Highlight": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 360] + } + } + }, + "Back_Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -720] + } + } + }, + "Back_Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Back_Portal_Layer3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal": { + "scale": { + "0.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left_bottom": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right_bottom": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Beam": { + "scale": { + "0.0": { + "vector": [0, 0.5, 1] + }, + "1.5": { + "vector": [0, 0.5, 1] + }, + "1.75": { + "pre": { + "vector": [1, 0.5, 1] + }, + "post": { + "vector": [1, 0.5, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json new file mode 100644 index 00000000..fe841375 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json @@ -0,0 +1,11385 @@ +{ + "format_version": "1.8.0", + "animations": { + "pose": { + "loop": true, + "bones": { + "Tentacle_1_Left": { + "rotation": { + "vector": [-30.4985, 19.4505, -51.4092] + }, + "position": { + "vector": [-2, 2, 0] + } + }, + "Tentacle_part_1_left": { + "rotation": { + "vector": [0, 0, -52.5] + }, + "position": { + "vector": [-1, 2, 0] + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "vector": [0, 0, 65] + }, + "position": { + "vector": [0, 4, 0] + } + }, + "Tentacle_1_Left2": { + "rotation": { + "vector": [-5.3981, 11.9127, -58.8139] + }, + "position": { + "vector": [0, 1.6, -3.4] + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "vector": [0, 0, -52.5] + }, + "position": { + "vector": [-1, 2, 0] + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "vector": [0, 0, 52.5] + }, + "position": { + "vector": [0, 4.2, 0] + } + }, + "Tentacle_1_Left3": { + "rotation": { + "vector": [12.2767, -21.7337, -37.5251] + }, + "position": { + "vector": [0, -1, -7] + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "vector": [0, 0, -80] + }, + "position": { + "vector": [-1, 2, 0] + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "vector": [0, 0, 72.5] + }, + "position": { + "vector": [1, 4, 0] + } + }, + "Tentacle_1_Left4": { + "rotation": { + "vector": [38.5673, -39.2521, -57.1302] + }, + "position": { + "vector": [-3, -3, -12] + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "vector": [0, 0, -72.5] + }, + "position": { + "vector": [-2, 2, 0] + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "vector": [0, 0, 75] + }, + "position": { + "vector": [1, 4, 0] + } + }, + "Tentacle_1_Right": { + "rotation": { + "vector": [-30.4985, -19.4505, 51.4092] + }, + "position": { + "vector": [2, 2, 0] + } + }, + "Tentacle_part_1_right": { + "rotation": { + "vector": [0, 0, 52.5] + }, + "position": { + "vector": [1, 2, 0] + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "vector": [0, 0, -65] + }, + "position": { + "vector": [0, 4, 0] + } + }, + "Tentacle_1_Right2": { + "rotation": { + "vector": [-5.3981, -11.9127, 58.8139] + }, + "position": { + "vector": [0, 1.6, -3.4] + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "vector": [0, 0, 52.5] + }, + "position": { + "vector": [1, 2, 0] + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "vector": [0, 0, -52.5] + }, + "position": { + "vector": [0, 4.2, 0] + } + }, + "Tentacle_1_Right3": { + "rotation": { + "vector": [12.2767, 21.7337, 37.5251] + }, + "position": { + "vector": [0, -1, -7] + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "vector": [0, 0, 80] + }, + "position": { + "vector": [1, 2, 0] + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "vector": [0, 0, -72.5] + }, + "position": { + "vector": [-1, 4, 0] + } + }, + "Tentacle_1_Right4": { + "rotation": { + "vector": [38.5673, 39.2521, 57.1302] + }, + "position": { + "vector": [3, -3, -12] + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "vector": [0, 0, 72.5] + }, + "position": { + "vector": [2, 2, 0] + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "vector": [0, 0, -75] + }, + "position": { + "vector": [-1, 4, 0] + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 2.5, + "sound_effects": { + "0.0": { + "effect": "antarchy:kraken_flying_loop|0.45|1.19" + } + }, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-35.4398, 4.2669, -74.9229] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.972, 35.0689, -6.2022] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-37.4694, 63.0682, -47.9037] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-31.9019, 16.8589, -55.9098] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-35.4398, 4.2669, -74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -20.16] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.2, 1.9, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -44.3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 25.1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.2077, 20.7048, -49.1065] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1.4426, 29.9685, 2.8862] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1228, 29.2189, -14.3587] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-19.2127, 22.3844, -42.5154] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-22.2077, 20.7048, -49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 21.74] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 32.78] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [20.8765, -13.7242, -65.1997] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [3.0505, -16.4853, -16.207] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5.0124, -9.0942, -22.6429] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [20.8765, -13.7242, -65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0.3538, 0.7361, -18.3913] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.7831, -0.0666, 47.4376] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0.0877, -0.2452, 40.1682] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 33.47] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [51.756, -12.0106, -86.2494] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.6649, -51.6428, -21.5544] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.0517, -47.4021, -39.7338] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [51.756, -12.0106, -86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 41.81] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.14] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-35.4398, -4.2669, 74.9229] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.972, -35.0689, 6.2022] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-37.4694, -63.0682, 47.9037] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-31.9019, -16.8589, 55.9098] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-35.4398, -4.2669, 74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20.16] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.2, 1.9, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 44.3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -25.1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.2077, -20.7048, 49.1065] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1.4426, -29.9685, -2.8862] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1228, -29.2189, 14.3587] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-19.2127, -22.3844, 42.5154] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-22.2077, -20.7048, 49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, -21.74] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, -32.78] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [20.8765, 13.7242, 65.1997] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [3.0505, 16.4853, 16.207] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5.0124, 9.0942, 22.6429] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [20.8765, 13.7242, 65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0.3538, -0.7361, 18.3913] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.7831, 0.0666, -47.4376] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0.0877, 0.2452, -40.1682] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -33.47] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [51.756, 12.0106, 86.2494] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.6649, 51.6428, 21.5544] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.0517, 47.4021, 39.7338] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [51.756, 12.0106, 86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -41.81] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 37.14] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Swipe": { + "loop": "hold_on_last_frame", + "animation_length": 1.5, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-34.387, 6.9319, -69.6654] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-91.887, 6.9319, -69.6654] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0.4848, -62.5683, 25.0151] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-14.4729, -36.208, 16.5374] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.63, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [8.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [8.33, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [23.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [23.33, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.0104, -17.5, 0.003] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.01, 143.59, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [42.5, 0, -22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-44.6896, 0, -16.9359] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [45, 0, 19.55] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [34.3081, -4.2439, 40.5865] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [22.2694, -1.4146, 49.4325] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 0, -15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-22.3771, 2.3004, -8.4118] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [31.8803, 6.6782, 11.6893] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [24.056, -2.6619, 33.1066] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [19.3379, -1.1346, 26.2811] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-16.717, 4.2814, -82.5286] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-56.717, 4.2814, -82.5286] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [20.0257, -49.8387, -16.1244] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-6.4668, -43.5968, 25.4296] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [65, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-31.9581, -7.9792, 5.0872] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [32.5, 0, 2.2] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [22.6478, -10.6998, 38.4965] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [23.8456, -3.5666, 35.4099] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [27.5, 0, -28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-42.3853, 2.1984, -28.1145] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [25.2579, 11.253, -8.0809] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [17.3767, -13.6298, 65.8393] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [22.3568, -4.96, 46.4461] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0.61719, 3.98477, 0.70711] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [18.9012, 0.2882, -86.5243] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-16.0988, 0.2882, -86.5243] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [55.6218, -58.8306, -36.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [54.5769, -73.2357, -21.3745] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2647, -0.0241, -24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [45.2647, -0.0241, -24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-26.5249, 9.8299, -1.1177] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [29.5168, 12.0389, 10.1054] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [23.6314, -1.333, 42.9303] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [24.3473, -1.0661, 42.2036] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [30, 0, -13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-45.3023, 10.583, -40.596] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.2418, 12.9773, -42.7247] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [8.471, 3.6937, 25.096] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [20.2777, 0.7506, 32.2833] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.62802, 4.31086, 0.82571] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [52.0766, -6.9543, -86.6052] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [32.0766, -6.9543, -86.6052] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [155.5716, -28.3508, -115.3908] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [42.5, 0, -19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [33.9673, -15.7385, 22.0006] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [37.0773, 6.0681, 2.5067] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [23.1855, 1.2713, 40.7477] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [22.5, 0, -22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-19.5169, 21.1528, 25.6157] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-39.8998, -14.6899, -41.6051] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [11.1091, -2.8063, 28.3183] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-34.387, -6.9319, 69.6654] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1.887, -6.9319, 69.6654] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-28.8521, 2.4221, 65.9199] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-38.0082, -7.9924, 42.3701] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [10.5951, 2.844, -40.0347] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [16.5726, -11.6128, 30.036] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-32.5, 0, 15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [5.8835, 19.3359, -38.2171] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [35.0705, 7.7922, 13.8451] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-16.717, -4.2814, 82.5286] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [8.283, -4.2814, 82.5286] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-27.8923, -5.38, 73.7252] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-0.362, -0.7761, -59.8325] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [2.5, 0, -2.2] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-12.5, 0, 28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [15.3135, 23.3225, -18.2818] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [34.7658, 15.6999, 1.9348] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-0.61719, 3.98477, 0.70711] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [18.9012, -0.2882, 86.5243] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [46.4012, -0.2882, 86.5243] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [6.4185, 4.437, 77.6781] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2647, 0.0241, 24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-22.2353, 0.0241, 24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-4.1109, -26.0011, -59.426] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-27.0398, -7.6047, -1.0063] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-20, 0, 13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [20.8611, 24.5649, -27.6929] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [45.5761, -6.7071, 28.1123] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-1.62802, 4.31086, 0.82571] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [52.0766, 6.9543, 86.6052] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [92.0766, 6.9543, 86.6052] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [28.3776, 14.786, 80.268] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-32.5, 0, 19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-28.3319, -20.0094, -32.3747] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-37.5, 0, -10.47] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-17.5, 0, 22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [1.7517, 22.0828, -41.7185] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [29.279, 14.6055, 4.1947] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 128.59, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 135, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Death": { + "loop": "hold_on_last_frame", + "animation_length": 3, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 5.15, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 11.15, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 11.15, 9] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, -35.85, 9] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-18.1105, 30.4684, -22.4887] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-13.1217, 24.4444, -8.3184] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-13.1217, 24.4444, -8.3184] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-10.88, -52.86, -65.95] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.3142, -19.3642, -144.0989] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-15.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [6.87, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-9.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-9.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [13.33, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-11.67, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-11.67, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [38.33, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-20.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [57.49, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-65.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [49.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [49.35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -7.95] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -12.95] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -12.95] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5.379, -3.7668, 37.9263] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -42.95] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 39.78] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10.22] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -10.22] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 23.11] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -20.22] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.3156, 28.8772, -13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-6.3156, 28.8772, -13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-6.3156, 28.8772, -13.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [8.6844, -33.6228, -48.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [11.0451, -16.4772, -144.5351] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -12.8] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 29.7] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -37.8] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 44.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15.61] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -15.61] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 81.89] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -28.11] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.5341, -18.3709, -9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [4.5341, -18.3709, -9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [4.5341, -18.3709, -9.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [38.5341, -58.3709, -59.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [21.9469, -4.3657, -125.2582] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2452, -0.1027, -7.33] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.2593, -0.0585, -17.33] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0.2593, -0.0585, -17.33] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0.2593, -0.0585, 27.67] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.2655, -0.0125, -27.33] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 36.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -23.26] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -23.26] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 51.74] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -38.26] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.1089, -50.3324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.1089, -50.3324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [17.1089, -50.3324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [17.1089, -62.8324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [50.2054, -25.7109, -125.5789] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -2.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -14.53] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -14.53] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 20.47] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -47.03] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 69.62] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -20.38] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -20.38] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 27.12] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -32.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-18.1105, -30.4684, 22.4887] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-13.1217, -24.4444, 8.3184] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-13.1217, -24.4444, 8.3184] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-10.88, 52.86, 65.95] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.3142, 19.3642, 144.0989] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 7.95] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 12.95] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 12.95] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5.379, 3.7668, -37.9263] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 42.95] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -39.78] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10.22] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 10.22] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -23.11] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 20.22] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.3156, -28.8772, 13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-6.3156, -28.8772, 13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-6.3156, -28.8772, 13.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [8.6844, 33.6228, 48.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [11.0451, 16.4772, 144.5351] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 12.8] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -29.7] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 37.8] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -44.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 15.61] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 15.61] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -81.89] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 28.11] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.5341, 18.3709, 9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [4.5341, 18.3709, 9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [4.5341, 18.3709, 9.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [38.5341, 58.3709, 59.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [21.9469, 4.3657, 125.2582] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2452, 0.1027, 7.33] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.2593, 0.0585, 17.33] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0.2593, 0.0585, 17.33] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0.2593, 0.0585, -27.67] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.2655, 0.0125, 27.33] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -36.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 23.26] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 23.26] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -51.74] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 38.26] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.1089, 50.3324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.1089, 50.3324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [17.1089, 50.3324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [17.1089, 62.8324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [50.2054, 25.7109, 125.5789] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 14.53] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 14.53] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -20.47] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 47.03] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -69.62] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 20.38] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 20.38] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -27.12] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 32.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Hit": { + "loop": "hold_on_last_frame", + "animation_length": 1.1667, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [7.2195, -1.7113, -1.2114] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.2195, -1.7113, -1.2114] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 3.15, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 3.15, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-16.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-16.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-39.42, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [4.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-3.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [13.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-4.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [7.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-10.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0.4] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -1.6] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-45.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [34.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-24.95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-26.5651, -14.4776, 25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-26.5651, -14.4776, 25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [27.5, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-20, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-12.4594, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10.5473, 4.8627, -69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10.5473, 4.8627, -69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-29.4527, 4.8627, -69.208] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-35, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-35, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [22.5, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-19.2707, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [43.0772, -23.9366, -75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [43.0772, -23.9366, -75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.6953, -12.2418, -54.0288] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-24.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-24.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [50.7096, -12.3788, 12.5062] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [20, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-32.1005, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [62.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [62.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [23.3229, -26.3671, -66.6121] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.5, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-15, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.5, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.7798, -0.3946, 54.6138] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-16.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-16.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-39.42, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-26.5651, 14.4776, -25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-26.5651, 14.4776, -25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [27.5, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-20, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-12.4594, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10.5473, -4.8627, 69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10.5473, -4.8627, 69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-29.4527, -4.8627, 69.208] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-35, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-35, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [22.5, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-19.2707, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [43.0772, 23.9366, 75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [43.0772, 23.9366, 75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.6953, 12.2418, 54.0288] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-24.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-24.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [50.7096, 12.3788, -12.5062] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [20, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-32.1005, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [62.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [62.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [23.3229, 26.3671, 66.6121] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.5, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-15, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.5, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.7798, 0.3946, -54.6138] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Attack": { + "loop": "hold_on_last_frame", + "animation_length": 2, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-30.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-30.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.51, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [2.26, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.00052, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0.12879, -0.99167] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-118.1977, -31.2126, 37.3757] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-118.1977, -31.2126, 37.3757] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-118.1977, -31.2126, 37.3757] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-12.0253, 12.8089, 68.4252] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.0253, 12.8089, 68.4252] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.0253, 12.8089, 68.4252] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.6145, -42.6621, -111.0226] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [43.8767, -58.8301, -144.2998] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-74.2354, -29.794, -21.0171] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.6196, 12.6219, 115.8661] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 72.2] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 54.39] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 104.39] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-30.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-30.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, -54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-118.1977, 31.2126, -37.3757] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-118.1977, 31.2126, -37.3757] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-118.1977, 31.2126, -37.3757] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-12.0253, -12.8089, -68.4252] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.0253, -12.8089, -68.4252] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.0253, -12.8089, -68.4252] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.6145, 42.6621, 111.0226] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [43.8767, 58.8301, 144.2998] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-86.4636, 33.1995, -2.147] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.6196, -12.6219, -115.8661] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -69.7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -54.39] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -121.89] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Grab": { + "loop": "hold_on_last_frame", + "animation_length": 2, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.9072, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [24.0533, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [24.9072, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.51, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [2.26, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.00052, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0.12879, -0.99167] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [9.9627, 0.8672, 49.6256] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [20.9749, -2.1054, 48.508] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [9.9627, 0.8672, 49.6256] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [22.5, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-26.0219, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.47, -75.78, -107.88] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-72.8595, -38.6597, -29.8465] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.8] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 69.7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -43.11] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 74.39] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.9072, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [24.0533, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [24.9072, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, -54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [9.9627, -0.8672, -49.6256] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [20.9749, 2.1054, -48.508] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [9.9627, -0.8672, -49.6256] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [22.5, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-26.0219, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.47, 75.78, 107.88] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-72.8595, 38.6597, 29.8465] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 37.8] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -69.7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 43.11] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -74.39] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle2": { + "loop": true, + "animation_length": 0.0083, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.972, 35.0689, -6.2022] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-35.4398, 4.2669, -74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20.16] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -44.3] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [1.4426, 29.9685, 2.8862] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-22.2077, 20.7048, -49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.0505, -16.4853, -16.207] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [20.8765, -13.7242, -65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.3538, 0.7361, -18.3913] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6649, -51.6428, -21.5544] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [51.756, -12.0106, -86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.14] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.972, -35.0689, 6.2022] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-35.4398, -4.2669, 74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20.16] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 44.3] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [1.4426, -29.9685, -2.8862] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-22.2077, -20.7048, 49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.0505, 16.4853, 16.207] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [20.8765, 13.7242, 65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.3538, -0.7361, 18.3913] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6649, 51.6428, 21.5544] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [51.756, 12.0106, 86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.14] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swim": { + "loop": true, + "animation_length": 1, + "sound_effects": { + "0.0": { + "effect": "antarchy:kraken_flying_sideways_loop|0.45|1.19" + } + }, + "bones": { + "bone": { + "rotation": { + "vector": [42.5, 0, 0] + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [26.7391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.4006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [19.1774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5628, -4.768, 1.507] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5628, 4.768, -1.507] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5628, -4.768, 1.507] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 8.60365, -12.28728] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 9.17341, -11.8885] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 8.60365, -12.28728] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [55.0366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [56.7391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [57.4006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [56.6774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [55.0366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [34.2391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [34.9006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [26.6774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [41.7391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [44.9006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [41.6774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [37.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [26.7391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.4006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [19.1774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [55.0366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [56.7391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [57.4006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [56.6774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [55.0366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [34.2391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [34.9006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [26.6774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [41.7391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [44.9006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [41.6774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [37.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/ouranwood_deer.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/ouranwood_deer.animation.json new file mode 100644 index 00000000..786efc3d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/ouranwood_deer.animation.json @@ -0,0 +1,2574 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-8.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-6.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.72, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 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": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [28.85, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [8.75, 0, 0] + }, + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [24.17, 0, 0] + }, + "0.75": { + "pre": { + "vector": [37.08, 0, 0] + }, + "post": { + "vector": [37.08, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "vector": [32.5, 0, 0] + }, + "1.0": { + "vector": [28.85, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 4.5, -7.5] + }, + "0.2083": { + "pre": { + "vector": [0, 2.83, -7.08] + }, + "post": { + "vector": [0, 2.83, -7.08] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -0.76, -4.19] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [0, -0.41, 0.92] + }, + "0.5833": { + "vector": [0, -1.83, 1.83] + }, + "0.7083": { + "pre": { + "vector": [0, -2.1, -0.4] + }, + "post": { + "vector": [0, -2.1, -0.4] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 2.45, -4.7] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 4.5, -7.5] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [24.17, 0, 0] + }, + "0.25": { + "pre": { + "vector": [37.08, 0, 0] + }, + "post": { + "vector": [37.08, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "vector": [32.5, 0, 0] + }, + "0.6667": { + "pre": { + "vector": [8.75, 0, 0] + }, + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-6.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, -0.41, 0.92] + }, + "0.0833": { + "vector": [0, -1.83, 1.83] + }, + "0.2083": { + "pre": { + "vector": [0, -2.1, -0.4] + }, + "post": { + "vector": [0, -2.1, -0.4] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 2.45, -4.7] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 4.5, -7.5] + }, + "0.7083": { + "pre": { + "vector": [0, 2.83, -7.08] + }, + "post": { + "vector": [0, 2.83, -7.08] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -0.76, -4.19] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0.85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-6.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [24.17, 0, 0] + }, + "0.5": { + "pre": { + "vector": [37.08, 0, 0] + }, + "post": { + "vector": [37.08, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [32.5, 0, 0] + }, + "0.9167": { + "pre": { + "vector": [8.75, 0, 0] + }, + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.85, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.58, -6.56] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -1.76, -4.19] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, -0.83, 1.83] + }, + "0.4583": { + "pre": { + "vector": [0, 0.9, -0.4] + }, + "post": { + "vector": [0, 0.9, -0.4] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 3.45, -4.7] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [0, 4.5, -7.5] + }, + "0.9583": { + "pre": { + "vector": [0, 0.83, -7.08] + }, + "post": { + "vector": [0, 0.83, -7.08] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -0.58, -6.56] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [37.08, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "vector": [32.5, 0, 0] + }, + "0.4167": { + "pre": { + "vector": [8.75, 0, 0] + }, + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-6.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [24.17, 0, 0] + }, + "1.0": { + "pre": { + "vector": [37.08, 0, 0] + }, + "post": { + "vector": [37.08, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.74, -1.74] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 3.45, -4.7] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 4.5, -7.5] + }, + "0.4583": { + "pre": { + "vector": [0, 2.83, -7.08] + }, + "post": { + "vector": [0, 2.83, -7.08] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.42, -6.56] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -1.76, -4.19] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [0, -2, 0] + }, + "0.8333": { + "vector": [0, -0.83, 1.83] + }, + "0.9583": { + "pre": { + "vector": [0, 0.9, -0.4] + }, + "post": { + "vector": [0, 0.9, -0.4] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 1.74, -1.74] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 2, 0] + }, + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 2.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "vector": [0, 1, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [0, 0, 0] + }, + "0.6667": { + "pre": { + "vector": [0, 2, 0] + }, + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 2.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "vector": [0, 1, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + } + } + }, + "run": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "vector": [-15.19, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [32.5, 0, 0] + }, + "0.375": { + "pre": { + "vector": [52.5, 0, 0] + }, + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0.5, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "vector": [0, 0.19, -0.72] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, -0.5, 1] + }, + "0.25": { + "vector": [0, -2, 2] + }, + "0.375": { + "pre": { + "vector": [0, 1, 0] + }, + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [-15.19, 0, 0] + }, + "0.0417": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [32.5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [52.5, 0, 0] + }, + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-15.19, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0.19, -0.72] + }, + "0.0417": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, -0.5, 1] + }, + "0.125": { + "vector": [0, -2, 2] + }, + "0.25": { + "pre": { + "vector": [0, 1, 0] + }, + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0.5, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0.19, -0.72] + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [40, 0, 0] + }, + "0.3333": { + "pre": { + "vector": [35.83, 0, 0] + }, + "post": { + "vector": [35.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.01, -2.12] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0.69, -1.44] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, -1, 2] + }, + "0.2083": { + "vector": [0, -0.33, 2.33] + }, + "0.2917": { + "pre": { + "vector": [0, 1, 3] + }, + "post": { + "vector": [0, 1, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 3, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.01, -2.12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [40, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [35.83, 0, 0] + }, + "post": { + "vector": [35.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, -1, 2] + }, + "0.0833": { + "vector": [0, -0.33, 2.33] + }, + "0.1667": { + "pre": { + "vector": [0, 1, 3] + }, + "post": { + "vector": [0, 1, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 3, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0.69, -1.44] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [2.5, 0, 0] + }, + "0.2083": { + "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": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 2] + }, + "0.0833": { + "vector": [0, -1, 4] + }, + "0.2083": { + "pre": { + "vector": [0, 0.5, 5.25] + }, + "post": { + "vector": [0, 0.5, 5.25] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 2, 3.75] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 2] + } + } + } + } + }, + "quirk": { + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-7.5, 0, 7.5] + }, + "post": { + "vector": [-7.5, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [10, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-5, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_ear": { + "rotation": { + "0.75": { + "vector": [0, 0, 0] + }, + "0.7917": { + "pre": { + "vector": [-12.5, -30, 7.5] + }, + "post": { + "vector": [-12.5, -30, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.84, -26.02, 6.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "vector": [0, 0, 0] + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.7083": { + "pre": { + "vector": [-12.5, 30, -7.5] + }, + "post": { + "vector": [-12.5, 30, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.84, 26.02, -6.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [0, 0, 5] + }, + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "torso": { + "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, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "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": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "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": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "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": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "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": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "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": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "charge_start": { + "animation_length": 0.375, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [25, 0, 0] + }, + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-13, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-10, 0, 0] + }, + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [62.66, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [50.62, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-3.51, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [37.5, 0, 0] + }, + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-37.5, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15.19, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [47.5, 0, 10] + }, + "post": { + "vector": [47.5, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [50, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [71.42, 0, 3.76] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [30, -7.5, -12.5] + }, + "post": { + "vector": [30, -7.5, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [37.5, -10, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [76.44, 0, -6.24] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [-35, 0, 0] + }, + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-12.81, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, 2, 2] + }, + "0.0833": { + "pre": { + "vector": [0, 3, 4] + }, + "post": { + "vector": [0, 3, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 4.04, 5.93] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 4, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "vector": [0, 0, 0] + } + } + } + } + }, + "charge_loop": { + "loop": true, + "animation_length": 0.25, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-13, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-8, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-13, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "vector": [10, 0, 0] + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0208": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "vector": [-15.19, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [32.5, 0, 0] + }, + "0.1875": { + "pre": { + "vector": [52.5, 0, 0] + }, + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0.5, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "vector": [0, 0.19, -0.72] + }, + "0.0833": { + "vector": [0, 0, 0] + }, + "0.1042": { + "vector": [0, -0.5, 1] + }, + "0.125": { + "vector": [0, -2, 2] + }, + "0.1875": { + "pre": { + "vector": [0, 1, 0] + }, + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [-15.19, 0, 0] + }, + "0.0208": { + "vector": [0, 0, 0] + }, + "0.0625": { + "vector": [32.5, 0, 0] + }, + "0.125": { + "pre": { + "vector": [52.5, 0, 0] + }, + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-15.19, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0.19, -0.72] + }, + "0.0208": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, -0.5, 1] + }, + "0.0625": { + "vector": [0, -2, 2] + }, + "0.125": { + "pre": { + "vector": [0, 1, 0] + }, + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.2292": { + "post": { + "vector": [0, 0.5, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0.19, -0.72] + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "vector": [0, 0, 0] + }, + "0.1042": { + "vector": [40, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [35.83, 0, 0] + }, + "post": { + "vector": [35.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.01, -2.12] + }, + "lerp_mode": "catmullrom" + }, + "0.0208": { + "post": { + "vector": [0, 0.69, -1.44] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, -1, 2] + }, + "0.1042": { + "vector": [0, -0.33, 2.33] + }, + "0.1458": { + "pre": { + "vector": [0, 1, 3] + }, + "post": { + "vector": [0, 1, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.2292": { + "post": { + "vector": [0, 3, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 2.01, -2.12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [40, 0, 0] + }, + "0.1042": { + "pre": { + "vector": [35.83, 0, 0] + }, + "post": { + "vector": [35.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0208": { + "vector": [0, -1, 2] + }, + "0.0417": { + "vector": [0, -0.33, 2.33] + }, + "0.0833": { + "pre": { + "vector": [0, 1, 3] + }, + "post": { + "vector": [0, 1, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 3, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0.69, -1.44] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [2.5, 0, 0] + }, + "0.1042": { + "pre": { + "vector": [5, 0, 0] + }, + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 2] + }, + "0.0417": { + "vector": [0, -1, 4] + }, + "0.1042": { + "pre": { + "vector": [0, 0.5, 5.25] + }, + "post": { + "vector": [0, 0.5, 5.25] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 2, 3.75] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 2] + } + } + } + } + }, + "charge_end": { + "loop": "hold_on_last_frame", + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [-13, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [4.5, 0, 0] + }, + "post": { + "vector": [4.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "vector": [10, 0, 0] + }, + "0.125": { + "pre": { + "vector": [12.5, 0, 0] + }, + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 1.68, -0.77] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "vector": [0, 0, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [-15.19, 0, 0] + }, + "0.2917": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0.19, -0.72] + }, + "0.125": { + "pre": { + "vector": [0, 1.19, -0.47] + }, + "post": { + "vector": [0, 1.19, -0.47] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.01, -2.12] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, 0, 0] + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/ouranwood_deer_baby.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/ouranwood_deer_baby.animation.json new file mode 100644 index 00000000..9084e98c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/ouranwood_deer_baby.animation.json @@ -0,0 +1,1669 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-8.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-6.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.72, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 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": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [28.85, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [8.75, 0, 0] + }, + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [24.17, 0, 0] + }, + "0.75": { + "pre": { + "vector": [37.08, 0, 0] + }, + "post": { + "vector": [37.08, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "vector": [32.5, 0, 0] + }, + "1.0": { + "vector": [28.85, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 4.5, -7.5] + }, + "0.2083": { + "pre": { + "vector": [0, 2.83, -7.08] + }, + "post": { + "vector": [0, 2.83, -7.08] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -0.76, -4.19] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [0, -0.41, 0.92] + }, + "0.5833": { + "vector": [0, -1.83, 1.83] + }, + "0.7083": { + "pre": { + "vector": [0, -2.1, -0.4] + }, + "post": { + "vector": [0, -2.1, -0.4] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 2.45, -4.7] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 4.5, -7.5] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [24.17, 0, 0] + }, + "0.25": { + "pre": { + "vector": [37.08, 0, 0] + }, + "post": { + "vector": [37.08, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "vector": [32.5, 0, 0] + }, + "0.6667": { + "pre": { + "vector": [8.75, 0, 0] + }, + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-6.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, -0.41, 0.92] + }, + "0.0833": { + "vector": [0, -1.83, 1.83] + }, + "0.2083": { + "pre": { + "vector": [0, -2.1, -0.4] + }, + "post": { + "vector": [0, -2.1, -0.4] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 2.45, -4.7] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 4.5, -7.5] + }, + "0.7083": { + "pre": { + "vector": [0, 2.83, -7.08] + }, + "post": { + "vector": [0, 2.83, -7.08] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -0.76, -4.19] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0.85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-6.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [24.17, 0, 0] + }, + "0.5": { + "pre": { + "vector": [37.08, 0, 0] + }, + "post": { + "vector": [37.08, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [32.5, 0, 0] + }, + "0.9167": { + "pre": { + "vector": [8.75, 0, 0] + }, + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.85, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.58, -6.56] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -1.76, -4.19] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, -0.83, 1.83] + }, + "0.4583": { + "pre": { + "vector": [0, 0.9, -0.4] + }, + "post": { + "vector": [0, 0.9, -0.4] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 3.45, -4.7] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [0, 4.5, -7.5] + }, + "0.9583": { + "pre": { + "vector": [0, 0.83, -7.08] + }, + "post": { + "vector": [0, 0.83, -7.08] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -0.58, -6.56] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [37.08, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "vector": [32.5, 0, 0] + }, + "0.4167": { + "pre": { + "vector": [8.75, 0, 0] + }, + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-6.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [24.17, 0, 0] + }, + "1.0": { + "pre": { + "vector": [37.08, 0, 0] + }, + "post": { + "vector": [37.08, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.74, -1.74] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 3.45, -4.7] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 4.5, -7.5] + }, + "0.4583": { + "pre": { + "vector": [0, 2.83, -7.08] + }, + "post": { + "vector": [0, 2.83, -7.08] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.42, -6.56] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -1.76, -4.19] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [0, -2, 0] + }, + "0.8333": { + "vector": [0, -0.83, 1.83] + }, + "0.9583": { + "pre": { + "vector": [0, 0.9, -0.4] + }, + "post": { + "vector": [0, 0.9, -0.4] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 1.74, -1.74] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 2, 0] + }, + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 2.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "vector": [0, 1, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [0, 0, 0] + }, + "0.6667": { + "pre": { + "vector": [0, 2, 0] + }, + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 2.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "vector": [0, 1, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + } + } + }, + "run": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "vector": [-15.19, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [32.5, 0, 0] + }, + "0.375": { + "pre": { + "vector": [52.5, 0, 0] + }, + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0.5, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "vector": [0, 0.19, -0.72] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, -0.5, 1] + }, + "0.25": { + "vector": [0, -2, 2] + }, + "0.375": { + "pre": { + "vector": [0, 1, 0] + }, + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [-15.19, 0, 0] + }, + "0.0417": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [32.5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [52.5, 0, 0] + }, + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-15.19, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0.19, -0.72] + }, + "0.0417": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, -0.5, 1] + }, + "0.125": { + "vector": [0, -2, 2] + }, + "0.25": { + "pre": { + "vector": [0, 1, 0] + }, + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0.5, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0.19, -0.72] + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [40, 0, 0] + }, + "0.3333": { + "pre": { + "vector": [35.83, 0, 0] + }, + "post": { + "vector": [35.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.01, -2.12] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0.69, -1.44] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, -1, 2] + }, + "0.2083": { + "vector": [0, -0.33, 2.33] + }, + "0.2917": { + "pre": { + "vector": [0, 1, 3] + }, + "post": { + "vector": [0, 1, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 3, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.01, -2.12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [40, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [35.83, 0, 0] + }, + "post": { + "vector": [35.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, -1, 2] + }, + "0.0833": { + "vector": [0, -0.33, 2.33] + }, + "0.1667": { + "pre": { + "vector": [0, 1, 3] + }, + "post": { + "vector": [0, 1, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 3, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0.69, -1.44] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [2.5, 0, 0] + }, + "0.2083": { + "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": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 2] + }, + "0.0833": { + "vector": [0, -1, 4] + }, + "0.2083": { + "pre": { + "vector": [0, 0.5, 5.25] + }, + "post": { + "vector": [0, 0.5, 5.25] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 2, 3.75] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 2] + } + } + } + } + }, + "quirk": { + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-7.5, 0, 7.5] + }, + "post": { + "vector": [-7.5, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [10, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-5, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_ear": { + "rotation": { + "0.75": { + "vector": [0, 0, 0] + }, + "0.7917": { + "pre": { + "vector": [-12.5, -30, 7.5] + }, + "post": { + "vector": [-12.5, -30, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.84, -26.02, 6.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "vector": [0, 0, 0] + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.7083": { + "pre": { + "vector": [-12.5, 30, -7.5] + }, + "post": { + "vector": [-12.5, 30, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.84, 26.02, -6.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [0, 0, 5] + }, + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "torso": { + "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, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "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": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "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": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "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": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "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": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "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": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/reverie.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/reverie.animation.json new file mode 100644 index 00000000..a481e6e6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/reverie.animation.json @@ -0,0 +1,286 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "core": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "trail": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "fly": { + "loop": true, + "animation_length": 2, + "bones": { + "core": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.2, 1.1, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.2, 1.1, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1.2, 1.1, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [1.2, 1.1, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "trail": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 2.7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Reverie": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, -4.47, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1.2, 1, 1.3] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "damaged": { + "animation_length": 0.75, + "bones": { + "core": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.6, 1.3, 1.9] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.4, 0.5, 0.9] + }, + "lerp_mode": "catmullrom" + } + } + }, + "trail": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1.7] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "core_bone": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "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/animations/rolly_polly.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/rolly_polly.animation.json new file mode 100644 index 00000000..f116c24e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/rolly_polly.animation.json @@ -0,0 +1,1227 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [-7.5, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [-7.5, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "wheel": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.25, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, -0.25, 0] + }, + "0.25": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.75313, 9.53274, 3.03513] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.75313, -9.53274, -3.03513] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-8.64451, -19.94403, 24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [8.64451, 19.94403, 24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [8.64451, 19.94403, 24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [8.64451, -19.94403, -24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [8.64451, -19.94403, -24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-8.64451, 19.94403, -24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "wheel": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "wheel_mode": { + "loop": true, + "animation_length": 0.75, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.89, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.89, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, 0, 0] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.4, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-12.4, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [58.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [58.1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-43.58865, 20.8302, -18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-43.58865, 20.8302, -18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-43.58865, 20.8302, -18.56413] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-43.58865, -20.8302, 18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-43.58865, -20.8302, 18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-43.58865, -20.8302, 18.56413] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.75": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "wheel": { + "position": { + "0.0": { + "vector": [0, -14, 0] + }, + "0.3333": { + "vector": [0, -14, 0] + }, + "0.4167": { + "vector": [0, -11, 0] + }, + "0.5": { + "vector": [0, -14, 0] + }, + "0.5417": { + "vector": [0, -13, 0] + }, + "0.5833": { + "vector": [0, -14, 0] + }, + "0.75": { + "vector": [0, -14, 0] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1.1, 1.1, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1, 1, 1] + }, + "0.75": { + "vector": [1, 1, 1] + } + } + } + } + }, + "normal_mode": { + "animation_length": 0.4167, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.89, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0833": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, -2, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + } + }, + "scale": { + "vector": [1, 1, 0.7] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [58.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-43.58865, 20.8302, -18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-48.30386, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [24.02325, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-24.01852, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.23085, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-43.58865, -20.8302, 18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-48.30386, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [24.02325, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-23.78525, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0.00468, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0833": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0833": { + "vector": [0, 6, 0] + }, + "0.2083": { + "vector": [0, 0, 0] + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 45] + }, + "0.2083": { + "vector": [0, 0, 0] + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 45] + }, + "0.2083": { + "vector": [0, 0, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, -45] + }, + "0.2083": { + "vector": [0, 0, 0] + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, -45] + }, + "0.2083": { + "vector": [0, 0, 0] + } + } + }, + "wheel": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "post": { + "vector": [0, -14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "vector": [0, -14, 0] + }, + "0.2083": { + "vector": [0, -14, 0] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.0833": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "roll": { + "loop": true, + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.89, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "vector": [1, 1, 0.7] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [58.1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-43.58865, 20.8302, -18.56413] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-43.58865, -20.8302, 18.56413] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "scale": { + "vector": [0, 0, 0] + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "wheel": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [360, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, -11, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2, -14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-2, -11, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [2, -11, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, -14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -11, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -14, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "vector": [1, 1, 1] + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/rpo_launcher.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/rpo_launcher.animation.json new file mode 100644 index 00000000..10ba25bf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/rpo_launcher.animation.json @@ -0,0 +1,385 @@ +{ + "format_version": "1.8.0", + "animations": { + "rpo_launcher_recoil": { + "animation_length": 0.9583, + "bones": { + "all": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [-17.5, 0, 0], + "easing": "easeInElastic" + }, + "0.5": { + "vector": [-10, 0, 0], + "easing": "easeInOutSine" + }, + "0.875": { + "vector": [-0.91, 0, 0] + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "linear" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 5, 4], + "easing": "easeInElastic", + "easingArgs": [2] + }, + "0.4583": { + "vector": [0, 0, 3.56], + "easing": "easeInOutSine" + }, + "0.8333": { + "vector": [0, 0, 0], + "easing": "easeInOutSine" + } + } + }, + "center": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [-8, 0, 0] + }, + "0.5417": { + "vector": [0, 0, 0] + }, + "0.875": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 2], + "easing": "easeInElastic", + "easingArgs": [1.5] + }, + "0.4583": { + "vector": [0, 0.3, 0], + "easing": "easeInOutSine" + }, + "0.9583": { + "vector": [0, 0, 0] + } + } + }, + "bazooka": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 6], + "easing": "easeInElastic" + }, + "0.9167": { + "vector": [0, 0, 0], + "easing": "easeInOutSine" + } + } + }, + "tentacles": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 5.27] + }, + "0.2917": { + "vector": [0, 0, -5], + "easing": "easeInElastic", + "easingArgs": [2] + }, + "0.9167": { + "vector": [0, 0, 0], + "easing": "easeOutQuad" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.0833": { + "vector": [1, 1, 1], + "easing": "linear" + }, + "0.2917": { + "vector": [1.3, 1.3, 1.3], + "easing": "easeInElastic" + }, + "0.9583": { + "vector": [1, 1, 1] + } + } + }, + "start_1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [40, 0, 0], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [40, 0, 0], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeInOutQuad" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 1.8], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [0, 0, 1.8], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0] + } + } + }, + "end_1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [22.5, 0, 0], + "easing": "easeOutBack" + }, + "0.2917": { + "vector": [-17.5, 0, 0] + }, + "0.4167": { + "vector": [22.5, 0, 0] + }, + "0.5833": { + "vector": [-17.5, 0, 0] + }, + "0.75": { + "vector": [10, 0, 0], + "easing": "easeInOutQuad" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeOutQuart" + } + } + }, + "start_2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [40, 0, 0], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [40, 0, 0], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeInOutQuad" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 1.8], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [0, 0, 1.8], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0] + } + } + }, + "end_2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [22.5, 0, 0], + "easing": "easeOutBack" + }, + "0.2917": { + "vector": [-17.5, 0, 0] + }, + "0.4167": { + "vector": [22.5, 0, 0] + }, + "0.5833": { + "vector": [-17.5, 0, 0] + }, + "0.75": { + "vector": [10, 0, 0], + "easing": "easeInOutQuad" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeOutQuart" + } + } + }, + "start_3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [40, 0, 0], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [40, 0, 0], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeInOutQuad" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 1.8], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [0, 0, 1.8], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0] + } + } + }, + "end_3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [22.5, 0, 0], + "easing": "easeOutBack" + }, + "0.2917": { + "vector": [-17.5, 0, 0] + }, + "0.4167": { + "vector": [22.5, 0, 0] + }, + "0.5833": { + "vector": [-17.5, 0, 0] + }, + "0.75": { + "vector": [10, 0, 0], + "easing": "easeInOutQuad" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeOutQuart" + } + } + }, + "start_4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [40, 0, 0], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [40, 0, 0], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeInOutQuad" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 1.8], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [0, 0, 1.8], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0] + } + } + }, + "end_4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [22.5, 0, 0], + "easing": "easeOutBack" + }, + "0.2917": { + "vector": [-17.5, 0, 0] + }, + "0.4167": { + "vector": [22.5, 0, 0] + }, + "0.5833": { + "vector": [-17.5, 0, 0] + }, + "0.75": { + "vector": [10, 0, 0], + "easing": "easeInOutQuad" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeOutQuart" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/scorpion.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/scorpion.animation.json new file mode 100644 index 00000000..c49f43a1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/scorpion.animation.json @@ -0,0 +1,1094 @@ +{ + "format_version": "1.8.0", + "animations": { + "Idle": { + "loop": true, + "animation_length": 4, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [17.5, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_leg3": { + "rotation": { + "vector": [0, 22.5, 0] + } + }, + "l_leg": { + "rotation": { + "vector": [0, 22.5, 0] + } + }, + "l_leg3": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "l_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [17.5, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [29.18665, -3.0474, 1.33767] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-5.85463, -13.83447, 23.21088] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [9.00717, 20.70481, 24.14867] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [9.00717, 20.70481, 24.14867] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [4.8493, 11.53486, 22.99008] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-10.68709, 24.11827, -24.78948] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [9.00717, -20.70481, -24.14867] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [8.09013, -21.33556, -21.23405] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [4.8493, -11.53486, -22.99008] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "scorpion": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [25, 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.6667": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 82.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 82.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -37.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "scorpion": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -82.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -82.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/seashell.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/seashell.animation.json new file mode 100644 index 00000000..c97e7f6b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/seashell.animation.json @@ -0,0 +1,62 @@ +{ + "format_version": "1.8.0", + "animations": { + "close_to_open": { + "loop": "hold_on_last_frame", + "animation_length": 0.375, + "bones": { + "upper_moving": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-90, 0, 0], + "easing": "easeOutBack" + } + } + } + } + }, + "closed": { + "loop": "hold_on_last_frame", + "bones": { + "upper_moving": { + "rotation": { + "vector": [0, 0, 0] + } + } + } + }, + "open_to_close": { + "loop": "hold_on_last_frame", + "animation_length": 0.4167, + "bones": { + "upper_moving": { + "rotation": { + "0.0": { + "vector": [-90, 0, 0], + "easing": "easeOutBack" + }, + "0.4167": { + "vector": [0, 0, 0], + "easing": "easeInOutBack", + "easingArgs": [0.5] + } + } + } + } + }, + "open": { + "loop": "hold_on_last_frame", + "bones": { + "upper_moving": { + "rotation": { + "vector": [-90, 0, 0], + "easing": "easeOutBack" + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/shrink_ray.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/shrink_ray.animation.json new file mode 100644 index 00000000..2ea40355 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/shrink_ray.animation.json @@ -0,0 +1,88 @@ +{ + "format_version": "1.8.0", + "animations": { + "shrink_ray_active": { + "loop": true, + "animation_length": 1, + "bones": { + "blaster_rotating": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 360], + "easing": "easeInOutSine" + } + } + }, + "shrink_ray": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "0.5": { + "vector": [0, 0, 0], + "easing": "linear" + }, + "0.75": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "blaster": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "0.5": { + "vector": [0, 0, 0], + "easing": "linear" + }, + "0.75": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "blaster_end": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "0.5": { + "vector": [0, 0, 0], + "easing": "linear" + }, + "0.75": { + "vector": [0, 0, 0.2], + "easing": "easeInBack" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/spit_bug.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/spit_bug.animation.json new file mode 100644 index 00000000..04f7b81c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/spit_bug.animation.json @@ -0,0 +1,2625 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2.25, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 55, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.6667, + "bones": { + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0.9, 25.37, 22.42] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-14.7966, -19.965, 19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "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.6667": { + "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.1667": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-4.9811, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [4.9196, -1.0858, 2.4914] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [4.8066, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-5.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -13.1, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [6, -15.47, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [6, -13.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [4, -11.81, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -12.1, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-6, -14.96, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6, -14.55, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-6, -12.99, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -13.1, -4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-36.5714, -35.9552, 34.1778] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-23.5556, -44.8303, 14.2689] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.1528, -57.991, 18.9213] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5.3498, 1.8604, -13.9961] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.3498, -1.8604, 13.9961] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [35, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "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.1667": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "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.6667": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-14.7966, 19.965, -19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.2252, 29.0774, -13.585] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [13.6745, -58.6061, -23.203] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.9, -25.37, -22.42] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "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.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [12.5, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [12.5, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0] + } + } + } + } + }, + "spit": { + "animation_length": 1, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "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.25": { + "post": { + "vector": [0, 1, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 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" + }, + "0.9167": { + "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" + }, + "0.9167": { + "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" + }, + "0.9167": { + "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" + }, + "0.9167": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [1, 1, 1] + }, + "0.25": { + "vector": [1, 0.3, 1] + }, + "0.4583": { + "vector": [1, 1, 1] + }, + "1.0": { + "vector": [1, 1, 1] + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-13.01658, -61.28435, 22.32925] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 9, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "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.9167": { + "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.5417": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.25": { + "vector": [1, 0.3, 1] + }, + "0.4583": { + "vector": [1, 1, 1] + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 10, 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" + }, + "0.9167": { + "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.4167": { + "post": { + "vector": [41.8878, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [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" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-30, 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.2917": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [40, 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.2917": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "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" + }, + "0.9167": { + "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.4167": { + "post": { + "vector": [41.8878, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [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" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-30, 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.2917": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [40, 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.2917": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-13.01658, 61.28435, -22.32925] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 9, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "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" + }, + "0.25": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "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" + }, + "0.5417": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "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" + }, + "0.9167": { + "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" + }, + "0.9167": { + "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" + }, + "0.9167": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-11.86, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/squidzooka.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/squidzooka.animation.json new file mode 100644 index 00000000..794cdcd3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/squidzooka.animation.json @@ -0,0 +1,143 @@ +{ + "format_version": "1.8.0", + "animations": { + "squidzooka_recoil": { + "animation_length": 0.875, + "bones": { + "squid": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [5, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, -1] + }, + "0.875": { + "vector": [0, 0, 0] + } + } + }, + "bazooka": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 1], + "easing": "easeInElastic" + }, + "0.875": { + "vector": [0, 0, 0] + } + } + }, + "all": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [-12.5, 0, 0], + "easing": "easeInElastic" + }, + "0.4167": { + "vector": [-10, 0, 0], + "easing": "easeInOutSine" + }, + "0.7917": { + "vector": [-0.91, 0, 0] + }, + "0.875": { + "vector": [0, 0, 0], + "easing": "linear" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 2, 4], + "easing": "easeInElastic", + "easingArgs": [2] + }, + "0.4583": { + "vector": [0, 0, 3.56], + "easing": "easeInOutSine" + }, + "0.8333": { + "vector": [0, 0, 0], + "easing": "easeInOutSine" + } + } + }, + "center": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "vector": [-3, 0, 0] + }, + "0.625": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 0.3, 0] + }, + "0.875": { + "vector": [0, 0, 0] + } + } + }, + "squid2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, -7.5, 0] + }, + "0.1667": { + "vector": [0, 8.75, 0] + }, + "0.25": { + "vector": [0, -7.28, 0] + }, + "0.3333": { + "vector": [0, 3.69, 0] + }, + "0.4167": { + "vector": [0, -4.38, 0] + }, + "0.5417": { + "vector": [0, -0.69, 0] + }, + "0.875": { + "vector": [0, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/static_item.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/static_item.animation.json new file mode 100644 index 00000000..909c6196 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/static_item.animation.json @@ -0,0 +1,4 @@ +{ + "format_version": "1.8.0", + "animations": {} +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/stink_bug.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/stink_bug.animation.json new file mode 100644 index 00000000..df0cdfa8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/stink_bug.animation.json @@ -0,0 +1,948 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.66778, -2.51027, -22.28928] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [1.12732, 1.85014, -147.29336] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.66778, 2.51027, 22.28928] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [1.12732, -1.85014, 147.29336] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "vector": [0, 0, -22.5] + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.00717, 20.70481, -24.14867] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_front": { + "rotation": { + "vector": [9.00717, -20.70481, -24.14867] + } + }, + "left_leg_front": { + "rotation": { + "vector": [9.00717, 20.70481, 24.14867] + } + }, + "left_leg": { + "rotation": { + "vector": [0, 0, 22.5] + } + }, + "left_leg_back": { + "rotation": { + "vector": [-9.00717, -20.70481, 24.14867] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -120] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 120] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.94102, -40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_front": { + "rotation": { + "0.0": { + "post": { + "vector": [20.94102, -40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.94102, -40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_front": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.94102, 40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.94102, 40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "fart": { + "animation_length": 1.5, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 2.5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0.49, -1.99] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-152.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0.25, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0.25, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0.25, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1.75, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-0.01, -0.97, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "vector": [0, 0, -22.5] + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.00717, 20.70481, -24.14867] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_front": { + "rotation": { + "0.0": { + "vector": [9.00717, -20.70481, -24.14867] + }, + "0.25": { + "vector": [9.00717, -20.70481, -24.14867] + }, + "1.25": { + "vector": [9.00717, -20.70481, -24.14867] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 1, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "left_leg_front": { + "rotation": { + "0.0": { + "vector": [9.00717, 20.70481, 24.14867] + }, + "0.25": { + "vector": [9.00717, 20.70481, 24.14867] + }, + "1.25": { + "vector": [9.00717, 20.70481, 24.14867] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 1, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "left_leg": { + "rotation": { + "vector": [0, 0, 22.5] + } + }, + "left_leg_back": { + "rotation": { + "vector": [-9.00717, -20.70481, 24.14867] + } + }, + "right_eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [1, 0.3, 1] + }, + "0.25": { + "vector": [1, 0.3, 1] + }, + "1.5": { + "vector": [1, 1, 1] + } + } + }, + "left_eye": { + "scale": { + "0.1667": { + "vector": [1, 0.3, 1] + }, + "0.25": { + "vector": [1, 0.3, 1] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [132.55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [11.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/tenctacle.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/tenctacle.animation.json new file mode 100644 index 00000000..1dba725d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/tenctacle.animation.json @@ -0,0 +1,491 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation": { + "loop": true, + "animation_length": 1.5, + "bones": { + "tentacle": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-90, 20, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [93.3776, 22.38751, -93.65422] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [46.07, 8.05, -46.19] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.05192, -0.03141, -32.49925] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-0.03, -0.02, -21.84] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -15.64] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-0.75385, -0.75162, -19.98312] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [93.3776, -22.38751, 93.65422] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [46.07, -8.05, 46.19] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-90, -20, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.05192, 0.03141, 32.49925] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.03, 0.02, 21.84] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 15.64] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.75385, 0.75162, 19.98312] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/termite.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/termite.animation.json new file mode 100644 index 00000000..77ba7fc5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/termite.animation.json @@ -0,0 +1,1836 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.17875, 0.10358, 1.61888] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.17875, -0.10358, -1.61888] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + }, + "dance": { + "loop": true, + "animation_length": 1.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-13.85813, -24.26239, 5.93679] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-13.85813, -24.26239, 5.93679] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-24.00312, 18.43745, -15.27944] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-24.00312, 18.43745, -15.27944] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, -10, 0] + }, + "0.5": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.5": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.72631, 0.45349, -2.99327] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [9.72631, 0.45349, -2.99327] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [12.5, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Termite": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.61003, 22.29711, -3.09472] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.47532, -19.82169, 2.71994] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.15251, -17.67415, 62.21128] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5.74672, 4.98753, 33.20458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.49325, 15.74419, 39.23412] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [-30.04912, -35.07869, 44.72041] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [29.82269, 35.55522, 45.05671] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-30.04912, -35.07869, 44.72041] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-14.15251, 17.67415, -62.21128] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [5.74672, -4.98753, -33.20458] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-14.15251, 17.67415, -62.21128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [12.49325, -15.74419, -39.23412] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.49325, -15.74419, -39.23412] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [29.82269, -35.55522, -45.05671] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-30.04912, 35.07869, -44.72041] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [29.82269, -35.55522, -45.05671] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Termite": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + }, + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10, 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" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [19.92514, 0.26438, -1.96682] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [19.92514, 0.26438, -1.96682] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.15251, -17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-14.15251, -17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.15251, 17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-14.15251, 17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Termite": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.27472, 52.98677, 1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.27472, 52.98677, 1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.2516, -39.58992, 6.25038] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.2516, -39.58992, 6.25038] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.27472, -52.98677, -1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.27472, -52.98677, -1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.2516, 39.58992, -6.25038] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.2516, 39.58992, -6.25038] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/toreterror.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/toreterror.animation.json new file mode 100644 index 00000000..cbafcff7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/toreterror.animation.json @@ -0,0 +1,3365 @@ +{ + "format_version": "1.8.0", + "animations": { + "Idle": { + "loop": true, + "animation_length": 4, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-44.65652, 7.06478, 7.09539] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [-42.2624, -5.0266, -5.5102] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [-44.65652, 7.06478, 7.09539] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [8.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [10.23631, 1.89869, -47.19329] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-11.88777, -56.71902, 13.74709] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [10.23631, -1.89869, 47.19329] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-11.88777, 56.71902, -13.74709] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L-Leg": { + "rotation": { + "vector": [-37.5, 0, 0] + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1.5, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-30.31201, 15.22408, 8.73407] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [18.85376, 11.01411, -46.21939] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-12.86367, -21.47099, -43.13036] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [18.85376, 11.01411, -46.21939] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -3.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -1.02, 8] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, -3.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.86367, 21.47099, 43.13036] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [18.85376, -11.01411, 46.21939] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-12.86367, 21.47099, 43.13036] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 6.21722, -1.53172] + }, + "0.125": { + "vector": [0, 7.06505, -5.92341] + }, + "0.25": { + "vector": [0, 4.87287, -6.34511] + }, + "0.5417": { + "vector": [0, 1.53671, -1.34248] + }, + "0.7083": { + "vector": [0, -2.42885, 3.17018] + }, + "0.75": { + "vector": [0, -1.21133, 1.58347] + }, + "1.0": { + "vector": [0, -3.03628, 3.96006] + }, + "1.5": { + "vector": [0, 6.21722, -1.53172] + } + } + }, + "L-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -2.42885, 3.17018] + }, + "0.25": { + "vector": [0, -3.03628, 3.96006] + }, + "0.75": { + "vector": [0, 6.21722, -1.53172] + }, + "0.875": { + "vector": [0, 7.06505, -5.92341] + }, + "1.0": { + "vector": [0, 4.87287, -6.34511] + }, + "1.2917": { + "vector": [0, 1.53671, -1.34248] + }, + "1.4583": { + "vector": [0, -2.42885, 3.17018] + }, + "1.5": { + "vector": [0, -2.42885, 3.17018] + } + } + } + } + }, + "shoot": { + "animation_length": 2.0833, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [30.64912, 0.19987, 0.07838] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35.33371, 28.2448, 17.38675] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [16.19773, -0.43497, -1.30855] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-54.79931, -0.35608, -0.34522] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.7083": { + "vector": [0, -4.26133, 5.55347] + }, + "2.0833": { + "vector": [0, 0, 0] + } + } + }, + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-32.94364, -35.56578, -33.39378] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.16925, -16.25159, -44.97451] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [11.93845, 3.73171, -47.10967] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.16925, -16.25159, -44.97451] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [34.85117, 2.48364, -58.25524] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [34.85117, 2.48364, -58.25524] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-26.52687, -62.41943, 27.61737] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-26.52687, -62.41943, 27.61737] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-1.30076, -76.78729, -1.99707] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-26.52687, -62.41943, 27.61737] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-19.64778, 12.05369, 3.33516] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-4.34824, -6.81392, -3.90997] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-5.00251, -1.89261, -1.18754] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.7083": { + "vector": [0, -2.59808, 1.5] + }, + "2.0833": { + "vector": [0, 0, 0] + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, -1.25, 26] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -1.25, 14.88] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.625": { + "vector": [1, 1, 1] + }, + "0.7083": { + "vector": [1, 0.9, 1] + }, + "0.7917": { + "vector": [1, 1, 1] + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-32.94364, 35.56578, 33.39378] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.16925, 16.25159, 44.97451] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [11.93845, -3.73171, 47.10967] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.16925, 16.25159, 44.97451] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-26.52687, 62.41943, -27.61737] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-26.52687, 62.41943, -27.61737] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-1.30076, 76.78729, 1.99707] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-26.52687, 62.41943, -27.61737] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.7083": { + "vector": [1, 0.3, 1] + }, + "2.0833": { + "vector": [1, 1, 1] + } + } + }, + "L_eye": { + "scale": { + "vector": [1, 0.3, 1] + } + }, + "R-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -0.29994, 5.31628] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -3.04381, 3.96677] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -3.04381, 3.96677] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -3.04381, 3.96677] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "barrel": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.625": { + "vector": [1, 1, 1] + }, + "0.7083": { + "vector": [1, 0.5, 1] + }, + "0.7917": { + "vector": [1, 1, 1] + }, + "2.0833": { + "vector": [1, 1, 1] + } + } + } + } + }, + "jump_attack": { + "animation_length": 2, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.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" + }, + "1.2083": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, -3.17341, -2.43505] + }, + "0.3333": { + "vector": [0, -4.75671, -3.65752] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.2083": { + "vector": [0, 0, 0] + }, + "1.4167": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6.714, 59.38385, -40.87262] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.714, 59.38385, -40.87262] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [3.62196, 19.52026, -45.44585] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [4.14248, 34.48639, -44.30923] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [4.14248, 34.48639, -44.30923] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-11.1254, 33.08591, -71.40954] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-11.1254, 33.08591, -71.40954] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-11.1254, 33.08591, -71.40954] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, -0.25882, -0.96593] + }, + "0.3333": { + "vector": [0, 0.25764, 0.96185] + }, + "0.5": { + "vector": [0, 0.25764, 0.96185] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.2083": { + "vector": [-2.3035, -4.46791, 4.87151] + }, + "1.4167": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-184.16774, -40.21253, 189.00367] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-184.16774, -40.21253, 189.00367] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-9.52086, -46.89008, 10.74673] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-9.52086, -46.89008, 10.74673] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.52086, -46.89008, 10.74673] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-151.86972, -76.12795, 156.33517] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-151.86972, -76.12795, 156.33517] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-151.86972, -76.12795, 156.33517] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [2.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" + }, + "1.2083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [14.42297, 1.72857, -19.22149] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [14.42297, 1.72857, -19.22149] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [1, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0.26, -24.14, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 82.75, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 128.75, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 117.75, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 109.75, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, -44.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, -15.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -16.62, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, -13.77, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -16.62, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, -13.77, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, -15.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6.714, -59.38385, 40.87262] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.714, -59.38385, 40.87262] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [3.62196, -19.52026, 45.44585] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [4.2745, -36.97965, 44.08324] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [4.2745, -36.97965, 44.08324] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [36.9935, -4.13257, -33.3698] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [36.9935, -4.13257, -33.3698] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [36.9935, -4.13257, -33.3698] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, -0.25882, -0.96593] + }, + "0.3333": { + "vector": [0, 0.25764, 0.96185] + }, + "0.5": { + "vector": [0, 0.25764, 0.96185] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.2083": { + "vector": [0, 0, 0] + }, + "1.4167": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-184.16774, 40.21253, -189.00367] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-184.16774, 40.21253, -189.00367] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-9.52086, 46.89008, -10.74673] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-9.52086, 46.89008, -10.74673] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.52086, 46.89008, -10.74673] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.55071, 45.86745, 22.07379] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [14.55071, 45.86745, 22.07379] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [14.55071, 45.86745, 22.07379] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-12.5, 0, 0] + }, + "0.5": { + "vector": [-12.5, 0, 0] + }, + "0.5833": { + "pre": { + "vector": [-142.5, 0, 0] + }, + "post": { + "vector": [-142.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-117.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-117.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-117.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-117.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-117.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, -2.80423, 0.36918] + }, + "0.5": { + "vector": [0, 1.95589, 4.02175] + }, + "0.5833": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.2083": { + "vector": [0, 0, 0] + }, + "1.4167": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "L-Leg": { + "rotation": { + "0.0": { + "vector": [-37.5, 0, 0] + }, + "0.5": { + "vector": [-37.5, 0, 0] + }, + "0.5833": { + "pre": { + "vector": [-100, 0, 0] + }, + "post": { + "vector": [-100, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-100, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-100, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [-37.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -5.55347, -4.26133] + }, + "0.5833": { + "vector": [0, 0.00347, 0.00133] + }, + "0.6667": { + "vector": [0, 0.00347, 0.00133] + }, + "0.75": { + "vector": [0, 0.00347, 0.00133] + }, + "1.0": { + "vector": [0, 0.00347, 0.00133] + }, + "1.2083": { + "vector": [0, 0.00347, 0.00133] + }, + "1.4167": { + "vector": [0, 0.00347, 0.00133] + }, + "2.0": { + "vector": [0, 0, 0] + } + } + } + } + }, + "spin_attack": { + "loop": true, + "animation_length": 0.2917, + "sound_effects": { + "0.0": { + "effect": "antarchy:toreterror_spin|1.1|0.95" + } + }, + "bones": { + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-40.03828, -6.42252, -14.31771] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -8.42649, 7.07066] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.46814, -29.5764, 7.46814] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.64279, -0.76604] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [39.4, -452.04, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [12.5, -720, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [38.06, -725.19, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -29.25, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-40.03828, 6.42252, 14.31771] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.91252, -20.07846, -1.38281] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R-Leg": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L-Leg": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso_2": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "death": { + "animation_length": 1, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-80, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -0.3473, -1.96962] + } + } + }, + "Torso": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-41.82446, 61.60178, -20.34006] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-41.82446, 61.60178, -20.34006] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-41.82446, 61.60178, -20.34006] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-17.27382, -2.02172, -19.07743] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [19.99049, -34.93723, -13.65793] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [19.99049, -34.93723, -13.65793] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [19.99049, -34.93723, -13.65793] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [5.35753, 0.20136, 10.92476] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15.625, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [147.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -2, 28.44] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -21.25, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, -29.25, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -21.25, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -23.25, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -22.25, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, -23.25, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -22.25, 8] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-41.82446, -61.60178, 20.34006] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-41.82446, -61.60178, 20.34006] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-41.82446, -61.60178, 20.34006] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-17.27382, 2.02172, 19.07743] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [19.99049, 34.93723, 13.65793] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [19.99049, 34.93723, 13.65793] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [19.99049, 34.93723, 13.65793] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [5.35753, -0.20136, -10.92476] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.375": { + "vector": [1, 1, 1] + }, + "0.5": { + "vector": [1, 0.3, 1] + } + } + }, + "L_eye": { + "scale": { + "0.375": { + "vector": [1, 1, 1] + }, + "0.5": { + "vector": [1, 0.3, 1] + } + } + }, + "R-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-14.79774, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -0.35994, 5.39628] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -5.47885, 7.14018] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -5.47885, 7.14018] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -5.47885, 7.14018] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -0.41965, 3.9162] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [0, -1.68678, 1.0746] + } + } + }, + "cannon": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "spin_attack_start": { + "animation_length": 0.25, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-40.03828, -6.42252, -14.31771] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -8.42649, 7.07066] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.46814, -29.5764, 7.46814] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [37.5, 1.20877, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -29.25, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-40.03828, 6.42252, 14.31771] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-6.91252, -20.07846, -1.38281] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [1, 7.14018, 5.47885] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-1, 7.14018, 5.47885] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso_2": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "spin_attack_end": { + "animation_length": 0.4583, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.40552, -0.42671, -3.86532] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-40.03828, -6.42252, -14.31771] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -8.42649, 7.07066] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.46814, -29.5764, 7.46814] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [29.9, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.64279, -0.76604] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -29.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-40.03828, 6.42252, 14.31771] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.91252, -20.07846, -1.38281] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R-Leg": { + "rotation": { + "0.25": { + "pre": { + "vector": [-37.5, 0, 0] + }, + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0833": { + "pre": { + "vector": [6.05456, 12.07085, 4.02709] + }, + "post": { + "vector": [6.05456, 12.07085, 4.02709] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L-Leg": { + "rotation": { + "0.25": { + "pre": { + "vector": [-37.5, 0, 0] + }, + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 7.14018, 5.47885] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-0.7, 11.60171, 6.24351] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.04547, -4.23409, 3.9696] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso_2": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} 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 new file mode 100644 index 00000000..1f68650e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/triffid.animation.json @@ -0,0 +1,2744 @@ +{ + "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/animations/wasp.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/wasp.animation.json new file mode 100644 index 00000000..4770c7e9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/wasp.animation.json @@ -0,0 +1,1074 @@ +{ + "format_version": "1.8.0", + "animations": { + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-45, 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.1667": { + "post": { + "vector": [0, 13, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 19, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 19, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 19, -4] + }, + "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.4167": { + "post": { + "vector": [77.81, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "connector": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stinger": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-38.51223, -14.4627, -17.42399] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.7083": { + "vector": [0.00166, 0, 0.05754] + }, + "0.75": { + "vector": [1, 0, 0] + }, + "0.7917": { + "vector": [0.00166, 0, 0.05754] + } + } + }, + "rightjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.7083": { + "vector": [-0.00166, 0, 0.05754] + }, + "0.75": { + "vector": [-1, 0, 0] + }, + "0.7917": { + "vector": [-0.00166, 0, 0.05754] + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-38.51223, 14.4627, 17.42399] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna2": { + "rotation": { + "vector": [112.5, 0, 0] + } + }, + "leftAntenna2": { + "rotation": { + "vector": [112.5, 0, 0] + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-22.5, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.00717, -20.70481, 1.64867] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [22.5, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 22.5, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-22.5, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.00717, 20.70481, -1.64867] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [22.5, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -22.5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 0.5, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 21, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 18, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 21, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 18, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 21, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "connector": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stinger": { + "rotation": { + "0.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-24.05898, 8.42106, -20.94102] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-46.55898, 8.42106, -20.94102] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-24.05898, 8.42106, -20.94102] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-24.05898, -8.42106, 20.94102] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-46.55898, -8.42106, 20.94102] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-24.05898, -8.42106, 20.94102] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [112.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [112.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [46.50931, -11.00072, 10.26078] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [46.50931, 11.00072, -10.26078] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [22.16359, 3.54836, 2.45838] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [22.16359, 3.54836, 2.45838] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/water_bomb.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/water_bomb.animation.json new file mode 100644 index 00000000..5e966e09 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/water_bomb.animation.json @@ -0,0 +1,82 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 0.8333, + "bones": { + "Water_projectile": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [1, 0.6, 0.9] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0.6, 0.9] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "water_ring": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 13] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 13] + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.4167": { + "vector": [0, 0, 13] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 13] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 13] + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/water_cannon.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/water_cannon.animation.json new file mode 100644 index 00000000..b96da5a0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/water_cannon.animation.json @@ -0,0 +1,10 @@ +{ + "format_version": "1.8.0", + "animations": { + "water_cannon_fire": { + "animation_length": 0.5, + "loop": false, + "bones": {} + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/worm_large.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/worm_large.animation.json new file mode 100644 index 00000000..81991772 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/worm_large.animation.json @@ -0,0 +1,2484 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 6, + "bones": { + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 24] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth1": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth2": { + "rotation": { + "0.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth7": { + "rotation": { + "0.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth3": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth6": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth8": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "inground": { + "loop": true, + "animation_length": 6, + "bones": { + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "5.25": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -24, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -24, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1.1, 0.9, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0.9, 1.1, 0.9] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [1.1, 0.9, 1.1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "5.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth1": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth2": { + "rotation": { + "0.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth7": { + "rotation": { + "0.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth3": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth6": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth8": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "crawl": { + "loop": true, + "animation_length": 2, + "bones": { + "body": { + "rotation": { + "vector": ["90-math.cos(q.anim_time*90*2+90)*4", "-math.cos(q.anim_time*90*4)*8", 0] + }, + "position": { + "vector": ["math.cos(q.anim_time*90*4-70)*3", "-33+math.cos(q.anim_time*90*2)*3-3", 0] + } + }, + "head": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2+180)*4", 0, "math.cos(q.anim_time*90*4+130)*10"] + } + }, + "tooth1": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2*3)*20", "math.cos(q.anim_time*90*2*3-50)*10", "-math.cos(q.anim_time*90*2*3)*20"] + } + }, + "tooth2": { + "rotation": { + "vector": ["math.cos(q.anim_time*90*2*3-80)*20", 0, 0] + } + }, + "tooth4": { + "rotation": { + "vector": [0, 0, "math.cos(q.anim_time*90*2*3-80)*20"] + } + }, + "tooth5": { + "rotation": { + "vector": [0, 0, "-math.cos(q.anim_time*90*2*3-80)*20"] + } + }, + "tooth7": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2*3-80)*20", 0, 0] + } + }, + "tooth3": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2*3)*20", "-math.cos(q.anim_time*90*2*3-50)*10", "math.cos(q.anim_time*90*2*3)*20"] + } + }, + "tooth6": { + "rotation": { + "vector": ["math.cos(q.anim_time*90*2*3)*20", "-math.cos(q.anim_time*90*2*3-50)*10", "-math.cos(q.anim_time*90*2*3)*20"] + } + }, + "tooth8": { + "rotation": { + "vector": ["math.cos(q.anim_time*90*2*3)*20", "math.cos(q.anim_time*90*2*3-50)*10", "math.cos(q.anim_time*90*2*3)*20"] + } + }, + "tail": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2+30)*8", 0, "-math.cos(q.anim_time*90*4+90)*10"] + } + } + } + }, + "attack": { + "animation_length": 2.25, + "bones": { + "body": { + "rotation": { + "0.0": { + "vector": [90, 0, 0] + }, + "0.0417": { + "vector": [86.26, 0, 0] + }, + "0.125": { + "pre": { + "vector": [98.78, 0, 0] + }, + "post": { + "vector": [98.78, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [135, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [165, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [150, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [105.39, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-290, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "vector": [-267.5, 0, 0] + }, + "2.1667": { + "vector": [-270, 0, 0] + }, + "2.2083": { + "vector": [90, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -33, 0] + }, + "0.125": { + "pre": { + "vector": [0, -28.26, -16.42] + }, + "post": { + "vector": [0, -28.26, -16.42] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -35.05, -33.86] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -69, -47] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -90.62, -70.7] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -92, -69] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -77, -63] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -77, -63] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -77, -63] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 4, -54] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 28, -40] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 27.5, -15.12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, -33, 0] + } + }, + "scale": { + "1.1667": { + "vector": [1, 1, 1] + }, + "1.2917": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0.5, 1.5, 0.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.5, 1.5, 0.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [1, 1, 1] + } + } + }, + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [-5, 0, 0] + }, + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-29.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "vector": [0, 0, 0] + } + } + }, + "tooth1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [-45, 0, -45] + }, + "0.1667": { + "vector": [-45, 0, -45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [-45, 0, -45] + }, + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-67.5, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [22.5, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [22.5, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [-45, 0, 0] + }, + "0.1667": { + "vector": [-45, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [-45, 0, 0] + }, + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, -45] + }, + "0.1667": { + "vector": [0, 0, -45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [0, 0, -45] + }, + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 45] + }, + "0.1667": { + "vector": [0, 0, 45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [0, 0, 45] + }, + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth7": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [45, 0, 0] + }, + "0.1667": { + "vector": [45, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [-45, 0, 45] + }, + "0.1667": { + "vector": [-45, 0, 45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [-45, 0, 45] + }, + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-67.5, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [22.5, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [22.5, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth6": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [45, 0, -45] + }, + "0.1667": { + "vector": [45, 0, -45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "vector": [45, 0, -45] + }, + "1.375": { + "vector": [45, 0, -45] + }, + "1.4583": { + "pre": { + "vector": [-22.5, 0, 22.5] + }, + "post": { + "vector": [-22.5, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-22.5, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth8": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [45, 0, 45] + }, + "0.1667": { + "vector": [45, 0, 45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "vector": [45, 0, 45] + }, + "1.375": { + "vector": [45, 0, 45] + }, + "1.4583": { + "pre": { + "vector": [-22.5, 0, -22.5] + }, + "post": { + "vector": [-22.5, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-22.5, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tail": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [3.11, 0, 0] + }, + "post": { + "vector": [3.11, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-15.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "vector": [0, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/antarchy_logo.png b/common-1.20.1/src/main/resources/assets/antarchy/antarchy_logo.png new file mode 100644 index 00000000..d26b97b1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/antarchy_logo.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/amber_lichen.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/amber_lichen.json new file mode 100644 index 00000000..c265ce00 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/amber_lichen.json @@ -0,0 +1,150 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/amber_lichen" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen" + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 90 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 180 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 270 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 270 + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 270 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 90 + }, + "when": { + "down": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 90 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/amber_moss_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/amber_moss_block.json new file mode 100644 index 00000000..7e867f05 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/amber_moss_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/amber_moss_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/amber_moss_carpet.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/amber_moss_carpet.json new file mode 100644 index 00000000..e059b29b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/amber_moss_carpet.json @@ -0,0 +1,154 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/amber_moss_carpet" + }, + "when": { + "bottom": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall" + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small" + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antigravel.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antigravel.json new file mode 100644 index 00000000..0792b604 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antigravel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/antigravel" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal.json new file mode 100644 index 00000000..1b0e8cd8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/antimetal_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/antimetal" + }, + "axis=z": { + "model": "antarchy:block/antimetal_horizontal", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_activator_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_activator_rail.json new file mode 100644 index 00000000..48622177 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_activator_rail.json @@ -0,0 +1,46 @@ +{ + "variants": { + "shape=north_south,powered=false": { + "model": "antarchy:block/antimetal_activator_rail" + }, + "shape=east_west,powered=false": { + "model": "antarchy:block/antimetal_activator_rail", + "y": 90 + }, + "shape=ascending_north,powered=false": { + "model": "antarchy:block/antimetal_activator_rail_raised_ne" + }, + "shape=ascending_east,powered=false": { + "model": "antarchy:block/antimetal_activator_rail_raised_ne", + "y": 90 + }, + "shape=ascending_south,powered=false": { + "model": "antarchy:block/antimetal_activator_rail_raised_sw" + }, + "shape=ascending_west,powered=false": { + "model": "antarchy:block/antimetal_activator_rail_raised_sw", + "y": 90 + }, + "shape=north_south,powered=true": { + "model": "antarchy:block/antimetal_activator_rail_on" + }, + "shape=east_west,powered=true": { + "model": "antarchy:block/antimetal_activator_rail_on", + "y": 90 + }, + "shape=ascending_north,powered=true": { + "model": "antarchy:block/antimetal_activator_rail_raised_on_ne" + }, + "shape=ascending_east,powered=true": { + "model": "antarchy:block/antimetal_activator_rail_raised_on_ne", + "y": 90 + }, + "shape=ascending_south,powered=true": { + "model": "antarchy:block/antimetal_activator_rail_raised_on_sw" + }, + "shape=ascending_west,powered=true": { + "model": "antarchy:block/antimetal_activator_rail_raised_on_sw", + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_detector_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_detector_rail.json new file mode 100644 index 00000000..06aad0d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_detector_rail.json @@ -0,0 +1,46 @@ +{ + "variants": { + "shape=north_south,powered=false": { + "model": "antarchy:block/antimetal_detector_rail" + }, + "shape=east_west,powered=false": { + "model": "antarchy:block/antimetal_detector_rail", + "y": 90 + }, + "shape=ascending_north,powered=false": { + "model": "antarchy:block/antimetal_detector_rail_raised_ne" + }, + "shape=ascending_east,powered=false": { + "model": "antarchy:block/antimetal_detector_rail_raised_ne", + "y": 90 + }, + "shape=ascending_south,powered=false": { + "model": "antarchy:block/antimetal_detector_rail_raised_sw" + }, + "shape=ascending_west,powered=false": { + "model": "antarchy:block/antimetal_detector_rail_raised_sw", + "y": 90 + }, + "shape=north_south,powered=true": { + "model": "antarchy:block/antimetal_detector_rail_on" + }, + "shape=east_west,powered=true": { + "model": "antarchy:block/antimetal_detector_rail_on", + "y": 90 + }, + "shape=ascending_north,powered=true": { + "model": "antarchy:block/antimetal_detector_rail_raised_on_ne" + }, + "shape=ascending_east,powered=true": { + "model": "antarchy:block/antimetal_detector_rail_raised_on_ne", + "y": 90 + }, + "shape=ascending_south,powered=true": { + "model": "antarchy:block/antimetal_detector_rail_raised_on_sw" + }, + "shape=ascending_west,powered=true": { + "model": "antarchy:block/antimetal_detector_rail_raised_on_sw", + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_powered_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_powered_rail.json new file mode 100644 index 00000000..c8151c28 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_powered_rail.json @@ -0,0 +1,46 @@ +{ + "variants": { + "shape=north_south,powered=false": { + "model": "antarchy:block/antimetal_powered_rail" + }, + "shape=east_west,powered=false": { + "model": "antarchy:block/antimetal_powered_rail", + "y": 90 + }, + "shape=ascending_north,powered=false": { + "model": "antarchy:block/antimetal_powered_rail_raised_ne" + }, + "shape=ascending_east,powered=false": { + "model": "antarchy:block/antimetal_powered_rail_raised_ne", + "y": 90 + }, + "shape=ascending_south,powered=false": { + "model": "antarchy:block/antimetal_powered_rail_raised_sw" + }, + "shape=ascending_west,powered=false": { + "model": "antarchy:block/antimetal_powered_rail_raised_sw", + "y": 90 + }, + "shape=north_south,powered=true": { + "model": "antarchy:block/antimetal_powered_rail_on" + }, + "shape=east_west,powered=true": { + "model": "antarchy:block/antimetal_powered_rail_on", + "y": 90 + }, + "shape=ascending_north,powered=true": { + "model": "antarchy:block/antimetal_powered_rail_raised_on_ne" + }, + "shape=ascending_east,powered=true": { + "model": "antarchy:block/antimetal_powered_rail_raised_on_ne", + "y": 90 + }, + "shape=ascending_south,powered=true": { + "model": "antarchy:block/antimetal_powered_rail_raised_on_sw" + }, + "shape=ascending_west,powered=true": { + "model": "antarchy:block/antimetal_powered_rail_raised_on_sw", + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_rail.json new file mode 100644 index 00000000..5f8e8940 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_rail.json @@ -0,0 +1,40 @@ +{ + "variants": { + "shape=north_south": { + "model": "antarchy:block/antimetal_rail" + }, + "shape=east_west": { + "model": "antarchy:block/antimetal_rail", + "y": 90 + }, + "shape=ascending_north": { + "model": "antarchy:block/antimetal_rail_raised_ne" + }, + "shape=ascending_east": { + "model": "antarchy:block/antimetal_rail_raised_ne", + "y": 90 + }, + "shape=ascending_south": { + "model": "antarchy:block/antimetal_rail_raised_sw" + }, + "shape=ascending_west": { + "model": "antarchy:block/antimetal_rail_raised_sw", + "y": 90 + }, + "shape=south_east": { + "model": "antarchy:block/antimetal_rail_corner" + }, + "shape=south_west": { + "model": "antarchy:block/antimetal_rail_corner", + "y": 90 + }, + "shape=north_west": { + "model": "antarchy:block/antimetal_rail_corner", + "y": 180 + }, + "shape=north_east": { + "model": "antarchy:block/antimetal_rail_corner", + "y": 270 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_scaffolding.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_scaffolding.json new file mode 100644 index 00000000..c2dc289e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_scaffolding.json @@ -0,0 +1,8 @@ +{ + "multipart": [ + { "when": { "bottom": "false", "inverted": "false" }, "apply": { "model": "antarchy:block/antimetal_scaffolding_stable" } }, + { "when": { "bottom": "true", "inverted": "false" }, "apply": { "model": "antarchy:block/antimetal_scaffolding_unstable" } }, + { "when": { "bottom": "false", "inverted": "true" }, "apply": { "model": "antarchy:block/antimetal_scaffolding_stable", "x": 180 } }, + { "when": { "bottom": "true", "inverted": "true" }, "apply": { "model": "antarchy:block/antimetal_scaffolding_unstable", "x": 180 } } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_slab.json new file mode 100644 index 00000000..d4434587 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/antimetal" + }, + "type=bottom": { + "model": "antarchy:block/antimetal_slab" + }, + "type=top": { + "model": "antarchy:block/antimetal_slab_top" + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_stairs.json new file mode 100644 index 00000000..f81dd6b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antimetal_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/antimetal_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antiwater.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antiwater.json new file mode 100644 index 00000000..777d6ac3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/antiwater.json @@ -0,0 +1,20 @@ +{ + "variants": { + "level=0": { "model": "minecraft:block/water" }, + "level=1": { "model": "minecraft:block/water" }, + "level=2": { "model": "minecraft:block/water" }, + "level=3": { "model": "minecraft:block/water" }, + "level=4": { "model": "minecraft:block/water" }, + "level=5": { "model": "minecraft:block/water" }, + "level=6": { "model": "minecraft:block/water" }, + "level=7": { "model": "minecraft:block/water" }, + "level=8": { "model": "minecraft:block/water" }, + "level=9": { "model": "minecraft:block/water" }, + "level=10": { "model": "minecraft:block/water" }, + "level=11": { "model": "minecraft:block/water" }, + "level=12": { "model": "minecraft:block/water" }, + "level=13": { "model": "minecraft:block/water" }, + "level=14": { "model": "minecraft:block/water" }, + "level=15": { "model": "minecraft:block/water" } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bed_bug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bed_bug_egg.json new file mode 100644 index 00000000..ccf93b78 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bed_bug_egg.json @@ -0,0 +1,76 @@ +{ + "variants": { + "eggs=1,hatch=0": [ + { "model": "antarchy:block/bed_bug_egg_1" }, + { "model": "antarchy:block/bed_bug_egg_1", "y": 90 }, + { "model": "antarchy:block/bed_bug_egg_1", "y": 180 }, + { "model": "antarchy:block/bed_bug_egg_1", "y": 270 } + ], + "eggs=1,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_1" }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_1", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_1", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_1", "y": 270 } + ], + "eggs=1,hatch=2": [ + { "model": "antarchy:block/very_cracked_bed_bug_egg_1" }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_1", "y": 90 }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_1", "y": 180 }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_1", "y": 270 } + ], + "eggs=2,hatch=0": [ + { "model": "antarchy:block/bed_bug_egg_2" }, + { "model": "antarchy:block/bed_bug_egg_2", "y": 90 }, + { "model": "antarchy:block/bed_bug_egg_2", "y": 180 }, + { "model": "antarchy:block/bed_bug_egg_2", "y": 270 } + ], + "eggs=2,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_2" }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_2", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_2", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_2", "y": 270 } + ], + "eggs=2,hatch=2": [ + { "model": "antarchy:block/very_cracked_bed_bug_egg_2" }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_2", "y": 90 }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_2", "y": 180 }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_2", "y": 270 } + ], + "eggs=3,hatch=0": [ + { "model": "antarchy:block/bed_bug_egg_3" }, + { "model": "antarchy:block/bed_bug_egg_3", "y": 90 }, + { "model": "antarchy:block/bed_bug_egg_3", "y": 180 }, + { "model": "antarchy:block/bed_bug_egg_3", "y": 270 } + ], + "eggs=3,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_3" }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_3", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_3", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_3", "y": 270 } + ], + "eggs=3,hatch=2": [ + { "model": "antarchy:block/very_cracked_bed_bug_egg_3" }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_3", "y": 90 }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_3", "y": 180 }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_3", "y": 270 } + ], + "eggs=4,hatch=0": [ + { "model": "antarchy:block/bed_bug_egg_4" }, + { "model": "antarchy:block/bed_bug_egg_4", "y": 90 }, + { "model": "antarchy:block/bed_bug_egg_4", "y": 180 }, + { "model": "antarchy:block/bed_bug_egg_4", "y": 270 } + ], + "eggs=4,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_4" }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_4", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_4", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_bed_bug_egg_4", "y": 270 } + ], + "eggs=4,hatch=2": [ + { "model": "antarchy:block/very_cracked_bed_bug_egg_4" }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_4", "y": 90 }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_4", "y": 180 }, + { "model": "antarchy:block/very_cracked_bed_bug_egg_4", "y": 270 } + ] + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bile.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bile.json new file mode 100644 index 00000000..777d6ac3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bile.json @@ -0,0 +1,20 @@ +{ + "variants": { + "level=0": { "model": "minecraft:block/water" }, + "level=1": { "model": "minecraft:block/water" }, + "level=2": { "model": "minecraft:block/water" }, + "level=3": { "model": "minecraft:block/water" }, + "level=4": { "model": "minecraft:block/water" }, + "level=5": { "model": "minecraft:block/water" }, + "level=6": { "model": "minecraft:block/water" }, + "level=7": { "model": "minecraft:block/water" }, + "level=8": { "model": "minecraft:block/water" }, + "level=9": { "model": "minecraft:block/water" }, + "level=10": { "model": "minecraft:block/water" }, + "level=11": { "model": "minecraft:block/water" }, + "level=12": { "model": "minecraft:block/water" }, + "level=13": { "model": "minecraft:block/water" }, + "level=14": { "model": "minecraft:block/water" }, + "level=15": { "model": "minecraft:block/water" } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bile_vein.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bile_vein.json new file mode 100644 index 00000000..1ab1a4b4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bile_vein.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/bile_vein" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biomite.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biomite.json new file mode 100644 index 00000000..36122680 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biomite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/biomite" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biomite_turf.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biomite_turf.json new file mode 100644 index 00000000..6fcb78fc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biomite_turf.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/biomite_turf" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biowart.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biowart.json new file mode 100644 index 00000000..dafc5e20 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biowart.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/biowart" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biowart_tendrils.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biowart_tendrils.json new file mode 100644 index 00000000..c19c4f34 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/biowart_tendrils.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/biowart_tendrils" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blood_crystal_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blood_crystal_block.json new file mode 100644 index 00000000..ed30f83b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blood_crystal_block.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/blood_crystal_block" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blood_crystal_cluster.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blood_crystal_cluster.json new file mode 100644 index 00000000..3b197f1e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blood_crystal_cluster.json @@ -0,0 +1,11 @@ +{ + "variants": { + "facing=down": { "model": "antarchy:block/blood_crystal_cluster", "x": 180 }, + "facing=east": { "model": "antarchy:block/blood_crystal_cluster", "x": 90, "y": 90 }, + "facing=north": { "model": "antarchy:block/blood_crystal_cluster", "x": 90 }, + "facing=south": { "model": "antarchy:block/blood_crystal_cluster", "x": 90, "y": 180 }, + "facing=up": { "model": "antarchy:block/blood_crystal_cluster" }, + "facing=west": { "model": "antarchy:block/blood_crystal_cluster", "x": 90, "y": 270 } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_block.json new file mode 100644 index 00000000..7631e6bd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/bluestone_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_comparator.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_comparator.json new file mode 100644 index 00000000..f630faed --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_comparator.json @@ -0,0 +1,176 @@ +{ + "multipart": [ + { + "when": { + "facing": "north", + "mode": "compare", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator" + } + }, + { + "when": { + "facing": "east", + "mode": "compare", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator", + "y": 90 + } + }, + { + "when": { + "facing": "south", + "mode": "compare", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator", + "y": 180 + } + }, + { + "when": { + "facing": "west", + "mode": "compare", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator", + "y": 270 + } + }, + { + "when": { + "facing": "north", + "mode": "compare", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_on" + } + }, + { + "when": { + "facing": "east", + "mode": "compare", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_on", + "y": 90 + } + }, + { + "when": { + "facing": "south", + "mode": "compare", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_on", + "y": 180 + } + }, + { + "when": { + "facing": "west", + "mode": "compare", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_on", + "y": 270 + } + }, + { + "when": { + "facing": "north", + "mode": "subtract", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_subtract" + } + }, + { + "when": { + "facing": "east", + "mode": "subtract", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_subtract", + "y": 90 + } + }, + { + "when": { + "facing": "south", + "mode": "subtract", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_subtract", + "y": 180 + } + }, + { + "when": { + "facing": "west", + "mode": "subtract", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_subtract", + "y": 270 + } + }, + { + "when": { + "facing": "north", + "mode": "subtract", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_subtract_on" + } + }, + { + "when": { + "facing": "east", + "mode": "subtract", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_subtract_on", + "y": 90 + } + }, + { + "when": { + "facing": "south", + "mode": "subtract", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_subtract_on", + "y": 180 + } + }, + { + "when": { + "facing": "west", + "mode": "subtract", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_comparator_subtract_on", + "y": 270 + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_lamp.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_lamp.json new file mode 100644 index 00000000..87466fc3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_lamp.json @@ -0,0 +1,10 @@ +{ + "variants": { + "lit=false": { + "model": "antarchy:block/bluestone_lamp" + }, + "lit=true": { + "model": "antarchy:block/bluestone_lamp_on" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_ore.json new file mode 100644 index 00000000..3bd83425 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_ore.json @@ -0,0 +1,10 @@ +{ + "variants": { + "lit=false": { + "model": "antarchy:block/bluestone_ore" + }, + "lit=true": { + "model": "antarchy:block/bluestone_ore" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_repeater.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_repeater.json new file mode 100644 index 00000000..095d2a9a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_repeater.json @@ -0,0 +1,387 @@ +{ + "multipart": [ + { + "when": { + "delay": "1", + "facing": "north", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater" + } + }, + { + "when": { + "delay": "1", + "facing": "east", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater", + "y": 90 + } + }, + { + "when": { + "delay": "1", + "facing": "south", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater", + "y": 180 + } + }, + { + "when": { + "delay": "1", + "facing": "west", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater", + "y": 270 + } + }, + { + "when": { + "delay": "1", + "facing": "north", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_on" + } + }, + { + "when": { + "delay": "1", + "facing": "east", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_on", + "y": 90 + } + }, + { + "when": { + "delay": "1", + "facing": "south", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_on", + "y": 180 + } + }, + { + "when": { + "delay": "1", + "facing": "west", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_on", + "y": 270 + } + }, + { + "when": { + "delay": "2", + "facing": "north", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay2" + } + }, + { + "when": { + "delay": "2", + "facing": "east", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay2", + "y": 90 + } + }, + { + "when": { + "delay": "2", + "facing": "south", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay2", + "y": 180 + } + }, + { + "when": { + "delay": "2", + "facing": "west", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay2", + "y": 270 + } + }, + { + "when": { + "delay": "2", + "facing": "north", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay2_on" + } + }, + { + "when": { + "delay": "2", + "facing": "east", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay2_on", + "y": 90 + } + }, + { + "when": { + "delay": "2", + "facing": "south", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay2_on", + "y": 180 + } + }, + { + "when": { + "delay": "2", + "facing": "west", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay2_on", + "y": 270 + } + }, + { + "when": { + "delay": "3", + "facing": "north", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay3" + } + }, + { + "when": { + "delay": "3", + "facing": "east", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay3", + "y": 90 + } + }, + { + "when": { + "delay": "3", + "facing": "south", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay3", + "y": 180 + } + }, + { + "when": { + "delay": "3", + "facing": "west", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay3", + "y": 270 + } + }, + { + "when": { + "delay": "3", + "facing": "north", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay3_on" + } + }, + { + "when": { + "delay": "3", + "facing": "east", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay3_on", + "y": 90 + } + }, + { + "when": { + "delay": "3", + "facing": "south", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay3_on", + "y": 180 + } + }, + { + "when": { + "delay": "3", + "facing": "west", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay3_on", + "y": 270 + } + }, + { + "when": { + "delay": "4", + "facing": "north", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay4" + } + }, + { + "when": { + "delay": "4", + "facing": "east", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay4", + "y": 90 + } + }, + { + "when": { + "delay": "4", + "facing": "south", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay4", + "y": 180 + } + }, + { + "when": { + "delay": "4", + "facing": "west", + "powered": "false" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay4", + "y": 270 + } + }, + { + "when": { + "delay": "4", + "facing": "north", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay4_on" + } + }, + { + "when": { + "delay": "4", + "facing": "east", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay4_on", + "y": 90 + } + }, + { + "when": { + "delay": "4", + "facing": "south", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay4_on", + "y": 180 + } + }, + { + "when": { + "delay": "4", + "facing": "west", + "powered": "true" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_delay4_on", + "y": 270 + } + }, + { + "when": { + "locked": "true", + "facing": "north" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_lock" + } + }, + { + "when": { + "locked": "true", + "facing": "east" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_lock", + "y": 90 + } + }, + { + "when": { + "locked": "true", + "facing": "south" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_lock", + "y": 180 + } + }, + { + "when": { + "locked": "true", + "facing": "west" + }, + "apply": { + "model": "antarchy:block/bluestone_repeater_lock", + "y": 270 + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_torch.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_torch.json new file mode 100644 index 00000000..cd7dafb9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_torch.json @@ -0,0 +1,84 @@ +{ + "variants": { + "face=ceiling,facing=north,lit=false": { + "model": "antarchy:block/bluestone_torch_off" + }, + "face=ceiling,facing=east,lit=false": { + "model": "antarchy:block/bluestone_torch_off" + }, + "face=ceiling,facing=south,lit=false": { + "model": "antarchy:block/bluestone_torch_off" + }, + "face=ceiling,facing=west,lit=false": { + "model": "antarchy:block/bluestone_torch_off" + }, + "face=floor,facing=north,lit=false": { + "model": "antarchy:block/bluestone_torch_off" + }, + "face=floor,facing=east,lit=false": { + "model": "antarchy:block/bluestone_torch_off" + }, + "face=floor,facing=south,lit=false": { + "model": "antarchy:block/bluestone_torch_off" + }, + "face=floor,facing=west,lit=false": { + "model": "antarchy:block/bluestone_torch_off" + }, + "face=ceiling,facing=north,lit=true": { + "model": "antarchy:block/bluestone_torch" + }, + "face=ceiling,facing=east,lit=true": { + "model": "antarchy:block/bluestone_torch" + }, + "face=ceiling,facing=south,lit=true": { + "model": "antarchy:block/bluestone_torch" + }, + "face=ceiling,facing=west,lit=true": { + "model": "antarchy:block/bluestone_torch" + }, + "face=floor,facing=north,lit=true": { + "model": "antarchy:block/bluestone_torch" + }, + "face=floor,facing=east,lit=true": { + "model": "antarchy:block/bluestone_torch" + }, + "face=floor,facing=south,lit=true": { + "model": "antarchy:block/bluestone_torch" + }, + "face=floor,facing=west,lit=true": { + "model": "antarchy:block/bluestone_torch" + }, + "face=wall,facing=north,lit=false": { + "model": "antarchy:block/bluestone_wall_torch_off", + "y": 270 + }, + "face=wall,facing=east,lit=false": { + "model": "antarchy:block/bluestone_wall_torch_off", + "y": 0 + }, + "face=wall,facing=south,lit=false": { + "model": "antarchy:block/bluestone_wall_torch_off", + "y": 90 + }, + "face=wall,facing=west,lit=false": { + "model": "antarchy:block/bluestone_wall_torch_off", + "y": 180 + }, + "face=wall,facing=north,lit=true": { + "model": "antarchy:block/bluestone_wall_torch", + "y": 270 + }, + "face=wall,facing=east,lit=true": { + "model": "antarchy:block/bluestone_wall_torch", + "y": 0 + }, + "face=wall,facing=south,lit=true": { + "model": "antarchy:block/bluestone_wall_torch", + "y": 90 + }, + "face=wall,facing=west,lit=true": { + "model": "antarchy:block/bluestone_wall_torch", + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_wire.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_wire.json new file mode 100644 index 00000000..e96ebb58 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/bluestone_wire.json @@ -0,0 +1,116 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/bluestone_wire_dot", + "x": 180 + }, + "when": { + "OR": [ + { + "east": "none", + "north": "none", + "south": "none", + "west": "none" + }, + { + "east": "side|down", + "north": "side|down" + }, + { + "east": "side|down", + "south": "side|down" + }, + { + "south": "side|down", + "west": "side|down" + }, + { + "north": "side|down", + "west": "side|down" + } + ] + } + }, + { + "when": { + "north": "side|down" + }, + "apply": { + "model": "antarchy:block/bluestone_wire_side0", + "x": 180, + "y": 180 + } + }, + { + "when": { + "south": "side|down" + }, + "apply": { + "model": "antarchy:block/bluestone_wire_side_alt0", + "x": 180, + "y": 180 + } + }, + { + "when": { + "east": "side|down" + }, + "apply": { + "model": "antarchy:block/bluestone_wire_side_alt1", + "x": 180, + "y": 90 + } + }, + { + "when": { + "west": "side|down" + }, + "apply": { + "model": "antarchy:block/bluestone_wire_side1", + "x": 180, + "y": 90 + } + }, + { + "when": { + "north": "down" + }, + "apply": { + "model": "antarchy:block/bluestone_wire_down", + "x": 180, + "y": 180 + } + }, + { + "when": { + "east": "down" + }, + "apply": { + "model": "antarchy:block/bluestone_wire_down", + "x": 180, + "y": 270 + } + }, + { + "when": { + "south": "down" + }, + "apply": { + "model": "antarchy:block/bluestone_wire_down", + "x": 180, + "y": 0 + } + }, + { + "when": { + "west": "down" + }, + "apply": { + "model": "antarchy:block/bluestone_wire_down", + "x": 180, + "y": 90 + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blush_moss_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blush_moss_block.json new file mode 100644 index 00000000..fd0dbfdd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blush_moss_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/blush_moss_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blush_moss_carpet.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blush_moss_carpet.json new file mode 100644 index 00000000..fa1bd926 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/blush_moss_carpet.json @@ -0,0 +1,154 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/blush_moss_carpet" + }, + "when": { + "bottom": "true" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall" + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_small" + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_small", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_small", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_small", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone.json new file mode 100644 index 00000000..4ae6f1c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/broodstone" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_brick_slab.json new file mode 100644 index 00000000..115ecd93 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/broodstone_bricks" + }, + "type=bottom": { + "model": "antarchy:block/broodstone_brick_slab" + }, + "type=top": { + "model": "antarchy:block/broodstone_brick_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_brick_stairs.json new file mode 100644 index 00000000..3cd1f44f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/broodstone_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/broodstone_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/broodstone_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/broodstone_brick_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/broodstone_brick_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/broodstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/broodstone_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/broodstone_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/broodstone_brick_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/broodstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/broodstone_brick_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/broodstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/broodstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/broodstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_brick_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_brick_wall.json new file mode 100644 index 00000000..63c9f51f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_brick_wall.json @@ -0,0 +1,40 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/broodstone_brick_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/broodstone_brick_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/broodstone_brick_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/broodstone_brick_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/broodstone_brick_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/broodstone_brick_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/broodstone_brick_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/broodstone_brick_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/broodstone_brick_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_bricks.json new file mode 100644 index 00000000..985c4d09 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/broodstone_bricks" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_pillar.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_pillar.json new file mode 100644 index 00000000..39abc97d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_pillar.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/broodstone_pillar", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/broodstone_pillar" + }, + "axis=z": { + "model": "antarchy:block/broodstone_pillar", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_slab.json new file mode 100644 index 00000000..a6ba6024 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/broodstone" + }, + "type=bottom": { + "model": "antarchy:block/broodstone_slab" + }, + "type=top": { + "model": "antarchy:block/broodstone_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_stairs.json new file mode 100644 index 00000000..4ef18c8d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/broodstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/broodstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/broodstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/broodstone_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/broodstone_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/broodstone_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/broodstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/broodstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/broodstone_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/broodstone_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/broodstone_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/broodstone_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_titanium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_titanium_ore.json new file mode 100644 index 00000000..50acfde6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_titanium_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/broodstone_titanium_ore" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_uranium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_uranium_ore.json new file mode 100644 index 00000000..7eec9b8f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_uranium_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/broodstone_uranium_ore" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_wall.json new file mode 100644 index 00000000..90f167fc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/broodstone_wall.json @@ -0,0 +1,40 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/broodstone_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/broodstone_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/broodstone_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/broodstone_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/broodstone_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/broodstone_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/broodstone_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/broodstone_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/broodstone_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/brown_ant_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/brown_ant_nest.json new file mode 100644 index 00000000..36f298d0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/brown_ant_nest.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=north": [ + {"model": "antarchy:block/brown_ant_nest"}, + {"model": "antarchy:block/brown_ant_nest", "y": 90}, + {"model": "antarchy:block/brown_ant_nest", "y": 180}, + {"model": "antarchy:block/brown_ant_nest", "y": 270} + ], + "facing=east": [ + {"model": "antarchy:block/brown_ant_nest", "y": 90}, + {"model": "antarchy:block/brown_ant_nest", "y": 180}, + {"model": "antarchy:block/brown_ant_nest", "y": 270}, + {"model": "antarchy:block/brown_ant_nest"} + ], + "facing=south": [ + {"model": "antarchy:block/brown_ant_nest", "y": 180}, + {"model": "antarchy:block/brown_ant_nest", "y": 270}, + {"model": "antarchy:block/brown_ant_nest"}, + {"model": "antarchy:block/brown_ant_nest", "y": 90} + ], + "facing=west": [ + {"model": "antarchy:block/brown_ant_nest", "y": 270}, + {"model": "antarchy:block/brown_ant_nest"}, + {"model": "antarchy:block/brown_ant_nest", "y": 90}, + {"model": "antarchy:block/brown_ant_nest", "y": 180} + ] + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/brutalfly_cocoon_spawner.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/brutalfly_cocoon_spawner.json new file mode 100644 index 00000000..b349b3c7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/brutalfly_cocoon_spawner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/brutalfly_cocoon_spawner" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/budding_blood_crystal.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/budding_blood_crystal.json new file mode 100644 index 00000000..547c0bd5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/budding_blood_crystal.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/budding_blood_crystal" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/camellia.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/camellia.json new file mode 100644 index 00000000..51b1f181 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/camellia.json @@ -0,0 +1,10 @@ +{ + "variants": { + "half=lower": { + "model": "antarchy:block/camellia_bottom" + }, + "half=upper": { + "model": "antarchy:block/camellia_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cavaryn_portal.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cavaryn_portal.json new file mode 100644 index 00000000..2dd199fb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cavaryn_portal.json @@ -0,0 +1,6 @@ +{ + "variants": { + "axis=x": { "model": "antarchy:block/cavaryn_portal_x" }, + "axis=z": { "model": "antarchy:block/cavaryn_portal_z" } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_broodstone.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_broodstone.json new file mode 100644 index 00000000..578b49ca --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_broodstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/chiseled_broodstone" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_dream_sandstone.json new file mode 100644 index 00000000..69bba0cf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_dream_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/chiseled_dream_sandstone" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_nyxite.json new file mode 100644 index 00000000..e97afc92 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_nyxite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/chiseled_nyxite" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_shellstone.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_shellstone.json new file mode 100644 index 00000000..6f109f67 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_shellstone.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/chiseled_shellstone" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_titanium.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_titanium.json new file mode 100644 index 00000000..b9ee9853 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_titanium.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "antarchy:block/chiseled_titanium", "y": 180 }, + "facing=east": { "model": "antarchy:block/chiseled_titanium", "y": 270 }, + "facing=south": { "model": "antarchy:block/chiseled_titanium" }, + "facing=west": { "model": "antarchy:block/chiseled_titanium", "y": 90 } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_uranium.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_uranium.json new file mode 100644 index 00000000..9fbfcb09 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chiseled_uranium.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "antarchy:block/chiseled_uranium", "y": 180 }, + "facing=east": { "model": "antarchy:block/chiseled_uranium", "y": 270 }, + "facing=south": { "model": "antarchy:block/chiseled_uranium" }, + "facing=west": { "model": "antarchy:block/chiseled_uranium", "y": 90 } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chitin_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chitin_block.json new file mode 100644 index 00000000..97a967f0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chitin_block.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/chitin_block", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/chitin_block" + }, + "axis=z": { + "model": "antarchy:block/chitin_block", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chitin_spike.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chitin_spike.json new file mode 100644 index 00000000..35e0fe28 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/chitin_spike.json @@ -0,0 +1,14 @@ +{ + "variants": { + "thickness=base,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_base" }, + "thickness=base,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_base" }, + "thickness=frustum,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_frustum" }, + "thickness=frustum,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_frustum" }, + "thickness=middle,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_middle" }, + "thickness=middle,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_middle" }, + "thickness=tip,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_tip" }, + "thickness=tip,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_tip" }, + "thickness=tip_merge,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_tip_merge" }, + "thickness=tip_merge,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_tip_merge" } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cloud_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cloud_block.json new file mode 100644 index 00000000..b943df16 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cloud_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/cloud_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/corn_crop.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/corn_crop.json new file mode 100644 index 00000000..ecdc71fe --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/corn_crop.json @@ -0,0 +1,28 @@ +{ + "variants": { + "age=0,half=lower": { + "model": "antarchy:block/corn_crop_stage_0" + }, + "age=0,half=upper": { + "model": "antarchy:block/corn_crop_stage_0" + }, + "age=1,half=lower": { + "model": "antarchy:block/corn_crop_stage_1" + }, + "age=1,half=upper": { + "model": "antarchy:block/corn_crop_stage_1" + }, + "age=2,half=lower": { + "model": "antarchy:block/corn_crop_stage_2_bottom" + }, + "age=2,half=upper": { + "model": "antarchy:block/corn_crop_stage_2_top" + }, + "age=3,half=lower": { + "model": "antarchy:block/corn_crop_stage_3_bottom" + }, + "age=3,half=upper": { + "model": "antarchy:block/corn_crop_stage_3_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cornea_stalk.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cornea_stalk.json new file mode 100644 index 00000000..3da4f117 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cornea_stalk.json @@ -0,0 +1,32 @@ +{ + "variants": { + "age=0,hanging=false": { + "model": "antarchy:block/cornea_stalk_stage0" + }, + "age=0,hanging=true": { + "model": "antarchy:block/cornea_stalk_stage0", + "x": 180 + }, + "age=1,hanging=false": { + "model": "antarchy:block/cornea_stalk_stage1" + }, + "age=1,hanging=true": { + "model": "antarchy:block/cornea_stalk_stage1", + "x": 180 + }, + "age=2,hanging=false": { + "model": "antarchy:block/cornea_stalk_stage2" + }, + "age=2,hanging=true": { + "model": "antarchy:block/cornea_stalk_stage2", + "x": 180 + }, + "age=3,hanging=false": { + "model": "antarchy:block/cornea_stalk_stage2" + }, + "age=3,hanging=true": { + "model": "antarchy:block/cornea_stalk_stage2", + "x": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cracked_shellstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cracked_shellstone_bricks.json new file mode 100644 index 00000000..2b95dbb7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cracked_shellstone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/cracked_shellstone_bricks" + } + } +} 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 new file mode 100644 index 00000000..8611d9f0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/creeping_horror_egg.json @@ -0,0 +1,76 @@ +{ + "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/creepvine.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/creepvine.json new file mode 100644 index 00000000..630f81c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/creepvine.json @@ -0,0 +1,120 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/creepvine" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine" + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 180 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 270 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "x": 270 + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "x": 270 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/critter_cage_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/critter_cage_block.json new file mode 100644 index 00000000..d21b2d8b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/critter_cage_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/critter_cage_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_dream_sandstone.json new file mode 100644 index 00000000..1c2dcbfb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_dream_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/cut_dream_sandstone" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_dream_sandstone_slab.json new file mode 100644 index 00000000..c8ed26bd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_dream_sandstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/cut_dream_sandstone" + }, + "type=bottom": { + "model": "antarchy:block/cut_dream_sandstone_slab" + }, + "type=top": { + "model": "antarchy:block/cut_dream_sandstone_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium.json new file mode 100644 index 00000000..26893709 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "antarchy:block/cut_titanium", "y": 180 }, + "facing=east": { "model": "antarchy:block/cut_titanium", "y": 270 }, + "facing=south": { "model": "antarchy:block/cut_titanium" }, + "facing=west": { "model": "antarchy:block/cut_titanium", "y": 90 } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_slab.json new file mode 100644 index 00000000..c26085f0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/cut_titanium" + }, + "type=bottom": { + "model": "antarchy:block/cut_titanium_slab" + }, + "type=top": { + "model": "antarchy:block/cut_titanium_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_stairs.json new file mode 100644 index 00000000..e92e9c60 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/cut_titanium_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/cut_titanium_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/cut_titanium_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/cut_titanium_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/cut_titanium_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/cut_titanium_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/cut_titanium_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/cut_titanium_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/cut_titanium_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/cut_titanium_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/cut_titanium_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/cut_titanium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/cut_titanium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/cut_titanium_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} 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 new file mode 100644 index 00000000..182e05d8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_wall.json @@ -0,0 +1,40 @@ +{ + "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.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium.json new file mode 100644 index 00000000..6fdd07c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "antarchy:block/cut_uranium", "y": 180 }, + "facing=east": { "model": "antarchy:block/cut_uranium", "y": 270 }, + "facing=south": { "model": "antarchy:block/cut_uranium" }, + "facing=west": { "model": "antarchy:block/cut_uranium", "y": 90 } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_slab.json new file mode 100644 index 00000000..f7be845c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/cut_uranium" + }, + "type=bottom": { + "model": "antarchy:block/cut_uranium_slab" + }, + "type=top": { + "model": "antarchy:block/cut_uranium_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_stairs.json new file mode 100644 index 00000000..0884c46b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/cut_uranium_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/cut_uranium_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/cut_uranium_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/cut_uranium_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/cut_uranium_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/cut_uranium_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/cut_uranium_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/cut_uranium_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/cut_uranium_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/cut_uranium_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/cut_uranium_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/cut_uranium_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/cut_uranium_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/cut_uranium_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} 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 new file mode 100644 index 00000000..c1083213 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_wall.json @@ -0,0 +1,40 @@ +{ + "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/dead_star_coral.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dead_star_coral.json new file mode 100644 index 00000000..40ff406b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dead_star_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/dead_star_coral" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dead_star_coral_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dead_star_coral_block.json new file mode 100644 index 00000000..4402b831 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dead_star_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/dead_star_coral_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dead_star_coral_fan.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dead_star_coral_fan.json new file mode 100644 index 00000000..98ca44f2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dead_star_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/dead_star_coral_fan" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dead_star_coral_wall_fan.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dead_star_coral_wall_fan.json new file mode 100644 index 00000000..29b8f072 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dead_star_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "antarchy:block/dead_star_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "antarchy:block/dead_star_coral_wall_fan" + }, + "facing=south": { + "model": "antarchy:block/dead_star_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "antarchy:block/dead_star_coral_wall_fan", + "y": 270 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/deepslate_titanium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/deepslate_titanium_ore.json new file mode 100644 index 00000000..ef0e658f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/deepslate_titanium_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/deepslate_titanium_ore" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/deepslate_uranium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/deepslate_uranium_ore.json new file mode 100644 index 00000000..852292b9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/deepslate_uranium_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/deepslate_uranium_ore" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_campfire.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_campfire.json new file mode 100644 index 00000000..ad17731b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_campfire.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,lit=false": { + "model": "minecraft:block/campfire_off", + "y": 270 + }, + "facing=east,lit=true": { + "model": "antarchy:block/dream_campfire", + "y": 270 + }, + "facing=north,lit=false": { + "model": "minecraft:block/campfire_off", + "y": 180 + }, + "facing=north,lit=true": { + "model": "antarchy:block/dream_campfire", + "y": 180 + }, + "facing=south,lit=false": { + "model": "minecraft:block/campfire_off" + }, + "facing=south,lit=true": { + "model": "antarchy:block/dream_campfire" + }, + "facing=west,lit=false": { + "model": "minecraft:block/campfire_off", + "y": 90 + }, + "facing=west,lit=true": { + "model": "antarchy:block/dream_campfire", + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_ceiling_torch.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_ceiling_torch.json new file mode 100644 index 00000000..09fca465 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_ceiling_torch.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/dream_torch", + "x": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_fire.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_fire.json new file mode 100644 index 00000000..7caa23c6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_fire.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": [ + { + "model": "antarchy:block/dream_fire_floor0" + }, + { + "model": "antarchy:block/dream_fire_floor1" + } + ] + }, + { + "apply": [ + { + "model": "antarchy:block/dream_fire_side0" + }, + { + "model": "antarchy:block/dream_fire_side1" + }, + { + "model": "antarchy:block/dream_fire_side_alt0" + }, + { + "model": "antarchy:block/dream_fire_side_alt1" + } + ] + }, + { + "apply": [ + { + "model": "antarchy:block/dream_fire_side0", + "y": 90 + }, + { + "model": "antarchy:block/dream_fire_side1", + "y": 90 + }, + { + "model": "antarchy:block/dream_fire_side_alt0", + "y": 90 + }, + { + "model": "antarchy:block/dream_fire_side_alt1", + "y": 90 + } + ] + }, + { + "apply": [ + { + "model": "antarchy:block/dream_fire_side0", + "y": 180 + }, + { + "model": "antarchy:block/dream_fire_side1", + "y": 180 + }, + { + "model": "antarchy:block/dream_fire_side_alt0", + "y": 180 + }, + { + "model": "antarchy:block/dream_fire_side_alt1", + "y": 180 + } + ] + }, + { + "apply": [ + { + "model": "antarchy:block/dream_fire_side0", + "y": 270 + }, + { + "model": "antarchy:block/dream_fire_side1", + "y": 270 + }, + { + "model": "antarchy:block/dream_fire_side_alt0", + "y": 270 + }, + { + "model": "antarchy:block/dream_fire_side_alt1", + "y": 270 + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_fire_ceiling.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_fire_ceiling.json new file mode 100644 index 00000000..7d446ad2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_fire_ceiling.json @@ -0,0 +1,108 @@ +{ + "multipart": [ + { + "apply": [ + { + "model": "antarchy:block/dream_fire_floor0", + "x": 180 + }, + { + "model": "antarchy:block/dream_fire_floor1", + "x": 180 + } + ] + }, + { + "apply": [ + { + "model": "antarchy:block/dream_fire_side0", + "x": 180 + }, + { + "model": "antarchy:block/dream_fire_side1", + "x": 180 + }, + { + "model": "antarchy:block/dream_fire_side_alt0", + "x": 180 + }, + { + "model": "antarchy:block/dream_fire_side_alt1", + "x": 180 + } + ] + }, + { + "apply": [ + { + "model": "antarchy:block/dream_fire_side0", + "x": 180, + "y": 90 + }, + { + "model": "antarchy:block/dream_fire_side1", + "x": 180, + "y": 90 + }, + { + "model": "antarchy:block/dream_fire_side_alt0", + "x": 180, + "y": 90 + }, + { + "model": "antarchy:block/dream_fire_side_alt1", + "x": 180, + "y": 90 + } + ] + }, + { + "apply": [ + { + "model": "antarchy:block/dream_fire_side0", + "x": 180, + "y": 180 + }, + { + "model": "antarchy:block/dream_fire_side1", + "x": 180, + "y": 180 + }, + { + "model": "antarchy:block/dream_fire_side_alt0", + "x": 180, + "y": 180 + }, + { + "model": "antarchy:block/dream_fire_side_alt1", + "x": 180, + "y": 180 + } + ] + }, + { + "apply": [ + { + "model": "antarchy:block/dream_fire_side0", + "x": 180, + "y": 270 + }, + { + "model": "antarchy:block/dream_fire_side1", + "x": 180, + "y": 270 + }, + { + "model": "antarchy:block/dream_fire_side_alt0", + "x": 180, + "y": 270 + }, + { + "model": "antarchy:block/dream_fire_side_alt1", + "x": 180, + "y": 270 + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_lantern.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_lantern.json new file mode 100644 index 00000000..6312e6f1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_lantern.json @@ -0,0 +1,10 @@ +{ + "variants": { + "hanging=false": { + "model": "antarchy:block/dream_lantern" + }, + "hanging=true": { + "model": "antarchy:block/dream_lantern_hanging" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sand.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sand.json new file mode 100644 index 00000000..cb5d7e39 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sand.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/dream_sand" + } + } +} 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 new file mode 100644 index 00000000..84332ed9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/dream_sandstone" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone_slab.json new file mode 100644 index 00000000..e5a0ba81 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/dream_sandstone" + }, + "type=bottom": { + "model": "antarchy:block/dream_sandstone_slab" + }, + "type=top": { + "model": "antarchy:block/dream_sandstone_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone_stairs.json new file mode 100644 index 00000000..81b7c0b1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/dream_sandstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/dream_sandstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/dream_sandstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/dream_sandstone_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/dream_sandstone_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/dream_sandstone_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/dream_sandstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/dream_sandstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/dream_sandstone_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/dream_sandstone_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/dream_sandstone_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/dream_sandstone_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone_wall.json new file mode 100644 index 00000000..750f5f4e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone_wall.json @@ -0,0 +1,40 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/dream_sandstone_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/dream_sandstone_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/dream_sandstone_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/dream_sandstone_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/dream_sandstone_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/dream_sandstone_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/dream_sandstone_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/dream_sandstone_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/dream_sandstone_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_torch.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_torch.json new file mode 100644 index 00000000..24d5d039 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_torch.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/dream_torch" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_wall_torch.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_wall_torch.json new file mode 100644 index 00000000..41005310 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/dream_wall_torch.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "antarchy:block/dream_wall_torch" + }, + "facing=north": { + "model": "antarchy:block/dream_wall_torch", + "y": 270 + }, + "facing=south": { + "model": "antarchy:block/dream_wall_torch", + "y": 90 + }, + "facing=west": { + "model": "antarchy:block/dream_wall_torch", + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/duct_tape.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/duct_tape.json new file mode 100644 index 00000000..36188ad4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/duct_tape.json @@ -0,0 +1,156 @@ +{ + "variants": { + "face=floor,facing=north,uses=1": { + "model": "antarchy:block/duct_tape_use1" + }, + "face=floor,facing=east,uses=1": { + "model": "antarchy:block/duct_tape_use1", + "y": 90 + }, + "face=floor,facing=south,uses=1": { + "model": "antarchy:block/duct_tape_use1", + "y": 180 + }, + "face=floor,facing=west,uses=1": { + "model": "antarchy:block/duct_tape_use1", + "y": 270 + }, + "face=wall,facing=north,uses=1": { + "model": "antarchy:block/duct_tape_use1", + "x": 90 + }, + "face=wall,facing=east,uses=1": { + "model": "antarchy:block/duct_tape_use1", + "x": 90, + "y": 90 + }, + "face=wall,facing=south,uses=1": { + "model": "antarchy:block/duct_tape_use1", + "x": 90, + "y": 180 + }, + "face=wall,facing=west,uses=1": { + "model": "antarchy:block/duct_tape_use1", + "x": 90, + "y": 270 + }, + "face=floor,facing=north,uses=2": { + "model": "antarchy:block/duct_tape_use2" + }, + "face=floor,facing=east,uses=2": { + "model": "antarchy:block/duct_tape_use2", + "y": 90 + }, + "face=floor,facing=south,uses=2": { + "model": "antarchy:block/duct_tape_use2", + "y": 180 + }, + "face=floor,facing=west,uses=2": { + "model": "antarchy:block/duct_tape_use2", + "y": 270 + }, + "face=wall,facing=north,uses=2": { + "model": "antarchy:block/duct_tape_use2", + "x": 90 + }, + "face=wall,facing=east,uses=2": { + "model": "antarchy:block/duct_tape_use2", + "x": 90, + "y": 90 + }, + "face=wall,facing=south,uses=2": { + "model": "antarchy:block/duct_tape_use2", + "x": 90, + "y": 180 + }, + "face=wall,facing=west,uses=2": { + "model": "antarchy:block/duct_tape_use2", + "x": 90, + "y": 270 + }, + "face=floor,facing=north,uses=3": { + "model": "antarchy:block/duct_tape_use3" + }, + "face=floor,facing=east,uses=3": { + "model": "antarchy:block/duct_tape_use3", + "y": 90 + }, + "face=floor,facing=south,uses=3": { + "model": "antarchy:block/duct_tape_use3", + "y": 180 + }, + "face=floor,facing=west,uses=3": { + "model": "antarchy:block/duct_tape_use3", + "y": 270 + }, + "face=wall,facing=north,uses=3": { + "model": "antarchy:block/duct_tape_use3", + "x": 90 + }, + "face=wall,facing=east,uses=3": { + "model": "antarchy:block/duct_tape_use3", + "x": 90, + "y": 90 + }, + "face=wall,facing=south,uses=3": { + "model": "antarchy:block/duct_tape_use3", + "x": 90, + "y": 180 + }, + "face=wall,facing=west,uses=3": { + "model": "antarchy:block/duct_tape_use3", + "x": 90, + "y": 270 + }, + "face=floor,facing=north,uses=4": { + "model": "antarchy:block/duct_tape_use4" + }, + "face=floor,facing=east,uses=4": { + "model": "antarchy:block/duct_tape_use4", + "y": 90 + }, + "face=floor,facing=south,uses=4": { + "model": "antarchy:block/duct_tape_use4", + "y": 180 + }, + "face=floor,facing=west,uses=4": { + "model": "antarchy:block/duct_tape_use4", + "y": 270 + }, + "face=wall,facing=north,uses=4": { + "model": "antarchy:block/duct_tape_use4", + "x": 90 + }, + "face=wall,facing=east,uses=4": { + "model": "antarchy:block/duct_tape_use4", + "x": 90, + "y": 90 + }, + "face=wall,facing=south,uses=4": { + "model": "antarchy:block/duct_tape_use4", + "x": 90, + "y": 180 + }, + "face=wall,facing=west,uses=4": { + "model": "antarchy:block/duct_tape_use4", + "x": 90, + "y": 270 + }, + "face=ceiling,facing=north,uses=1": { "model": "antarchy:block/duct_tape_use1", "x": 180 }, + "face=ceiling,facing=east,uses=1": { "model": "antarchy:block/duct_tape_use1", "x": 180, "y": 90 }, + "face=ceiling,facing=south,uses=1": { "model": "antarchy:block/duct_tape_use1", "x": 180, "y": 180 }, + "face=ceiling,facing=west,uses=1": { "model": "antarchy:block/duct_tape_use1", "x": 180, "y": 270 }, + "face=ceiling,facing=north,uses=2": { "model": "antarchy:block/duct_tape_use2", "x": 180 }, + "face=ceiling,facing=east,uses=2": { "model": "antarchy:block/duct_tape_use2", "x": 180, "y": 90 }, + "face=ceiling,facing=south,uses=2": { "model": "antarchy:block/duct_tape_use2", "x": 180, "y": 180 }, + "face=ceiling,facing=west,uses=2": { "model": "antarchy:block/duct_tape_use2", "x": 180, "y": 270 }, + "face=ceiling,facing=north,uses=3": { "model": "antarchy:block/duct_tape_use3", "x": 180 }, + "face=ceiling,facing=east,uses=3": { "model": "antarchy:block/duct_tape_use3", "x": 180, "y": 90 }, + "face=ceiling,facing=south,uses=3": { "model": "antarchy:block/duct_tape_use3", "x": 180, "y": 180 }, + "face=ceiling,facing=west,uses=3": { "model": "antarchy:block/duct_tape_use3", "x": 180, "y": 270 }, + "face=ceiling,facing=north,uses=4": { "model": "antarchy:block/duct_tape_use4", "x": 180 }, + "face=ceiling,facing=east,uses=4": { "model": "antarchy:block/duct_tape_use4", "x": 180, "y": 90 }, + "face=ceiling,facing=south,uses=4": { "model": "antarchy:block/duct_tape_use4", "x": 180, "y": 180 }, + "face=ceiling,facing=west,uses=4": { "model": "antarchy:block/duct_tape_use4", "x": 180, "y": 270 } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/duplicator_log.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/duplicator_log.json new file mode 100644 index 00000000..f2617ebb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/duplicator_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/duplicator_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/duplicator_log" + }, + "axis=z": { + "model": "antarchy:block/duplicator_log_horizontal", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/duplicator_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/duplicator_sapling.json new file mode 100644 index 00000000..0ae78412 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/duplicator_sapling.json @@ -0,0 +1,10 @@ +{ + "variants": { + "stage=0": { + "model": "antarchy:block/duplicator_sapling" + }, + "stage=1": { + "model": "antarchy:block/duplicator_sapling" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/elythia_portal.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/elythia_portal.json new file mode 100644 index 00000000..a86cfef0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/elythia_portal.json @@ -0,0 +1,6 @@ +{ + "variants": { + "axis=x": { "model": "antarchy:block/elythia_portal_x" }, + "axis=z": { "model": "antarchy:block/elythia_portal_z" } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/fallen_king_crown.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/fallen_king_crown.json new file mode 100644 index 00000000..e56db80d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/fallen_king_crown.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/fallen_king_crown" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/giant_lily_pad.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/giant_lily_pad.json new file mode 100644 index 00000000..b8d1879c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/giant_lily_pad.json @@ -0,0 +1,394 @@ +{ + "multipart": [ + { + "when": { + "tile_position": "top_left", + "rotation": "0" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_left" + } + }, + { + "when": { + "tile_position": "top_middle", + "rotation": "0" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_middle" + } + }, + { + "when": { + "tile_position": "top_right", + "rotation": "0" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_right" + } + }, + { + "when": { + "tile_position": "middle_left", + "rotation": "0" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/middle_left" + } + }, + { + "when": { + "tile_position": "center", + "rotation": "0" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/center" + } + }, + { + "when": { + "tile_position": "middle_right", + "rotation": "0" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/middle_right" + } + }, + { + "when": { + "tile_position": "bottom_left", + "rotation": "0" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_left" + } + }, + { + "when": { + "tile_position": "bottom_middle", + "rotation": "0" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_middle" + } + }, + { + "when": { + "tile_position": "bottom_right", + "rotation": "0" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_right" + } + }, + { + "when": { + "tile_position": "top_left", + "rotation": "90" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_left", + "y": 90 + } + }, + { + "when": { + "tile_position": "top_middle", + "rotation": "90" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/middle_left", + "y": 90 + } + }, + { + "when": { + "tile_position": "top_right", + "rotation": "90" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_left", + "y": 90 + } + }, + { + "when": { + "tile_position": "middle_left", + "rotation": "90" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_middle", + "y": 90 + } + }, + { + "when": { + "tile_position": "center", + "rotation": "90" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/center", + "y": 90 + } + }, + { + "when": { + "tile_position": "middle_right", + "rotation": "90" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_middle", + "y": 90 + } + }, + { + "when": { + "tile_position": "bottom_left", + "rotation": "90" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_right", + "y": 90 + } + }, + { + "when": { + "tile_position": "bottom_middle", + "rotation": "90" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/middle_right", + "y": 90 + } + }, + { + "when": { + "tile_position": "bottom_right", + "rotation": "90" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_right", + "y": 90 + } + }, + { + "when": { + "tile_position": "top_left", + "rotation": "180" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_right", + "y": 180 + } + }, + { + "when": { + "tile_position": "top_middle", + "rotation": "180" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_middle", + "y": 180 + } + }, + { + "when": { + "tile_position": "top_right", + "rotation": "180" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_left", + "y": 180 + } + }, + { + "when": { + "tile_position": "middle_left", + "rotation": "180" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/middle_right", + "y": 180 + } + }, + { + "when": { + "tile_position": "center", + "rotation": "180" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/center", + "y": 180 + } + }, + { + "when": { + "tile_position": "middle_right", + "rotation": "180" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/middle_left", + "y": 180 + } + }, + { + "when": { + "tile_position": "bottom_left", + "rotation": "180" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_right", + "y": 180 + } + }, + { + "when": { + "tile_position": "bottom_middle", + "rotation": "180" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_middle", + "y": 180 + } + }, + { + "when": { + "tile_position": "bottom_right", + "rotation": "180" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_left", + "y": 180 + } + }, + { + "when": { + "tile_position": "top_left", + "rotation": "270" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_right", + "y": 270 + } + }, + { + "when": { + "tile_position": "top_middle", + "rotation": "270" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/middle_right", + "y": 270 + } + }, + { + "when": { + "tile_position": "top_right", + "rotation": "270" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_right", + "y": 270 + } + }, + { + "when": { + "tile_position": "middle_left", + "rotation": "270" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_middle", + "y": 270 + } + }, + { + "when": { + "tile_position": "center", + "rotation": "270" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/center", + "y": 270 + } + }, + { + "when": { + "tile_position": "middle_right", + "rotation": "270" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_middle", + "y": 270 + } + }, + { + "when": { + "tile_position": "bottom_left", + "rotation": "270" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/top_left", + "y": 270 + } + }, + { + "when": { + "tile_position": "bottom_middle", + "rotation": "270" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/middle_left", + "y": 270 + } + }, + { + "when": { + "tile_position": "bottom_right", + "rotation": "270" + }, + "apply": { + "model": "antarchy:block/giant_lily_pad/bottom_left", + "y": 270 + } + }, + { + "when": { + "has_lotus": "true", + "rotation": "0" + }, + "apply": { + "model": "antarchy:block/lotus_on_giant_lily_pad" + } + }, + { + "when": { + "has_lotus": "true", + "rotation": "90" + }, + "apply": { + "model": "antarchy:block/lotus_on_giant_lily_pad", + "y": 90 + } + }, + { + "when": { + "has_lotus": "true", + "rotation": "180" + }, + "apply": { + "model": "antarchy:block/lotus_on_giant_lily_pad", + "y": 180 + } + }, + { + "when": { + "has_lotus": "true", + "rotation": "270" + }, + "apply": { + "model": "antarchy:block/lotus_on_giant_lily_pad", + "y": 270 + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/glowcap_mushroom.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/glowcap_mushroom.json new file mode 100644 index 00000000..ab000bfa --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/glowcap_mushroom.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/glowcap_mushroom" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/glowcap_mushroom_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/glowcap_mushroom_block.json new file mode 100644 index 00000000..42da4f90 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/glowcap_mushroom_block.json @@ -0,0 +1,115 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/glowcap_mushroom_block" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/glowcap_mushroom_block", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/glowcap_mushroom_block", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/glowcap_mushroom_block", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "antarchy:block/glowcap_mushroom_block", + "uvlock": true, + "x": 270 + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "antarchy:block/glowcap_mushroom_block", + "uvlock": true, + "x": 90 + }, + "when": { + "down": "true" + } + }, + { + "apply": { + "model": "minecraft:block/mushroom_block_inside" + }, + "when": { + "north": "false" + } + }, + { + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 90 + }, + "when": { + "east": "false" + } + }, + { + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 180 + }, + "when": { + "south": "false" + } + }, + { + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "y": 270 + }, + "when": { + "west": "false" + } + }, + { + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "x": 270 + }, + "when": { + "up": "false" + } + }, + { + "apply": { + "model": "minecraft:block/mushroom_block_inside", + "x": 90 + }, + "when": { + "down": "false" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/hanging_creeproots.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/hanging_creeproots.json new file mode 100644 index 00000000..d7ad918f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/hanging_creeproots.json @@ -0,0 +1,10 @@ +{ + "variants": { + "bottom=false": { + "model": "antarchy:block/hanging_creeproots" + }, + "bottom=true": { + "model": "antarchy:block/hanging_creeproots_bottom" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/hanging_peach.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/hanging_peach.json new file mode 100644 index 00000000..48e7f45e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/hanging_peach.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/hanging_peach" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/hushweed.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/hushweed.json new file mode 100644 index 00000000..95e89967 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/hushweed.json @@ -0,0 +1,11 @@ +{ + "variants": { + "vertical_direction=up": { + "model": "antarchy:block/hushweed" + }, + "vertical_direction=down": { + "model": "antarchy:block/hushweed", + "x": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ichor.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ichor.json new file mode 100644 index 00000000..777d6ac3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ichor.json @@ -0,0 +1,20 @@ +{ + "variants": { + "level=0": { "model": "minecraft:block/water" }, + "level=1": { "model": "minecraft:block/water" }, + "level=2": { "model": "minecraft:block/water" }, + "level=3": { "model": "minecraft:block/water" }, + "level=4": { "model": "minecraft:block/water" }, + "level=5": { "model": "minecraft:block/water" }, + "level=6": { "model": "minecraft:block/water" }, + "level=7": { "model": "minecraft:block/water" }, + "level=8": { "model": "minecraft:block/water" }, + "level=9": { "model": "minecraft:block/water" }, + "level=10": { "model": "minecraft:block/water" }, + "level=11": { "model": "minecraft:block/water" }, + "level=12": { "model": "minecraft:block/water" }, + "level=13": { "model": "minecraft:block/water" }, + "level=14": { "model": "minecraft:block/water" }, + "level=15": { "model": "minecraft:block/water" } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/infested_coarse_dirt.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/infested_coarse_dirt.json new file mode 100644 index 00000000..7eead7c5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/infested_coarse_dirt.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/infested_coarse_dirt" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/infested_rooted_dirt.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/infested_rooted_dirt.json new file mode 100644 index 00000000..265c8c5f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/infested_rooted_dirt.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/infested_rooted_dirt" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/jerry_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/jerry_egg.json new file mode 100644 index 00000000..7f040df5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/jerry_egg.json @@ -0,0 +1,11 @@ +{ + "variants": { + "rotated=false": { + "model": "antarchy:block/jerry_egg" + }, + "rotated=true": { + "model": "antarchy:block/jerry_egg", + "y": 90 + } + } +} 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 new file mode 100644 index 00000000..90df0736 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/jumpy_bug_egg.json @@ -0,0 +1,20 @@ +{ + "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/large_blood_crystal_bud.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/large_blood_crystal_bud.json new file mode 100644 index 00000000..197e4c66 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/large_blood_crystal_bud.json @@ -0,0 +1,11 @@ +{ + "variants": { + "facing=down": { "model": "antarchy:block/large_blood_crystal_bud", "x": 180 }, + "facing=east": { "model": "antarchy:block/large_blood_crystal_bud", "x": 90, "y": 90 }, + "facing=north": { "model": "antarchy:block/large_blood_crystal_bud", "x": 90 }, + "facing=south": { "model": "antarchy:block/large_blood_crystal_bud", "x": 90, "y": 180 }, + "facing=up": { "model": "antarchy:block/large_blood_crystal_bud" }, + "facing=west": { "model": "antarchy:block/large_blood_crystal_bud", "x": 90, "y": 270 } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/loam.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/loam.json new file mode 100644 index 00000000..8fee90a9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/loam.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/loam" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lotus.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lotus.json new file mode 100644 index 00000000..91b0e7f0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lotus.json @@ -0,0 +1,6 @@ +{ + "variants": { + "hanging=false": { "model": "antarchy:block/lotus" }, + "hanging=true": { "model": "antarchy:block/lotus", "x": 180 } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lucid_anchor.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lucid_anchor.json new file mode 100644 index 00000000..ce302016 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lucid_anchor.json @@ -0,0 +1,10 @@ +{ + "variants": { + "lit=false": { + "model": "antarchy:block/lucid_anchor" + }, + "lit=true": { + "model": "antarchy:block/lucid_anchor" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lumen.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lumen.json new file mode 100644 index 00000000..777d6ac3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lumen.json @@ -0,0 +1,20 @@ +{ + "variants": { + "level=0": { "model": "minecraft:block/water" }, + "level=1": { "model": "minecraft:block/water" }, + "level=2": { "model": "minecraft:block/water" }, + "level=3": { "model": "minecraft:block/water" }, + "level=4": { "model": "minecraft:block/water" }, + "level=5": { "model": "minecraft:block/water" }, + "level=6": { "model": "minecraft:block/water" }, + "level=7": { "model": "minecraft:block/water" }, + "level=8": { "model": "minecraft:block/water" }, + "level=9": { "model": "minecraft:block/water" }, + "level=10": { "model": "minecraft:block/water" }, + "level=11": { "model": "minecraft:block/water" }, + "level=12": { "model": "minecraft:block/water" }, + "level=13": { "model": "minecraft:block/water" }, + "level=14": { "model": "minecraft:block/water" }, + "level=15": { "model": "minecraft:block/water" } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lumen_froglight.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lumen_froglight.json new file mode 100644 index 00000000..e69294a3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lumen_froglight.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/lumen_froglight" + } + } +} 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 new file mode 100644 index 00000000..dce79841 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/lurking_terror_egg.json @@ -0,0 +1,76 @@ +{ + "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/medium_blood_crystal_bud.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/medium_blood_crystal_bud.json new file mode 100644 index 00000000..98f84ebc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/medium_blood_crystal_bud.json @@ -0,0 +1,11 @@ +{ + "variants": { + "facing=down": { "model": "antarchy:block/medium_blood_crystal_bud", "x": 180 }, + "facing=east": { "model": "antarchy:block/medium_blood_crystal_bud", "x": 90, "y": 90 }, + "facing=north": { "model": "antarchy:block/medium_blood_crystal_bud", "x": 90 }, + "facing=south": { "model": "antarchy:block/medium_blood_crystal_bud", "x": 90, "y": 180 }, + "facing=up": { "model": "antarchy:block/medium_blood_crystal_bud" }, + "facing=west": { "model": "antarchy:block/medium_blood_crystal_bud", "x": 90, "y": 270 } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/molting_vines.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/molting_vines.json new file mode 100644 index 00000000..1d62c6ba --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/molting_vines.json @@ -0,0 +1,52 @@ +{ + "multipart": [ + { + "when": { + "broodfruit": "true" + }, + "apply": { + "model": "antarchy:block/molting_vines_broodfruit" + } + }, + { + "when": { + "broodfruit": "false", + "growth_direction": "up", + "top_cap": "true" + }, + "apply": { + "model": "antarchy:block/molting_vines_top" + } + }, + { + "when": { + "broodfruit": "false", + "growth_direction": "up", + "top_cap": "false" + }, + "apply": { + "model": "antarchy:block/molting_vines" + } + }, + { + "when": { + "broodfruit": "false", + "growth_direction": "down", + "bottom_cap": "true" + }, + "apply": { + "model": "antarchy:block/molting_vines_bottom" + } + }, + { + "when": { + "broodfruit": "false", + "growth_direction": "down", + "bottom_cap": "false" + }, + "apply": { + "model": "antarchy:block/molting_vines" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_ouranwood_log.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_ouranwood_log.json new file mode 100644 index 00000000..88132f1f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_ouranwood_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/mossy_ouranwood_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/mossy_ouranwood_log" + }, + "axis=z": { + "model": "antarchy:block/mossy_ouranwood_log_horizontal", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_ouranwood_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_ouranwood_wood.json new file mode 100644 index 00000000..b61ed794 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_ouranwood_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/mossy_ouranwood_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/mossy_ouranwood_wood" + }, + "axis=z": { + "model": "antarchy:block/mossy_ouranwood_wood", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..32386ef7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/mossy_shellstone_bricks" + }, + "type=bottom": { + "model": "antarchy:block/mossy_shellstone_brick_slab" + }, + "type=top": { + "model": "antarchy:block/mossy_shellstone_brick_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..79c0c8b4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_wall.json new file mode 100644 index 00000000..00e5aa02 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_wall.json @@ -0,0 +1,40 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_bricks.json new file mode 100644 index 00000000..1273d0ac --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/mossy_shellstone_bricks" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mucus.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mucus.json new file mode 100644 index 00000000..44c7f1a0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/mucus.json @@ -0,0 +1,150 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/mucus" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus" + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 90 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 180 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 270 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "x": 270 + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "x": 270 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "x": 90 + }, + "when": { + "down": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "x": 90 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/myrmite.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/myrmite.json new file mode 100644 index 00000000..55bfe4a1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/myrmite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/myrmite" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/myrmite_coal_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/myrmite_coal_ore.json new file mode 100644 index 00000000..8c47bcfb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/myrmite_coal_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/myrmite_coal_ore" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_button.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_button.json new file mode 100644 index 00000000..32baf784 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_button.json @@ -0,0 +1,119 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "antarchy:block/nadir_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "antarchy:block/nadir_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "antarchy:block/nadir_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "antarchy:block/nadir_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "antarchy:block/nadir_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "antarchy:block/nadir_button" + }, + "face=floor,facing=north,powered=true": { + "model": "antarchy:block/nadir_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "antarchy:block/nadir_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "antarchy:block/nadir_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "antarchy:block/nadir_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "antarchy:block/nadir_button", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "antarchy:block/nadir_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "antarchy:block/nadir_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_door.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_door.json new file mode 100644 index 00000000..bff01ba3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_door.json @@ -0,0 +1,125 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_top_right_open", + "y": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_fence.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_fence.json new file mode 100644 index 00000000..e7d3402c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_fence.json @@ -0,0 +1,49 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/nadir_fence_post" + } + }, + { + "apply": { + "model": "antarchy:block/nadir_fence_side", + "uvlock": true + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/nadir_fence_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/nadir_fence_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/nadir_fence_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + } + ] +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_fence_gate.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_fence_gate.json new file mode 100644 index 00000000..0991820c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_fence_gate.json @@ -0,0 +1,81 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "model": "antarchy:block/nadir_fence_gate", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=false,open=true": { + "model": "antarchy:block/nadir_fence_gate_open", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=false": { + "model": "antarchy:block/nadir_fence_gate_wall", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=true": { + "model": "antarchy:block/nadir_fence_gate_wall_open", + "uvlock": true, + "y": 270 + }, + "facing=north,in_wall=false,open=false": { + "model": "antarchy:block/nadir_fence_gate", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=false,open=true": { + "model": "antarchy:block/nadir_fence_gate_open", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=false": { + "model": "antarchy:block/nadir_fence_gate_wall", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=true": { + "model": "antarchy:block/nadir_fence_gate_wall_open", + "uvlock": true, + "y": 180 + }, + "facing=south,in_wall=false,open=false": { + "model": "antarchy:block/nadir_fence_gate", + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "antarchy:block/nadir_fence_gate_open", + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "antarchy:block/nadir_fence_gate_wall", + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "antarchy:block/nadir_fence_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "antarchy:block/nadir_fence_gate", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=false,open=true": { + "model": "antarchy:block/nadir_fence_gate_open", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=false": { + "model": "antarchy:block/nadir_fence_gate_wall", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=true": { + "model": "antarchy:block/nadir_fence_gate_wall_open", + "uvlock": true, + "y": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_hanging_sign.json new file mode 100644 index 00000000..051f9d16 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_hanging_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_log.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_log.json new file mode 100644 index 00000000..3f4fff33 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_log.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/nadir_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/nadir_log" + }, + "axis=z": { + "model": "antarchy:block/nadir_log_horizontal", + "x": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_planks.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_planks.json new file mode 100644 index 00000000..52c5bd3a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_planks.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_planks" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_pressure_plate.json new file mode 100644 index 00000000..b13643f1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_pressure_plate.json @@ -0,0 +1,11 @@ +{ + "variants": { + "powered=false": { + "model": "antarchy:block/nadir_pressure_plate" + }, + "powered=true": { + "model": "antarchy:block/nadir_pressure_plate_down" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_sapling.json new file mode 100644 index 00000000..d1677be1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_sapling" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_sign.json new file mode 100644 index 00000000..2f79af09 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_slab.json new file mode 100644 index 00000000..191ea9ad --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_slab.json @@ -0,0 +1,14 @@ +{ + "variants": { + "type=bottom": { + "model": "antarchy:block/nadir_slab" + }, + "type=double": { + "model": "antarchy:block/nadir_planks" + }, + "type=top": { + "model": "antarchy:block/nadir_slab_top" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_stairs.json new file mode 100644 index 00000000..599b5917 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_stairs.json @@ -0,0 +1,210 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/nadir_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_trapdoor.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_trapdoor.json new file mode 100644 index 00000000..90571b98 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_trapdoor.json @@ -0,0 +1,70 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "antarchy:block/nadir_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "antarchy:block/nadir_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "antarchy:block/nadir_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "antarchy:block/nadir_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "antarchy:block/nadir_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "antarchy:block/nadir_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "antarchy:block/nadir_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "antarchy:block/nadir_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "antarchy:block/nadir_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "x": 180, + "y": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_veil.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_veil.json new file mode 100644 index 00000000..9993d138 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_veil.json @@ -0,0 +1,6 @@ +{ + "variants": { + "": { "model": "antarchy:block/nadir_veil" } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_hanging_sign.json new file mode 100644 index 00000000..517fe6cb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_wall_hanging_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_sign.json new file mode 100644 index 00000000..41853a2f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_wall_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_wood.json new file mode 100644 index 00000000..5cf5b6c0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nadir_wood.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/nadir_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/nadir_wood" + }, + "axis=z": { + "model": "antarchy:block/nadir_wood", + "x": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite.json new file mode 100644 index 00000000..31bb0d89 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nyxite" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_brick_slab.json new file mode 100644 index 00000000..dc9a81af --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/nyxite_bricks" + }, + "type=bottom": { + "model": "antarchy:block/nyxite_brick_slab" + }, + "type=top": { + "model": "antarchy:block/nyxite_brick_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_brick_stairs.json new file mode 100644 index 00000000..286654a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/nyxite_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/nyxite_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/nyxite_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/nyxite_brick_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/nyxite_brick_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/nyxite_brick_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/nyxite_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/nyxite_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/nyxite_brick_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/nyxite_brick_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/nyxite_brick_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/nyxite_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/nyxite_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/nyxite_brick_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_brick_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_brick_wall.json new file mode 100644 index 00000000..4283dd69 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_brick_wall.json @@ -0,0 +1,40 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/nyxite_brick_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/nyxite_brick_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/nyxite_brick_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/nyxite_brick_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/nyxite_brick_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/nyxite_brick_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/nyxite_brick_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/nyxite_brick_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/nyxite_brick_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_bricks.json new file mode 100644 index 00000000..56a9727c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nyxite_bricks" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_pillar.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_pillar.json new file mode 100644 index 00000000..05add2b0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_pillar.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/nyxite_pillar", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/nyxite_pillar" + }, + "axis=z": { + "model": "antarchy:block/nyxite_pillar", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_slab.json new file mode 100644 index 00000000..e25f9f13 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/nyxite" + }, + "type=bottom": { + "model": "antarchy:block/nyxite_slab" + }, + "type=top": { + "model": "antarchy:block/nyxite_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_spike.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_spike.json new file mode 100644 index 00000000..02d39ff8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_spike.json @@ -0,0 +1,34 @@ +{ + "variants": { + "thickness=base,vertical_direction=down": { + "model": "antarchy:block/nyxite_spike_down_base" + }, + "thickness=base,vertical_direction=up": { + "model": "antarchy:block/nyxite_spike_up_base" + }, + "thickness=frustum,vertical_direction=down": { + "model": "antarchy:block/nyxite_spike_down_frustum" + }, + "thickness=frustum,vertical_direction=up": { + "model": "antarchy:block/nyxite_spike_up_frustum" + }, + "thickness=middle,vertical_direction=down": { + "model": "antarchy:block/nyxite_spike_down_middle" + }, + "thickness=middle,vertical_direction=up": { + "model": "antarchy:block/nyxite_spike_up_middle" + }, + "thickness=tip,vertical_direction=down": { + "model": "antarchy:block/nyxite_spike_down_tip" + }, + "thickness=tip,vertical_direction=up": { + "model": "antarchy:block/nyxite_spike_up_tip" + }, + "thickness=tip_merge,vertical_direction=down": { + "model": "antarchy:block/nyxite_spike_down_tip_merge" + }, + "thickness=tip_merge,vertical_direction=up": { + "model": "antarchy:block/nyxite_spike_up_tip_merge" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_stairs.json new file mode 100644 index 00000000..d49f23d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/nyxite_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/nyxite_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/nyxite_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/nyxite_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/nyxite_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/nyxite_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/nyxite_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/nyxite_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/nyxite_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/nyxite_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/nyxite_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/nyxite_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_wall.json new file mode 100644 index 00000000..12682b5c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/nyxite_wall.json @@ -0,0 +1,40 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/nyxite_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/nyxite_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/nyxite_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/nyxite_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/nyxite_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/nyxite_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/nyxite_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/nyxite_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/nyxite_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/orange_milkweed.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/orange_milkweed.json new file mode 100644 index 00000000..95ae5fe0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/orange_milkweed.json @@ -0,0 +1,10 @@ +{ + "variants": { + "half=lower": { + "model": "antarchy:block/orange_milkweed_bottom" + }, + "half=upper": { + "model": "antarchy:block/orange_milkweed_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_acorn.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_acorn.json new file mode 100644 index 00000000..d3b2cb3d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_acorn.json @@ -0,0 +1,22 @@ +{ + "variants": { + "hanging=false,stage=0": { + "model": "antarchy:block/ouranwood_sapling_0" + }, + "hanging=true,stage=0": { + "model": "antarchy:block/ouranwood_acorn_hanging" + }, + "hanging=false,stage=1": { + "model": "antarchy:block/ouranwood_sapling_1" + }, + "hanging=true,stage=1": { + "model": "antarchy:block/ouranwood_acorn_hanging" + }, + "hanging=false,stage=2": { + "model": "antarchy:block/ouranwood_sapling_2" + }, + "hanging=true,stage=2": { + "model": "antarchy:block/ouranwood_acorn_hanging" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_button.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_button.json new file mode 100644 index 00000000..9b45dcb2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "antarchy:block/ouranwood_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "antarchy:block/ouranwood_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "antarchy:block/ouranwood_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "antarchy:block/ouranwood_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "antarchy:block/ouranwood_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "antarchy:block/ouranwood_button" + }, + "face=floor,facing=north,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "antarchy:block/ouranwood_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "antarchy:block/ouranwood_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "antarchy:block/ouranwood_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "antarchy:block/ouranwood_button", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "antarchy:block/ouranwood_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "antarchy:block/ouranwood_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "antarchy:block/ouranwood_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_door.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_door.json new file mode 100644 index 00000000..7a140e6b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "antarchy:block/ouranwood_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "antarchy:block/ouranwood_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "antarchy:block/ouranwood_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "antarchy:block/ouranwood_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "antarchy:block/ouranwood_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "antarchy:block/ouranwood_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "antarchy:block/ouranwood_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "antarchy:block/ouranwood_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "antarchy:block/ouranwood_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "antarchy:block/ouranwood_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "antarchy:block/ouranwood_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "antarchy:block/ouranwood_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "antarchy:block/ouranwood_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "antarchy:block/ouranwood_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "antarchy:block/ouranwood_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "antarchy:block/ouranwood_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "antarchy:block/ouranwood_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "antarchy:block/ouranwood_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "antarchy:block/ouranwood_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "antarchy:block/ouranwood_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "antarchy:block/ouranwood_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "antarchy:block/ouranwood_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "antarchy:block/ouranwood_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "antarchy:block/ouranwood_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "antarchy:block/ouranwood_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "antarchy:block/ouranwood_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "antarchy:block/ouranwood_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "antarchy:block/ouranwood_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "antarchy:block/ouranwood_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "antarchy:block/ouranwood_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "antarchy:block/ouranwood_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "antarchy:block/ouranwood_door_top_right_open", + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_fence.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_fence.json new file mode 100644 index 00000000..0799a6d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/ouranwood_fence_post" + } + }, + { + "apply": { + "model": "antarchy:block/ouranwood_fence_side", + "uvlock": true + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/ouranwood_fence_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/ouranwood_fence_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/ouranwood_fence_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_fence_gate.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_fence_gate.json new file mode 100644 index 00000000..73a6e4cb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "model": "antarchy:block/ouranwood_fence_gate", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=false,open=true": { + "model": "antarchy:block/ouranwood_fence_gate_open", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=false": { + "model": "antarchy:block/ouranwood_fence_gate_wall", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=true": { + "model": "antarchy:block/ouranwood_fence_gate_wall_open", + "uvlock": true, + "y": 270 + }, + "facing=north,in_wall=false,open=false": { + "model": "antarchy:block/ouranwood_fence_gate", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=false,open=true": { + "model": "antarchy:block/ouranwood_fence_gate_open", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=false": { + "model": "antarchy:block/ouranwood_fence_gate_wall", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=true": { + "model": "antarchy:block/ouranwood_fence_gate_wall_open", + "uvlock": true, + "y": 180 + }, + "facing=south,in_wall=false,open=false": { + "model": "antarchy:block/ouranwood_fence_gate", + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "antarchy:block/ouranwood_fence_gate_open", + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "antarchy:block/ouranwood_fence_gate_wall", + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "antarchy:block/ouranwood_fence_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "antarchy:block/ouranwood_fence_gate", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=false,open=true": { + "model": "antarchy:block/ouranwood_fence_gate_open", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=false": { + "model": "antarchy:block/ouranwood_fence_gate_wall", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=true": { + "model": "antarchy:block/ouranwood_fence_gate_wall_open", + "uvlock": true, + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_hanging_sign.json new file mode 100644 index 00000000..0c814782 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/ouranwood_hanging_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_leaves.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_leaves.json new file mode 100644 index 00000000..9935d479 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_leaves.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "antarchy:block/ouranwood_leaves" } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_log.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_log.json new file mode 100644 index 00000000..1b6ba3ac --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/ouranwood_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/ouranwood_log" + }, + "axis=z": { + "model": "antarchy:block/ouranwood_log_horizontal", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_planks.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_planks.json new file mode 100644 index 00000000..c895d554 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_planks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/ouranwood_planks" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_pressure_plate.json new file mode 100644 index 00000000..09b030c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "antarchy:block/ouranwood_pressure_plate" + }, + "powered=true": { + "model": "antarchy:block/ouranwood_pressure_plate_down" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_sign.json new file mode 100644 index 00000000..3b9e2810 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/ouranwood_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_slab.json new file mode 100644 index 00000000..89a777a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "antarchy:block/ouranwood_slab" + }, + "type=double": { + "model": "antarchy:block/ouranwood_planks" + }, + "type=top": { + "model": "antarchy:block/ouranwood_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_squirrel_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_squirrel_nest.json new file mode 100644 index 00000000..c20fb35d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_squirrel_nest.json @@ -0,0 +1,13 @@ +{ + "variants": { + "squirrels=1": { + "model": "antarchy:block/ouranwood_squirrel_nest" + }, + "squirrels=2": { + "model": "antarchy:block/ouranwood_squirrel_nest" + }, + "squirrels=3": { + "model": "antarchy:block/ouranwood_squirrel_nest" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_stairs.json new file mode 100644 index 00000000..086b7806 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/ouranwood_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/ouranwood_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/ouranwood_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/ouranwood_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/ouranwood_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/ouranwood_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/ouranwood_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/ouranwood_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/ouranwood_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/ouranwood_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/ouranwood_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/ouranwood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/ouranwood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/ouranwood_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_trapdoor.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_trapdoor.json new file mode 100644 index 00000000..a4ce7c6e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_trapdoor.json @@ -0,0 +1,69 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "antarchy:block/ouranwood_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "antarchy:block/ouranwood_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "antarchy:block/ouranwood_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "antarchy:block/ouranwood_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "antarchy:block/ouranwood_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "antarchy:block/ouranwood_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "antarchy:block/ouranwood_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "antarchy:block/ouranwood_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "antarchy:block/ouranwood_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "antarchy:block/ouranwood_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "antarchy:block/ouranwood_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "antarchy:block/ouranwood_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "antarchy:block/ouranwood_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "antarchy:block/ouranwood_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "antarchy:block/ouranwood_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "antarchy:block/ouranwood_trapdoor_open", + "x": 180, + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_hanging_sign.json new file mode 100644 index 00000000..357ac083 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/ouranwood_wall_hanging_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_sign.json new file mode 100644 index 00000000..673297c6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/ouranwood_wall_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_wood.json new file mode 100644 index 00000000..535c9e92 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/ouranwood_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/ouranwood_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/ouranwood_wood" + }, + "axis=z": { + "model": "antarchy:block/ouranwood_wood", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/pale_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/pale_nyxite.json new file mode 100644 index 00000000..373e3cef --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/pale_nyxite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/pale_nyxite" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_button.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_button.json new file mode 100644 index 00000000..cccef879 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_button.json @@ -0,0 +1,119 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "antarchy:block/peach_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "antarchy:block/peach_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "antarchy:block/peach_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "antarchy:block/peach_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "antarchy:block/peach_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "antarchy:block/peach_button" + }, + "face=floor,facing=north,powered=true": { + "model": "antarchy:block/peach_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "antarchy:block/peach_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "antarchy:block/peach_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "antarchy:block/peach_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "antarchy:block/peach_button", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "antarchy:block/peach_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "antarchy:block/peach_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_door.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_door.json new file mode 100644 index 00000000..f2b86d87 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_door.json @@ -0,0 +1,125 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "antarchy:block/peach_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "antarchy:block/peach_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "antarchy:block/peach_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "antarchy:block/peach_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "antarchy:block/peach_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "antarchy:block/peach_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "antarchy:block/peach_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "antarchy:block/peach_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "antarchy:block/peach_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "antarchy:block/peach_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "antarchy:block/peach_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "antarchy:block/peach_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "antarchy:block/peach_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "antarchy:block/peach_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "antarchy:block/peach_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "antarchy:block/peach_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "antarchy:block/peach_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "antarchy:block/peach_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "antarchy:block/peach_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "antarchy:block/peach_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "antarchy:block/peach_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "antarchy:block/peach_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "antarchy:block/peach_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "antarchy:block/peach_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "antarchy:block/peach_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "antarchy:block/peach_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "antarchy:block/peach_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "antarchy:block/peach_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "antarchy:block/peach_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "antarchy:block/peach_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "antarchy:block/peach_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "antarchy:block/peach_door_top_right_open", + "y": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_fence.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_fence.json new file mode 100644 index 00000000..d337b1a2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_fence.json @@ -0,0 +1,49 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/peach_fence_post" + } + }, + { + "apply": { + "model": "antarchy:block/peach_fence_side", + "uvlock": true + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/peach_fence_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/peach_fence_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/peach_fence_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + } + ] +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_fence_gate.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_fence_gate.json new file mode 100644 index 00000000..56353c76 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_fence_gate.json @@ -0,0 +1,81 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "model": "antarchy:block/peach_fence_gate", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=false,open=true": { + "model": "antarchy:block/peach_fence_gate_open", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=false": { + "model": "antarchy:block/peach_fence_gate_wall", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=true": { + "model": "antarchy:block/peach_fence_gate_wall_open", + "uvlock": true, + "y": 270 + }, + "facing=north,in_wall=false,open=false": { + "model": "antarchy:block/peach_fence_gate", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=false,open=true": { + "model": "antarchy:block/peach_fence_gate_open", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=false": { + "model": "antarchy:block/peach_fence_gate_wall", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=true": { + "model": "antarchy:block/peach_fence_gate_wall_open", + "uvlock": true, + "y": 180 + }, + "facing=south,in_wall=false,open=false": { + "model": "antarchy:block/peach_fence_gate", + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "antarchy:block/peach_fence_gate_open", + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "antarchy:block/peach_fence_gate_wall", + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "antarchy:block/peach_fence_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "antarchy:block/peach_fence_gate", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=false,open=true": { + "model": "antarchy:block/peach_fence_gate_open", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=false": { + "model": "antarchy:block/peach_fence_gate_wall", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=true": { + "model": "antarchy:block/peach_fence_gate_wall_open", + "uvlock": true, + "y": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_hanging_sign.json new file mode 100644 index 00000000..2fafe6a7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/peach_hanging_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_leaves.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_leaves.json new file mode 100644 index 00000000..e7645105 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_leaves.json @@ -0,0 +1,6 @@ +{ + "variants": { + "": { "model": "antarchy:block/peach_leaves" } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_log.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_log.json new file mode 100644 index 00000000..36f25917 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_log.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/peach_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/peach_log" + }, + "axis=z": { + "model": "antarchy:block/peach_log_horizontal", + "x": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_planks.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_planks.json new file mode 100644 index 00000000..0477ebee --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_planks.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/peach_planks" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_pressure_plate.json new file mode 100644 index 00000000..47b689b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_pressure_plate.json @@ -0,0 +1,11 @@ +{ + "variants": { + "powered=false": { + "model": "antarchy:block/peach_pressure_plate" + }, + "powered=true": { + "model": "antarchy:block/peach_pressure_plate_down" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_sapling.json new file mode 100644 index 00000000..1d4e00c9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/peach_sapling" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_sign.json new file mode 100644 index 00000000..63fe0512 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/peach_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_slab.json new file mode 100644 index 00000000..f2d21f55 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_slab.json @@ -0,0 +1,14 @@ +{ + "variants": { + "type=bottom": { + "model": "antarchy:block/peach_slab" + }, + "type=double": { + "model": "antarchy:block/peach_planks" + }, + "type=top": { + "model": "antarchy:block/peach_slab_top" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_stairs.json new file mode 100644 index 00000000..eb8c244d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_stairs.json @@ -0,0 +1,210 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/peach_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_trapdoor.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_trapdoor.json new file mode 100644 index 00000000..6ef25c2b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_trapdoor.json @@ -0,0 +1,70 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "antarchy:block/peach_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "antarchy:block/peach_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "antarchy:block/peach_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "antarchy:block/peach_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "antarchy:block/peach_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "antarchy:block/peach_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "antarchy:block/peach_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "antarchy:block/peach_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "antarchy:block/peach_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "x": 180, + "y": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_wall_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_wall_hanging_sign.json new file mode 100644 index 00000000..dd971173 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_wall_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/peach_wall_hanging_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_wall_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_wall_sign.json new file mode 100644 index 00000000..c62670fa --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/peach_wall_sign" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_wood.json new file mode 100644 index 00000000..18f45dfd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/peach_wood.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/peach_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/peach_wood" + }, + "axis=z": { + "model": "antarchy:block/peach_wood", + "x": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/pink_milkweed.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/pink_milkweed.json new file mode 100644 index 00000000..01e494dd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/pink_milkweed.json @@ -0,0 +1,10 @@ +{ + "variants": { + "half=lower": { + "model": "antarchy:block/pink_milkweed_bottom" + }, + "half=upper": { + "model": "antarchy:block/pink_milkweed_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal.json new file mode 100644 index 00000000..ab4bdb87 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/polished_antimetal_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/polished_antimetal" + }, + "axis=z": { + "model": "antarchy:block/polished_antimetal_horizontal", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_slab.json new file mode 100644 index 00000000..579a6bb1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/polished_antimetal" + }, + "type=bottom": { + "model": "antarchy:block/polished_antimetal_slab" + }, + "type=top": { + "model": "antarchy:block/polished_antimetal_slab_top" + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_stairs.json new file mode 100644 index 00000000..a45211e5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone.json new file mode 100644 index 00000000..80ab8748 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/polished_broodstone" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone_slab.json new file mode 100644 index 00000000..4cafd6de --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/polished_broodstone" + }, + "type=bottom": { + "model": "antarchy:block/polished_broodstone_slab" + }, + "type=top": { + "model": "antarchy:block/polished_broodstone_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone_stairs.json new file mode 100644 index 00000000..2ae5576c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_broodstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_broodstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/polished_broodstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/polished_broodstone_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/polished_broodstone_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/polished_broodstone_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_broodstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_broodstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/polished_broodstone_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/polished_broodstone_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/polished_broodstone_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/polished_broodstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/polished_broodstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/polished_broodstone_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone_wall.json new file mode 100644 index 00000000..ba2cbe4e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_broodstone_wall.json @@ -0,0 +1,40 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/polished_broodstone_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/polished_broodstone_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/polished_broodstone_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/polished_broodstone_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/polished_broodstone_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/polished_broodstone_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/polished_broodstone_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/polished_broodstone_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/polished_broodstone_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite.json new file mode 100644 index 00000000..362d70db --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/polished_nyxite" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_button.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_button.json new file mode 100644 index 00000000..7821fbc3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "antarchy:block/polished_nyxite_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "antarchy:block/polished_nyxite_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "antarchy:block/polished_nyxite_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "antarchy:block/polished_nyxite_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "antarchy:block/polished_nyxite_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "antarchy:block/polished_nyxite_button" + }, + "face=floor,facing=north,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "antarchy:block/polished_nyxite_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "antarchy:block/polished_nyxite_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "antarchy:block/polished_nyxite_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "antarchy:block/polished_nyxite_button", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "antarchy:block/polished_nyxite_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "antarchy:block/polished_nyxite_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "antarchy:block/polished_nyxite_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_pressure_plate.json new file mode 100644 index 00000000..c27f4f6e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_pressure_plate.json @@ -0,0 +1,18 @@ +{ + "variants": { + "ceiling=false,powered=false": { + "model": "antarchy:block/polished_nyxite_pressure_plate" + }, + "ceiling=false,powered=true": { + "model": "antarchy:block/polished_nyxite_pressure_plate_down" + }, + "ceiling=true,powered=false": { + "model": "antarchy:block/polished_nyxite_pressure_plate", + "x": 180 + }, + "ceiling=true,powered=true": { + "model": "antarchy:block/polished_nyxite_pressure_plate_down", + "x": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_slab.json new file mode 100644 index 00000000..13dd1e97 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/polished_nyxite" + }, + "type=bottom": { + "model": "antarchy:block/polished_nyxite_slab" + }, + "type=top": { + "model": "antarchy:block/polished_nyxite_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_stairs.json new file mode 100644 index 00000000..6cf3d7a7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_nyxite_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_nyxite_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/polished_nyxite_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/polished_nyxite_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/polished_nyxite_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/polished_nyxite_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_nyxite_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_nyxite_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/polished_nyxite_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/polished_nyxite_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/polished_nyxite_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/polished_nyxite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/polished_nyxite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/polished_nyxite_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_wall.json new file mode 100644 index 00000000..42ac2c88 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_nyxite_wall.json @@ -0,0 +1,40 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/polished_nyxite_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/polished_nyxite_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/polished_nyxite_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/polished_nyxite_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/polished_nyxite_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/polished_nyxite_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/polished_nyxite_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/polished_nyxite_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/polished_nyxite_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone.json new file mode 100644 index 00000000..c48195b4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/polished_shellstone" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone_slab.json new file mode 100644 index 00000000..78b873c3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone_slab.json @@ -0,0 +1,14 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/polished_shellstone" + }, + "type=bottom": { + "model": "antarchy:block/polished_shellstone_slab" + }, + "type=top": { + "model": "antarchy:block/polished_shellstone_slab_top" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone_stairs.json new file mode 100644 index 00000000..4613e293 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone_stairs.json @@ -0,0 +1,210 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_shellstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_shellstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/polished_shellstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/polished_shellstone_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/polished_shellstone_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/polished_shellstone_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_shellstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_shellstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/polished_shellstone_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/polished_shellstone_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/polished_shellstone_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/polished_shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/polished_shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/polished_shellstone_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone_wall.json new file mode 100644 index 00000000..e860f50b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/polished_shellstone_wall.json @@ -0,0 +1,41 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/polished_shellstone_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/polished_shellstone_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/polished_shellstone_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/polished_shellstone_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/polished_shellstone_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/polished_shellstone_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/polished_shellstone_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/polished_shellstone_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/polished_shellstone_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potent_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potent_nyxite.json new file mode 100644 index 00000000..a0cc884a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potent_nyxite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/potent_nyxite" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_glowcap_mushroom.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_glowcap_mushroom.json new file mode 100644 index 00000000..a00e7c3d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_glowcap_mushroom.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/potted_glowcap_mushroom" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_lotus.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_lotus.json new file mode 100644 index 00000000..2bffaef9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_lotus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/potted_lotus" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_nadir_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_nadir_sapling.json new file mode 100644 index 00000000..b736a175 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_nadir_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/potted_nadir_sapling" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_ouranwood_acorn.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_ouranwood_acorn.json new file mode 100644 index 00000000..32da7a2c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_ouranwood_acorn.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/potted_ouranwood_acorn" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_peach_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_peach_sapling.json new file mode 100644 index 00000000..5ec7f1cd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_peach_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/potted_peach_sapling" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_spider_lily.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_spider_lily.json new file mode 100644 index 00000000..e3da62f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/potted_spider_lily.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/potted_spider_lily" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/rainbow_ant_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/rainbow_ant_nest.json new file mode 100644 index 00000000..df73b411 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/rainbow_ant_nest.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=north": [ + {"model": "antarchy:block/rainbow_ant_nest"}, + {"model": "antarchy:block/rainbow_ant_nest", "y": 90}, + {"model": "antarchy:block/rainbow_ant_nest", "y": 180}, + {"model": "antarchy:block/rainbow_ant_nest", "y": 270} + ], + "facing=east": [ + {"model": "antarchy:block/rainbow_ant_nest", "y": 90}, + {"model": "antarchy:block/rainbow_ant_nest", "y": 180}, + {"model": "antarchy:block/rainbow_ant_nest", "y": 270}, + {"model": "antarchy:block/rainbow_ant_nest"} + ], + "facing=south": [ + {"model": "antarchy:block/rainbow_ant_nest", "y": 180}, + {"model": "antarchy:block/rainbow_ant_nest", "y": 270}, + {"model": "antarchy:block/rainbow_ant_nest"}, + {"model": "antarchy:block/rainbow_ant_nest", "y": 90} + ], + "facing=west": [ + {"model": "antarchy:block/rainbow_ant_nest", "y": 270}, + {"model": "antarchy:block/rainbow_ant_nest"}, + {"model": "antarchy:block/rainbow_ant_nest", "y": 90}, + {"model": "antarchy:block/rainbow_ant_nest", "y": 180} + ] + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/raw_titanium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/raw_titanium_block.json new file mode 100644 index 00000000..91be61a3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/raw_titanium_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/raw_titanium_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/raw_uranium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/raw_uranium_block.json new file mode 100644 index 00000000..d7f908af --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/raw_uranium_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/raw_uranium_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/red_ant_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/red_ant_nest.json new file mode 100644 index 00000000..b75a3e29 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/red_ant_nest.json @@ -0,0 +1,28 @@ +{ + "variants": { + "facing=north": [ + {"model": "antarchy:block/red_ant_nest"}, + {"model": "antarchy:block/red_ant_nest", "y": 90}, + {"model": "antarchy:block/red_ant_nest", "y": 180}, + {"model": "antarchy:block/red_ant_nest", "y": 270} + ], + "facing=east": [ + {"model": "antarchy:block/red_ant_nest", "y": 90}, + {"model": "antarchy:block/red_ant_nest", "y": 180}, + {"model": "antarchy:block/red_ant_nest", "y": 270}, + {"model": "antarchy:block/red_ant_nest"} + ], + "facing=south": [ + {"model": "antarchy:block/red_ant_nest", "y": 180}, + {"model": "antarchy:block/red_ant_nest", "y": 270}, + {"model": "antarchy:block/red_ant_nest"}, + {"model": "antarchy:block/red_ant_nest", "y": 90} + ], + "facing=west": [ + {"model": "antarchy:block/red_ant_nest", "y": 270}, + {"model": "antarchy:block/red_ant_nest"}, + {"model": "antarchy:block/red_ant_nest", "y": 90}, + {"model": "antarchy:block/red_ant_nest", "y": 180} + ] + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/roseate_froglight.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/roseate_froglight.json new file mode 100644 index 00000000..8b93d9c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/roseate_froglight.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/roseate_froglight" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/seashell.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/seashell.json new file mode 100644 index 00000000..00bdb60d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/seashell.json @@ -0,0 +1,52 @@ +{ + "variants": { + "facing=north,powered=false,waterlogged=false": { + "model": "antarchy:block/seashell" + }, + "facing=north,powered=false,waterlogged=true": { + "model": "antarchy:block/seashell" + }, + "facing=north,powered=true,waterlogged=false": { + "model": "antarchy:block/seashell" + }, + "facing=north,powered=true,waterlogged=true": { + "model": "antarchy:block/seashell" + }, + "facing=south,powered=false,waterlogged=false": { + "model": "antarchy:block/seashell" + }, + "facing=south,powered=false,waterlogged=true": { + "model": "antarchy:block/seashell" + }, + "facing=south,powered=true,waterlogged=false": { + "model": "antarchy:block/seashell" + }, + "facing=south,powered=true,waterlogged=true": { + "model": "antarchy:block/seashell" + }, + "facing=east,powered=false,waterlogged=false": { + "model": "antarchy:block/seashell" + }, + "facing=east,powered=false,waterlogged=true": { + "model": "antarchy:block/seashell" + }, + "facing=east,powered=true,waterlogged=false": { + "model": "antarchy:block/seashell" + }, + "facing=east,powered=true,waterlogged=true": { + "model": "antarchy:block/seashell" + }, + "facing=west,powered=false,waterlogged=false": { + "model": "antarchy:block/seashell" + }, + "facing=west,powered=false,waterlogged=true": { + "model": "antarchy:block/seashell" + }, + "facing=west,powered=true,waterlogged=false": { + "model": "antarchy:block/seashell" + }, + "facing=west,powered=true,waterlogged=true": { + "model": "antarchy:block/seashell" + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone.json new file mode 100644 index 00000000..e56a1537 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/shellstone" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_brick_slab.json new file mode 100644 index 00000000..423c84c9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_brick_slab.json @@ -0,0 +1,14 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/shellstone_bricks" + }, + "type=bottom": { + "model": "antarchy:block/shellstone_brick_slab" + }, + "type=top": { + "model": "antarchy:block/shellstone_brick_slab_top" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_brick_stairs.json new file mode 100644 index 00000000..3b6dfffe --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_brick_stairs.json @@ -0,0 +1,210 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/shellstone_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/shellstone_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/shellstone_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/shellstone_brick_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/shellstone_brick_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/shellstone_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/shellstone_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/shellstone_brick_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/shellstone_brick_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_brick_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_brick_wall.json new file mode 100644 index 00000000..2c0cb4b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_brick_wall.json @@ -0,0 +1,41 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/shellstone_brick_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/shellstone_brick_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/shellstone_brick_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/shellstone_brick_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/shellstone_brick_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/shellstone_brick_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/shellstone_brick_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/shellstone_brick_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/shellstone_brick_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_bricks.json new file mode 100644 index 00000000..c50fb14c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_bricks.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/shellstone_bricks" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_pillar.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_pillar.json new file mode 100644 index 00000000..41161c8b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_pillar.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/shellstone_pillar", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/shellstone_pillar" + }, + "axis=z": { + "model": "antarchy:block/shellstone_pillar", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_slab.json new file mode 100644 index 00000000..ed034a36 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_slab.json @@ -0,0 +1,14 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/shellstone" + }, + "type=bottom": { + "model": "antarchy:block/shellstone_slab" + }, + "type=top": { + "model": "antarchy:block/shellstone_slab_top" + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_stairs.json new file mode 100644 index 00000000..c05d2d34 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_stairs.json @@ -0,0 +1,210 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/shellstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/shellstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/shellstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/shellstone_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/shellstone_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/shellstone_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/shellstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/shellstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/shellstone_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/shellstone_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/shellstone_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/shellstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/shellstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/shellstone_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_wall.json new file mode 100644 index 00000000..6fd76a87 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/shellstone_wall.json @@ -0,0 +1,41 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/shellstone_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/shellstone_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/shellstone_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/shellstone_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/shellstone_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/shellstone_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/shellstone_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/shellstone_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/shellstone_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/small_blood_crystal_bud.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/small_blood_crystal_bud.json new file mode 100644 index 00000000..b5838c73 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/small_blood_crystal_bud.json @@ -0,0 +1,11 @@ +{ + "variants": { + "facing=down": { "model": "antarchy:block/small_blood_crystal_bud", "x": 180 }, + "facing=east": { "model": "antarchy:block/small_blood_crystal_bud", "x": 90, "y": 90 }, + "facing=north": { "model": "antarchy:block/small_blood_crystal_bud", "x": 90 }, + "facing=south": { "model": "antarchy:block/small_blood_crystal_bud", "x": 90, "y": 180 }, + "facing=up": { "model": "antarchy:block/small_blood_crystal_bud" }, + "facing=west": { "model": "antarchy:block/small_blood_crystal_bud", "x": 90, "y": 270 } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/smooth_dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/smooth_dream_sandstone.json new file mode 100644 index 00000000..81232d0f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/smooth_dream_sandstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/smooth_dream_sandstone" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/smooth_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/smooth_dream_sandstone_slab.json new file mode 100644 index 00000000..09eddf3a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/smooth_dream_sandstone_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/smooth_dream_sandstone" + }, + "type=bottom": { + "model": "antarchy:block/smooth_dream_sandstone_slab" + }, + "type=top": { + "model": "antarchy:block/smooth_dream_sandstone_slab_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/smooth_dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/smooth_dream_sandstone_stairs.json new file mode 100644 index 00000000..00341c13 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/smooth_dream_sandstone_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/smooth_dream_sandstone_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/smooth_dream_sandstone_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/smooth_dream_sandstone_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/smooth_dream_sandstone_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/smooth_dream_sandstone_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/smooth_dream_sandstone_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/smooth_dream_sandstone_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/smooth_dream_sandstone_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/smooth_dream_sandstone_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/spider_lily.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/spider_lily.json new file mode 100644 index 00000000..f94282c4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/spider_lily.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/spider_lily" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/spit_bug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/spit_bug_egg.json new file mode 100644 index 00000000..336a5076 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/spit_bug_egg.json @@ -0,0 +1,25 @@ +{ + "variants": { + "hatch=0,rotated=false": { + "model": "antarchy:block/spit_bug_egg" + }, + "hatch=0,rotated=true": { + "model": "antarchy:block/spit_bug_egg", + "y": 90 + }, + "hatch=1,rotated=false": { + "model": "antarchy:block/spit_bug_egg" + }, + "hatch=1,rotated=true": { + "model": "antarchy:block/spit_bug_egg", + "y": 90 + }, + "hatch=2,rotated=false": { + "model": "antarchy:block/spit_bug_egg" + }, + "hatch=2,rotated=true": { + "model": "antarchy:block/spit_bug_egg", + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral.json new file mode 100644 index 00000000..e6897b90 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/star_coral" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral_block.json new file mode 100644 index 00000000..d14eea97 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/star_coral_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral_fan.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral_fan.json new file mode 100644 index 00000000..98cb2826 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/star_coral_fan" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral_wall_fan.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral_wall_fan.json new file mode 100644 index 00000000..98fab4f6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/star_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "antarchy:block/star_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "antarchy:block/star_coral_wall_fan" + }, + "facing=south": { + "model": "antarchy:block/star_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "antarchy:block/star_coral_wall_fan", + "y": 270 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_ouranwood_log.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_ouranwood_log.json new file mode 100644 index 00000000..bb5c3e78 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_ouranwood_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/stripped_ouranwood_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/stripped_ouranwood_log" + }, + "axis=z": { + "model": "antarchy:block/stripped_ouranwood_log_horizontal", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_ouranwood_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_ouranwood_wood.json new file mode 100644 index 00000000..25b9842d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_ouranwood_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/stripped_ouranwood_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/stripped_ouranwood_wood" + }, + "axis=z": { + "model": "antarchy:block/stripped_ouranwood_wood", + "x": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_peach_log.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_peach_log.json new file mode 100644 index 00000000..e7bf00d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_peach_log.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/stripped_peach_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/stripped_peach_log" + }, + "axis=z": { + "model": "antarchy:block/stripped_peach_log_horizontal", + "x": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_peach_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_peach_wood.json new file mode 100644 index 00000000..7e0dea68 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/stripped_peach_wood.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/stripped_peach_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/stripped_peach_wood" + }, + "axis=z": { + "model": "antarchy:block/stripped_peach_wood", + "x": 90 + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/termite_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/termite_nest.json new file mode 100644 index 00000000..016df757 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/termite_nest.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": {"model": "antarchy:block/termite_nest"}, + "facing=east": {"model": "antarchy:block/termite_nest", "y": 90}, + "facing=south": {"model": "antarchy:block/termite_nest", "y": 180}, + "facing=west": {"model": "antarchy:block/termite_nest", "y": 270} + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/thoraxis_portal.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/thoraxis_portal.json new file mode 100644 index 00000000..5801a031 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/thoraxis_portal.json @@ -0,0 +1,6 @@ +{ + "variants": { + "axis=x": { "model": "antarchy:block/thoraxis_portal_x" }, + "axis=z": { "model": "antarchy:block/thoraxis_portal_z" } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_bars.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_bars.json new file mode 100644 index 00000000..6fe31165 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_bars.json @@ -0,0 +1,100 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/titanium_bars_post_ends" + } + }, + { + "apply": { + "model": "antarchy:block/titanium_bars_post" + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/titanium_bars_cap" + }, + "when": { + "east": "false", + "north": "true", + "south": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/titanium_bars_cap", + "y": 90 + }, + "when": { + "east": "true", + "north": "false", + "south": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/titanium_bars_cap_alt" + }, + "when": { + "east": "false", + "north": "false", + "south": "true", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/titanium_bars_cap_alt", + "y": 90 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "west": "true" + } + }, + { + "apply": { + "model": "antarchy:block/titanium_bars_side" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/titanium_bars_side", + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/titanium_bars_side_alt" + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/titanium_bars_side_alt", + "y": 90 + }, + "when": { + "west": "true" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_block.json new file mode 100644 index 00000000..3236b1f1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/titanium_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_bulb.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_bulb.json new file mode 100644 index 00000000..fb8332de --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_bulb.json @@ -0,0 +1,8 @@ +{ + "multipart": [ + { "when": { "lit": "false", "powered": "false" }, "apply": { "model": "antarchy:block/titanium_bulb" } }, + { "when": { "lit": "true", "powered": "false" }, "apply": { "model": "antarchy:block/titanium_bulb_lit" } }, + { "when": { "lit": "false", "powered": "true" }, "apply": { "model": "antarchy:block/titanium_bulb_powered" } }, + { "when": { "lit": "true", "powered": "true" }, "apply": { "model": "antarchy:block/titanium_bulb_lit_powered" } } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_door.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_door.json new file mode 100644 index 00000000..cca2ad2a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "antarchy:block/titanium_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "antarchy:block/titanium_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "antarchy:block/titanium_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "antarchy:block/titanium_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "antarchy:block/titanium_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "antarchy:block/titanium_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "antarchy:block/titanium_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "antarchy:block/titanium_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "antarchy:block/titanium_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "antarchy:block/titanium_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "antarchy:block/titanium_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "antarchy:block/titanium_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "antarchy:block/titanium_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "antarchy:block/titanium_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "antarchy:block/titanium_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "antarchy:block/titanium_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "antarchy:block/titanium_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "antarchy:block/titanium_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "antarchy:block/titanium_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "antarchy:block/titanium_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "antarchy:block/titanium_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "antarchy:block/titanium_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "antarchy:block/titanium_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "antarchy:block/titanium_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "antarchy:block/titanium_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "antarchy:block/titanium_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "antarchy:block/titanium_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "antarchy:block/titanium_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "antarchy:block/titanium_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "antarchy:block/titanium_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "antarchy:block/titanium_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "antarchy:block/titanium_door_top_right_open", + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_ore.json new file mode 100644 index 00000000..3af55ba1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/titanium_ore" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_trapdoor.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_trapdoor.json new file mode 100644 index 00000000..2bbbda30 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/titanium_trapdoor.json @@ -0,0 +1,69 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "antarchy:block/titanium_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "antarchy:block/titanium_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "antarchy:block/titanium_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "antarchy:block/titanium_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "antarchy:block/titanium_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "antarchy:block/titanium_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "antarchy:block/titanium_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "antarchy:block/titanium_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "antarchy:block/titanium_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "antarchy:block/titanium_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "antarchy:block/titanium_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "antarchy:block/titanium_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "antarchy:block/titanium_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "antarchy:block/titanium_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "antarchy:block/titanium_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "antarchy:block/titanium_trapdoor_open", + "x": 180, + "y": 90 + } + } +} 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 new file mode 100644 index 00000000..b6d986b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/triffid_goo_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/triffid_goo_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/umbral_moss_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/umbral_moss_block.json new file mode 100644 index 00000000..5a814601 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/umbral_moss_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/umbral_moss_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/umbral_moss_carpet.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/umbral_moss_carpet.json new file mode 100644 index 00000000..a5d5a303 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/umbral_moss_carpet.json @@ -0,0 +1,154 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet" + }, + "when": { + "bottom": "true" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_tall" + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_small" + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_tall" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_small", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_small", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_small", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "antarchy:block/umbral_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/upper.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/upper.json new file mode 100644 index 00000000..6181accf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/upper.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "antarchy:block/upper", "x": 180 }, + "facing=north": { "model": "antarchy:block/upper_side" }, + "facing=west": { "model": "antarchy:block/upper_side_west" }, + "facing=south": { "model": "antarchy:block/upper_side_south" }, + "facing=east": { "model": "antarchy:block/upper_side_east" } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_bars.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_bars.json new file mode 100644 index 00000000..342603da --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_bars.json @@ -0,0 +1,100 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/uranium_bars_post_ends" + } + }, + { + "apply": { + "model": "antarchy:block/uranium_bars_post" + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/uranium_bars_cap" + }, + "when": { + "east": "false", + "north": "true", + "south": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/uranium_bars_cap", + "y": 90 + }, + "when": { + "east": "true", + "north": "false", + "south": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/uranium_bars_cap_alt" + }, + "when": { + "east": "false", + "north": "false", + "south": "true", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/uranium_bars_cap_alt", + "y": 90 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "west": "true" + } + }, + { + "apply": { + "model": "antarchy:block/uranium_bars_side" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/uranium_bars_side", + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/uranium_bars_side_alt" + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/uranium_bars_side_alt", + "y": 90 + }, + "when": { + "west": "true" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_block.json new file mode 100644 index 00000000..274e2d6d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/uranium_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_bulb.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_bulb.json new file mode 100644 index 00000000..3c463223 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_bulb.json @@ -0,0 +1,8 @@ +{ + "multipart": [ + { "when": { "lit": "false", "powered": "false" }, "apply": { "model": "antarchy:block/uranium_bulb" } }, + { "when": { "lit": "true", "powered": "false" }, "apply": { "model": "antarchy:block/uranium_bulb_lit" } }, + { "when": { "lit": "false", "powered": "true" }, "apply": { "model": "antarchy:block/uranium_bulb_powered" } }, + { "when": { "lit": "true", "powered": "true" }, "apply": { "model": "antarchy:block/uranium_bulb_lit_powered" } } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_door.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_door.json new file mode 100644 index 00000000..73e36d21 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "antarchy:block/uranium_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "antarchy:block/uranium_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "antarchy:block/uranium_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "antarchy:block/uranium_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "antarchy:block/uranium_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "antarchy:block/uranium_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "antarchy:block/uranium_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "antarchy:block/uranium_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "antarchy:block/uranium_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "antarchy:block/uranium_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "antarchy:block/uranium_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "antarchy:block/uranium_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "antarchy:block/uranium_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "antarchy:block/uranium_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "antarchy:block/uranium_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "antarchy:block/uranium_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "antarchy:block/uranium_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "antarchy:block/uranium_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "antarchy:block/uranium_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "antarchy:block/uranium_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "antarchy:block/uranium_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "antarchy:block/uranium_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "antarchy:block/uranium_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "antarchy:block/uranium_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "antarchy:block/uranium_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "antarchy:block/uranium_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "antarchy:block/uranium_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "antarchy:block/uranium_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "antarchy:block/uranium_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "antarchy:block/uranium_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "antarchy:block/uranium_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "antarchy:block/uranium_door_top_right_open", + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_ore.json new file mode 100644 index 00000000..e1773c5b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/uranium_ore" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_trapdoor.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_trapdoor.json new file mode 100644 index 00000000..0fd8ea30 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/uranium_trapdoor.json @@ -0,0 +1,69 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "antarchy:block/uranium_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "antarchy:block/uranium_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "antarchy:block/uranium_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "antarchy:block/uranium_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "antarchy:block/uranium_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "antarchy:block/uranium_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "antarchy:block/uranium_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "antarchy:block/uranium_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "antarchy:block/uranium_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "antarchy:block/uranium_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "antarchy:block/uranium_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "antarchy:block/uranium_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "antarchy:block/uranium_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "antarchy:block/uranium_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "antarchy:block/uranium_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "antarchy:block/uranium_trapdoor_open", + "x": 180, + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/wasp_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/wasp_nest.json new file mode 100644 index 00000000..b67e68a2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/wasp_nest.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": {"model": "antarchy:block/wasp_nest"}, + "facing=east": {"model": "antarchy:block/wasp_nest", "y": 90}, + "facing=south": {"model": "antarchy:block/wasp_nest", "y": 180}, + "facing=west": {"model": "antarchy:block/wasp_nest", "y": 270} + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/wild_corn.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/wild_corn.json new file mode 100644 index 00000000..aa33127a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/wild_corn.json @@ -0,0 +1,28 @@ +{ + "variants": { + "age=0,half=lower": { + "model": "antarchy:block/corn_crop_stage_3_bottom" + }, + "age=0,half=upper": { + "model": "antarchy:block/corn_crop_stage_3_top" + }, + "age=1,half=lower": { + "model": "antarchy:block/corn_crop_stage_3_bottom" + }, + "age=1,half=upper": { + "model": "antarchy:block/corn_crop_stage_3_top" + }, + "age=2,half=lower": { + "model": "antarchy:block/corn_crop_stage_3_bottom" + }, + "age=2,half=upper": { + "model": "antarchy:block/corn_crop_stage_3_top" + }, + "age=3,half=lower": { + "model": "antarchy:block/corn_crop_stage_3_bottom" + }, + "age=3,half=upper": { + "model": "antarchy:block/corn_crop_stage_3_top" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/alpha_jerry.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/alpha_jerry.geo.json new file mode 100644 index 00000000..3c11cff8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/alpha_jerry.geo.json @@ -0,0 +1,166 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.alphajerry", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-8, 0, -8], "size": [16, 16, 16], "uv": [0, 0]}, + {"origin": [-4, 4, -4], "size": [8, 8, 8], "uv": [92, 110]}, + {"origin": [0, 0, -8], "size": [0, 16, 16], "uv": [0, 96]}, + {"origin": [-8, 0, 0], "size": [16, 16, 0], "uv": [0, 112]}, + {"origin": [-8, 8, -8], "size": [16, 0, 16], "uv": [-16, 112]}, + {"origin": [-8.5, 10, -8.5], "size": [17, 10, 17], "uv": [0, 32]}, + {"origin": [-6.5, 10, 2.5], "size": [13, 6, 8], "pivot": [0, 10, 8.5], "rotation": [-45, 0, 0], "uv": [0, 59]}, + {"origin": [-4.5, 10, -12.5], "size": [9, 7, 4], "uv": [64, 0]}, + {"origin": [-4.5, 10, -12.5], "size": [9, 7, 0], "inflate": 0.25, "uv": [92, 19]}, + {"origin": [-4.5, 10, -12.5], "size": [9, 7, 0], "inflate": 0.5, "uv": [89, 49]}, + {"origin": [-5.5, 13, -10.5], "size": [11, 1, 1], "uv": [64, 11]}, + {"origin": [-5, 12.5, -11], "size": [10, 2, 2], "uv": [45, 62]} + ] + }, + { + "name": "leftFrontThigh", + "parent": "body", + "pivot": [4.5, 11, -8.5], + "cubes": [ + {"origin": [3.5, 10, -9.5], "size": [8, 2, 2], "inflate": 0.025, "uv": [64, 13]} + ] + }, + { + "name": "leftFrontLeg", + "parent": "leftFrontThigh", + "pivot": [11.5, 10, -8.5], + "cubes": [ + {"origin": [9.5, 4, -9], "size": [2, 6, 1], "uv": [68, 26]} + ] + }, + { + "name": "leftFrontFoot", + "parent": "leftFrontLeg", + "pivot": [11.5, 4, -8.5], + "cubes": [ + {"origin": [11.5, 4, -8.5], "size": [6, 4, 0], "uv": [116, 0]} + ] + }, + { + "name": "leftBackThigh", + "parent": "body", + "pivot": [4.5, 10, 1.5], + "cubes": [ + {"origin": [3.5, 9, 0.5], "size": [8, 2, 2], "inflate": 0.025, "uv": [64, 13]} + ] + }, + { + "name": "leftBackLeg", + "parent": "leftBackThigh", + "pivot": [11.5, 9, 1.5], + "cubes": [ + {"origin": [9.5, 3, 1], "size": [2, 6, 1], "uv": [68, 26]} + ] + }, + { + "name": "leftBackFoot", + "parent": "leftBackLeg", + "pivot": [11.5, 3, 1.5], + "cubes": [ + {"origin": [11.5, 3, 1.5], "size": [6, 4, 0], "uv": [116, 0]} + ] + }, + { + "name": "rightFrontThigh", + "parent": "body", + "pivot": [-4.5, 11, -8.5], + "cubes": [ + {"origin": [-11.5, 10, -9.5], "size": [8, 2, 2], "inflate": 0.025, "uv": [64, 13], "mirror": true} + ] + }, + { + "name": "rightFrontLeg", + "parent": "rightFrontThigh", + "pivot": [-11.5, 10, -8.5], + "cubes": [ + {"origin": [-11.5, 4, -9], "size": [2, 6, 1], "uv": [68, 26], "mirror": true} + ] + }, + { + "name": "rightFrontFoot", + "parent": "rightFrontLeg", + "pivot": [-11.5, 4, -8.5], + "cubes": [ + {"origin": [-17.5, 4, -8.5], "size": [6, 4, 0], "uv": [116, 0], "mirror": true} + ] + }, + { + "name": "rightBackThigh", + "parent": "body", + "pivot": [-4.5, 10, 1.5], + "cubes": [ + {"origin": [-11.5, 9, 0.5], "size": [8, 2, 2], "inflate": 0.025, "uv": [64, 13], "mirror": true} + ] + }, + { + "name": "rightBackLeg", + "parent": "rightBackThigh", + "pivot": [-11.5, 9, 1.5], + "cubes": [ + {"origin": [-11.5, 3, 1], "size": [2, 6, 1], "uv": [68, 26], "mirror": true} + ] + }, + { + "name": "rightBackFoot", + "parent": "rightBackLeg", + "pivot": [-11.5, 3, 1.5], + "cubes": [ + {"origin": [-17.5, 3, 1.5], "size": [6, 4, 0], "uv": [116, 0], "mirror": true} + ] + }, + { + "name": "topHeadClawThing", + "parent": "body", + "pivot": [0, 17, -10.5], + "cubes": [ + {"origin": [-1, 17, -12.5], "size": [2, 4, 2], "uv": [72, 20]}, + {"origin": [-0.5, 21, -12.5], "size": [1, 2, 2], "uv": [68, 39]}, + {"origin": [0, 23, -14.5], "size": [0, 3, 3], "uv": [68, 33]} + ] + }, + { + "name": "leftHeadClawThing", + "parent": "body", + "pivot": [4, 10, -10.5], + "cubes": [ + {"origin": [3, 6, -12.5], "size": [2, 4, 2], "uv": [64, 20]}, + {"origin": [3.5, 4, -12.5], "size": [1, 2, 2], "uv": [90, 62]}, + {"origin": [4, 1, -14.5], "size": [0, 3, 3], "uv": [82, 33]} + ] + }, + { + "name": "rightHeadClawThing", + "parent": "body", + "pivot": [-4, 10, -10.5], + "cubes": [ + {"origin": [-5, 6, -12.5], "size": [2, 4, 2], "uv": [64, 20], "mirror": true}, + {"origin": [-4.5, 4, -12.5], "size": [1, 2, 2], "uv": [90, 62], "mirror": true}, + {"origin": [-4, 1, -14.5], "size": [0, 3, 3], "uv": [82, 33], "mirror": true} + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/ant.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/ant.geo.json new file mode 100644 index 00000000..7fd7ede3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/ant.geo.json @@ -0,0 +1,195 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "ant", + "pivot": [0, 1.21429, -1.91667] + }, + { + "name": "r_leg", + "parent": "ant", + "pivot": [-1.5, 1, -1.5], + "cubes": [ + {"origin": [-7.5, 1, -1.5], "size": [6, 0, 1], "uv": [25, 15]} + ] + }, + { + "name": "r_leg2", + "parent": "r_leg", + "pivot": [-7.5, 1, -1.5], + "cubes": [ + {"origin": [-12.5, 1, -1.5], "size": [5, 0, 1], "uv": [17, 35]} + ] + }, + { + "name": "l_leg", + "parent": "ant", + "pivot": [1.5, 1, -1.5], + "cubes": [ + {"origin": [1.5, 1, -1.5], "size": [6, 0, 1], "uv": [25, 17]} + ] + }, + { + "name": "l_leg2", + "parent": "l_leg", + "pivot": [7.5, 1, -1.5], + "cubes": [ + {"origin": [7.5, 1, -1.5], "size": [5, 0, 1], "uv": [31, 35]} + ] + }, + { + "name": "r_leg5", + "parent": "ant", + "pivot": [-1.5, 1, 0.5], + "cubes": [ + {"origin": [-7.5, 1, 0.5], "size": [6, 0, 1], "uv": [25, 19]} + ] + }, + { + "name": "r_leg6", + "parent": "r_leg5", + "pivot": [-7.5, 1, 0.5], + "cubes": [ + {"origin": [-12.5, 1, 0.5], "size": [5, 0, 1], "uv": [1, 36]} + ] + }, + { + "name": "l_leg5", + "parent": "ant", + "pivot": [1.5, 1, 0.5], + "cubes": [ + {"origin": [1.5, 1, 0.5], "size": [6, 0, 1], "uv": [1, 30]} + ] + }, + { + "name": "l_leg6", + "parent": "l_leg5", + "pivot": [7.5, 1, 0.5], + "cubes": [ + {"origin": [7.5, 1, 0.5], "size": [5, 0, 1], "uv": [15, 37]} + ] + }, + { + "name": "r_leg3", + "parent": "ant", + "pivot": [-1.5, 1, -3.5], + "cubes": [ + {"origin": [-7.5, 1, -3.5], "size": [6, 0, 1], "uv": [1, 32]} + ] + }, + { + "name": "r_leg4", + "parent": "r_leg3", + "pivot": [-7.5, 1, -3.5], + "cubes": [ + {"origin": [-12.5, 1, -3.5], "size": [5, 0, 1], "uv": [29, 37]} + ] + }, + { + "name": "l_leg3", + "parent": "ant", + "pivot": [1.5, 1, -3.5], + "cubes": [ + {"origin": [1.5, 1, -3.5], "size": [6, 0, 1], "uv": [1, 34]} + ] + }, + { + "name": "l_leg4", + "parent": "l_leg3", + "pivot": [7.5, 1, -3.5], + "cubes": [ + {"origin": [7.5, 1, -3.5], "size": [5, 0, 1], "uv": [1, 38]} + ] + }, + { + "name": "thorax", + "parent": "ant", + "pivot": [0, 2.5, -4.41667], + "cubes": [ + {"origin": [-2, 1, -4.5], "size": [4, 3, 6], "uv": [1, 20]} + ] + }, + { + "name": "head", + "parent": "thorax", + "pivot": [-0.27778, 1.83333, -4.27778], + "cubes": [ + {"origin": [-1.5, 1.25, -5.25], "size": [3, 2, 1], "uv": [22, 38]}, + {"origin": [-3, 1, -10], "size": [6, 3, 5], "inflate": 0.01, "uv": [1, 12]} + ] + }, + { + "name": "r_eye", + "parent": "head", + "pivot": [-3, 3, -8], + "cubes": [ + {"origin": [-3, 2, -9], "size": [0, 2, 2], "inflate": 0.02, "uv": [16, 29]} + ] + }, + { + "name": "l_eye", + "parent": "head", + "pivot": [3, 3, -8], + "cubes": [ + {"origin": [3, 2, -9], "size": [0, 2, 2], "inflate": 0.02, "uv": [16, 29], "mirror": true} + ] + }, + { + "name": "r_mandibule", + "parent": "head", + "pivot": [-1.33333, 1.5, -9.74167], + "cubes": [ + {"origin": [-2.5, 1, -12.75], "size": [1, 1, 3], "uv": [14, 38]}, + {"origin": [-1.5, 1.5, -11.25], "size": [1, 0, 1], "uv": [24, 13]}, + {"origin": [-1.5, 1.5, -12.75], "size": [1, 0, 1], "uv": [24, 12]} + ] + }, + { + "name": "l_mandibule", + "parent": "head", + "pivot": [1.33333, 1.5, -9.74167], + "cubes": [ + {"origin": [1.5, 1, -12.75], "size": [1, 1, 3], "uv": [14, 38], "mirror": true}, + {"origin": [0.5, 1.5, -11.25], "size": [1, 0, 1], "uv": [24, 13], "mirror": true}, + {"origin": [0.5, 1.5, -12.75], "size": [1, 0, 1], "uv": [24, 12], "mirror": true} + ] + }, + { + "name": "r_antenna", + "parent": "head", + "pivot": [-2.5, 3, -8], + "cubes": [ + {"origin": [-2.5, 3, -14], "size": [0, 6, 7], "inflate": 0.01, "uv": [23, 21]} + ] + }, + { + "name": "l_antenna", + "parent": "head", + "pivot": [2.5, 3, -8], + "cubes": [ + {"origin": [2.5, 3, -14], "size": [0, 6, 7], "inflate": 0.01, "uv": [23, 21], "mirror": true} + ] + }, + { + "name": "abdomen", + "parent": "thorax", + "pivot": [0, 2.5, 1.625], + "cubes": [ + {"origin": [-2.5, 1, 2.5], "size": [5, 4, 8], "uv": [1, 0]}, + {"origin": [-1.5, 1.25, 1.5], "size": [3, 2, 1], "uv": [38, 24]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/apple_cow.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/apple_cow.geo.json new file mode 100644 index 00000000..91af3017 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/apple_cow.geo.json @@ -0,0 +1,153 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, -1] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 19, 1], + "cubes": [ + {"origin": [-6, 29, 14], "size": [12, 18, 10], "pivot": [0, 18, 20], "rotation": [90, 0, 0], "uv": [18, 4]}, + {"origin": [0.75, 4.75, 6.5], "size": [9, 11, 0], "pivot": [4, 15, 6.5], "rotation": [0, 0, -22.5], "uv": [28, 32], "mirror": true}, + {"origin": [1.75, 10.75, -7.5], "size": [9, 11, 0], "pivot": [5, 21, -7.5], "rotation": [0, 0, -22.5], "uv": [28, 32], "mirror": true}, + {"origin": [-9.75, 10.75, -7.5], "size": [9, 11, 0], "pivot": [-4, 21, -7.5], "rotation": [0, 0, 22.5], "uv": [28, 32]}, + {"origin": [-9.75, 4.75, 6.5], "size": [9, 11, 0], "pivot": [-4, 15, 6.5], "rotation": [0, 0, 22.5], "uv": [28, 32]}, + {"origin": [-2, 29, 13], "size": [4, 6, 1], "pivot": [0, 18, 20], "rotation": [90, 0, 0], "uv": [52, 0]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 20, -9], + "cubes": [ + {"origin": [-4, 16, -15], "size": [8, 8, 6], "uv": [0, 0]}, + {"origin": [-4, 16, -15], "size": [8, 8, 6], "inflate": 0.2, "uv": [0, 37]}, + {"origin": [-2, 24, -14.5], "size": [4, 4, 4], "uv": [48, 32]}, + {"origin": [0.5, 27, -12.75], "size": [2, 4, 0], "inflate": 0.05, "pivot": [0, 29, -12.75], "rotation": [0, 0, 22.5], "uv": [48, 43]}, + {"origin": [3, 22.7, -14.75], "size": [2, 4, 0], "inflate": 0.05, "pivot": [2.5, 24.7, -14.75], "rotation": [0, 0, 22.5], "uv": [48, 43]}, + {"origin": [-1.75, 27.5, -12.75], "size": [3, 3, 0], "uv": [48, 40]}, + {"origin": [-5, 22, -14], "size": [1, 3, 1], "uv": [22, 0]}, + {"origin": [4, 22, -14], "size": [1, 3, 1], "uv": [22, 0]} + ] + }, + { + "name": "eyes", + "parent": "head", + "pivot": [0, 20, -14.025], + "cubes": [ + {"origin": [-4, 19, -14.025], "size": [8, 2, 0], "uv": [37, 50]} + ] + }, + { + "name": "eyes_sleep", + "parent": "head", + "pivot": [0, 20, -14.025], + "cubes": [ + {"origin": [-4, 19, -14.025], "size": [8, 2, 0], "uv": [37, 52]} + ] + }, + { + "name": "right_ear", + "parent": "head", + "pivot": [-3.75, 22, -13], + "cubes": [ + {"origin": [-7.75, 20, -13], "size": [4, 4, 0], "uv": [29, 45], "mirror": true} + ] + }, + { + "name": "left_ear", + "parent": "head", + "pivot": [3.75, 22, -13], + "cubes": [ + {"origin": [3.75, 20, -13], "size": [4, 4, 0], "uv": [29, 45]} + ] + }, + { + "name": "snout", + "parent": "head", + "pivot": [0, 17.5, -14.95], + "cubes": [ + {"origin": [-3, 16, -15.95], "size": [6, 3, 1], "uv": [1, 33]} + ] + }, + { + "name": "leaves", + "parent": "body", + "pivot": [0, 16, 0], + "cubes": [ + {"origin": [-6, 29, 12], "size": [12, 18, 12], "inflate": 0.1, "pivot": [0, 18, 20], "rotation": [90, 0, 0], "uv": [7, 59]} + ] + }, + { + "name": "branch", + "parent": "body", + "pivot": [-3.06985, 19.57255, -0.51484], + "cubes": [ + {"origin": [-12.4726, 17.58993, -0.5], "size": [9, 11, 0], "pivot": [-7.9726, 23.08993, -0.5], "rotation": [0, 0, 90], "uv": [28, 32]} + ] + }, + { + "name": "apple", + "parent": "branch", + "pivot": [-12.85227, 26.48342, -0.85312], + "cubes": [ + {"origin": [-14.5, 20, -2.55], "size": [4, 4, 4], "uv": [48, 32]}, + {"origin": [-14.25, 23.5, -0.8], "size": [3, 3, 0], "uv": [48, 40]}, + {"origin": [-12.5308, 22.66849, -0.8], "size": [2, 4, 0], "inflate": 0.05, "pivot": [-11.93209, 23.5, -0.675], "rotation": [20.94102, 0, 30.36119], "uv": [48, 43]} + ] + }, + { + "name": "leg_back_r", + "parent": "root", + "pivot": [-4, 12, 6], + "cubes": [ + {"origin": [-6, 0, 4], "size": [4, 12, 4], "uv": [0, 16]}, + {"origin": [-6, 7, 4], "size": [4, 5, 4], "inflate": 0.2, "uv": [0, 51]} + ] + }, + { + "name": "leg_back_l", + "parent": "root", + "pivot": [4, 12, 6], + "mirror": true, + "cubes": [ + {"origin": [2, 7, 4], "size": [4, 5, 4], "inflate": 0.2, "uv": [0, 51]}, + {"origin": [2, 0, 4], "size": [4, 12, 4], "uv": [0, 16]} + ] + }, + { + "name": "leg_front_r", + "parent": "root", + "pivot": [-4, 12, -7], + "cubes": [ + {"origin": [-6, 7, -8], "size": [4, 5, 4], "inflate": 0.2, "uv": [0, 51]}, + {"origin": [-6, 0, -8], "size": [4, 12, 4], "uv": [0, 16]} + ] + }, + { + "name": "leg_front_l", + "parent": "root", + "pivot": [4, 12, -7], + "mirror": true, + "cubes": [ + {"origin": [2, 7, -8], "size": [4, 5, 4], "inflate": 0.2, "uv": [0, 51]}, + {"origin": [2, 0, -8], "size": [4, 12, 4], "uv": [0, 16]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/baby_apple_cow.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/baby_apple_cow.geo.json new file mode 100644 index 00000000..71f1e7f1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/baby_apple_cow.geo.json @@ -0,0 +1,132 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, -4, 1] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 15, 3], + "cubes": [ + {"origin": [-5, 29, 16], "size": [10, 14, 8], "pivot": [1, 14, 22], "rotation": [90, 0, 0], "uv": [20, 6]}, + {"origin": [1.75, 6.75, -5.5], "size": [9, 11, 0], "pivot": [5, 17, -5.5], "rotation": [0, 0, -22.5], "uv": [28, 32], "mirror": true}, + {"origin": [11.75, 11.2, -5.475], "size": [2, 4, 0], "inflate": 0.05, "pivot": [11.25, 13.2, -5.475], "rotation": [0, 0, 22.5], "uv": [48, 43]}, + {"origin": [-10.75, 6.75, -5.5], "size": [9, 11, 0], "pivot": [-5, 17, -5.5], "rotation": [0, 0, 22.5], "uv": [28, 32]}, + {"origin": [-13.75, 11.2, -5.475], "size": [2, 4, 0], "inflate": 0.05, "pivot": [-11.25, 13.2, -5.475], "rotation": [0, 0, -22.5], "uv": [48, 43], "mirror": true} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 16, -7], + "cubes": [ + {"origin": [-4, 12, -13], "size": [8, 7, 6], "uv": [0, 0]}, + {"origin": [-4, 11, -13], "size": [8, 8, 6], "inflate": 0.2, "uv": [0, 37]}, + {"origin": [-2, 19, -12.5], "size": [4, 4, 4], "uv": [48, 32]}, + {"origin": [0.5, 22, -10.75], "size": [2, 4, 0], "inflate": 0.05, "pivot": [0, 24, -10.75], "rotation": [0, 0, 22.5], "uv": [48, 43]}, + {"origin": [3, 18.7, -12.75], "size": [2, 4, 0], "inflate": 0.05, "pivot": [2.5, 20.7, -12.75], "rotation": [0, 0, 22.5], "uv": [48, 43]}, + {"origin": [-1.75, 22.5, -10.75], "size": [3, 3, 0], "uv": [48, 40]} + ] + }, + { + "name": "eyes", + "parent": "head", + "pivot": [0, 16, -12.025], + "cubes": [ + {"origin": [-4, 15, -12.025], "size": [8, 2, 0], "uv": [37, 50]} + ] + }, + { + "name": "eyes_sleep", + "parent": "head", + "pivot": [0, 16, -12.025], + "cubes": [ + {"origin": [-4, 15, -12.025], "size": [8, 2, 0], "uv": [37, 52]} + ] + }, + { + "name": "right_ear", + "parent": "head", + "pivot": [-3.75, 17, -11], + "cubes": [ + {"origin": [-7.75, 15, -11], "size": [4, 4, 0], "uv": [29, 45], "mirror": true} + ] + }, + { + "name": "left_ear", + "parent": "head", + "pivot": [3.75, 17, -11], + "cubes": [ + {"origin": [3.75, 15, -11], "size": [4, 4, 0], "uv": [29, 45]} + ] + }, + { + "name": "snout", + "parent": "head", + "pivot": [0, 13.5, -12.95], + "cubes": [ + {"origin": [-3, 12, -13.95], "size": [6, 3, 1], "uv": [1, 33]} + ] + }, + { + "name": "leaves", + "parent": "body", + "pivot": [0, 12, 2], + "cubes": [ + {"origin": [-5, 29, 14], "size": [10, 14, 10], "inflate": 0.1, "pivot": [1, 14, 22], "rotation": [90, 0, 0], "uv": [6, 51]} + ] + }, + { + "name": "leg_back_r", + "parent": "root", + "pivot": [-3, 8, 5], + "cubes": [ + {"origin": [-5, 0, 3], "size": [4, 8, 4], "uv": [0, 16]}, + {"origin": [-5, 3, 3], "size": [4, 5, 4], "inflate": 0.2, "uv": [0, 51]} + ] + }, + { + "name": "leg_back_l", + "parent": "root", + "pivot": [3, 8, 5], + "mirror": true, + "cubes": [ + {"origin": [1, 3, 3], "size": [4, 5, 4], "inflate": 0.2, "uv": [0, 51]}, + {"origin": [1, 0, 3], "size": [4, 8, 4], "uv": [0, 16]} + ] + }, + { + "name": "leg_front_r", + "parent": "root", + "pivot": [-3, 8, -5], + "cubes": [ + {"origin": [-5, 3, -6], "size": [4, 5, 4], "inflate": 0.2, "uv": [0, 51]}, + {"origin": [-5, 0, -6], "size": [4, 8, 4], "uv": [0, 16]} + ] + }, + { + "name": "leg_front_l", + "parent": "root", + "pivot": [3, 8, -5], + "mirror": true, + "cubes": [ + {"origin": [1, 3, -6], "size": [4, 5, 4], "inflate": 0.2, "uv": [0, 51]}, + {"origin": [1, 0, -6], "size": [4, 8, 4], "uv": [0, 16]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/basilisk.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/basilisk.geo.json new file mode 100644 index 00000000..9d6e7c01 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/basilisk.geo.json @@ -0,0 +1,184 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.basilisk", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 16, + "visible_bounds_height": 5.5, + "visible_bounds_offset": [0, 2.25, 0] + }, + "bones": [ + { + "name": "Basilisk", + "pivot": [0, 41.02853, -41.86327] + }, + { + "name": "upper_body", + "parent": "Basilisk", + "pivot": [0, 5.22232, -10.59536], + "cubes": [ + {"origin": [0, 13.92239, -30.29457], "size": [0, 6, 20], "uv": [170, 155]}, + {"origin": [-7.5, -0.07761, -30.29457], "size": [15, 14, 20], "inflate": 0.01, "uv": [98, 0]} + ] + }, + { + "name": "neck", + "parent": "upper_body", + "pivot": [0, 6.18002, -29.0602], + "cubes": [ + {"origin": [-7.5, 5.42239, -44.99457], "size": [15, 12, 19], "pivot": [0, 10.02239, -37.49457], "rotation": [-32.5, 0, 0], "uv": [64, 97]} + ] + }, + { + "name": "neck_1", + "parent": "neck", + "pivot": [0, 10.19289, -46.31135], + "cubes": [ + {"origin": [-7.5, 10.22239, -46.39457], "size": [15, 15, 12], "inflate": 0.01, "uv": [166, 34]} + ] + }, + { + "name": "neck_2", + "parent": "neck_1", + "pivot": [0, 25.2664, -46.28362], + "cubes": [ + {"origin": [-7.5, 24.52239, -41.99457], "size": [15, 11, 15], "pivot": [0, 26.42239, -34.79457], "rotation": [57.5, 0, 0], "uv": [60, 128]} + ] + }, + { + "name": "neck_3", + "parent": "neck_2", + "pivot": [0, 31.71975, -33.59063], + "cubes": [ + {"origin": [-7.5, 32.83206, -46.75054], "size": [15, 13, 13], "inflate": 0.02, "pivot": [0, 41.23246, -37.34339], "rotation": [92.5, 0, 0], "uv": [0, 130]} + ] + }, + { + "name": "head", + "parent": "neck_3", + "pivot": [0, 45.02853, -30.86327], + "cubes": [ + {"origin": [-7.5, 36.52383, -48.06757], "size": [15, 12, 15], "pivot": [0, 41.23246, -37.34339], "rotation": [-32.5, 0, 0], "uv": [0, 103]}, + {"origin": [-7.5, 41.52853, -63.61327], "size": [15, 10, 11], "inflate": 0.01, "uv": [169, 134]}, + {"origin": [-6.5, 39.52853, -60.61327], "size": [13, 2, 8], "inflate": 0.01, "uv": [214, 111]}, + {"origin": [-10.25, 51.52853, -49.61327], "size": [5, 4, 21], "inflate": 0.01, "pivot": [-7.75, 55.52853, -37.86327], "rotation": [0, -22.5, 0], "uv": [204, 72]}, + {"origin": [-10.25, 55.52853, -32.61327], "size": [5, 4, 4], "inflate": 0.01, "pivot": [-7.75, 55.52853, -37.86327], "rotation": [0, -22.5, 0], "uv": [204, 97]}, + {"origin": [5.25, 51.52853, -49.61327], "size": [5, 4, 21], "inflate": 0.01, "pivot": [7.75, 55.52853, -37.86327], "rotation": [0, 22.5, 0], "uv": [204, 72], "mirror": true}, + {"origin": [5.25, 55.52853, -32.61327], "size": [5, 4, 4], "inflate": 0.01, "pivot": [7.75, 55.52853, -37.86327], "rotation": [0, 22.5, 0], "uv": [204, 97], "mirror": true}, + {"origin": [-7.6, 47.07853, -49.36327], "size": [0, 2, 1], "inflate": 0.01, "uv": [217, 8]}, + {"origin": [7.6, 47.07853, -49.36327], "size": [0, 2, 1], "inflate": 0.01, "uv": [217, 8], "mirror": true}, + {"origin": [-7.5, 43.52853, -52.61327], "size": [15, 8, 11], "inflate": 0.01, "uv": [168, 0]}, + {"origin": [4.5, 34.92853, -62.61327], "size": [2, 7, 2], "inflate": -0.1, "uv": [76, 56]}, + {"origin": [-6.5, 34.92853, -62.61327], "size": [2, 7, 2], "inflate": -0.1, "uv": [76, 56], "mirror": true}, + {"origin": [0, 51.52853, -63.61327], "size": [0, 10, 32], "uv": [0, 61]}, + {"origin": [-7.25, 49.52853, -64.61327], "size": [0, 10, 32], "pivot": [-7.25, 54.52853, -48.61327], "rotation": [0, -22.5, 0], "uv": [0, 61]}, + {"origin": [7.25, 49.52853, -64.61327], "size": [0, 10, 32], "pivot": [7.25, 54.52853, -48.61327], "rotation": [0, 22.5, 0], "uv": [0, 61], "mirror": true}, + {"origin": [-6.7, 38.52853, -46.11327], "size": [0, 14, 11], "pivot": [-6.7, 46.52853, -44.11327], "rotation": [0, -25, 0], "uv": [113, 90], "mirror": true}, + {"origin": [-11.54484, 34.52853, -47.13192], "size": [0, 19, 28], "pivot": [-11.54484, 45.02853, -33.13192], "rotation": [0, -25, 0], "uv": [55, 142], "mirror": true}, + {"origin": [11.54484, 34.52853, -47.13192], "size": [0, 19, 28], "pivot": [11.54484, 45.02853, -33.13192], "rotation": [0, 25, 0], "uv": [55, 142]}, + {"origin": [-8.67916, 37.77853, -46.94119], "size": [0, 9, 11], "pivot": [-7.67916, 43.27853, -41.44119], "rotation": [-12.5, -25, 0], "uv": [113, 90], "mirror": true}, + {"origin": [8.67916, 37.77853, -46.94119], "size": [0, 9, 11], "pivot": [7.67916, 43.27853, -41.44119], "rotation": [-12.5, 25, 0], "uv": [113, 90]}, + {"origin": [7.5, 38.52853, -44.11327], "size": [0, 14, 11], "pivot": [7.5, 46.52853, -42.11327], "rotation": [0, 25, 0], "uv": [113, 90]} + ] + }, + { + "name": "eye_brow_r", + "parent": "head", + "pivot": [-6.5, 50.52853, -47.61327], + "cubes": [ + {"origin": [-8.5, 48.52853, -52.61327], "size": [4, 4, 10], "uv": [211, 10]} + ] + }, + { + "name": "eye_brow_l", + "parent": "head", + "pivot": [6.5, 50.52853, -47.61327], + "cubes": [ + {"origin": [4.5, 48.52853, -52.61327], "size": [4, 4, 10], "uv": [211, 10], "mirror": true} + ] + }, + { + "name": "jaw", + "parent": "head", + "pivot": [0, 41.02853, -41.86327], + "cubes": [ + {"origin": [-7.5, 38.52853, -52.61327], "size": [15, 5, 11], "inflate": 0.01, "uv": [56, 154]}, + {"origin": [-5.5, 38.52853, -62.61327], "size": [11, 5, 10], "inflate": 0.01, "uv": [98, 34]}, + {"origin": [-5.5, 43.52853, -62.61327], "size": [11, 2, 10], "inflate": 0.01, "uv": [168, 19]} + ] + }, + { + "name": "tongue", + "parent": "jaw", + "pivot": [0, 45.52853, -44.73827], + "cubes": [ + {"origin": [-3.5, 44.52853, -52.61327], "size": [7, 2, 11], "uv": [214, 121]} + ] + }, + { + "name": "tongue_2", + "parent": "tongue", + "pivot": [0, 45.52853, -52.11327], + "cubes": [ + {"origin": [-3, 45.02853, -60.61327], "size": [6, 1, 8], "uv": [140, 160]} + ] + }, + { + "name": "tongue_3", + "parent": "tongue_2", + "pivot": [0, 45.52853, -60.61327], + "cubes": [ + {"origin": [1, 45.02853, -66.61327], "size": [2, 1, 6], "uv": [60, 56]}, + {"origin": [-3, 45.02853, -66.61327], "size": [2, 1, 6], "uv": [60, 56], "mirror": true} + ] + }, + { + "name": "tail", + "parent": "Basilisk", + "pivot": [0.05556, 10.92239, -11.85013], + "cubes": [ + {"origin": [-7, -0.07761, -10.29457], "size": [14, 14, 35], "uv": [0, 0]}, + {"origin": [0, 13.92239, -10.29457], "size": [0, 6, 35], "uv": [88, 56]} + ] + }, + { + "name": "tail_2", + "parent": "tail", + "pivot": [0.07143, 10.63668, 23.70543], + "cubes": [ + {"origin": [-6.5, 0.42239, 24.70543], "size": [13, 13, 31], "uv": [0, 49]}, + {"origin": [0, 12.92239, 24.70543], "size": [0, 6, 31], "uv": [132, 97]} + ] + }, + { + "name": "tail_3", + "parent": "tail_2", + "pivot": [0.1, 10.32239, 55.70543], + "cubes": [ + {"origin": [-6, 0.92239, 55.70543], "size": [12, 12, 27], "uv": [88, 49]}, + {"origin": [0, 12.92239, 55.70543], "size": [0, 6, 27], "uv": [178, 78]} + ] + }, + { + "name": "tail_4", + "parent": "tail_3", + "pivot": [0.16667, 9.58906, 82.70543], + "cubes": [ + {"origin": [-5.5, 1.92239, 82.70543], "size": [11, 10, 16], "uv": [166, 61]} + ] + }, + { + "name": "tail_5", + "parent": "tail_4", + "pivot": [0.5, 6.92239, 98.70543], + "cubes": [ + {"origin": [-2.5, 3.92239, 98.70543], "size": [5, 6, 20], "uv": [120, 134]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/battle_axe.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/battle_axe.geo.json new file mode 100644 index 00000000..f9ee011c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/battle_axe.geo.json @@ -0,0 +1,78 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.battle_axe_1 - Converted", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 3, + "visible_bounds_height": 4, + "visible_bounds_offset": [0, 1, 0] + }, + "bones": [ + { + "name": "battle_axe", + "pivot": [8, -4, -8] + }, + { + "name": "handle", + "parent": "battle_axe", + "pivot": [8, -4, -8], + "cubes": [ + {"origin": [-1, -2, -1], "size": [2, 32, 2], "uv": [0, 0]}, + {"origin": [-2, 30, -2], "size": [4, 2, 4], "uv": [24, 28]}, + {"origin": [-1.6, -16, -1.6], "size": [3.2, 14, 3.2], "uv": [8, 0]} + ] + }, + { + "name": "axe_head", + "parent": "battle_axe", + "pivot": [7.07331, 19, 0], + "cubes": [ + {"origin": [-2.5, 16, -2], "size": [5, 6, 4], "uv": [1, 54]}, + {"origin": [2, 17, -0.5], "size": [2, 4, 1], "uv": [0, 45]}, + {"origin": [-4, 17, -0.5], "size": [2, 4, 1], "uv": [6, 45]} + ] + }, + { + "name": "right", + "parent": "axe_head", + "pivot": [7.07331, 19, 0], + "cubes": [ + {"origin": [4, 15, -0.5], "size": [8, 8, 1], "uv": [20, 0]}, + {"origin": [7, 14.675, 0], "size": [6, 8.65, 0], "uv": [24, 34]}, + {"origin": [5.75, 25.025, -0.5], "size": [7.075, 1, 1], "inflate": 0.005, "pivot": [8.75, 25.525, 0], "rotation": [0, 0, 45], "uv": [0, 51]}, + {"origin": [6.1, 25.925, 0], "size": [8, 1.095, 0], "inflate": 0.005, "pivot": [9.1, 26.525, -0.5], "rotation": [0, 0, 45], "uv": [40, 28], "mirror": true}, + {"origin": [6.1, 27.03, 0], "size": [8, -0.005, 0], "inflate": 0.005, "pivot": [9.1, 26.525, -0.5], "rotation": [0, 0, 45], "uv": [0, 0]}, + {"origin": [6.1, 10.975, 0], "size": [8, 1, 0], "inflate": 0.005, "pivot": [9.1, 11.475, -0.5], "rotation": [0, 0, -45], "uv": [38, 8]}, + {"origin": [3, 9, 0], "size": [4.325, 20, 0], "uv": [8, 17]}, + {"origin": [6.525, 12.75, -0.5], "size": [7.075, 1, 1], "inflate": 0.005, "pivot": [9.525, 13.25, 0], "rotation": [0, 0, 135], "uv": [38, 0]}, + {"origin": [3, 23, -0.5], "size": [4, 5, 1], "uv": [42, 9]}, + {"origin": [7, 23, -0.5], "size": [5, 5, 1], "uv": [38, 2]}, + {"origin": [7, 10, -0.5], "size": [5, 5, 1], "uv": [0, 39]}, + {"origin": [3, 10, -0.5], "size": [4, 5, 1], "uv": [24, 42]} + ] + }, + { + "name": "left", + "parent": "axe_head", + "pivot": [7.07331, 19, 0], + "cubes": [ + {"origin": [4, 15, -0.5], "size": [8, 8, 1], "pivot": [0, 0, 0], "rotation": [-180, 0, 180], "uv": [24, 9]}, + {"origin": [-11.75, 25.025, -0.5], "size": [7.075, 1, 1], "inflate": 0.005, "pivot": [-8.75, 25.525, 0], "rotation": [-180, 0, 135], "uv": [40, 18]}, + {"origin": [-12.525, 12.75, -0.5], "size": [7.075, 1, 1], "inflate": 0.005, "pivot": [-9.525, 13.25, 0], "rotation": [-180, 0, 45], "uv": [40, 20]}, + {"origin": [3, 23, -0.5], "size": [4, 5, 1], "pivot": [0, 0, 0], "rotation": [-180, 0, 180], "uv": [34, 42]}, + {"origin": [-1, 23, -0.5], "size": [5, 5, 1], "pivot": [-4, 0, 0], "rotation": [-180, 0, 180], "uv": [12, 39]}, + {"origin": [3, 9, 0], "size": [4.325, 20, 0], "pivot": [0, 0, 0], "rotation": [-180, 0, 180], "uv": [16, 17]}, + {"origin": [-1, 10, -0.5], "size": [5, 5, 1], "pivot": [-4, -13, 0], "rotation": [-180, 0, 180], "uv": [40, 22]}, + {"origin": [7, 14.675, 0], "size": [6, 8.65, 0], "pivot": [0, 0, 0], "rotation": [-180, 0, 180], "uv": [36, 34]}, + {"origin": [3, 10, -0.5], "size": [4, 5, 1], "pivot": [0, 0, 0], "rotation": [-180, 0, 180], "uv": [44, 42]}, + {"origin": [-13.525, 24.6, 0], "size": [8, 1, 0], "inflate": 0.005, "pivot": [-10.525, 25.1, -0.5], "rotation": [0, 0, -45], "uv": [40, 28]}, + {"origin": [-13.525, 12.4, 0], "size": [8, 1, 0], "inflate": 0.005, "pivot": [-10.525, 12.9, -0.5], "rotation": [0, 0, 45], "uv": [40, 29]} + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/bed_bug.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/bed_bug.geo.json new file mode 100644 index 00000000..572fbf2a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/bed_bug.geo.json @@ -0,0 +1,133 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "bed_bug", + "pivot": [0, 4.125, 1.0625], + "cubes": [ + {"origin": [-8, 1, -8], "size": [16, 8, 19], "uv": [0, 0]} + ] + }, + { + "name": "neck", + "parent": "bed_bug", + "pivot": [0, 5.5, -5], + "cubes": [ + {"origin": [-6, 2, -13], "size": [12, 7, 10], "pivot": [0, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [0, 27]} + ] + }, + { + "name": "head", + "parent": "neck", + "pivot": [0, 4.5, -12], + "cubes": [ + {"origin": [-3.5, 4.25, -17], "size": [7, 4, 5], "pivot": [-0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [0, 50]} + ] + }, + { + "name": "mouth", + "parent": "head", + "pivot": [0, 0.82488, -18.21924], + "cubes": [ + {"origin": [-1.5, 4.25, -21], "size": [3, 0, 4], "inflate": 0.01, "pivot": [-0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [42, 49]} + ] + }, + { + "name": "R_antenna", + "parent": "head", + "pivot": [-1.5, 6.45691, -15.14015], + "cubes": [ + {"origin": [-10.5, 8.275, -16], "size": [9, 0, 5], "pivot": [-0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [30, 28]} + ] + }, + { + "name": "L_antenna", + "parent": "head", + "pivot": [1.5, 6.45691, -15.14015], + "cubes": [ + {"origin": [1.5, 8.275, -16], "size": [9, 0, 5], "pivot": [0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [30, 28], "mirror": true} + ] + }, + { + "name": "R_mandible", + "parent": "head", + "pivot": [-3, 3, -12], + "cubes": [ + {"origin": [-4.5, 3.25, -19], "size": [3, 1, 7], "pivot": [-0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [25, 50]} + ] + }, + { + "name": "R_mandible2", + "parent": "head", + "pivot": [3, 3, -12], + "cubes": [ + {"origin": [1.5, 3.25, -19], "size": [3, 1, 7], "pivot": [0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [25, 50], "mirror": true} + ] + }, + { + "name": "L_mandible", + "parent": "head", + "pivot": [3, 3, -12] + }, + { + "name": "L_leg3", + "parent": "bed_bug", + "pivot": [7.25, 3.75, 9.75], + "cubes": [ + {"origin": [6, 3, 7.75], "size": [11, 2, 3], "pivot": [6, 2.5, 9.75], "rotation": [0, 0, 17.5], "uv": [0, 44], "mirror": true} + ] + }, + { + "name": "R_leg3", + "parent": "bed_bug", + "pivot": [-7.25, 3.75, 9.75], + "cubes": [ + {"origin": [-17, 3, 7.75], "size": [11, 2, 3], "pivot": [-6, 2.5, 9.75], "rotation": [0, 0, -17.5], "uv": [0, 44]} + ] + }, + { + "name": "L_leg2", + "parent": "bed_bug", + "pivot": [7.25, 3.75, 0], + "cubes": [ + {"origin": [6, 3, -2], "size": [11, 2, 3], "pivot": [6, 2.5, 0], "rotation": [0, 0, 17.5], "uv": [0, 44], "mirror": true} + ] + }, + { + "name": "R_leg2", + "parent": "bed_bug", + "pivot": [-7.25, 3.75, 0], + "cubes": [ + {"origin": [-17, 3, -2], "size": [11, 2, 3], "pivot": [-6, 2.5, 0], "rotation": [0, 0, -17.5], "uv": [0, 44]} + ] + }, + { + "name": "L_leg", + "parent": "bed_bug", + "pivot": [7.25, 3.75, -5], + "cubes": [ + {"origin": [6, 3, -7], "size": [11, 2, 3], "pivot": [6, 2.5, -5], "rotation": [0, 0, 17.5], "uv": [0, 44], "mirror": true} + ] + }, + { + "name": "R_leg", + "parent": "bed_bug", + "pivot": [-7.25, 3.75, -5], + "cubes": [ + {"origin": [-17, 3, -7], "size": [11, 2, 3], "pivot": [-6, 2.5, -5], "rotation": [0, 0, -17.5], "uv": [0, 44]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/big_bertha.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/big_bertha.geo.json new file mode 100644 index 00000000..0da1f2b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/big_bertha.geo.json @@ -0,0 +1,67 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.big_bertha - Converted", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 4, + "visible_bounds_offset": [0, 1, 0] + }, + "bones": [ + { + "name": "big_bertha", + "pivot": [0.35, -7.75, 0] + }, + { + "name": "guard", + "parent": "big_bertha", + "pivot": [0.35, -7.75, 0], + "cubes": [ + { + "origin": [-1.5, -8.6, -1], + "size": [3.85, 3.85, 2], + "pivot": [0.35, -7.25, 0], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [33, 3.5], "uv_size": [4, 4]}, + "east": {"uv": [30, 3.5], "uv_size": [2, 4]}, + "south": {"uv": [40, 3.5], "uv_size": [4, 4]}, + "west": {"uv": [37, 3.5], "uv_size": [3, 4]}, + "up": {"uv": [32, 0.5], "uv_size": [4, 2]}, + "down": {"uv": [37, 9.5], "uv_size": [4, -2]} + } + }, + {"origin": [-1.5, -8.6, -1], "size": [3.85, 3.85, 2], "inflate": -0.2, "pivot": [0.35, -7.25, 0], "rotation": [0, 0, -45], "uv": [14, 10]}, + {"origin": [2.35, -6.2, -1], "size": [2, 5, 2], "inflate": -0.005, "pivot": [2.5, -4.85, 0.5], "rotation": [0, 0, 65], "uv": [14, 15]}, + {"origin": [-4.35, -6.2, -1], "size": [2, 5, 2], "inflate": -0.005, "pivot": [-2.5, -4.85, 0.5], "rotation": [0, 0, -65], "uv": [14, 23]} + ] + }, + { + "name": "handle", + "parent": "big_bertha", + "pivot": [3, -15, -3], + "cubes": [ + {"origin": [-0.5, -14, -0.5], "size": [1, 7, 1], "uv": [22, 15]}, + {"origin": [-0.5, -14, -0.5], "size": [1, 7, 1], "inflate": 0.2, "uv": [22, 23]}, + {"origin": [-1.5, -16, -1.5], "size": [3, 2, 3], "uv": [14, 0]} + ] + }, + { + "name": "blade", + "parent": "big_bertha", + "pivot": [6, -5, -3], + "cubes": [ + {"origin": [1.5, -6, 0], "size": [1, 34, 0], "uv": [10, 0]}, + {"origin": [-2, -6, -0.5], "size": [4, 33.625, 1], "uv": [0, 0]}, + {"origin": [-2.1, 26.525, -0.5], "size": [2.8, 2.8, 1], "inflate": 0.005, "pivot": [0, 28.625, 0], "rotation": [0, 0, -45], "uv": [24, 5]}, + {"origin": [-1.9, 26.3, 0], "size": [3.525, 3.525, 0], "inflate": 0.005, "pivot": [0, 28.2, 0], "rotation": [0, 0, -45], "uv": [24, 8]}, + {"origin": [-2.5, -6, 0], "size": [1, 34, 0], "uv": [12, 0]} + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/bomber.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/bomber.geo.json new file mode 100644 index 00000000..5a9bfd08 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/bomber.geo.json @@ -0,0 +1,48 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.bomber", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0.5, 3, -0.5] + }, + { + "name": "head", + "parent": "root", + "pivot": [0, 5, 0], + "cubes": [ + {"origin": [0, 13, -1.5], "size": [0, 2, 3], "uv": [26, 26]}, + {"origin": [-1.5, 13, 0], "size": [4, 4, 0], "uv": [18, 26]}, + {"origin": [-3.5, 12, -3.5], "size": [7, 1, 7], "uv": [0, 18]}, + {"origin": [-4.5, 3, -4.5], "size": [9, 9, 9], "uv": [0, 0]} + ] + }, + { + "name": "rightFoot", + "parent": "root", + "pivot": [-2, 3, 0], + "cubes": [ + {"origin": [-3.5, 0, -3.5], "size": [3, 3, 6], "uv": [0, 26]} + ] + }, + { + "name": "leftFoot", + "parent": "root", + "pivot": [2, 3, 0], + "cubes": [ + {"origin": [0.5, 0, -3.5], "size": [3, 3, 6], "uv": [0, 26], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/brutalfly.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/brutalfly.geo.json new file mode 100644 index 00000000..665ceb60 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/brutalfly.geo.json @@ -0,0 +1,587 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 512, + "texture_height": 512, + "visible_bounds_width": 9, + "visible_bounds_height": 10, + "visible_bounds_offset": [0, 2, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [5.52857, 33.57143, -11.1528] + }, + { + "name": "upper_body", + "parent": "bone", + "pivot": [0, 33, 4], + "cubes": [ + {"origin": [-7, 26, -13], "size": [14, 14, 7], "inflate": 0.1, "uv": [218, 81]}, + {"origin": [-6, 27, -6], "size": [12, 12, 10], "uv": [174, 81]}, + {"origin": [0, 39, -6], "size": [0, 5, 10], "uv": [228, 246]}, + {"origin": [0, 39, -12], "size": [0, 3, 6], "uv": [244, 45]} + ] + }, + { + "name": "head", + "parent": "upper_body", + "pivot": [0, 28, -19], + "cubes": [ + {"origin": [-4, 28, -18], "size": [8, 3, 5], "uv": [174, 103]}, + {"origin": [2.1, 32, -23.1], "size": [3, 3, 3], "uv": [96, 247]}, + {"origin": [-5.1, 32, -23.1], "size": [3, 3, 3], "uv": [96, 247], "mirror": true}, + {"origin": [-5, 31, -23], "size": [10, 5, 10], "uv": [234, 197]}, + {"origin": [-4, 36, -22], "size": [8, 2, 9], "uv": [236, 182]} + ] + }, + { + "name": "left_antenna", + "parent": "head", + "pivot": [3, 37.88568, -21.77535], + "rotation": [-33.40659, -12.60837, 8.19252], + "cubes": [ + {"origin": [2, 36.66299, -31.86505], "size": [2, 2, 11], "uv": [244, 0]}, + {"origin": [2, 32.66299, -32.86505], "size": [2, 4, 4], "uv": [62, 247]} + ] + }, + { + "name": "right_antenna", + "parent": "head", + "pivot": [-3, 37.88568, -21.77535], + "rotation": [-33.40659, 12.60837, -8.19252], + "cubes": [ + {"origin": [-4, 36.66299, -31.86505], "size": [2, 2, 11], "uv": [244, 0], "mirror": true}, + {"origin": [-4, 32.66299, -32.86505], "size": [2, 4, 4], "uv": [62, 247], "mirror": true} + ] + }, + { + "name": "left_mouth", + "parent": "head", + "pivot": [0, 31, -18], + "cubes": [ + {"origin": [0, 28, -23], "size": [5, 3, 5], "uv": [200, 103]} + ] + }, + { + "name": "right_mouth", + "parent": "head", + "pivot": [0, 31, -18], + "cubes": [ + {"origin": [-5, 28, -23], "size": [5, 3, 5], "uv": [200, 103], "mirror": true} + ] + }, + { + "name": "tongue", + "parent": "head", + "pivot": [0, 31.6, -7.9], + "cubes": [ + {"origin": [0, 30, -21], "size": [0, 2, 15], "uv": [234, 229]} + ] + }, + { + "name": "tongue_2", + "parent": "tongue", + "pivot": [0, 31, -20], + "cubes": [ + {"origin": [0, 30, -21], "size": [0, 2, 15], "uv": [236, 165]} + ] + }, + { + "name": "tongue_3", + "parent": "tongue_2", + "pivot": [0, 31.66667, -6.5], + "cubes": [ + {"origin": [0, 32, -7], "size": [0, 2, 1], "uv": [184, 230]}, + {"origin": [0, 34, -9], "size": [0, 1, 3], "uv": [236, 193]} + ] + }, + { + "name": "tongue_4", + "parent": "tongue_3", + "pivot": [0, 34, -8.5], + "cubes": [ + {"origin": [0, 33, -9], "size": [0, 1, 1], "uv": [184, 233]} + ] + }, + { + "name": "left_wings", + "parent": "upper_body", + "pivot": [6.5, 39, -3.5] + }, + { + "name": "left_wing_back", + "parent": "left_wings", + "pivot": [6.5, 39, -3.5], + "rotation": [0, -2.5, 0], + "cubes": [ + {"origin": [6, 39, -4], "size": [27, 0, 32], "uv": [118, 165]} + ] + }, + { + "name": "left_wing_back_2", + "parent": "left_wing_back", + "pivot": [33.5, 39, 9.5], + "cubes": [ + {"origin": [33, 39, -4], "size": [15, 0, 27], "uv": [174, 54]} + ] + }, + { + "name": "left_wing", + "parent": "left_wings", + "pivot": [7.5, 39, -4.5], + "rotation": [0, 2.5, 0], + "cubes": [ + {"origin": [6, 39, -57], "size": [25, 0, 53], "uv": [158, 112]} + ] + }, + { + "name": "left_wing_2", + "parent": "left_wing", + "pivot": [31, 39, -17.5], + "cubes": [ + {"origin": [31, 39, -57], "size": [26, 0, 53], "uv": [0, 112]} + ] + }, + { + "name": "right_wings", + "parent": "upper_body", + "pivot": [-6.5, 39, -3.5] + }, + { + "name": "right_wing_back", + "parent": "right_wings", + "pivot": [-6.5, 39, -3.5], + "rotation": [0, 2.5, 0], + "cubes": [ + {"origin": [-33, 39, -4], "size": [27, 0, 32], "uv": [118, 165], "mirror": true} + ] + }, + { + "name": "right_wing_back_2", + "parent": "right_wing_back", + "pivot": [-33.5, 39, 9.5], + "cubes": [ + {"origin": [-48, 39, -4], "size": [15, 0, 27], "uv": [174, 54], "mirror": true} + ] + }, + { + "name": "right_wing", + "parent": "right_wings", + "pivot": [-7.5, 39, -4.5], + "rotation": [0, -2.5, 0], + "cubes": [ + {"origin": [-31, 39, -57], "size": [25, 0, 53], "uv": [158, 112], "mirror": true} + ] + }, + { + "name": "right_wing_2", + "parent": "right_wing", + "pivot": [-31, 39, -17.5], + "cubes": [ + {"origin": [-57, 39, -57], "size": [26, 0, 53], "uv": [0, 112], "mirror": true} + ] + }, + { + "name": "Left_legs", + "parent": "upper_body", + "pivot": [2.52857, 33.57143, 4.8472] + }, + { + "name": "left_leg_3", + "parent": "Left_legs", + "pivot": [2.52857, 33.57143, 4.8472], + "rotation": [35, 30, 0], + "cubes": [ + {"origin": [4, 28, 6.9], "size": [0, 7, 3], "uv": [108, 247]}, + {"origin": [3, 28, 3.9], "size": [3, 3, 3], "inflate": 0.2, "uv": [84, 247]}, + {"origin": [3, 19, 3.9], "size": [3, 9, 3], "inflate": 0.01, "uv": [50, 247]}, + {"origin": [2.5, 31, 3.5], "size": [4, 5, 4], "uv": [220, 102]} + ] + }, + { + "name": "left_knee_3", + "parent": "left_leg_3", + "pivot": [4.35556, 19.05366, 3.68533], + "rotation": [-117.5, 0, 0], + "cubes": [ + {"origin": [3, 10.05366, 1.1264], "size": [3, 11, 3], "uv": [24, 247]} + ] + }, + { + "name": "left_knee_down_3", + "parent": "left_knee_3", + "pivot": [4.5, 10.99638, 2.9669], + "cubes": [ + {"origin": [3, 9.66208, 2.10073], "size": [3, 3, 17], "inflate": 0.01, "uv": [118, 230]}, + {"origin": [2.9, 8.13998, 17.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [4.5, 10.63998, 14.56651], "rotation": [-7.5, 0, 0], "uv": [36, 247]}, + {"origin": [5.1, 8.13998, 17.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [4.5, 10.63998, 14.56651], "rotation": [-7.5, 0, 0], "uv": [36, 247]} + ] + }, + { + "name": "left_leg_2", + "parent": "Left_legs", + "pivot": [4.52857, 33.57143, -3.1528], + "rotation": [35, 30, 0], + "cubes": [ + {"origin": [6, 28, -1.1], "size": [0, 7, 3], "uv": [108, 247]}, + {"origin": [5, 28, -4.1], "size": [3, 3, 3], "inflate": 0.2, "uv": [84, 247]}, + {"origin": [5, 19, -4.1], "size": [3, 9, 3], "inflate": 0.01, "uv": [50, 247]}, + {"origin": [4.5, 31, -4.5], "size": [4, 5, 4], "uv": [220, 102]} + ] + }, + { + "name": "left_knee_2", + "parent": "left_leg_2", + "pivot": [6.35556, 19.05366, -4.31467], + "rotation": [-117.5, 0, 0], + "cubes": [ + {"origin": [5, 10.05366, -6.8736], "size": [3, 11, 3], "uv": [24, 247]} + ] + }, + { + "name": "left_knee_down_2", + "parent": "left_knee_2", + "pivot": [6.5, 10.99638, -5.0331], + "cubes": [ + {"origin": [5, 9.66208, -5.89927], "size": [3, 3, 17], "inflate": 0.01, "uv": [118, 230]}, + {"origin": [4.9, 8.13998, 9.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [6.5, 10.63998, 6.56651], "rotation": [-7.5, 0, 0], "uv": [36, 247]}, + {"origin": [7.1, 8.13998, 9.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [6.5, 10.63998, 6.56651], "rotation": [-7.5, 0, 0], "uv": [36, 247]} + ] + }, + { + "name": "left_leg_1", + "parent": "Left_legs", + "pivot": [5.52857, 33.57143, -11.1528], + "rotation": [35, 30, 0], + "cubes": [ + {"origin": [7, 28, -9.1], "size": [0, 7, 3], "uv": [108, 247]}, + {"origin": [6, 28, -12.1], "size": [3, 3, 3], "inflate": 0.2, "uv": [84, 247]}, + {"origin": [6, 19, -12.1], "size": [3, 9, 3], "inflate": 0.01, "uv": [50, 247]}, + {"origin": [5.5, 31, -12.5], "size": [4, 5, 4], "uv": [220, 102]} + ] + }, + { + "name": "left_knee_1", + "parent": "left_leg_1", + "pivot": [7.35556, 19.05366, -12.31467], + "rotation": [-117.5, 0, 0], + "cubes": [ + {"origin": [6, 10.05366, -14.8736], "size": [3, 11, 3], "uv": [24, 247]} + ] + }, + { + "name": "left_knee_down_1", + "parent": "left_knee_1", + "pivot": [7.5, 10.99638, -13.0331], + "cubes": [ + {"origin": [6, 9.66208, -13.89927], "size": [3, 3, 17], "inflate": 0.01, "uv": [118, 230]}, + {"origin": [5.9, 8.13998, 1.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [7.5, 10.63998, -1.43349], "rotation": [-7.5, 0, 0], "uv": [36, 247]}, + {"origin": [8.1, 8.13998, 1.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [7.5, 10.63998, -1.43349], "rotation": [-7.5, 0, 0], "uv": [36, 247]} + ] + }, + { + "name": "Right_legs", + "parent": "upper_body", + "pivot": [-2.52857, 33.57143, 4.8472] + }, + { + "name": "right_leg_3", + "parent": "Right_legs", + "pivot": [-2.52857, 33.57143, 4.8472], + "rotation": [35, -30, 0], + "cubes": [ + {"origin": [-4, 28, 6.9], "size": [0, 7, 3], "uv": [108, 247], "mirror": true}, + {"origin": [-6, 28, 3.9], "size": [3, 3, 3], "inflate": 0.2, "uv": [84, 247], "mirror": true}, + {"origin": [-6, 19, 3.9], "size": [3, 9, 3], "inflate": 0.01, "uv": [50, 247], "mirror": true}, + {"origin": [-6.5, 31, 3.5], "size": [4, 5, 4], "uv": [220, 102], "mirror": true} + ] + }, + { + "name": "right_knee_3", + "parent": "right_leg_3", + "pivot": [-4.35556, 19.05366, 3.68533], + "rotation": [-117.5, 0, 0], + "cubes": [ + {"origin": [-6, 10.05366, 1.1264], "size": [3, 11, 3], "uv": [24, 247], "mirror": true} + ] + }, + { + "name": "right_knee_down_3", + "parent": "right_knee_3", + "pivot": [-4.5, 10.99638, 2.9669], + "cubes": [ + {"origin": [-6, 9.66208, 2.10073], "size": [3, 3, 17], "inflate": 0.01, "uv": [118, 230], "mirror": true}, + {"origin": [-3.9, 8.13998, 17.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [-4.5, 10.63998, 14.56651], "rotation": [-7.5, 0, 0], "uv": [36, 247], "mirror": true}, + {"origin": [-6.1, 8.13998, 17.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [-4.5, 10.63998, 14.56651], "rotation": [-7.5, 0, 0], "uv": [36, 247], "mirror": true} + ] + }, + { + "name": "right_leg_2", + "parent": "Right_legs", + "pivot": [-4.52857, 33.57143, -3.1528], + "rotation": [35, -30, 0], + "cubes": [ + {"origin": [-6, 28, -1.1], "size": [0, 7, 3], "uv": [108, 247], "mirror": true}, + {"origin": [-8, 28, -4.1], "size": [3, 3, 3], "inflate": 0.2, "uv": [84, 247], "mirror": true}, + {"origin": [-8, 19, -4.1], "size": [3, 9, 3], "inflate": 0.01, "uv": [50, 247], "mirror": true}, + {"origin": [-8.5, 31, -4.5], "size": [4, 5, 4], "uv": [220, 102], "mirror": true} + ] + }, + { + "name": "right_knee_2", + "parent": "right_leg_2", + "pivot": [-6.35556, 19.05366, -4.31467], + "rotation": [-117.5, 0, 0], + "cubes": [ + {"origin": [-8, 10.05366, -6.8736], "size": [3, 11, 3], "uv": [24, 247], "mirror": true} + ] + }, + { + "name": "right_knee_down_2", + "parent": "right_knee_2", + "pivot": [-6.5, 10.99638, -5.0331], + "cubes": [ + {"origin": [-8, 9.66208, -5.89927], "size": [3, 3, 17], "inflate": 0.01, "uv": [118, 230], "mirror": true}, + {"origin": [-5.9, 8.13998, 9.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [-6.5, 10.63998, 6.56651], "rotation": [-7.5, 0, 0], "uv": [36, 247], "mirror": true}, + {"origin": [-8.1, 8.13998, 9.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [-6.5, 10.63998, 6.56651], "rotation": [-7.5, 0, 0], "uv": [36, 247], "mirror": true} + ] + }, + { + "name": "right_leg_1", + "parent": "Right_legs", + "pivot": [-5.52857, 33.57143, -11.1528], + "rotation": [35, -30, 0], + "cubes": [ + {"origin": [-7, 28, -9.1], "size": [0, 7, 3], "uv": [108, 247], "mirror": true}, + {"origin": [-9, 28, -12.1], "size": [3, 3, 3], "inflate": 0.2, "uv": [84, 247], "mirror": true}, + {"origin": [-9, 19, -12.1], "size": [3, 9, 3], "inflate": 0.01, "uv": [50, 247], "mirror": true}, + {"origin": [-9.5, 31, -12.5], "size": [4, 5, 4], "uv": [220, 102], "mirror": true} + ] + }, + { + "name": "right_knee_1", + "parent": "right_leg_1", + "pivot": [-7.35556, 19.05366, -12.31467], + "rotation": [-117.5, 0, 0], + "cubes": [ + {"origin": [-9, 10.05366, -14.8736], "size": [3, 11, 3], "uv": [24, 247], "mirror": true} + ] + }, + { + "name": "right_knee_down_1", + "parent": "right_knee_1", + "pivot": [-7.5, 10.99638, -13.0331], + "cubes": [ + {"origin": [-9, 9.66208, -13.89927], "size": [3, 3, 17], "inflate": 0.01, "uv": [118, 230], "mirror": true}, + {"origin": [-6.9, 8.13998, 1.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [-7.5, 10.63998, -1.43349], "rotation": [-7.5, 0, 0], "uv": [36, 247], "mirror": true}, + {"origin": [-9.1, 8.13998, 1.06651], "size": [1, 5, 6], "inflate": 0.01, "pivot": [-7.5, 10.63998, -1.43349], "rotation": [-7.5, 0, 0], "uv": [36, 247], "mirror": true} + ] + }, + { + "name": "waist", + "parent": "bone", + "pivot": [0, 32.5, 4.75], + "cubes": [ + {"origin": [0, 37, 4], "size": [0, 5, 5], "uv": [74, 247]}, + {"origin": [0, 36, 9], "size": [0, 2, 7], "uv": [236, 102]}, + {"origin": [-4, 29, 9], "size": [8, 7, 4], "uv": [244, 34]}, + {"origin": [-5, 28, 4], "size": [10, 9, 5], "uv": [158, 242]} + ] + }, + { + "name": "tail", + "parent": "waist", + "pivot": [0, 32.5, 13.5], + "cubes": [ + {"origin": [-5, 28, 13], "size": [10, 9, 3], "uv": [158, 230]} + ] + }, + { + "name": "tail_2", + "parent": "tail", + "pivot": [0, 32.5, 17], + "cubes": [ + {"origin": [7, 26, 16], "size": [0, 13, 5], "pivot": [7, 32.5, 16], "rotation": [0, 20, 0], "uv": [14, 247]}, + {"origin": [7, 26, 22], "size": [0, 13, 8], "pivot": [7, 32.5, 22], "rotation": [0, 20, 0], "uv": [244, 13]}, + {"origin": [7, 26, 26], "size": [0, 13, 10], "pivot": [7, 32.5, 26], "rotation": [0, 20, 0], "uv": [188, 242]}, + {"origin": [7, 26, 31], "size": [0, 13, 10], "pivot": [7, 32.5, 31], "rotation": [0, 20, 0], "uv": [208, 242]}, + {"origin": [7, 26, 18], "size": [0, 13, 7], "pivot": [7, 32.5, 18], "rotation": [0, 20, 0], "uv": [0, 247]}, + {"origin": [-7, 26, 31], "size": [0, 13, 10], "pivot": [-7, 32.5, 31], "rotation": [0, -20, 0], "uv": [208, 242], "mirror": true}, + {"origin": [-7, 26, 26], "size": [0, 13, 10], "pivot": [-7, 32.5, 26], "rotation": [0, -20, 0], "uv": [188, 242], "mirror": true}, + {"origin": [-7, 26, 18], "size": [0, 13, 7], "pivot": [-7, 32.5, 18], "rotation": [0, -20, 0], "uv": [0, 247], "mirror": true}, + {"origin": [-7, 26, 22], "size": [0, 13, 8], "pivot": [-7, 32.5, 22], "rotation": [0, -20, 0], "uv": [244, 13], "mirror": true}, + {"origin": [-7, 26, 16], "size": [0, 13, 5], "pivot": [-7, 32.5, 16], "rotation": [0, -20, 0], "uv": [14, 247], "mirror": true}, + {"origin": [-7, 26, 16], "size": [14, 13, 20], "uv": [118, 197]}, + {"origin": [-5, 27, 36], "size": [10, 11, 6], "uv": [234, 212]} + ] + }, + { + "name": "coocon", + "pivot": [0, 26.25, -12.375] + }, + { + "name": "left_coocon", + "parent": "coocon", + "pivot": [0.75, 46.25, -15.375], + "cubes": [ + {"origin": [0, 6, -80], "size": [17, 38, 7], "uv": [186, 197]}, + {"origin": [0, 0, -73], "size": [23, 48, 64], "uv": [0, 0]}, + {"origin": [0, 4, -9], "size": [17, 40, 42], "uv": [0, 165]}, + {"origin": [0, 8, 33], "size": [13, 32, 22], "uv": [174, 0]}, + {"origin": [0.25, 46.85, -73.375], "size": [2, 2, 3], "pivot": [1.25, 47.1, -71.875], "rotation": [45, 0, 0], "uv": [0, 0]}, + {"origin": [1.25, 48.85, -73.375], "size": [0, 3, 3], "pivot": [1.25, 47.1, -71.875], "rotation": [45, 0, 0], "uv": [12, -3]}, + {"origin": [22.25, 48.85, -73.375], "size": [0, 3, 3], "pivot": [22.25, 47.1, -71.875], "rotation": [40.144, -22.32924, 24.25045], "uv": [12, -3]}, + {"origin": [21.25, 46.85, -73.375], "size": [2, 2, 3], "pivot": [22.25, 47.1, -71.875], "rotation": [40.144, -22.32924, 24.25045], "uv": [0, 0]}, + {"origin": [1.25, 50.05, -57.375], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [0.25, 48.05, -57.375], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [0.25, 48.05, -43.375], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [1.25, 50.05, -43.375], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [9.25, 48.05, -32.375], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [10.25, 50.05, -32.375], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [10.25, 50.05, -52.375], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [9.25, 48.05, -52.375], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [24.25, 42.05, -54.375], "size": [2, 2, 3], "pivot": [25.25, 44.3, -52.875], "rotation": [0, 0, 90], "uv": [0, 0]}, + {"origin": [25.25, 44.05, -54.375], "size": [0, 3, 3], "pivot": [25.25, 44.3, -52.875], "rotation": [0, 0, 90], "uv": [12, -3]}, + {"origin": [25.25, 22.05, -67.375], "size": [0, 3, 3], "pivot": [25.25, 22.3, -65.875], "rotation": [0, 0, 90], "uv": [12, -3]}, + {"origin": [24.25, 20.05, -67.375], "size": [2, 2, 3], "pivot": [25.25, 22.3, -65.875], "rotation": [0, 0, 90], "uv": [0, 0]}, + {"origin": [24.25, 0.05, -62.375], "size": [2, 2, 3], "pivot": [25.25, 2.3, -60.875], "rotation": [0, 0, 90], "uv": [0, 0]}, + {"origin": [25.25, 2.05, -62.375], "size": [0, 3, 3], "pivot": [25.25, 2.3, -60.875], "rotation": [0, 0, 90], "uv": [12, -3]}, + {"origin": [25.25, 2.05, -33.375], "size": [0, 3, 3], "pivot": [25.25, 2.3, -31.875], "rotation": [0, 0, 90], "uv": [12, -3]}, + {"origin": [24.25, 0.05, -33.375], "size": [2, 2, 3], "pivot": [25.25, 2.3, -31.875], "rotation": [0, 0, 90], "uv": [0, 0]}, + {"origin": [24.25, 25.05, -49.375], "size": [2, 2, 3], "pivot": [25.25, 27.3, -47.875], "rotation": [0, 0, 90], "uv": [0, 0]}, + {"origin": [25.25, 27.05, -49.375], "size": [0, 3, 3], "pivot": [25.25, 27.3, -47.875], "rotation": [0, 0, 90], "uv": [12, -3]}, + {"origin": [25.25, 8.05, -30.375], "size": [0, 3, 3], "pivot": [25.25, 8.3, -28.875], "rotation": [0, 0, 90], "uv": [12, -3]}, + {"origin": [24.25, 6.05, -30.375], "size": [2, 2, 3], "pivot": [25.25, 8.3, -28.875], "rotation": [0, 0, 90], "uv": [0, 0]}, + {"origin": [24.25, 32.05, -30.375], "size": [2, 2, 3], "pivot": [25.25, 34.3, -28.875], "rotation": [0, 0, 90], "uv": [0, 0]}, + {"origin": [25.25, 34.05, -30.375], "size": [0, 3, 3], "pivot": [25.25, 34.3, -28.875], "rotation": [0, 0, 90], "uv": [12, -3]}, + {"origin": [25.25, 42.05, -18.375], "size": [0, 3, 3], "pivot": [25.25, 42.3, -16.875], "rotation": [0, 0, 90], "uv": [12, -3]}, + {"origin": [24.25, 40.05, -18.375], "size": [2, 2, 3], "pivot": [25.25, 42.3, -16.875], "rotation": [0, 0, 90], "uv": [0, 0]}, + {"origin": [23.25, 48.55, -43.375], "size": [0, 3, 3], "pivot": [23.25, 48.8, -41.875], "rotation": [0, 0, 40], "uv": [12, -3]}, + {"origin": [22.25, 46.55, -43.375], "size": [2, 2, 3], "pivot": [23.25, 48.8, -41.875], "rotation": [0, 0, 40], "uv": [0, 0]}, + {"origin": [1.25, 50.05, -26.375], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [0.25, 48.05, -26.375], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [8.25, 44.05, 15.625], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [9.25, 46.05, 15.625], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [4.25, 46.05, 0.625], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [3.25, 44.05, 0.625], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [0.25, 47.05, -11.575], "size": [2, 2, 3], "pivot": [1.25, 47.3, -10.075], "rotation": [-40, 0, 0], "uv": [0, 0]}, + {"origin": [1.25, 49.05, -11.575], "size": [0, 3, 3], "pivot": [1.25, 47.3, -10.075], "rotation": [-40, 0, 0], "uv": [12, -3]}, + {"origin": [22.25, 49.05, -11.575], "size": [0, 3, 3], "pivot": [22.25, 47.3, -10.075], "rotation": [-29.5635, -3.61928, 49.65666], "uv": [12, -3]}, + {"origin": [21.25, 47.05, -11.575], "size": [2, 2, 3], "pivot": [22.25, 47.3, -10.075], "rotation": [-29.5635, -3.61928, 49.65666], "uv": [0, 0]}, + {"origin": [1.25, -4.05, -11.575], "size": [0, 3, 3], "pivot": [1.25, 0.7, -10.075], "rotation": [40, 0, 0], "uv": [12, -3]}, + {"origin": [0.25, -1.05, -11.575], "size": [2, 2, 3], "pivot": [1.25, 0.7, -10.075], "rotation": [40, 0, 0], "uv": [0, 0]}, + {"origin": [0.25, -2.05, -26.375], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [1.25, -5.05, -26.375], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [0.25, -2.05, -43.375], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [1.25, -5.05, -43.375], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [0.25, -2.05, -57.375], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [1.25, -5.05, -57.375], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [0.25, -0.85, -73.375], "size": [2, 2, 3], "pivot": [1.25, 0.9, -71.875], "rotation": [-45, 0, 0], "uv": [0, 0]}, + {"origin": [1.25, -3.85, -73.375], "size": [0, 3, 3], "pivot": [1.25, 0.9, -71.875], "rotation": [-45, 0, 0], "uv": [12, -3]}, + {"origin": [9.25, -2.05, -52.375], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [10.25, -5.05, -52.375], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [9.25, -2.05, -32.375], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [10.25, -5.05, -32.375], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [22.25, -4.05, -11.575], "size": [0, 3, 3], "pivot": [22.25, 0.7, -10.075], "rotation": [29.5635, -3.61928, -49.65666], "uv": [12, -3]}, + {"origin": [21.25, -1.05, -11.575], "size": [2, 2, 3], "pivot": [22.25, 0.7, -10.075], "rotation": [29.5635, -3.61928, -49.65666], "uv": [0, 0]}, + {"origin": [21.25, -0.85, -73.375], "size": [2, 2, 3], "pivot": [22.25, 0.9, -71.875], "rotation": [-40.144, -22.32924, -24.25045], "uv": [0, 0]}, + {"origin": [22.25, -3.85, -73.375], "size": [0, 3, 3], "pivot": [22.25, 0.9, -71.875], "rotation": [-40.144, -22.32924, -24.25045], "uv": [12, -3]}, + {"origin": [23.25, -3.55, -43.375], "size": [0, 3, 3], "pivot": [23.25, -0.8, -41.875], "rotation": [0, 0, -40], "uv": [12, -3]}, + {"origin": [22.25, -0.55, -43.375], "size": [2, 2, 3], "pivot": [23.25, -0.8, -41.875], "rotation": [0, 0, -40], "uv": [0, 0]}, + {"origin": [15.25, 43.05, 30.425], "size": [2, 2, 3], "pivot": [16.25, 43.3, 31.925], "rotation": [-29.5635, -3.61928, 49.65666], "uv": [0, 0]}, + {"origin": [16.25, 45.05, 30.425], "size": [0, 3, 3], "pivot": [16.25, 43.3, 31.925], "rotation": [-29.5635, -3.61928, 49.65666], "uv": [12, -3]}, + {"origin": [15.25, 2.95, 30.425], "size": [2, 2, 3], "pivot": [16.25, 4.7, 31.925], "rotation": [29.5635, -3.61928, -49.65666], "uv": [0, 0]}, + {"origin": [16.25, -0.05, 30.425], "size": [0, 3, 3], "pivot": [16.25, 4.7, 31.925], "rotation": [29.5635, -3.61928, -49.65666], "uv": [12, -3]}, + {"origin": [8.25, 1.95, 15.625], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [9.25, -1.05, 15.625], "size": [0, 3, 3], "uv": [12, -3]}, + {"origin": [3.25, 1.95, 0.625], "size": [2, 2, 3], "uv": [0, 0]}, + {"origin": [4.25, -1.05, 0.625], "size": [0, 3, 3], "uv": [12, -3]} + ] + }, + { + "name": "right_coocon", + "parent": "coocon", + "pivot": [-0.75, 46.25, -15.375], + "cubes": [ + {"origin": [-17, 6, -80], "size": [17, 38, 7], "uv": [186, 197], "mirror": true}, + {"origin": [-23, 0, -73], "size": [23, 48, 64], "uv": [0, 0], "mirror": true}, + {"origin": [-17, 4, -9], "size": [17, 40, 42], "uv": [0, 165], "mirror": true}, + {"origin": [-13, 8, 33], "size": [13, 32, 22], "uv": [174, 0], "mirror": true}, + {"origin": [-2.25, 46.85, -73.375], "size": [2, 2, 3], "pivot": [-1.25, 47.1, -71.875], "rotation": [45, 0, 0], "uv": [0, 0], "mirror": true}, + {"origin": [-1.25, 48.85, -73.375], "size": [0, 3, 3], "pivot": [-1.25, 47.1, -71.875], "rotation": [45, 0, 0], "uv": [12, -3], "mirror": true}, + {"origin": [-22.25, 48.85, -73.375], "size": [0, 3, 3], "pivot": [-22.25, 47.1, -71.875], "rotation": [40.144, 22.32924, -24.25045], "uv": [12, -3], "mirror": true}, + {"origin": [-23.25, 46.85, -73.375], "size": [2, 2, 3], "pivot": [-22.25, 47.1, -71.875], "rotation": [40.144, 22.32924, -24.25045], "uv": [0, 0], "mirror": true}, + {"origin": [-1.25, 50.05, -57.375], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-2.25, 48.05, -57.375], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-2.25, 48.05, -43.375], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-1.25, 50.05, -43.375], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-11.25, 48.05, -32.375], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-10.25, 50.05, -32.375], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-10.25, 50.05, -52.375], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-11.25, 48.05, -52.375], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-26.25, 42.05, -54.375], "size": [2, 2, 3], "pivot": [-25.25, 44.3, -52.875], "rotation": [0, 0, -90], "uv": [0, 0], "mirror": true}, + {"origin": [-25.25, 44.05, -54.375], "size": [0, 3, 3], "pivot": [-25.25, 44.3, -52.875], "rotation": [0, 0, -90], "uv": [12, -3], "mirror": true}, + {"origin": [-25.25, 22.05, -67.375], "size": [0, 3, 3], "pivot": [-25.25, 22.3, -65.875], "rotation": [0, 0, -90], "uv": [12, -3], "mirror": true}, + {"origin": [-26.25, 20.05, -67.375], "size": [2, 2, 3], "pivot": [-25.25, 22.3, -65.875], "rotation": [0, 0, -90], "uv": [0, 0], "mirror": true}, + {"origin": [-26.25, 0.05, -62.375], "size": [2, 2, 3], "pivot": [-25.25, 2.3, -60.875], "rotation": [0, 0, -90], "uv": [0, 0], "mirror": true}, + {"origin": [-25.25, 2.05, -62.375], "size": [0, 3, 3], "pivot": [-25.25, 2.3, -60.875], "rotation": [0, 0, -90], "uv": [12, -3], "mirror": true}, + {"origin": [-25.25, 2.05, -33.375], "size": [0, 3, 3], "pivot": [-25.25, 2.3, -31.875], "rotation": [0, 0, -90], "uv": [12, -3], "mirror": true}, + {"origin": [-26.25, 0.05, -33.375], "size": [2, 2, 3], "pivot": [-25.25, 2.3, -31.875], "rotation": [0, 0, -90], "uv": [0, 0], "mirror": true}, + {"origin": [-26.25, 25.05, -49.375], "size": [2, 2, 3], "pivot": [-25.25, 27.3, -47.875], "rotation": [0, 0, -90], "uv": [0, 0], "mirror": true}, + {"origin": [-25.25, 27.05, -49.375], "size": [0, 3, 3], "pivot": [-25.25, 27.3, -47.875], "rotation": [0, 0, -90], "uv": [12, -3], "mirror": true}, + {"origin": [-25.25, 8.05, -30.375], "size": [0, 3, 3], "pivot": [-25.25, 8.3, -28.875], "rotation": [0, 0, -90], "uv": [12, -3], "mirror": true}, + {"origin": [-26.25, 6.05, -30.375], "size": [2, 2, 3], "pivot": [-25.25, 8.3, -28.875], "rotation": [0, 0, -90], "uv": [0, 0], "mirror": true}, + {"origin": [-26.25, 32.05, -30.375], "size": [2, 2, 3], "pivot": [-25.25, 34.3, -28.875], "rotation": [0, 0, -90], "uv": [0, 0], "mirror": true}, + {"origin": [-25.25, 34.05, -30.375], "size": [0, 3, 3], "pivot": [-25.25, 34.3, -28.875], "rotation": [0, 0, -90], "uv": [12, -3], "mirror": true}, + {"origin": [-25.25, 42.05, -18.375], "size": [0, 3, 3], "pivot": [-25.25, 42.3, -16.875], "rotation": [0, 0, -90], "uv": [12, -3], "mirror": true}, + {"origin": [-26.25, 40.05, -18.375], "size": [2, 2, 3], "pivot": [-25.25, 42.3, -16.875], "rotation": [0, 0, -90], "uv": [0, 0], "mirror": true}, + {"origin": [-23.25, 48.55, -43.375], "size": [0, 3, 3], "pivot": [-23.25, 48.8, -41.875], "rotation": [0, 0, -40], "uv": [12, -3], "mirror": true}, + {"origin": [-24.25, 46.55, -43.375], "size": [2, 2, 3], "pivot": [-23.25, 48.8, -41.875], "rotation": [0, 0, -40], "uv": [0, 0], "mirror": true}, + {"origin": [-1.25, 50.05, -26.375], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-2.25, 48.05, -26.375], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-10.25, 44.05, 15.625], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-9.25, 46.05, 15.625], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-4.25, 46.05, 0.625], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-5.25, 44.05, 0.625], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-2.25, 47.05, -11.575], "size": [2, 2, 3], "pivot": [-1.25, 47.3, -10.075], "rotation": [-40, 0, 0], "uv": [0, 0], "mirror": true}, + {"origin": [-1.25, 49.05, -11.575], "size": [0, 3, 3], "pivot": [-1.25, 47.3, -10.075], "rotation": [-40, 0, 0], "uv": [12, -3], "mirror": true}, + {"origin": [-22.25, 49.05, -11.575], "size": [0, 3, 3], "pivot": [-22.25, 47.3, -10.075], "rotation": [-29.5635, 3.61928, -49.65666], "uv": [12, -3], "mirror": true}, + {"origin": [-23.25, 47.05, -11.575], "size": [2, 2, 3], "pivot": [-22.25, 47.3, -10.075], "rotation": [-29.5635, 3.61928, -49.65666], "uv": [0, 0], "mirror": true}, + {"origin": [-1.25, -4.05, -11.575], "size": [0, 3, 3], "pivot": [-1.25, 0.7, -10.075], "rotation": [40, 0, 0], "uv": [12, -3], "mirror": true}, + {"origin": [-2.25, -1.05, -11.575], "size": [2, 2, 3], "pivot": [-1.25, 0.7, -10.075], "rotation": [40, 0, 0], "uv": [0, 0], "mirror": true}, + {"origin": [-2.25, -2.05, -26.375], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-1.25, -5.05, -26.375], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-2.25, -2.05, -43.375], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-1.25, -5.05, -43.375], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-2.25, -2.05, -57.375], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-1.25, -5.05, -57.375], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-2.25, -0.85, -73.375], "size": [2, 2, 3], "pivot": [-1.25, 0.9, -71.875], "rotation": [-45, 0, 0], "uv": [0, 0], "mirror": true}, + {"origin": [-1.25, -3.85, -73.375], "size": [0, 3, 3], "pivot": [-1.25, 0.9, -71.875], "rotation": [-45, 0, 0], "uv": [12, -3], "mirror": true}, + {"origin": [-11.25, -2.05, -52.375], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-10.25, -5.05, -52.375], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-11.25, -2.05, -32.375], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-10.25, -5.05, -32.375], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-22.25, -4.05, -11.575], "size": [0, 3, 3], "pivot": [-22.25, 0.7, -10.075], "rotation": [29.5635, 3.61928, 49.65666], "uv": [12, -3], "mirror": true}, + {"origin": [-23.25, -1.05, -11.575], "size": [2, 2, 3], "pivot": [-22.25, 0.7, -10.075], "rotation": [29.5635, 3.61928, 49.65666], "uv": [0, 0], "mirror": true}, + {"origin": [-23.25, -0.85, -73.375], "size": [2, 2, 3], "pivot": [-22.25, 0.9, -71.875], "rotation": [-40.144, 22.32924, 24.25045], "uv": [0, 0], "mirror": true}, + {"origin": [-22.25, -3.85, -73.375], "size": [0, 3, 3], "pivot": [-22.25, 0.9, -71.875], "rotation": [-40.144, 22.32924, 24.25045], "uv": [12, -3], "mirror": true}, + {"origin": [-23.25, -3.55, -43.375], "size": [0, 3, 3], "pivot": [-23.25, -0.8, -41.875], "rotation": [0, 0, 40], "uv": [12, -3], "mirror": true}, + {"origin": [-24.25, -0.55, -43.375], "size": [2, 2, 3], "pivot": [-23.25, -0.8, -41.875], "rotation": [0, 0, 40], "uv": [0, 0], "mirror": true}, + {"origin": [-17.25, 43.05, 30.425], "size": [2, 2, 3], "pivot": [-16.25, 43.3, 31.925], "rotation": [-29.5635, 3.61928, -49.65666], "uv": [0, 0], "mirror": true}, + {"origin": [-16.25, 45.05, 30.425], "size": [0, 3, 3], "pivot": [-16.25, 43.3, 31.925], "rotation": [-29.5635, 3.61928, -49.65666], "uv": [12, -3], "mirror": true}, + {"origin": [-17.25, 2.95, 30.425], "size": [2, 2, 3], "pivot": [-16.25, 4.7, 31.925], "rotation": [29.5635, 3.61928, 49.65666], "uv": [0, 0], "mirror": true}, + {"origin": [-16.25, -0.05, 30.425], "size": [0, 3, 3], "pivot": [-16.25, 4.7, 31.925], "rotation": [29.5635, 3.61928, 49.65666], "uv": [12, -3], "mirror": true}, + {"origin": [-10.25, 1.95, 15.625], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-9.25, -1.05, 15.625], "size": [0, 3, 3], "uv": [12, -3], "mirror": true}, + {"origin": [-5.25, 1.95, 0.625], "size": [2, 2, 3], "uv": [0, 0], "mirror": true}, + {"origin": [-4.25, -1.05, 0.625], "size": [0, 3, 3], "uv": [12, -3], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/butterfly.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/butterfly.geo.json new file mode 100644 index 00000000..eb758d80 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/butterfly.geo.json @@ -0,0 +1,192 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 5, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "bone2", + "pivot": [0, 4.16667, 7.5] + }, + { + "name": "bone", + "parent": "bone2", + "pivot": [0, 4.5, -1] + }, + { + "name": "left_wing", + "parent": "bone", + "pivot": [-2, 6.125, -7], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-2, 6, -15], "size": [0, 10, 16], "uv": [0, 58], "mirror": true} + ] + }, + { + "name": "right_wing_", + "parent": "left_wing", + "pivot": [3, 6, 2], + "rotation": [-7.5, 0, 0], + "cubes": [ + {"origin": [-2, 6, 1], "size": [0, 10, 12], "uv": [64, 0], "mirror": true} + ] + }, + { + "name": "left_wing_3", + "parent": "right_wing_", + "pivot": [-2, 16, 7], + "cubes": [ + {"origin": [-2, 16, 1], "size": [0, 6, 12], "uv": [68, 58], "mirror": true} + ] + }, + { + "name": "left_wing_4", + "parent": "left_wing", + "pivot": [-2, 16, -7], + "cubes": [ + {"origin": [-2, 16, -15], "size": [0, 11, 16], "uv": [54, 31], "mirror": true} + ] + }, + { + "name": "right_wing", + "parent": "bone", + "pivot": [2, 6.125, -7], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [2, 6, -15], "size": [0, 10, 16], "uv": [0, 58]} + ] + }, + { + "name": "left_wing_", + "parent": "right_wing", + "pivot": [-3, 6, 2], + "rotation": [-7.5, 0, 0], + "cubes": [ + {"origin": [2, 6, 1], "size": [0, 10, 12], "uv": [64, 0]} + ] + }, + { + "name": "right_wing_3", + "parent": "left_wing_", + "pivot": [2, 16, 7], + "cubes": [ + {"origin": [2, 16, 1], "size": [0, 6, 12], "uv": [68, 58]} + ] + }, + { + "name": "right_wing_4", + "parent": "right_wing", + "pivot": [2, 16, -7], + "cubes": [ + {"origin": [2, 16, -15], "size": [0, 11, 16], "uv": [54, 31]} + ] + }, + { + "name": "upper_bpdy", + "parent": "bone", + "pivot": [0, 4.81206, -3.04286], + "cubes": [ + {"origin": [-2, 2.5, -4], "size": [4, 4, 5], "inflate": 0.1, "uv": [64, 22]} + ] + }, + { + "name": "head", + "parent": "upper_bpdy", + "pivot": [0, 4.26667, -3.73333], + "cubes": [ + {"origin": [1.2, 3.5, -12], "size": [0, 4, 6], "uv": [50, 74], "mirror": true}, + {"origin": [-1.2, 3.5, -12], "size": [0, 4, 6], "uv": [50, 74]}, + { + "origin": [1, 3.9, -7], + "size": [0.5, 0.5, 0.5], + "inflate": 0.1, + "uv": { + "north": {"uv": [62, 74], "uv_size": [1, 1]}, + "east": {"uv": [62, 74], "uv_size": [1, 1]}, + "south": {"uv": [62, 74], "uv_size": [1, 1]}, + "west": {"uv": [62, 74], "uv_size": [1, 1]}, + "up": {"uv": [62, 74], "uv_size": [1, 1]}, + "down": {"uv": [62, 75], "uv_size": [1, -1]} + } + }, + { + "origin": [-1.5, 3.9, -7], + "size": [0.5, 0.5, 0.5], + "inflate": 0.1, + "uv": { + "north": {"uv": [62, 74], "uv_size": [1, 1]}, + "east": {"uv": [62, 74], "uv_size": [1, 1]}, + "south": {"uv": [62, 74], "uv_size": [1, 1]}, + "west": {"uv": [62, 74], "uv_size": [1, 1]}, + "up": {"uv": [62, 74], "uv_size": [1, 1]}, + "down": {"uv": [62, 75], "uv_size": [1, -1]} + } + }, + {"origin": [-1.5, 3, -7], "size": [3, 3, 3], "uv": [82, 22]} + ] + }, + { + "name": "tongue", + "parent": "head", + "pivot": [0, 3.69778, -6.87646], + "cubes": [ + {"origin": [0, -0.30222, -9.87646], "size": [0, 4, 6], "uv": [62, 76]} + ] + }, + { + "name": "legs", + "parent": "upper_bpdy", + "pivot": [0, 3.94741, -0.96667], + "cubes": [ + {"origin": [-2.2, -0.1, 0], "size": [1, 4, 1], "pivot": [-1.7, 3.9, 0.5], "rotation": [0, 0, 12.5], "uv": [32, 83]}, + {"origin": [-2.2, -0.1, -1.4], "size": [1, 4, 1], "pivot": [-1.7, 3.9, -0.9], "rotation": [0, 0, 12.5], "uv": [32, 83]}, + {"origin": [-2.2, -0.1, -3], "size": [1, 4, 1], "pivot": [-1.7, 3.9, -2.5], "rotation": [0, 0, 12.5], "uv": [32, 83]}, + {"origin": [1.2, -0.1, 0], "size": [1, 4, 1], "pivot": [1.7, 3.9, 0.5], "rotation": [0, 0, -12.5], "uv": [32, 83], "mirror": true}, + {"origin": [1.2, -0.1, -1.4], "size": [1, 4, 1], "pivot": [1.7, 3.9, -0.9], "rotation": [0, 0, -12.5], "uv": [32, 83], "mirror": true}, + {"origin": [1.2, -0.1, -3], "size": [1, 4, 1], "pivot": [1.7, 3.9, -2.5], "rotation": [0, 0, -12.5], "uv": [32, 83], "mirror": true} + ] + }, + { + "name": "tail", + "parent": "bone", + "pivot": [0, 4.5, 1.25], + "cubes": [ + {"origin": [-2, 2.5, 5], "size": [4, 4, 5], "uv": [32, 74]}, + {"origin": [-1.5, 3, 1], "size": [3, 3, 4], "uv": [74, 76]} + ] + }, + { + "name": "cocoon", + "parent": "bone2", + "pivot": [0, 4.16667, 7.5], + "cubes": [ + {"origin": [-7, -2, -17], "size": [14, 13, 18], "uv": [0, 0]} + ] + }, + { + "name": "cocoon_2", + "parent": "cocoon", + "pivot": [0, 4, -0.25], + "cubes": [ + {"origin": [-5.5, -1, 1], "size": [11, 11, 16], "uv": [0, 31]} + ] + }, + { + "name": "cocoon_3", + "parent": "cocoon_2", + "pivot": [0, 3.5, 16.5], + "cubes": [ + {"origin": [-4.5, 0, 17], "size": [9, 7, 9], "uv": [32, 58]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/caterpillar.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/caterpillar.geo.json new file mode 100644 index 00000000..c4d09851 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/caterpillar.geo.json @@ -0,0 +1,111 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 5, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "bone2", + "pivot": [0, 4.16667, 7.5] + }, + { + "name": "cocoon", + "parent": "bone2", + "pivot": [0, 4.16667, 7.5], + "cubes": [ + {"origin": [-7, -2, -17], "size": [14, 13, 18], "uv": [0, 0]} + ] + }, + { + "name": "cocoon_2", + "parent": "cocoon", + "pivot": [-0.75, 2.25, -0.5], + "cubes": [ + {"origin": [-5.5, -1, 1], "size": [11, 11, 16], "uv": [0, 31]} + ] + }, + { + "name": "cocoon_3", + "parent": "cocoon_2", + "pivot": [0, 3.5, 16.5], + "cubes": [ + {"origin": [-4.5, 0, 17], "size": [9, 7, 9], "uv": [54, 52]} + ] + }, + { + "name": "bone", + "parent": "bone2", + "pivot": [0, 2.5, -1.09445] + }, + { + "name": "upper_body", + "parent": "bone", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-5, 0, -6], "size": [10, 9, 12], "uv": [54, 31]} + ] + }, + { + "name": "head", + "parent": "bone", + "pivot": [0, 4, -8.61667], + "cubes": [ + {"origin": [-2, 0.5, -13], "size": [4, 3, 1], "uv": [42, 58]}, + {"origin": [-2, -0.5, -13], "size": [1, 1, 1], "uv": [50, 62]}, + {"origin": [1, -0.5, -13], "size": [1, 1, 1], "uv": [50, 62], "mirror": true}, + {"origin": [-4.5, 0, -12], "size": [9, 8, 6], "uv": [0, 58]}, + {"origin": [2.6, 2, -12.1], "size": [2, 2, 2], "uv": [42, 62]}, + {"origin": [-4.6, 2, -12.1], "size": [2, 2, 2], "uv": [42, 62], "mirror": true} + ] + }, + { + "name": "right_antenna", + "parent": "head", + "pivot": [-2.5, 6.5, -12], + "cubes": [ + {"origin": [-3.5, 5, -16], "size": [2, 3, 4], "uv": [30, 58]} + ] + }, + { + "name": "left_antenna", + "parent": "head", + "pivot": [2.5, 6.5, -12], + "cubes": [ + {"origin": [1.5, 5, -16], "size": [2, 3, 4], "uv": [30, 58], "mirror": true} + ] + }, + { + "name": "tail", + "parent": "bone", + "pivot": [0, 3.5, 5.33333], + "cubes": [ + {"origin": [-4.5, 0, 6], "size": [9, 8, 4], "uv": [64, 13]} + ] + }, + { + "name": "tail_2", + "parent": "tail", + "pivot": [0, 3.25, 9], + "cubes": [ + {"origin": [-4, 0, 10], "size": [8, 7, 6], "uv": [64, 0]} + ] + }, + { + "name": "tail_3", + "parent": "tail_2", + "pivot": [0, 3, 16], + "cubes": [ + {"origin": [-3.5, 0, 16], "size": [7, 6, 6], "uv": [30, 68]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/cheep.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/cheep.geo.json new file mode 100644 index 00000000..f2b650ac --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/cheep.geo.json @@ -0,0 +1,75 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [-6, 7, 3.5], + "cubes": [ + {"origin": [-6, 2, -4], "size": [12, 12, 12], "uv": [0, 0]}, + {"origin": [-0.5, 14, -3], "size": [1, 3, 11], "uv": [38, 24]}, + {"origin": [-0.5, 11, 8], "size": [1, 4, 2], "uv": [42, 53]}, + {"origin": [0, 17, -3], "size": [0, 4, 11], "uv": [38, 38]}, + {"origin": [0, 10.4, 8], "size": [0, 9, 4], "pivot": [0, 15.4, 11], "rotation": [5, 0, 0], "uv": [34, 53]}, + {"origin": [-6.2, 9.4, -4.2], "size": [6, 3, 3], "pivot": [-3.7, 10.4, -2.7], "rotation": [0, 0, 5], "uv": [48, 0]}, + {"origin": [0.2, 9.4, -4.2], "size": [6, 3, 3], "pivot": [3.7, 10.4, -2.7], "rotation": [0, 0, -5], "uv": [48, 0], "mirror": true} + ] + }, + { + "name": "jaw", + "parent": "bone", + "pivot": [0, 4, -0.5], + "cubes": [ + {"origin": [-6, 2.5, -7], "size": [12, 3, 7], "inflate": 0.01, "uv": [0, 35]} + ] + }, + { + "name": "mouth", + "parent": "bone", + "pivot": [0, 7.5, 0.4], + "cubes": [ + {"origin": [-6, 5.5, -7.1], "size": [12, 4, 7], "inflate": 0.2, "uv": [0, 24]} + ] + }, + { + "name": "right_arm", + "parent": "bone", + "pivot": [-6, 7, 3.5], + "cubes": [ + {"origin": [-7, 2, 0], "size": [2, 5, 7], "uv": [0, 45]}, + {"origin": [-6.5, 0, 0], "size": [1, 2, 7], "uv": [18, 45]}, + {"origin": [-6, -2, 0], "size": [0, 2, 7], "uv": [48, 12]} + ] + }, + { + "name": "left_arm", + "parent": "bone", + "pivot": [6, 7, 3.5], + "cubes": [ + {"origin": [5, 2, 0], "size": [2, 5, 7], "uv": [0, 45], "mirror": true}, + {"origin": [5.5, 0, 0], "size": [1, 2, 7], "uv": [18, 45], "mirror": true}, + {"origin": [6, -2, 0], "size": [0, 2, 7], "uv": [48, 12], "mirror": true} + ] + }, + { + "name": "tail", + "parent": "bone", + "pivot": [0, 6, 8.25], + "cubes": [ + {"origin": [-1, 3, 7.5], "size": [2, 6, 2], "uv": [0, 81]}, + {"origin": [0, 2, 9.5], "size": [0, 8, 5], "uv": [12, 77]} + ] + } + ] + } + ] +} \ No newline at end of file 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 new file mode 100644 index 00000000..aa4ba54b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/cloud_shark.geo.json @@ -0,0 +1,171 @@ +{ + "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 new file mode 100644 index 00000000..22d0bcdf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/creeping_horror.geo.json @@ -0,0 +1,194 @@ +{ + "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/dimensional_tear.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/dimensional_tear.geo.json new file mode 100644 index 00000000..08bf61ec --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/dimensional_tear.geo.json @@ -0,0 +1,59 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 512, + "texture_height": 512, + "visible_bounds_width": 11, + "visible_bounds_height": 10, + "visible_bounds_offset": [0, 1, 0] + }, + "bones": [ + { + "name": "tear", + "pivot": [1.83622, 14.33358, -8.27273], + "cubes": [ + {"origin": [-40, -41, 1], "size": [80, 80, 0], "uv": [0, 80]}, + {"origin": [-40, -41, 4], "size": [80, 80, 0], "inflate": 2, "uv": [0, 0]} + ] + }, + { + "name": "group", + "parent": "tear", + "pivot": [0, 4, 10], + "cubes": [ + {"origin": [-75, -45, 10], "size": [150, 98, 0], "uv": [178, 14]} + ] + }, + { + "name": "content", + "parent": "tear", + "pivot": [13, 0, 0], + "cubes": [ + {"origin": [-40, -41, -3], "size": [80, 80, 0], "uv": [0, 160]}, + {"origin": [-60, -60, -9], "size": [80, 80, 0], "uv": [0, 160]}, + {"origin": [-11, -6, -9], "size": [80, 80, 0], "uv": [0, 160]} + ] + }, + { + "name": "light_left", + "parent": "tear", + "pivot": [0, 7, 1], + "cubes": [ + {"origin": [0, 6, -63], "size": [0, 2, 64], "uv": [162, 67]} + ] + }, + { + "name": "light_right", + "parent": "tear", + "pivot": [0, 7, 1], + "cubes": [ + {"origin": [0, 6, -63], "size": [0, 2, 64], "uv": [162, 67], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/dorrie.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/dorrie.geo.json new file mode 100644 index 00000000..074a5581 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/dorrie.geo.json @@ -0,0 +1,201 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 256, + "visible_bounds_width": 7, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "Dorrie", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "Dorrie", + "pivot": [0, 8.2, 4.4] + }, + { + "name": "right_arm", + "parent": "body", + "pivot": [-8.5, 7.75, -2], + "cubes": [ + {"origin": [-25.5, 6, -6], "size": [17, 3, 9], "uv": [7, 88]} + ] + }, + { + "name": "right_thumb", + "parent": "right_arm", + "pivot": [-23.5, 7, -6], + "cubes": [ + {"origin": [-25.5, 7, -10], "size": [4, 0, 4], "uv": [20, 72]} + ] + }, + { + "name": "right_finger", + "parent": "right_arm", + "pivot": [-25.5, 7, -1.5], + "cubes": [ + {"origin": [-33.5, 7, -6], "size": [8, 0, 9], "uv": [23, 79]} + ] + }, + { + "name": "left_arm", + "parent": "body", + "pivot": [8.5, 7.75, -2], + "cubes": [ + {"origin": [8.5, 6, -6], "size": [17, 3, 9], "uv": [7, 88], "mirror": true} + ] + }, + { + "name": "left_thumb", + "parent": "left_arm", + "pivot": [23.5, 7, -6], + "cubes": [ + {"origin": [21.5, 7, -10], "size": [4, 0, 4], "uv": [20, 72], "mirror": true} + ] + }, + { + "name": "left_finger", + "parent": "left_arm", + "pivot": [25.5, 7, -1.5], + "cubes": [ + {"origin": [25.5, 7, -6], "size": [8, 0, 9], "uv": [23, 79], "mirror": true} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [4.5, 7.75, 18], + "cubes": [ + {"origin": [4.5, 6, 14], "size": [17, 3, 9], "uv": [7, 88], "mirror": true} + ] + }, + { + "name": "left_toe", + "parent": "left_leg", + "pivot": [19.5, 7, 14], + "cubes": [ + {"origin": [17.5, 7, 8], "size": [4, 0, 6], "uv": [26, 71], "mirror": true} + ] + }, + { + "name": "left_toe2", + "parent": "left_leg", + "pivot": [21.5, 7, 18.5], + "cubes": [ + {"origin": [21.5, 7, 14], "size": [10, 0, 9], "uv": [41, 80], "mirror": true} + ] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-4.5, 7.75, 18], + "cubes": [ + {"origin": [-21.5, 6, 14], "size": [17, 3, 9], "uv": [7, 88]} + ] + }, + { + "name": "right_toe", + "parent": "right_leg", + "pivot": [-19.5, 7, 14], + "cubes": [ + {"origin": [-21.5, 7, 8], "size": [4, 0, 6], "uv": [26, 71]} + ] + }, + { + "name": "right_toe2", + "parent": "right_leg", + "pivot": [-21.5, 7, 18.5], + "cubes": [ + {"origin": [-31.5, 7, 14], "size": [10, 0, 9], "uv": [41, 80]} + ] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 15, 7], + "cubes": [ + {"origin": [-11.5, 6, 3], "size": [23, 13, 13], "inflate": 0.1, "uv": [0, 126]}, + {"origin": [-10.5, 0, -10], "size": [21, 18, 30], "inflate": 0.1, "uv": [0, 0]}, + {"origin": [-15.75, 9, -5], "size": [5, 9, 14], "uv": [73, 125]} + ] + }, + { + "name": "tail", + "parent": "torso", + "pivot": [0, 12.5, 20], + "cubes": [ + {"origin": [-4, 4, 20], "size": [8, 14, 12], "inflate": 0.05, "uv": [0, 100]} + ] + }, + { + "name": "tail2", + "parent": "tail", + "pivot": [0, 14, 32], + "cubes": [ + {"origin": [-4, 10, 32], "size": [8, 8, 12], "uv": [59, 80]} + ] + }, + { + "name": "neck", + "parent": "torso", + "pivot": [0, 16, -5.175], + "cubes": [ + {"origin": [-6, 12, -10.175], "size": [12, 13, 10], "uv": [66, 57]}, + {"origin": [-6, 14, -10.175], "size": [12, 13, 10], "inflate": 0.1, "uv": [72, 0]} + ] + }, + { + "name": "neck2", + "parent": "neck", + "pivot": [0, 25, -5.175], + "cubes": [ + {"origin": [-4, 24, -9.175], "size": [8, 8, 8], "uv": [0, 71]} + ] + }, + { + "name": "head", + "parent": "neck2", + "pivot": [0, 31, -6.00833], + "cubes": [ + {"origin": [-5, 31, -11.175], "size": [10, 13, 10], "inflate": 0.1, "uv": [0, 48]}, + {"origin": [-8, 31, -9.175], "size": [3, 6, 7], "uv": [40, 60]}, + {"origin": [5, 31, -9.175], "size": [3, 6, 7], "uv": [0, 9]}, + {"origin": [-5, 33, -15.175], "size": [10, 5, 4], "uv": [76, 48]}, + {"origin": [-6, 33, -21.175], "size": [12, 6, 6], "uv": [40, 48]} + ] + }, + { + "name": "goggle", + "parent": "head", + "pivot": [0, 41, -6.175], + "cubes": [ + {"origin": [-6, 37, -12.175], "size": [12, 8, 12], "inflate": 0.1, "uv": [47, 102]} + ] + }, + { + "name": "eyes_closed", + "parent": "head", + "pivot": [0, 40.95, -8.75], + "cubes": [ + {"origin": [-5, 37.95, -10.25], "size": [10, 6, 3], "inflate": 0.1, "uv": [28, 100]} + ] + }, + { + "name": "jaw", + "parent": "head", + "pivot": [0, 33, -11.175], + "cubes": [ + {"origin": [-4, 31, -18.175], "size": [8, 2, 7], "uv": [0, 0]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/easter_bunny.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/easter_bunny.geo.json new file mode 100644 index 00000000..f04a07ad --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/easter_bunny.geo.json @@ -0,0 +1,107 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "egg", + "pivot": [0, 4.5, -16], + "cubes": [ + {"origin": [-3, 0, -19], "size": [6, 9, 6], "uv": [35, 33]} + ] + }, + { + "name": "bunny", + "pivot": [0, 2.66667, 3.33333] + }, + { + "name": "torso", + "parent": "bunny", + "pivot": [0, 3, 3], + "cubes": [ + {"origin": [-3, 0, -4], "size": [6, 7, 8], "inflate": -0.01, "uv": [0, 0]}, + {"origin": [-3, 0, -4], "size": [6, 7, 8], "uv": [0, 46]}, + {"origin": [-2, 3, 3], "size": [4, 4, 3], "pivot": [0, 5, 4.5], "rotation": [20, 0, 0], "uv": [44, 1]} + ] + }, + { + "name": "left_paw", + "parent": "torso", + "pivot": [4, 0.75, -3.5], + "cubes": [ + {"origin": [3, 0, -8], "size": [2, 1, 5], "uv": [38, 20]} + ] + }, + { + "name": "right_paw", + "parent": "torso", + "pivot": [-4, 0.75, -3.5], + "cubes": [ + {"origin": [-5, 0, -8], "size": [2, 1, 5], "uv": [38, 26]} + ] + }, + { + "name": "head", + "parent": "torso", + "pivot": [0, 5, -4], + "cubes": [ + {"origin": [-0.5, 1, -11], "size": [1, 4, 0], "inflate": 0.01, "uv": [5, 26]}, + {"origin": [-2, 3, -11], "size": [4, 5, 7], "uv": [0, 23]}, + {"origin": [-1, 1, -11], "size": [2, 2, 0], "uv": [28, 9]} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 8.5, -6], + "cubes": [ + {"origin": [-4, 8.1, -10], "size": [8, 1, 8], "inflate": 0.01, "uv": [31, 54]}, + {"origin": [-2, 9.1, -8], "size": [4, 4, 4], "inflate": 0.01, "uv": [22, 23]} + ] + }, + { + "name": "right_ear", + "parent": "head", + "pivot": [-2, 7.5, -6], + "cubes": [ + {"origin": [-3, 1, -8], "size": [1, 7, 4], "uv": [32, 9]} + ] + }, + { + "name": "left_ear", + "parent": "head", + "pivot": [2, 7.5, -6], + "cubes": [ + {"origin": [2, 1, -8], "size": [1, 7, 4], "uv": [0, 35]} + ] + }, + { + "name": "right_leg", + "parent": "bunny", + "pivot": [-4.5, 2.5, 3.5], + "cubes": [ + {"origin": [-6, 0, 1], "size": [3, 5, 4], "uv": [28, 0]}, + {"origin": [-6, 0, -1], "size": [3, 1, 2], "uv": [32, 20]} + ] + }, + { + "name": "left_leg", + "parent": "bunny", + "pivot": [4.5, 2.5, 3.5], + "cubes": [ + {"origin": [3, 0, 1], "size": [3, 5, 4], "uv": [22, 31]}, + {"origin": [3, 0, -1], "size": [3, 1, 2], "uv": [10, 35]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/elka.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/elka.geo.json new file mode 100644 index 00000000..83bf0d6c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/elka.geo.json @@ -0,0 +1,111 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "panda", + "pivot": [0, 19.6, -0.4] + }, + { + "name": "body", + "parent": "panda", + "pivot": [0, 19.6, -0.4] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-6.5, 18, -12.5], + "cubes": [ + {"origin": [-10.5, 0, -17], "size": [8, 18, 9], "inflate": 0.01, "uv": [72, 73]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [6.5, 18, -12.5], + "cubes": [ + {"origin": [2.5, 0, -17], "size": [8, 18, 9], "inflate": 0.01, "uv": [72, 73], "mirror": true} + ] + }, + { + "name": "right_back_leg", + "parent": "body", + "pivot": [-6.5, 17, 12.5], + "cubes": [ + {"origin": [-10.5, 0, 8], "size": [8, 17, 9], "uv": [64, 47]} + ] + }, + { + "name": "left_back_leg", + "parent": "body", + "pivot": [6.5, 17, 12.5], + "cubes": [ + {"origin": [2.5, 0, 8], "size": [8, 17, 9], "uv": [64, 47], "mirror": true} + ] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 28, -2], + "cubes": [ + {"origin": [-10.5, 16, -17], "size": [21, 24, 15], "inflate": 0.1, "uv": [0, 76]} + ] + }, + { + "name": "head", + "parent": "torso", + "pivot": [4.5, 23, -23], + "cubes": [ + {"origin": [-5.5, 16, -34], "size": [11, 7, 6], "uv": [0, 25]}, + {"origin": [-8.5, 16, -28], "size": [17, 14, 11], "uv": [0, 0]}, + {"origin": [-21.5, 28, -21], "size": [13, 10, 0], "uv": [101, 66]}, + {"origin": [8.5, 28, -21], "size": [13, 10, 0], "uv": [101, 66], "mirror": true}, + {"origin": [-4.5, 28, -29], "size": [2, 5, 2], "uv": [0, 0]}, + {"origin": [2.5, 28, -29], "size": [2, 5, 2], "uv": [0, 0], "mirror": true} + ] + }, + { + "name": "jaw", + "parent": "head", + "pivot": [0, 17, -27.5], + "cubes": [ + {"origin": [-5.5, 15, -33.5], "size": [11, 2, 6], "inflate": -0.1, "uv": [0, 59]} + ] + }, + { + "name": "right_ear", + "parent": "head", + "pivot": [-6.5, 29, -24], + "cubes": [ + {"origin": [-10.5, 29, -25], "size": [8, 6, 2], "uv": [0, 38]} + ] + }, + { + "name": "left_ear", + "parent": "head", + "pivot": [6.5, 29, -24], + "cubes": [ + {"origin": [2.5, 29, -25], "size": [8, 6, 2], "uv": [0, 38], "mirror": true} + ] + }, + { + "name": "back", + "parent": "torso", + "pivot": [0, 25, -2], + "cubes": [ + {"origin": [-10.5, 14, -2], "size": [21, 22, 19], "inflate": 0.05, "uv": [48, 6]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/elka_baby.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/elka_baby.geo.json new file mode 100644 index 00000000..23efa651 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/elka_baby.geo.json @@ -0,0 +1,109 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "baby_elka", + "pivot": [0, 0, -7] + }, + { + "name": "body", + "parent": "baby_elka", + "pivot": [0, 11, 1] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 6, -2.5], + "cubes": [ + {"origin": [-6, 6, -7], "size": [12, 12, 9], "inflate": 0.1, "uv": [0, 0]} + ] + }, + { + "name": "head", + "parent": "torso", + "pivot": [-0.8, 10.3, -7.05], + "cubes": [ + {"origin": [-5, 6, -15], "size": [10, 9, 8], "uv": [40, 23]}, + {"origin": [-3, 6.5, -18], "size": [6, 4, 3], "uv": [0, 46]}, + {"origin": [-3, 14, -16], "size": [2, 4, 2], "uv": [14, 40]}, + {"origin": [1, 14, -16], "size": [2, 4, 2], "uv": [14, 40], "mirror": true} + ] + }, + { + "name": "jaw", + "parent": "head", + "pivot": [0, 6.75, -15], + "cubes": [ + {"origin": [-3, 5.75, -18], "size": [6, 1, 3], "inflate": -0.05, "uv": [41, 19]} + ] + }, + { + "name": "right_ear", + "parent": "head", + "pivot": [-4, 13, -11.5], + "cubes": [ + {"origin": [-7, 13, -12], "size": [6, 5, 1], "uv": [0, 40]} + ] + }, + { + "name": "left_ear", + "parent": "head", + "pivot": [4, 13, -11.5], + "cubes": [ + {"origin": [1, 13, -12], "size": [6, 5, 1], "uv": [0, 40], "mirror": true} + ] + }, + { + "name": "back", + "parent": "torso", + "pivot": [0, 10.5, 2], + "cubes": [ + {"origin": [-6, 5, 2], "size": [12, 11, 8], "uv": [0, 21]} + ] + }, + { + "name": "back_left_leg", + "parent": "body", + "pivot": [4, 5, 6], + "cubes": [ + {"origin": [2, 0, 4], "size": [4, 8, 4], "inflate": -0.05, "uv": [42, 0], "mirror": true} + ] + }, + { + "name": "back_right_leg", + "parent": "body", + "pivot": [-4, 5, 6], + "cubes": [ + {"origin": [-6, 0, 4], "size": [4, 8, 4], "inflate": -0.05, "uv": [42, 0]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [4, 6, -5], + "cubes": [ + {"origin": [2, 0, -7], "size": [4, 8, 4], "uv": [56, 10], "mirror": true} + ] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-4, 6, -5], + "cubes": [ + {"origin": [-6, 0, -7], "size": [4, 8, 4], "uv": [56, 10]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/emperor_scorpion.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/emperor_scorpion.geo.json new file mode 100644 index 00000000..f66614f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/emperor_scorpion.geo.json @@ -0,0 +1,290 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 256, + "visible_bounds_width": 15, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "Emperor_scorpion", + "pivot": [0, 8, 3] + }, + { + "name": "body", + "parent": "Emperor_scorpion", + "pivot": [0, 13.77778, 4.77778] + }, + { + "name": "right_leg3", + "parent": "body", + "pivot": [-16, 14.5, 1.5], + "cubes": [ + {"origin": [-48, 13, -2], "size": [32, 3, 7], "uv": [44, 214], "mirror": true} + ] + }, + { + "name": "right_leg4", + "parent": "right_leg3", + "pivot": [-48, 16, 1.5], + "cubes": [ + {"origin": [-80, 13, -2], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224], "mirror": true}, + {"origin": [-97, 12, -3], "size": [17, 5, 9], "uv": [67, 143], "mirror": true} + ] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-16, 14.5, -5.5], + "cubes": [ + {"origin": [-48, 13, -9], "size": [32, 3, 7], "uv": [44, 214], "mirror": true} + ] + }, + { + "name": "right_leg2", + "parent": "right_leg", + "pivot": [-48, 16, -5.5], + "cubes": [ + {"origin": [-80, 13, -9], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224], "mirror": true}, + {"origin": [-97, 12, -10], "size": [17, 5, 9], "uv": [67, 143], "mirror": true} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [16, 14.5, -5.5], + "cubes": [ + {"origin": [16, 13, -9], "size": [32, 3, 7], "uv": [44, 214]} + ] + }, + { + "name": "left_leg2", + "parent": "left_leg", + "pivot": [48, 16, -5.5], + "cubes": [ + {"origin": [48, 13, -9], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224]}, + {"origin": [80, 12, -10], "size": [17, 5, 9], "uv": [67, 143]} + ] + }, + { + "name": "left_leg3", + "parent": "body", + "pivot": [16, 14.5, 1.5], + "cubes": [ + {"origin": [16, 13, -2], "size": [32, 3, 7], "uv": [44, 214]} + ] + }, + { + "name": "left_leg4", + "parent": "left_leg3", + "pivot": [48, 16, 1.5], + "cubes": [ + {"origin": [48, 13, -2], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224]}, + {"origin": [80, 12, -3], "size": [17, 5, 9], "uv": [67, 143]} + ] + }, + { + "name": "left_leg_back", + "parent": "body", + "pivot": [16, 14.5, 8.5], + "cubes": [ + {"origin": [16, 13, 5], "size": [32, 3, 7], "uv": [44, 214]} + ] + }, + { + "name": "left_leg_back2", + "parent": "left_leg_back", + "pivot": [48, 16, 8.5], + "cubes": [ + {"origin": [48, 13, 5], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224]}, + {"origin": [80, 12, 4], "size": [17, 5, 9], "uv": [67, 143]} + ] + }, + { + "name": "right_leg_back", + "parent": "body", + "pivot": [-16, 14.5, 8.5], + "cubes": [ + {"origin": [-48, 13, 5], "size": [32, 3, 7], "uv": [44, 214], "mirror": true} + ] + }, + { + "name": "right_leg_back2", + "parent": "right_leg_back", + "pivot": [-48, 16, 8.5], + "cubes": [ + {"origin": [-80, 13, 5], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224], "mirror": true}, + {"origin": [-97, 12, 4], "size": [17, 5, 9], "uv": [67, 143], "mirror": true} + ] + }, + { + "name": "left_leg_back3", + "parent": "body", + "pivot": [16, 14.5, 15.5], + "cubes": [ + {"origin": [16, 13, 12], "size": [32, 3, 7], "uv": [44, 214]} + ] + }, + { + "name": "left_leg_back4", + "parent": "left_leg_back3", + "pivot": [48, 16, 15.5], + "cubes": [ + {"origin": [48, 13, 12], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224]}, + {"origin": [80, 12, 11], "size": [17, 5, 9], "uv": [67, 143]} + ] + }, + { + "name": "right_leg_back3", + "parent": "body", + "pivot": [-16, 14.5, 15.5], + "cubes": [ + {"origin": [-48, 13, 12], "size": [32, 3, 7], "uv": [44, 214], "mirror": true} + ] + }, + { + "name": "right_leg_back4", + "parent": "right_leg_back3", + "pivot": [-48, 16, 15.5], + "cubes": [ + {"origin": [-80, 13, 12], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224], "mirror": true}, + {"origin": [-97, 12, 11], "size": [17, 5, 9], "uv": [67, 143], "mirror": true} + ] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 8, 3], + "cubes": [ + {"origin": [-16, 8, -13], "size": [32, 11, 32], "uv": [0, 100]} + ] + }, + { + "name": "tail_base", + "parent": "torso", + "pivot": [0, 14.5, 18.25], + "cubes": [ + {"origin": [-12, 8, 19], "size": [24, 11, 19], "uv": [0, 143]} + ] + }, + { + "name": "tail", + "parent": "tail_base", + "pivot": [0, 15.5, 38], + "cubes": [ + {"origin": [-6.5, 12, 38], "size": [13, 7, 25], "uv": [0, 173]} + ] + }, + { + "name": "tail2", + "parent": "tail", + "pivot": [0, 15.5, 63], + "cubes": [ + {"origin": [-5.5, 12, 97], "size": [11, 22, 11], "uv": [0, 205]}, + {"origin": [0, 34, 100], "size": [0, 15, 8], "uv": [51, 165]}, + {"origin": [-4.5, 12, 63], "size": [9, 7, 34], "uv": [42, 173]} + ] + }, + { + "name": "head", + "parent": "torso", + "pivot": [0, 13.5, -13], + "cubes": [ + {"origin": [-14, 8, -35], "size": [28, 11, 22], "uv": [0, 0]} + ] + }, + { + "name": "right_mandibule", + "parent": "head", + "pivot": [-9.13234, 15.5, -35.71164], + "cubes": [ + {"origin": [-8, 5, -37], "size": [7, 13, 8], "pivot": [0, 13.5, -46], "rotation": [0, -22.5, 0], "uv": [54, 79]} + ] + }, + { + "name": "left_mandibule", + "parent": "head", + "pivot": [9.13234, 15.5, -35.71164], + "cubes": [ + {"origin": [1, 5, -37], "size": [7, 13, 8], "pivot": [0, 13.5, -46], "rotation": [0, 22.5, 0], "uv": [0, 81]} + ] + }, + { + "name": "right_arm", + "parent": "head", + "pivot": [-10, 13, -21], + "cubes": [ + {"origin": [-28, 11, -25], "size": [18, 4, 7], "uv": [64, 44]} + ] + }, + { + "name": "right_arm2", + "parent": "right_arm", + "pivot": [-28, 13, -18], + "cubes": [ + {"origin": [-46, 11, -25], "size": [18, 4, 7], "uv": [64, 33]} + ] + }, + { + "name": "right_claw", + "parent": "right_arm2", + "pivot": [-44, 13, -21], + "cubes": [ + {"origin": [-57, 9, -27], "size": [13, 8, 11], "uv": [54, 60]}, + {"origin": [-67, 10, -29], "size": [12, 6, 15], "uv": [0, 60]}, + {"origin": [-91, 10, -22], "size": [24, 6, 8], "uv": [0, 33]}, + {"origin": [-91, 10, -29], "size": [8, 6, 7], "uv": [84, 79]} + ] + }, + { + "name": "right_claw_open", + "parent": "right_claw", + "pivot": [-58.5, 13, -22.5], + "cubes": [ + {"origin": [-83, 10, -30], "size": [25, 6, 7], "inflate": -0.1, "uv": [0, 47]} + ] + }, + { + "name": "left_arm", + "parent": "head", + "pivot": [10, 13, -21], + "cubes": [ + {"origin": [10, 11, -25], "size": [18, 4, 7], "uv": [64, 44], "mirror": true} + ] + }, + { + "name": "left_arm2", + "parent": "left_arm", + "pivot": [28, 13, -18], + "cubes": [ + {"origin": [28, 11, -25], "size": [18, 4, 7], "uv": [64, 33], "mirror": true} + ] + }, + { + "name": "left_claw", + "parent": "left_arm2", + "pivot": [44, 13, -21], + "cubes": [ + {"origin": [44, 9, -27], "size": [13, 8, 11], "uv": [54, 60], "mirror": true}, + {"origin": [55, 10, -29], "size": [12, 6, 15], "uv": [0, 60], "mirror": true}, + {"origin": [67, 10, -22], "size": [24, 6, 8], "uv": [0, 33], "mirror": true}, + {"origin": [83, 10, -29], "size": [8, 6, 7], "uv": [84, 79], "mirror": true} + ] + }, + { + "name": "left_claw_open", + "parent": "left_claw", + "pivot": [58.5, 13, -22.5], + "cubes": [ + {"origin": [58, 10, -30], "size": [25, 6, 7], "inflate": -0.1, "uv": [0, 47], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/fallen_king_crown.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/fallen_king_crown.geo.json new file mode 100644 index 00000000..c8f22646 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/fallen_king_crown.geo.json @@ -0,0 +1,83 @@ +{ + "format_version": "1.21.110", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.fallen_king_crown - Converted", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [8, 0, -8], + "cubes": [ + { + "origin": [-4.5, 0, 4.5], + "size": [9, 9, 0], + "uv": { + "north": {"uv": [18, 0], "uv_size": [-9, 9]}, + "east": {"uv": [9, 0], "uv_size": [9, 9]}, + "south": {"uv": [9, 0], "uv_size": [9, 9]}, + "west": {"uv": [9, 0], "uv_size": [9, 9]}, + "up": {"uv": [18, 9], "uv_size": [-9, -9]}, + "down": {"uv": [18, 9], "uv_size": [-9, -9]} + } + }, + { + "origin": [4.5, 0, -4.5], + "size": [0, 9, 9], + "uv": { + "north": {"uv": [9, 9], "uv_size": [9, 9]}, + "east": {"uv": [18, 9], "uv_size": [-9, 9]}, + "south": {"uv": [9, 9], "uv_size": [9, 9]}, + "west": {"uv": [9, 9], "uv_size": [9, 9]}, + "up": {"uv": [18, 18], "uv_size": [-9, -9]}, + "down": {"uv": [18, 18], "uv_size": [-9, -9]} + } + }, + { + "origin": [-4.5, 0, -4.5], + "size": [0, 9, 9], + "uv": { + "north": {"uv": [0, 9], "uv_size": [9, 9]}, + "east": {"uv": [0, 9], "uv_size": [9, 9]}, + "south": {"uv": [0, 9], "uv_size": [9, 9]}, + "west": {"uv": [9, 9], "uv_size": [-9, 9]}, + "up": {"uv": [9, 18], "uv_size": [-9, -9]}, + "down": {"uv": [9, 18], "uv_size": [-9, -9]} + } + }, + { + "origin": [-4.5, 0, -4.5], + "size": [9, 9, 0], + "uv": { + "north": {"uv": [0, 0], "uv_size": [9, 9]}, + "east": {"uv": [0, 0], "uv_size": [9, 9]}, + "south": {"uv": [9, 0], "uv_size": [-9, 9]}, + "west": {"uv": [0, 0], "uv_size": [9, 9]}, + "up": {"uv": [9, 9], "uv_size": [-9, -9]}, + "down": {"uv": [9, 9], "uv_size": [-9, -9]} + } + }, + { + "origin": [-1, 5.5, -4.6], + "size": [2, 3, 0], + "uv": { + "north": {"uv": [30, 29], "uv_size": [2, 3]}, + "east": {"uv": [0, 14], "uv_size": [2, 3]}, + "south": {"uv": [2, 14], "uv_size": [-2, 3]}, + "west": {"uv": [0, 14], "uv_size": [2, 3]}, + "up": {"uv": [2, 17], "uv_size": [-2, -3]}, + "down": {"uv": [2, 17], "uv_size": [-2, -3]} + } + } + ] + } + ] + } + ] +} \ 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 new file mode 100644 index 00000000..b7ce482a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/flying_squirrel.geo.json @@ -0,0 +1,139 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "squirrel", + "pivot": [0, 1, 0] + }, + { + "name": "left_leg", + "parent": "squirrel", + "pivot": [3, 5, 3.25], + "cubes": [ + {"origin": [2, 0, 1.25], "size": [2, 5, 4], "uv": [0, 30]}, + {"origin": [2, 0, -0.75], "size": [2, 1, 2], "uv": [35, 8]} + ] + }, + { + "name": "right_leg", + "parent": "squirrel", + "pivot": [-3, 5, 3.25], + "cubes": [ + {"origin": [-4, 0, 1.25], "size": [2, 5, 4], "uv": [0, 30], "mirror": true}, + {"origin": [-4, 0, -0.75], "size": [2, 1, 2], "uv": [35, 8], "mirror": true} + ] + }, + { + "name": "body", + "parent": "squirrel", + "pivot": [0, 4, 2], + "cubes": [ + {"origin": [0, 8.5, -6], "size": [0, 3, 11], "uv": [23, 30]} + ] + }, + { + "name": "body_2", + "parent": "body", + "pivot": [0, 6, -0.5], + "cubes": [ + {"origin": [-3, 3.5, -6], "size": [6, 5, 11], "uv": [0, 0]}, + {"origin": [-3, 5.5, -6], "size": [6, 3, 11], "inflate": 0.2, "uv": [0, 41]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 7.33333, -5.91667], + "cubes": [ + {"origin": [-2, 4.5, -11], "size": [4, 5, 5], "uv": [17, 17]}, + {"origin": [-1, 3.75, -11.075], "size": [2, 2, 0], "uv": [25, 1]} + ] + }, + { + "name": "left_cheeks", + "parent": "head", + "pivot": [2.5, 6, -8.5], + "cubes": [ + {"origin": [2, 4.5, -9], "size": [1, 2, 2], "uv": [30, 18], "mirror": true} + ] + }, + { + "name": "right_cheeks", + "parent": "head", + "pivot": [-2.5, 6, -8.5], + "cubes": [ + {"origin": [-3, 4.5, -9], "size": [1, 2, 2], "uv": [16, 18]} + ] + }, + { + "name": "left_ear", + "parent": "head", + "pivot": [1, 9.5, -6.5], + "cubes": [ + {"origin": [1, 9.5, -7], "size": [2, 2, 0], "uv": [36, 13]} + ] + }, + { + "name": "right_ear", + "parent": "head", + "pivot": [-1, 9.5, -6.5], + "cubes": [ + {"origin": [-3, 9.5, -7], "size": [2, 2, 0], "uv": [36, 13], "mirror": true} + ] + }, + { + "name": "tail", + "parent": "body", + "pivot": [0, 6, 5], + "cubes": [ + {"origin": [-1.5, 5, 5], "size": [3, 11, 3], "uv": [14, 27]}, + {"origin": [-1.5, 9, 8], "size": [3, 7, 5], "uv": [0, 17]}, + {"origin": [0, 9, 13], "size": [0, 7, 2], "uv": [0, 0]} + ] + }, + { + "name": "left_arm", + "parent": "body", + "pivot": [3, 5, -4.5], + "cubes": [ + {"origin": [2, 0, -5.5], "size": [2, 5, 2], "uv": [35, 0]} + ] + }, + { + "name": "left_flying_part", + "parent": "left_arm", + "pivot": [3, 5, -1], + "cubes": [ + {"origin": [3, 0, -3.5], "size": [0, 5, 5], "inflate": 0.01, "uv": [26, 22]} + ] + }, + { + "name": "right_arm", + "parent": "body", + "pivot": [-3, 5, -4.5], + "cubes": [ + {"origin": [-4, 0, -5.5], "size": [2, 5, 2], "uv": [35, 0], "mirror": true} + ] + }, + { + "name": "right_flying_part", + "parent": "right_arm", + "pivot": [-3, 5, -1], + "cubes": [ + {"origin": [-3, 0, -3.5], "size": [0, 5, 5], "inflate": 0.01, "uv": [26, 22], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/gamma_jerry.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/gamma_jerry.geo.json new file mode 100644 index 00000000..a8dc5c5f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/gamma_jerry.geo.json @@ -0,0 +1,226 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.gammajerry", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 6, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 13, -3], + "cubes": [ + {"origin": [-8, 2, -8], "size": [16, 16, 16], "uv": [0, 0]}, + {"origin": [-4, 6, -4], "size": [8, 8, 8], "uv": [64, 0]}, + {"origin": [0, 2, -8], "size": [0, 16, 16], "uv": [52, 57]}, + {"origin": [-8, 2, 0], "size": [16, 16, 0], "uv": [64, 16]}, + {"origin": [-8.5, 9.9, -8.5], "size": [17, 12, 8], "pivot": [0, 9.9, -0.5], "rotation": [5, 0, 0], "uv": [52, 37]}, + {"origin": [-9, 9.75, -1.925], "size": [18, 13, 8], "uv": [0, 37]}, + {"origin": [-4.5, 10, -12.5], "size": [9, 7, 4], "uv": [84, 57]}, + {"origin": [-4.5, 10, -12.5], "size": [9, 7, 0], "inflate": 0.25, "uv": [100, 84]}, + {"origin": [-4.5, 10, -12.5], "size": [9, 7, 0], "inflate": 0.5, "uv": [100, 91]}, + {"origin": [-5.5, 13, -10], "size": [11, 1, 1], "inflate": -0.05, "uv": [84, 72]}, + {"origin": [-5, 12.5, -10.5], "size": [10, 2, 2], "inflate": -0.05, "uv": [84, 68]}, + {"origin": [-5.5, 12, -11], "size": [11, 1, 1], "uv": [84, 72]}, + {"origin": [-5, 11.5, -11.5], "size": [10, 2, 2], "uv": [84, 68]}, + {"origin": [-5.5, 14, -11], "size": [11, 1, 1], "inflate": 0.05, "uv": [84, 72]}, + {"origin": [-5, 13.5, -11.5], "size": [10, 2, 2], "inflate": 0.05, "uv": [84, 68]} + ] + }, + { + "name": "tail1", + "parent": "body", + "pivot": [0, 21.775, 6.075], + "rotation": [-5, 0, 0], + "cubes": [ + {"origin": [-8.5, 9.80386, 6.06833], "size": [17, 12, 8], "uv": [52, 37]} + ] + }, + { + "name": "tail2", + "parent": "tail1", + "pivot": [0, 20.96821, 14.04442], + "rotation": [-10, 0, 0], + "cubes": [ + {"origin": [-7.5, 9.9837, 14.02548], "size": [15, 11, 6], "uv": [0, 58]} + ] + }, + { + "name": "tail3", + "parent": "tail2", + "pivot": [0, 18.96538, 20.04064], + "rotation": [-5, 0, 0], + "cubes": [ + {"origin": [-5.5, 9.99664, 20.00703], "size": [11, 9, 4], "uv": [0, 75]} + ] + }, + { + "name": "tail4", + "parent": "tail3", + "pivot": [0, 10.03043, 24.00795], + "rotation": [5, 0, 0], + "cubes": [ + {"origin": [-1.5, 9.99685, 24.00409], "size": [3, 5, 4], "uv": [0, 88]} + ] + }, + { + "name": "tail5", + "parent": "tail4", + "pivot": [0, 10.00353, 28.01924], + "rotation": [10, 0, 0], + "cubes": [ + {"origin": [-1, 9.99958, 28.00316], "size": [2, 2, 2], "uv": [28, 88]} + ] + }, + { + "name": "topHeadClawThing", + "parent": "body", + "pivot": [0, 17, -10.5], + "cubes": [ + {"origin": [-1, 17, -12.5], "size": [2, 4, 2], "uv": [30, 75]}, + {"origin": [-0.5, 21, -13.5], "size": [1, 2, 2], "uv": [84, 88]}, + {"origin": [0, 23, -15.5], "size": [0, 3, 3], "uv": [36, 88]} + ] + }, + { + "name": "leftHeadClawThing", + "parent": "body", + "pivot": [4, 10, -10.5], + "cubes": [ + {"origin": [3, 6, -12.5], "size": [2, 4, 2], "uv": [20, 88]}, + {"origin": [3.5, 4, -13.5], "size": [1, 2, 2], "uv": [48, 89]}, + {"origin": [4, 1, -15.5], "size": [0, 3, 3], "uv": [42, 88]} + ] + }, + { + "name": "rightHeadClawThing", + "parent": "body", + "pivot": [-4, 10, -10.5], + "cubes": [ + {"origin": [-5, 6, -12.5], "size": [2, 4, 2], "uv": [20, 88], "mirror": true}, + {"origin": [-4.5, 4, -13.5], "size": [1, 2, 2], "uv": [48, 89], "mirror": true}, + {"origin": [-4, 1, -15.5], "size": [0, 3, 3], "uv": [42, 88], "mirror": true} + ] + }, + { + "name": "leftFrontThigh", + "parent": "root", + "pivot": [4.5, 10, -8.5], + "cubes": [ + {"origin": [3.5, 8.5, -9.5], "size": [12, 3, 2], "inflate": 0.025, "uv": [78, 32]} + ] + }, + { + "name": "leftFrontLeg", + "parent": "leftFrontThigh", + "pivot": [14.5, 10.5, -8.5], + "cubes": [ + {"origin": [15.5, 6.5, -9.5], "size": [1, 10, 2], "uv": [14, 88]}, + {"origin": [13.5, 8.5, -9], "size": [2, 24, 1], "uv": [42, 58], "mirror": true} + ] + }, + { + "name": "leftFrontFoot", + "parent": "leftFrontLeg", + "pivot": [16.5, 33.5, -8.5], + "cubes": [ + {"origin": [36.5, 33.5, -10], "size": [8, 2, 3], "inflate": 0.25, "pivot": [40.5, 33.5, -3.5], "rotation": [0, 0, 24], "uv": [30, 83], "mirror": true}, + {"origin": [12.5, 31.5, -10], "size": [36, 2, 3], "uv": [0, 32], "mirror": true}, + {"origin": [39, 29.625, -8.5], "size": [4, 1, 0], "pivot": [39, 31.625, -3.5], "rotation": [0, 0, -24], "uv": [30, 81]} + ] + }, + { + "name": "leftBackThigh", + "parent": "root", + "pivot": [4.5, 10, 1.5], + "cubes": [ + {"origin": [3.5, 8.5, 0.5], "size": [12, 3, 2], "inflate": 0.025, "uv": [78, 32]} + ] + }, + { + "name": "leftBackLeg", + "parent": "leftBackThigh", + "pivot": [14.5, 10.5, 1.5], + "cubes": [ + {"origin": [15.5, 6.5, 0.5], "size": [1, 10, 2], "uv": [14, 88]}, + {"origin": [13.5, 8.5, 1], "size": [2, 24, 1], "uv": [42, 58], "mirror": true} + ] + }, + { + "name": "leftBackFoot", + "parent": "leftBackLeg", + "pivot": [16.5, 33.5, 1.5], + "cubes": [ + {"origin": [36.5, 33.5, 0], "size": [8, 2, 3], "inflate": 0.25, "pivot": [40.5, 33.5, -3.5], "rotation": [0, 0, 24], "uv": [30, 83], "mirror": true}, + {"origin": [39, 29.625, 1.5], "size": [4, 1, 0], "pivot": [39, 31.625, -3.5], "rotation": [0, 0, -24], "uv": [30, 81]}, + {"origin": [12.5, 31.5, 0], "size": [36, 2, 3], "uv": [0, 32], "mirror": true} + ] + }, + { + "name": "rightFrontThigh", + "parent": "root", + "pivot": [-4.5, 10, -8.5], + "cubes": [ + {"origin": [-15.5, 8.5, -9.5], "size": [12, 3, 2], "inflate": 0.025, "uv": [78, 32], "mirror": true} + ] + }, + { + "name": "rightFrontLeg", + "parent": "rightFrontThigh", + "pivot": [-14.5, 10.5, -8.5], + "cubes": [ + {"origin": [-15.5, 8.5, -9], "size": [2, 24, 1], "uv": [42, 58]}, + {"origin": [-16.5, 6.5, -9.5], "size": [1, 10, 2], "uv": [14, 88], "mirror": true} + ] + }, + { + "name": "rightFrontFoot", + "parent": "rightFrontLeg", + "pivot": [-16.5, 33.5, -8.5], + "cubes": [ + {"origin": [-48.5, 31.5, -10], "size": [36, 2, 3], "uv": [0, 32]}, + {"origin": [-44.5, 33.5, -10], "size": [8, 2, 3], "inflate": 0.25, "pivot": [-40.5, 33.5, -3.5], "rotation": [0, 0, -24], "uv": [30, 83]}, + {"origin": [-43, 29.625, -8.5], "size": [4, 1, 0], "pivot": [-39, 31.625, -3.5], "rotation": [0, 0, 24], "uv": [30, 81], "mirror": true} + ] + }, + { + "name": "rightBackThigh", + "parent": "root", + "pivot": [-4.5, 10, 1.5], + "cubes": [ + {"origin": [-15.5, 8.5, 0.5], "size": [12, 3, 2], "inflate": 0.025, "uv": [78, 32], "mirror": true} + ] + }, + { + "name": "rightBackLeg", + "parent": "rightBackThigh", + "pivot": [-14.5, 10.5, 1.5], + "cubes": [ + {"origin": [-15.5, 8.5, 1], "size": [2, 24, 1], "uv": [42, 58]}, + {"origin": [-16.5, 6.5, 0.5], "size": [1, 10, 2], "uv": [14, 88], "mirror": true} + ] + }, + { + "name": "rightBackFoot", + "parent": "rightBackLeg", + "pivot": [-16.5, 33.5, 1.5], + "cubes": [ + {"origin": [-48.5, 31.5, 0], "size": [36, 2, 3], "uv": [0, 32]}, + {"origin": [-44.5, 33.5, 0], "size": [8, 2, 3], "inflate": 0.25, "pivot": [-40.5, 33.5, -3.5], "rotation": [0, 0, -24], "uv": [30, 83]}, + {"origin": [-43, 29.625, 1.5], "size": [4, 1, 0], "pivot": [-39, 31.625, -3.5], "rotation": [0, 0, 24], "uv": [30, 81], "mirror": true} + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/gravity_gun.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/gravity_gun.geo.json new file mode 100644 index 00000000..c1aee484 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/gravity_gun.geo.json @@ -0,0 +1,66 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "gravity_gun", + "pivot": [0, 6.65493, 7.77323], + "rotation": [1, 0, 0], + "cubes": [ + {"origin": [-2.5, 3.7, 0.05], "size": [5, 5, 5], "uv": [0, 22]} + ] + }, + { + "name": "handle_all", + "parent": "gravity_gun", + "pivot": [0, 4.56478, 4.56136], + "cubes": [ + {"origin": [-2, 3.65, 6], "size": [4, 4, 4], "pivot": [0, -0.35, 8], "rotation": [35, 0, 0], "uv": [22, 0]} + ] + }, + { + "name": "handle", + "parent": "handle_all", + "pivot": [0, 4.56464, 4.56418], + "rotation": [90, 0, 0], + "cubes": [ + {"origin": [-4, 4.65, 7], "size": [8, 2, 2], "pivot": [0, -0.35, 8], "rotation": [35, 0, 0], "uv": [22, 8]}, + {"origin": [3, 0.65, 7], "size": [1, 4, 2], "pivot": [-0.5, -0.35, 8], "rotation": [35, 0, 0], "uv": [30, 21]}, + {"origin": [-3, 0.65, 7], "size": [6, 1, 2], "pivot": [-7, -0.35, 8], "rotation": [35, 0, 0], "uv": [22, 18]}, + {"origin": [-4, 0.65, 7], "size": [1, 4, 2], "pivot": [-7.5, -0.35, 8], "rotation": [35, 0, 0], "uv": [0, 32]} + ] + }, + { + "name": "barrel", + "parent": "gravity_gun", + "pivot": [0, 6.2, 0], + "cubes": [ + {"origin": [-2, 4.2, -6.45], "size": [4, 4, 7], "inflate": -0.2, "uv": [0, 11]}, + {"origin": [-2, 4.2, -6.45], "size": [4, 4, 7], "uv": [0, 0]} + ] + }, + { + "name": "tip", + "parent": "barrel", + "pivot": [0, 6.2, -6.475], + "cubes": [ + {"origin": [-2.5, 8.7, -9.47], "size": [5, 0, 3], "uv": [27, 12]}, + {"origin": [2.5, 3.7, -9.47], "size": [0, 5, 3], "uv": [26, 27]}, + {"origin": [-2.5, 3.7, -9.47], "size": [5, 0, 3], "uv": [22, 15]}, + {"origin": [-2.5, 3.7, -9.47], "size": [0, 5, 3], "uv": [20, 27]}, + {"origin": [-2.5, 3.7, -6.47], "size": [5, 5, 0], "uv": [20, 22]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/growth_ray.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/growth_ray.geo.json new file mode 100644 index 00000000..46056769 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/growth_ray.geo.json @@ -0,0 +1,65 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "growth_ray", + "pivot": [0, 6, 7] + }, + { + "name": "handle", + "parent": "growth_ray", + "pivot": [0, 6, 7], + "cubes": [ + {"origin": [-1, 0, 6], "size": [2, 6, 2], "pivot": [0, 6, 7], "rotation": [10, 0, 0], "uv": [0, 23]}, + {"origin": [-1, 2.48798, 2.98412], "size": [2, 1, 4], "inflate": -0.005, "pivot": [0, 2.98798, 5.98412], "rotation": [-21, 0, 0], "uv": [22, 6]}, + {"origin": [-1, 3.61298, 3.00912], "size": [2, 1.5, 1], "uv": [12, 23]} + ] + }, + { + "name": "ray_body", + "parent": "growth_ray", + "pivot": [0, 11, 1], + "cubes": [ + {"origin": [-2, 5, 3], "size": [4, 4, 6], "uv": [20, 11]}, + {"origin": [0, 5, 9], "size": [0, 2, 2], "uv": [8, 23]} + ] + }, + { + "name": "blaster", + "parent": "ray_body", + "pivot": [0, 7, 0], + "cubes": [ + {"origin": [-1.5, 5.5, 0], "size": [3, 3, 3], "uv": [22, 0]}, + {"origin": [0, 8, 2], "size": [0, 2, 10], "uv": [0, 11]} + ] + }, + { + "name": "blaster_end", + "parent": "blaster", + "pivot": [0, 7, 1.5], + "cubes": [ + {"origin": [-3, 4, -9], "size": [6, 6, 5], "uv": [0, 0]} + ] + }, + { + "name": "blaster_rotating", + "parent": "blaster", + "pivot": [0, 7, -2], + "cubes": [ + {"origin": [-1, 6, -4], "size": [2, 2, 4], "uv": [20, 21]} + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/hercules_beetle.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/hercules_beetle.geo.json new file mode 100644 index 00000000..8dee48f1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/hercules_beetle.geo.json @@ -0,0 +1,212 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 512, + "texture_height": 512, + "visible_bounds_width": 15, + "visible_bounds_height": 5.5, + "visible_bounds_offset": [0, 2.25, 0] + }, + "bones": [ + { + "name": "Hercules_beetle", + "pivot": [0, 11.49286, 5.85714] + }, + { + "name": "body", + "parent": "Hercules_beetle", + "pivot": [0, 11.49286, 5.85714] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 11.25, 0], + "cubes": [ + {"origin": [-20, 11.2, -18], "size": [40, 31, 58], "uv": [0, 160]} + ] + }, + { + "name": "wingcase", + "parent": "torso", + "pivot": [0, 42.7, -19] + }, + { + "name": "left_wingcase", + "parent": "wingcase", + "pivot": [0, 42.7, -19], + "cubes": [ + {"origin": [17, 41.2, -12], "size": [6, 14, 6], "pivot": [18, 50.2, -16], "rotation": [0, 0, 22.5], "uv": [156, 298]}, + {"origin": [0, 18.2, -19], "size": [21, 25, 60], "uv": [196, 160]} + ] + }, + { + "name": "right_wingcase", + "parent": "wingcase", + "pivot": [0, 42.7, -19], + "cubes": [ + {"origin": [-21, 18.2, -19], "size": [21, 25, 60], "uv": [218, 0]}, + {"origin": [-23, 41.2, -12], "size": [6, 14, 6], "pivot": [-18, 50.2, -16], "rotation": [0, 0, -22.5], "uv": [334, 311]} + ] + }, + { + "name": "right_wing", + "parent": "torso", + "pivot": [0, 42.2, -18], + "cubes": [ + {"origin": [-29, 42.275, -18], "size": [29, 0, 80], "pivot": [-3, 0, 0], "rotation": [0, -22.5, 0], "uv": [0, 0]}, + {"origin": [-29, 42.2, -18], "size": [29, 0, 80], "uv": [0, 80], "mirror": true} + ] + }, + { + "name": "left_wing", + "parent": "torso", + "pivot": [0, 42.2, -18], + "cubes": [ + {"origin": [0, 42.275, -18], "size": [29, 0, 80], "pivot": [3, 0, 0], "rotation": [0, 22.5, 0], "uv": [0, 0], "mirror": true}, + {"origin": [0, 42.2, -18], "size": [29, 0, 80], "uv": [0, 80]} + ] + }, + { + "name": "neck", + "parent": "torso", + "pivot": [0, 26.2, -12], + "cubes": [ + {"origin": [-18.5, 19.2, -33], "size": [37, 27, 24], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [218, 85]}, + {"origin": [-18.5, 39.2, -33], "size": [37, 7, 14], "inflate": 0.5, "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [320, 15]}, + {"origin": [-19.75, 22.2, -33], "size": [0, 24, 14], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [320, 22]}, + {"origin": [19.75, 22.2, -33], "size": [0, 24, 14], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [320, 22], "mirror": true}, + {"origin": [-18.5, 47.2, -24], "size": [37, 10, 5], "inflate": 0.5, "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [320, 0]}, + {"origin": [-17.5, 11.2, -30], "size": [35, 33, 18], "inflate": 0.05, "uv": [196, 245]} + ] + }, + { + "name": "basket_right", + "parent": "neck", + "pivot": [-24.5, 41.19827, -27.2321], + "cubes": [ + {"origin": [-29, 37.2, -35], "size": [0, 12, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 42]}, + {"origin": [-20, 37.2, -35], "size": [0, 12, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 54]}, + {"origin": [-29, 37.2, -35], "size": [9, 12, 0], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 48]}, + {"origin": [-29, 37.2, -17], "size": [9, 12, 0], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 84]}, + {"origin": [-29, 37.2, -35], "size": [9, 0, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 42]} + ] + }, + { + "name": "basket_left", + "parent": "neck", + "pivot": [24.5, 41.19827, -27.2321], + "cubes": [ + {"origin": [29, 37.2, -35], "size": [0, 12, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 42], "mirror": true}, + {"origin": [20, 37.2, -35], "size": [0, 12, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 54], "mirror": true}, + {"origin": [20, 37.2, -35], "size": [9, 12, 0], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 48], "mirror": true}, + {"origin": [20, 37.2, -17], "size": [9, 12, 0], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 84], "mirror": true}, + {"origin": [20, 37.2, -35], "size": [9, 0, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 42], "mirror": true} + ] + }, + { + "name": "head", + "parent": "neck", + "pivot": [0, 24.7, -27], + "cubes": [ + {"origin": [-13.5, 9.2, -39], "size": [27, 31, 12], "uv": [182, 296]} + ] + }, + { + "name": "upper_mandibule", + "parent": "head", + "pivot": [0, 40.42222, -32.05556], + "cubes": [ + {"origin": [-5.5, 32.2, -72], "size": [11, 16, 33], "uv": [94, 249]}, + {"origin": [-4.5, 32.2, -110], "size": [9, 11, 38], "uv": [0, 249]}, + {"origin": [-4.5, 32.2, -120], "size": [9, 11, 46], "inflate": 0.5, "uv": [140, 161]}, + {"origin": [-4.5, 26.2, -120], "size": [9, 17, 10], "uv": [72, 308]}, + {"origin": [-1.5, 25.2, -82], "size": [3, 7, 6], "uv": [288, 339]}, + {"origin": [-2.5, 48.2, -67], "size": [5, 13, 9], "uv": [110, 328]}, + {"origin": [-1.5, 61.2, -64], "size": [3, 8, 6], "uv": [270, 339]}, + {"origin": [-1, 56.2, -70], "size": [2, 4, 3], "uv": [182, 249]}, + {"origin": [-1, 48.2, -70], "size": [2, 4, 3], "uv": [182, 256]}, + {"origin": [-3.5, 16.2, -118], "size": [7, 10, 8], "uv": [334, 293]} + ] + }, + { + "name": "lower_mandibule", + "parent": "head", + "pivot": [0, 15.28333, -38.91667], + "cubes": [ + {"origin": [-3.5, 10.2, -65], "size": [7, 10, 29], "uv": [0, 298]}, + {"origin": [-15.5, 10.2, -50], "size": [12, 0, 14], "pivot": [-7, 10.2, -50.5], "rotation": [37.5, 0, 0], "uv": [302, 255]}, + {"origin": [3.5, 10.2, -50], "size": [12, 0, 14], "pivot": [7, 10.2, -50.5], "rotation": [37.5, 0, 0], "uv": [302, 269]}, + {"origin": [-3.5, 7.2, -95], "size": [7, 13, 30], "uv": [260, 296]}, + {"origin": [-2.5, 10.2, -105], "size": [5, 10, 10], "uv": [138, 328]}, + {"origin": [-2.5, 20.2, -105], "size": [5, 10, 8], "uv": [334, 331]}, + {"origin": [-1.5, 20.2, -62], "size": [3, 6, 5], "uv": [306, 339]}, + {"origin": [-1.5, 20.2, -52], "size": [3, 6, 5], "uv": [340, 85]} + ] + }, + { + "name": "right_leg3", + "parent": "body", + "pivot": [-12.33333, 12.7, 5.5], + "cubes": [ + {"origin": [-45.5, 11.2, 2], "size": [33, 3, 7], "inflate": 0.1, "uv": [218, 136]}, + {"origin": [-63.5, 11.2, 3], "size": [18, 0, 5], "uv": [302, 283]}, + {"origin": [-71.5, 11.2, 1], "size": [8, 0, 9], "uv": [72, 335]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [12.33333, 12.7, -21.5], + "cubes": [ + {"origin": [12.5, 11.2, -25], "size": [33, 3, 7], "inflate": 0.1, "uv": [218, 146]}, + {"origin": [45.5, 11.2, -24], "size": [18, 0, 5], "uv": [302, 288]}, + {"origin": [63.5, 11.2, -26], "size": [8, 0, 9], "uv": [0, 337]} + ] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-12.33333, 12.7, -21.5], + "cubes": [ + {"origin": [-45.5, 11.2, -25], "size": [33, 3, 7], "inflate": 0.1, "uv": [72, 298]}, + {"origin": [-63.5, 11.2, -24], "size": [18, 0, 5], "uv": [110, 308]}, + {"origin": [-71.5, 11.2, -26], "size": [8, 0, 9], "uv": [34, 337]} + ] + }, + { + "name": "left_leg3", + "parent": "body", + "pivot": [12.33333, 12.7, 5.5], + "cubes": [ + {"origin": [12.5, 11.2, 2], "size": [33, 3, 7], "inflate": 0.1, "uv": [298, 136]}, + {"origin": [45.5, 11.2, 3], "size": [18, 0, 5], "uv": [110, 313]}, + {"origin": [63.5, 11.2, 1], "size": [8, 0, 9], "uv": [168, 339]} + ] + }, + { + "name": "left_leg2", + "parent": "body", + "pivot": [12.33333, 12.7, -9.5], + "cubes": [ + {"origin": [12.5, 11.2, -13], "size": [33, 3, 7], "inflate": 0.1, "uv": [298, 146]}, + {"origin": [45.5, 11.2, -12], "size": [18, 0, 5], "uv": [110, 318]}, + {"origin": [63.5, 11.2, -14], "size": [8, 0, 9], "uv": [202, 339]} + ] + }, + { + "name": "right_leg2", + "parent": "body", + "pivot": [-12.33333, 12.7, -9.5], + "cubes": [ + {"origin": [-45.5, 11.2, -13], "size": [33, 3, 7], "inflate": 0.1, "uv": [302, 245]}, + {"origin": [-63.5, 11.2, -12], "size": [18, 0, 5], "uv": [110, 323]}, + {"origin": [-71.5, 11.2, -14], "size": [8, 0, 9], "uv": [236, 339]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/infant_jerry.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/infant_jerry.geo.json new file mode 100644 index 00000000..73636285 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/infant_jerry.geo.json @@ -0,0 +1,64 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.infantjerry", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 1, -0.5] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 3, -0.5], + "cubes": [ + {"origin": [-4, 1, -3.5], "size": [8, 3, 7], "uv": [0, 18]}, + {"origin": [-3, 4, -2.5], "size": [6, 2, 5], "uv": [0, 28]}, + {"origin": [-4, 0, -1.5], "size": [1, 1, 2], "uv": [30, 26]}, + {"origin": [3, 0, -1.5], "size": [1, 1, 2], "uv": [30, 29]} + ] + }, + { + "name": "gel", + "parent": "body", + "pivot": [0, 2.5, 0], + "cubes": [ + {"origin": [-5, 2, -4.5], "size": [10, 9, 9], "uv": [0, 0]} + ] + }, + { + "name": "eye1", + "parent": "body", + "pivot": [-3, 6, -2.5], + "cubes": [ + {"origin": [-4, 5, -3.5], "size": [2, 2, 2], "uv": [30, 18]} + ] + }, + { + "name": "eye2", + "parent": "body", + "pivot": [0, 6, -1.5], + "cubes": [ + {"origin": [-1, 6, -2.5], "size": [2, 2, 2], "uv": [30, 18]} + ] + }, + { + "name": "eye3", + "parent": "body", + "pivot": [3, 6, -2.5], + "cubes": [ + {"origin": [2, 5, -3.5], "size": [2, 2, 2], "uv": [30, 18]} + ] + } + ] + } + ] +} 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 new file mode 100644 index 00000000..f6a76b20 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/jumpy_bug.geo.json @@ -0,0 +1,287 @@ +{ + "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/kraken.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/kraken.geo.json new file mode 100644 index 00000000..2138a567 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/kraken.geo.json @@ -0,0 +1,499 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 1024, + "texture_height": 1024, + "visible_bounds_width": 15, + "visible_bounds_height": 34, + "visible_bounds_offset": [0, 0, 0] + }, + "bones": [ + { + "name": "Kraken", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "Kraken", + "pivot": [0, 51, -8], + "cubes": [ + {"origin": [-46.5, 57, -57], "size": [93, 32, 32], "uv": [286, 184]}, + {"origin": [-33, 51, -49], "size": [66, 35, 77], "uv": [0, 184]} + ] + }, + { + "name": "mouth", + "parent": "body", + "pivot": [0, 51, -23.9], + "cubes": [ + {"origin": [-6.5, 20, -44.4], "size": [13, 33, 24], "uv": [169, 296]} + ] + }, + { + "name": "jaw", + "parent": "mouth", + "pivot": [0, 51, -22.4], + "cubes": [ + {"origin": [-6.5, 22, -22.4], "size": [13, 31, 16], "inflate": -0.1, "uv": [340, 0]}, + {"origin": [-5.5, 22, -29.65], "size": [0, 31, 8], "inflate": -0.1, "uv": [323, -6]}, + {"origin": [5.5, 22, -29.65], "size": [0, 31, 8], "inflate": -0.1, "uv": [323, -6], "mirror": true} + ] + }, + { + "name": "head_top", + "parent": "body", + "pivot": [0, 79.25, -6.25], + "cubes": [ + {"origin": [-42.5, 79, -49], "size": [85, 99, 85], "uv": [0, 0]}, + {"origin": [5.5, 79, 13], "size": [103, 172, 0], "uv": [399, 0]}, + {"origin": [-108.5, 79, 13], "size": [103, 172, 0], "uv": [399, 0], "mirror": true}, + {"origin": [-24, 172, -30], "size": [48, 48, 48], "uv": [286, 248]} + ] + }, + { + "name": "right_eye", + "parent": "body", + "pivot": [-53, 73, -41], + "cubes": [ + {"origin": [-59.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296]} + ] + }, + { + "name": "left_eye", + "parent": "body", + "pivot": [53, 73, -41], + "cubes": [ + {"origin": [46.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296], "mirror": true} + ] + }, + { + "name": "l_shoulder", + "parent": "body", + "pivot": [31.1875, 61.375, -12.5], + "cubes": [ + {"origin": [25, 14, -29], "size": [17, 47, 33], "uv": [0, 356]} + ] + }, + { + "name": "l_arm", + "parent": "l_shoulder", + "pivot": [30.85714, 13.92857, -12.5], + "cubes": [ + {"origin": [25, -34, -26], "size": [14, 48, 27], "uv": [86, 296]} + ] + }, + { + "name": "l_arm2", + "parent": "l_arm", + "pivot": [30.66667, -34.00833, -12.5], + "cubes": [ + {"origin": [25, -82, -23], "size": [14, 48, 21], "uv": [100, 371]} + ] + }, + { + "name": "l_arm3", + "parent": "l_arm2", + "pivot": [30.4, -82, -12.5], + "cubes": [ + {"origin": [25, -130, -23], "size": [14, 48, 21], "uv": [170, 371]} + ] + }, + { + "name": "l_arm4", + "parent": "l_arm3", + "pivot": [30, -129.975, -12.5], + "cubes": [ + {"origin": [25, -178, -21], "size": [12, 48, 17], "uv": [243, 330]} + ] + }, + { + "name": "l_hand", + "parent": "l_arm4", + "pivot": [29.66667, -177.99167, -12.5], + "cubes": [ + {"origin": [25, -203, -19], "size": [9, 25, 13], "uv": [242, 398]} + ] + }, + { + "name": "l_hand2", + "parent": "l_hand", + "pivot": [29.75, -203, -12.5], + "cubes": [ + {"origin": [25, -244, -33], "size": [11, 41, 41], "uv": [310, 409]} + ] + }, + { + "name": "l_hand_tip", + "parent": "l_hand2", + "pivot": [29, -244, -12.5], + "cubes": [ + {"origin": [25, -265, -26], "size": [8, 21, 27], "uv": [172, 468]} + ] + }, + { + "name": "Grab", + "parent": "l_hand2", + "pivot": [22, -223.5, -12.5], + "locators": { + "grab": [22, -223.5, -12.5] + } + }, + { + "name": "center_tentacule", + "parent": "body", + "pivot": [0, 58.375, -52.5], + "cubes": [ + {"origin": [-6.1875, 11, -69], "size": [17, 47, 33], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [0, 436]} + ] + }, + { + "name": "center_tentacule2", + "parent": "center_tentacule", + "pivot": [1.48214, 10.92857, -52.5], + "cubes": [ + {"origin": [-6.1875, -37, -66], "size": [14, 48, 27], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [86, 296]} + ] + }, + { + "name": "center_tentacule3", + "parent": "center_tentacule2", + "pivot": [1.29167, -37.00833, -52.5], + "cubes": [ + {"origin": [-6.1875, -85, -63], "size": [14, 48, 21], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [100, 371]} + ] + }, + { + "name": "center_tentacule4", + "parent": "center_tentacule3", + "pivot": [1.025, -85, -52.5], + "cubes": [ + {"origin": [-6.1875, -133, -63], "size": [14, 48, 21], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [170, 371]} + ] + }, + { + "name": "center_tentacule5", + "parent": "center_tentacule4", + "pivot": [-0.375, -132.975, -52.5], + "cubes": [ + {"origin": [-6.1875, -181, -61], "size": [12, 48, 17], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [243, 330]} + ] + }, + { + "name": "center_tentacule6", + "parent": "center_tentacule5", + "pivot": [-0.70833, -180.99167, -52.5], + "cubes": [ + {"origin": [-6.1875, -206, -59], "size": [9, 25, 13], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [242, 398]} + ] + }, + { + "name": "center_tentacule_back", + "parent": "body", + "pivot": [0, 58.375, 24.5], + "cubes": [ + {"origin": [-6.1875, 11, 8], "size": [17, 47, 33], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [0, 436]} + ] + }, + { + "name": "center_tentacule_back2", + "parent": "center_tentacule_back", + "pivot": [1.48214, 10.92857, 24.5], + "cubes": [ + {"origin": [-6.1875, -37, 11], "size": [14, 48, 27], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [86, 296]} + ] + }, + { + "name": "center_tentacule_back3", + "parent": "center_tentacule_back2", + "pivot": [1.29167, -37.00833, 24.5], + "cubes": [ + {"origin": [-6.1875, -85, 14], "size": [14, 48, 21], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [100, 371]} + ] + }, + { + "name": "center_tentacule_back4", + "parent": "center_tentacule_back3", + "pivot": [1.025, -85, 24.5], + "cubes": [ + {"origin": [-6.1875, -133, 14], "size": [14, 48, 21], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [170, 371]} + ] + }, + { + "name": "center_tentacule_back5", + "parent": "center_tentacule_back4", + "pivot": [-0.375, -132.975, 24.5], + "cubes": [ + {"origin": [-6.1875, -181, 16], "size": [12, 48, 17], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [243, 330]} + ] + }, + { + "name": "center_tentacule_back6", + "parent": "center_tentacule_back5", + "pivot": [-0.70833, -180.99167, 24.5], + "cubes": [ + {"origin": [-6.1875, -206, 18], "size": [9, 25, 13], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [242, 398]} + ] + }, + { + "name": "l_back_tentacule", + "parent": "body", + "pivot": [22.1875, 58.375, 14.5], + "cubes": [ + {"origin": [16, 11, -2], "size": [17, 47, 33], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [0, 356]} + ] + }, + { + "name": "l_back_tentacule2", + "parent": "l_back_tentacule", + "pivot": [21.85714, 10.92857, 14.5], + "cubes": [ + {"origin": [16, -37, 1], "size": [14, 48, 27], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [86, 296]} + ] + }, + { + "name": "l_back_tentacule3", + "parent": "l_back_tentacule2", + "pivot": [21.66667, -37.00833, 14.5], + "cubes": [ + {"origin": [16, -85, 4], "size": [14, 48, 21], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [100, 371]} + ] + }, + { + "name": "l_back_tentacule4", + "parent": "l_back_tentacule3", + "pivot": [21.4, -85, 14.5], + "cubes": [ + {"origin": [16, -133, 4], "size": [14, 48, 21], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [170, 371]} + ] + }, + { + "name": "l_back_tentacule5", + "parent": "l_back_tentacule4", + "pivot": [21, -132.975, 14.5], + "cubes": [ + {"origin": [16, -181, 6], "size": [12, 48, 17], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [243, 330]} + ] + }, + { + "name": "l_back_tentacule6", + "parent": "l_back_tentacule5", + "pivot": [20.66667, -180.99167, 14.5], + "cubes": [ + {"origin": [16, -206, 8], "size": [9, 25, 13], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [242, 398]} + ] + }, + { + "name": "r_back_tentacule", + "parent": "body", + "pivot": [-22.1875, 58.375, 14.5], + "cubes": [ + {"origin": [-33, 11, -2], "size": [17, 47, 33], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [0, 356], "mirror": true} + ] + }, + { + "name": "r_back_tentacule2", + "parent": "r_back_tentacule", + "pivot": [-21.85714, 10.92857, 14.5], + "cubes": [ + {"origin": [-30, -37, 1], "size": [14, 48, 27], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [86, 296], "mirror": true} + ] + }, + { + "name": "r_back_tentacule3", + "parent": "r_back_tentacule2", + "pivot": [-21.66667, -37.00833, 14.5], + "cubes": [ + {"origin": [-30, -85, 4], "size": [14, 48, 21], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [100, 371], "mirror": true} + ] + }, + { + "name": "r_back_tentacule4", + "parent": "r_back_tentacule3", + "pivot": [-21.4, -85, 14.5], + "cubes": [ + {"origin": [-30, -133, 4], "size": [14, 48, 21], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [170, 371], "mirror": true} + ] + }, + { + "name": "r_back_tentacule5", + "parent": "r_back_tentacule4", + "pivot": [-21, -132.975, 14.5], + "cubes": [ + {"origin": [-28, -181, 6], "size": [12, 48, 17], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [243, 330], "mirror": true} + ] + }, + { + "name": "r_back_tentacule6", + "parent": "r_back_tentacule5", + "pivot": [-20.66667, -180.99167, 14.5], + "cubes": [ + {"origin": [-25, -206, 8], "size": [9, 25, 13], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [242, 398], "mirror": true} + ] + }, + { + "name": "r_tentacule", + "parent": "body", + "pivot": [-28.1875, 58.375, -42.5], + "cubes": [ + {"origin": [-39, 11, -59], "size": [17, 47, 33], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [0, 356], "mirror": true} + ] + }, + { + "name": "r_tentacule2", + "parent": "r_tentacule", + "pivot": [-27.85714, 10.92857, -42.5], + "cubes": [ + {"origin": [-36, -37, -56], "size": [14, 48, 27], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [86, 296], "mirror": true} + ] + }, + { + "name": "r_tentacule3", + "parent": "r_tentacule2", + "pivot": [-27.66667, -37.00833, -42.5], + "cubes": [ + {"origin": [-36, -85, -53], "size": [14, 48, 21], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [100, 371], "mirror": true} + ] + }, + { + "name": "r_tentacule4", + "parent": "r_tentacule3", + "pivot": [-27.4, -85, -42.5], + "cubes": [ + {"origin": [-36, -133, -53], "size": [14, 48, 21], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [170, 371], "mirror": true} + ] + }, + { + "name": "r_tentacule5", + "parent": "r_tentacule4", + "pivot": [-27, -132.975, -42.5], + "cubes": [ + {"origin": [-34, -181, -51], "size": [12, 48, 17], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [243, 330], "mirror": true} + ] + }, + { + "name": "r_tentacule6", + "parent": "r_tentacule5", + "pivot": [-26.66667, -180.99167, -42.5], + "cubes": [ + {"origin": [-31, -206, -49], "size": [9, 25, 13], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [242, 398], "mirror": true} + ] + }, + { + "name": "l_tentacule", + "parent": "body", + "pivot": [28.1875, 58.375, -42.5], + "cubes": [ + {"origin": [22, 11, -59], "size": [17, 47, 33], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [0, 356]} + ] + }, + { + "name": "l_tentacule2", + "parent": "l_tentacule", + "pivot": [27.85714, 10.92857, -42.5], + "cubes": [ + {"origin": [22, -37, -56], "size": [14, 48, 27], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [86, 296]} + ] + }, + { + "name": "l_tentacule3", + "parent": "l_tentacule2", + "pivot": [27.66667, -37.00833, -42.5], + "cubes": [ + {"origin": [22, -85, -53], "size": [14, 48, 21], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [100, 371]} + ] + }, + { + "name": "l_tentacule4", + "parent": "l_tentacule3", + "pivot": [27.4, -85, -42.5], + "cubes": [ + {"origin": [22, -133, -53], "size": [14, 48, 21], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [170, 371]} + ] + }, + { + "name": "l_tentacule5", + "parent": "l_tentacule4", + "pivot": [27, -132.975, -42.5], + "cubes": [ + {"origin": [22, -181, -51], "size": [12, 48, 17], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [243, 330]} + ] + }, + { + "name": "l_tentacule6", + "parent": "l_tentacule5", + "pivot": [26.66667, -180.99167, -42.5], + "cubes": [ + {"origin": [22, -206, -49], "size": [9, 25, 13], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [242, 398]} + ] + }, + { + "name": "r_shoulder", + "parent": "body", + "pivot": [-31.1875, 61.375, -12.5], + "cubes": [ + {"origin": [-42, 14, -29], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} + ] + }, + { + "name": "r_arm", + "parent": "r_shoulder", + "pivot": [-30.85714, 13.92857, -12.5], + "cubes": [ + {"origin": [-39, -34, -26], "size": [14, 48, 27], "uv": [86, 296], "mirror": true} + ] + }, + { + "name": "r_arm2", + "parent": "r_arm", + "pivot": [-30.66667, -34.00833, -12.5], + "cubes": [ + {"origin": [-39, -82, -23], "size": [14, 48, 21], "uv": [100, 371], "mirror": true} + ] + }, + { + "name": "r_arm3", + "parent": "r_arm2", + "pivot": [-30.4, -82, -12.5], + "cubes": [ + {"origin": [-39, -130, -23], "size": [14, 48, 21], "uv": [170, 371], "mirror": true} + ] + }, + { + "name": "r_arm4", + "parent": "r_arm3", + "pivot": [-30, -129.975, -12.5], + "cubes": [ + {"origin": [-37, -178, -21], "size": [12, 48, 17], "uv": [243, 330], "mirror": true} + ] + }, + { + "name": "r_hand", + "parent": "r_arm4", + "pivot": [-29.66667, -177.99167, -12.5], + "cubes": [ + {"origin": [-34, -203, -19], "size": [9, 25, 13], "uv": [242, 398], "mirror": true} + ] + }, + { + "name": "r_hand2", + "parent": "r_hand", + "pivot": [-29.75, -203, -12.5], + "cubes": [ + {"origin": [-36, -244, -33], "size": [11, 41, 41], "uv": [310, 409], "mirror": true} + ] + }, + { + "name": "r_hand_tip", + "parent": "r_hand2", + "pivot": [-29, -244, -12.5], + "cubes": [ + {"origin": [-33, -265, -26], "size": [8, 21, 27], "uv": [172, 468], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/krakens_grasp.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/krakens_grasp.geo.json new file mode 100644 index 00000000..a8e4f668 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/krakens_grasp.geo.json @@ -0,0 +1,202 @@ +{ + "format_version": "1.21.110", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.kraken_tooth_trident - Converted", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "trident", + "pivot": [1, -8, -1] + }, + { + "name": "handle", + "parent": "trident", + "pivot": [1, -8, -1], + "cubes": [ + { + "origin": [-0.5, -8, -0.5], + "size": [1, 31, 1], + "uv": { + "north": {"uv": [0, 0], "uv_size": [1, 31]}, + "east": {"uv": [0, 0], "uv_size": [1, 31]}, + "south": {"uv": [0, 0], "uv_size": [1, 31]}, + "west": {"uv": [0, 0], "uv_size": [1, 31]}, + "up": {"uv": [1, 31], "uv_size": [-1, -31]}, + "down": {"uv": [1, 31], "uv_size": [-1, -1]} + } + }, + { + "origin": [-2.825, 25.2, -0.5], + "size": [1, 4, 1], + "uv": { + "north": {"uv": [10, 12], "uv_size": [1, 4]}, + "east": {"uv": [12, 10], "uv_size": [1, 4]}, + "south": {"uv": [11, 12], "uv_size": [1, 4]}, + "west": {"uv": [13, 0], "uv_size": [1, 4]}, + "up": {"uv": [16, 6], "uv_size": [1, 1]}, + "down": {"uv": [16, 8], "uv_size": [1, -1]} + } + }, + { + "origin": [1.825, 25.2, -0.5], + "size": [1, 4, 1], + "uv": { + "north": {"uv": [13, 4], "uv_size": [1, 4]}, + "east": {"uv": [13, 8], "uv_size": [1, 4]}, + "south": {"uv": [13, 12], "uv_size": [1, 4]}, + "west": {"uv": [14, 0], "uv_size": [1, 4]}, + "up": {"uv": [16, 8], "uv_size": [1, 1]}, + "down": {"uv": [16, 10], "uv_size": [1, -1]} + } + }, + { + "origin": [-0.7, 25.2, -0.5], + "size": [1.4, 5, 1], + "uv": { + "north": {"uv": [12, 0], "uv_size": [1, 5]}, + "east": {"uv": [12, 5], "uv_size": [1, 5]}, + "south": {"uv": [8, 12], "uv_size": [1, 5]}, + "west": {"uv": [9, 12], "uv_size": [1, 5]}, + "up": {"uv": [10, 16], "uv_size": [1, 1]}, + "down": {"uv": [16, 11], "uv_size": [1, -1]} + } + } + ] + }, + { + "name": "tentacle", + "parent": "handle", + "pivot": [1, -8, -1], + "cubes": [ + { + "origin": [-0.8, -7, -0.8], + "size": [1.6, 31, 1.6], + "uv": { + "north": {"uv": [28, 0], "uv_size": [2, 31]}, + "east": {"uv": [22, 0], "uv_size": [2, 31]}, + "south": {"uv": [26, 1], "uv_size": [2, 31]}, + "west": {"uv": [30, 0], "uv_size": [2, 31]}, + "up": {"uv": [26, 31], "uv_size": [-2, -31]} + } + } + ] + }, + { + "name": "tip_base", + "parent": "trident", + "pivot": [3, -4, -1], + "cubes": [ + { + "origin": [0.5, 23, -1], + "size": [1, 2, 2], + "pivot": [0, 24.5, 0.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [12, 14], "uv_size": [1, 2]}, + "east": {"uv": [14, 4], "uv_size": [2, 2]}, + "south": {"uv": [15, 0], "uv_size": [1, 2]}, + "west": {"uv": [14, 6], "uv_size": [2, 2]}, + "up": {"uv": [15, 2], "uv_size": [1, 2]}, + "down": {"uv": [16, 2], "uv_size": [1, -2]} + } + }, + { + "origin": [1.5, 23, -0.5], + "size": [1, 1, 1], + "pivot": [0, 24.5, 0], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [11, 16], "uv_size": [1, 1]}, + "east": {"uv": [16, 11], "uv_size": [1, 1]}, + "south": {"uv": [12, 16], "uv_size": [1, 1]}, + "west": {"uv": [16, 12], "uv_size": [1, 1]}, + "up": {"uv": [13, 16], "uv_size": [1, 1]}, + "down": {"uv": [16, 14], "uv_size": [1, -1]} + } + }, + { + "origin": [1.5, 27, -0.5], + "size": [1, 1, 1], + "inflate": -0.005, + "pivot": [0, 28.5, 0], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [14, 16], "uv_size": [1, 1]}, + "east": {"uv": [16, 14], "uv_size": [1, 1]}, + "south": {"uv": [15, 16], "uv_size": [1, 1]}, + "west": {"uv": [16, 15], "uv_size": [1, 1]}, + "up": {"uv": [16, 16], "uv_size": [1, 1]}, + "down": {"uv": [17, 1], "uv_size": [1, -1]} + } + }, + { + "origin": [-1.5, 26, -0.5], + "size": [1, 1, 1], + "pivot": [0, 24.5, 0], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [17, 1], "uv_size": [1, 1]}, + "east": {"uv": [17, 2], "uv_size": [1, 1]}, + "south": {"uv": [17, 3], "uv_size": [1, 1]}, + "west": {"uv": [17, 4], "uv_size": [1, 1]}, + "up": {"uv": [17, 5], "uv_size": [1, 1]}, + "down": {"uv": [17, 7], "uv_size": [1, -1]} + } + }, + { + "origin": [-1.5, 30, -0.5], + "size": [1, 1, 1], + "inflate": -0.005, + "pivot": [0, 28.5, 0], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [17, 7], "uv_size": [1, 1]}, + "east": {"uv": [8, 17], "uv_size": [1, 1]}, + "south": {"uv": [17, 8], "uv_size": [1, 1]}, + "west": {"uv": [9, 17], "uv_size": [1, 1]}, + "up": {"uv": [17, 9], "uv_size": [1, 1]}, + "down": {"uv": [10, 18], "uv_size": [1, -1]} + } + }, + { + "origin": [0.625, 31, -0.5], + "size": [1, 1, 1], + "inflate": -0.005, + "pivot": [2.125, 29.5, 0], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [17, 10], "uv_size": [1, 1]}, + "east": {"uv": [11, 17], "uv_size": [1, 1]}, + "south": {"uv": [17, 11], "uv_size": [1, 1]}, + "west": {"uv": [12, 17], "uv_size": [1, 1]}, + "up": {"uv": [17, 12], "uv_size": [1, 1]}, + "down": {"uv": [13, 18], "uv_size": [1, -1]} + } + }, + { + "origin": [-1.5, 23, -1], + "size": [2, 3, 2], + "pivot": [0, 24.5, 0.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [10, 0], "uv_size": [2, 3]}, + "east": {"uv": [10, 3], "uv_size": [2, 3]}, + "south": {"uv": [10, 6], "uv_size": [2, 3]}, + "west": {"uv": [10, 9], "uv_size": [2, 3]}, + "up": {"uv": [14, 12], "uv_size": [2, 2]}, + "down": {"uv": [14, 16], "uv_size": [2, -2]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/lucid.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/lucid.geo.json new file mode 100644 index 00000000..49fddd4b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/lucid.geo.json @@ -0,0 +1,78 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 5, + "visible_bounds_height": 5.5, + "visible_bounds_offset": [0, 2.25, 0] + }, + "bones": [ + { + "name": "Lucid", + "pivot": [0, 30.57828, -1.48989] + }, + { + "name": "eye", + "parent": "Lucid", + "pivot": [0, 29.66667, -0.66667], + "cubes": [ + {"origin": [-6, 25, -2], "size": [12, 8, 4], "uv": [64, 40]} + ] + }, + { + "name": "Iris", + "parent": "eye", + "pivot": [0, 28.5, -2], + "cubes": [ + {"origin": [-2, 26.5, -2], "size": [4, 4, 0], "inflate": 0.01, "uv": [78, 16]} + ] + }, + { + "name": "eyelid", + "parent": "eye", + "pivot": [0, 31.5, 0], + "cubes": [ + {"origin": [-6, 30, -2], "size": [12, 3, 4], "inflate": 0.1, "uv": [56, 24]} + ] + }, + { + "name": "ring3", + "parent": "Lucid", + "pivot": [0, 30.64645, -1.64645], + "cubes": [ + {"origin": [-10.35355, 20, -4.64645], "size": [21, 2, 6], "inflate": 0.01, "pivot": [-0.35355, 31, 0.35355], "rotation": [0, 0, 45], "uv": [32, 32]}, + {"origin": [-11.35355, 20, -4.64645], "size": [22, 2, 6], "pivot": [-0.35355, 31, 0.35355], "rotation": [0, 0, -45], "uv": [0, 24]}, + {"origin": [-9.64645, 19.70711, -4.64645], "size": [2, 22, 6], "pivot": [0.35355, 31.70711, 0.35355], "rotation": [0, 0, 45], "uv": [64, 52]}, + {"origin": [7.93934, 19.70711, -4.64645], "size": [2, 21, 6], "inflate": 0.01, "pivot": [-1.06066, 31.70711, 0.35355], "rotation": [0, 0, -45], "uv": [80, 52]} + ] + }, + { + "name": "ring2", + "parent": "Lucid", + "pivot": [0, 30.64645, -1.64645], + "cubes": [ + {"origin": [-18, 14, -7], "size": [33, 2, 6], "inflate": 0.01, "pivot": [-2, 31, -2], "rotation": [-90, -45, 90], "uv": [0, 16]}, + {"origin": [-19, 14, -7], "size": [34, 2, 6], "pivot": [-2, 31, -2], "rotation": [90, -45, -90], "uv": [0, 8]}, + {"origin": [13, 13.70711, -7.70711], "size": [2, 33, 6], "inflate": 0.01, "pivot": [-2, 31.70711, -2.70711], "rotation": [90, -45, -90], "uv": [48, 40]}, + {"origin": [-18, 13.70711, -6.29289], "size": [2, 34, 6], "pivot": [-2, 31.70711, -1.29289], "rotation": [-90, -45, 90], "uv": [32, 40]} + ] + }, + { + "name": "ring", + "parent": "Lucid", + "pivot": [0, 31.35355, -2], + "cubes": [ + {"origin": [-21.29289, 10.70711, -5], "size": [2, 42, 6], "pivot": [0.70711, 31.70711, 0], "rotation": [0, 0, 45], "uv": [16, 32]}, + {"origin": [-22, 9, -5], "size": [44, 2, 6], "pivot": [0, 31, 0], "rotation": [0, 0, 45], "uv": [0, 0]}, + {"origin": [19.29289, 10.70711, -5], "size": [2, 42, 6], "inflate": 0.01, "pivot": [-0.70711, 31.70711, 0], "rotation": [0, 0, -45], "uv": [16, 32], "mirror": true}, + {"origin": [-22, 9, -5], "size": [44, 2, 6], "inflate": 0.02, "pivot": [0, 31, 0], "rotation": [0, 0, -45], "uv": [0, 0], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/lucid_bolt.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/lucid_bolt.geo.json new file mode 100644 index 00000000..35629ee9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/lucid_bolt.geo.json @@ -0,0 +1,96 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "projectile", + "pivot": [0, 6.5, -0.5], + "cubes": [ + {"origin": [-1.5, 5, -5], "size": [3, 3, 9], "uv": [0, 0]} + ] + }, + { + "name": "ring", + "parent": "projectile", + "pivot": [0, 6.5, -2], + "cubes": [ + {"origin": [-3.5, 3, -2], "size": [7, 7, 0], "uv": [0, 12]} + ] + }, + { + "name": "particle_right", + "parent": "projectile", + "pivot": [-3.5, 6, 2.5], + "cubes": [ + {"origin": [-3.5, 5, 1], "size": [0, 2, 3], "uv": [0, -1]} + ] + }, + { + "name": "particle_left", + "parent": "projectile", + "pivot": [3.5, 6, 2.5], + "cubes": [ + {"origin": [3.5, 5, 1], "size": [0, 2, 3], "uv": [0, -1], "mirror": true} + ] + }, + { + "name": "particle_right3", + "parent": "projectile", + "pivot": [-2.5, 4, 4.5], + "cubes": [ + {"origin": [-2.5, 3, 3], "size": [0, 2, 3], "uv": [0, 1]} + ] + }, + { + "name": "particle_left3", + "parent": "projectile", + "pivot": [2.5, 4, 4.5], + "cubes": [ + {"origin": [2.5, 3, 3], "size": [0, 2, 3], "uv": [0, 1], "mirror": true} + ] + }, + { + "name": "particle_right2", + "parent": "projectile", + "pivot": [-3.5, 8, 6.5], + "cubes": [ + {"origin": [-3.5, 7, 5], "size": [0, 2, 3], "uv": [0, -3]} + ] + }, + { + "name": "particle_left2", + "parent": "projectile", + "pivot": [3.5, 8, 6.5], + "cubes": [ + {"origin": [3.5, 7, 5], "size": [0, 2, 3], "uv": [0, -3], "mirror": true} + ] + }, + { + "name": "particle_right4", + "parent": "projectile", + "pivot": [-1.5, 10, 3.5], + "cubes": [ + {"origin": [-1.5, 9, 2], "size": [0, 2, 3], "uv": [0, -3]} + ] + }, + { + "name": "particle_left4", + "parent": "projectile", + "pivot": [1.5, 10, 3.5], + "cubes": [ + {"origin": [1.5, 9, 2], "size": [0, 2, 3], "uv": [0, -3], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/lucid_bolt_impact.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/lucid_bolt_impact.geo.json new file mode 100644 index 00000000..38ca3fe2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/lucid_bolt_impact.geo.json @@ -0,0 +1,284 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 5, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "impact", + "pivot": [0, 0, 0] + }, + { + "name": "impact_particle7", + "parent": "impact", + "pivot": [-2, 10, -14], + "cubes": [ + {"origin": [-6, 7, -13], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_group", + "parent": "impact", + "pivot": [-6, 3, -14] + }, + { + "name": "impact_particle", + "parent": "impact_group", + "pivot": [-20, 19, -14], + "cubes": [ + {"origin": [-24, 16, -13], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle3", + "parent": "impact_group", + "pivot": [-15, 29, -14], + "cubes": [ + {"origin": [-19, 26, -13], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle4", + "parent": "impact_group", + "pivot": [-15, 29, -14], + "cubes": [ + {"origin": [-19, 26, -13], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle2", + "parent": "impact_group", + "pivot": [-2, 19, -14], + "cubes": [ + {"origin": [-3, 16, -13], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle5", + "parent": "impact_group", + "pivot": [-9, 31, -14], + "cubes": [ + {"origin": [-10, 28, -13], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle6", + "parent": "impact_group", + "pivot": [-6, 6, -14], + "cubes": [ + {"origin": [-7, 3, -13], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_group3", + "parent": "impact", + "pivot": [-13, 3, -8] + }, + { + "name": "impact_particle20", + "parent": "impact_group3", + "pivot": [-27, 19, -8], + "cubes": [ + {"origin": [-31, 16, -7], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle21", + "parent": "impact_group3", + "pivot": [-22, 29, -8], + "cubes": [ + {"origin": [-26, 26, -7], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle22", + "parent": "impact_group3", + "pivot": [-22, 29, -8], + "cubes": [ + {"origin": [-26, 26, -7], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle23", + "parent": "impact_group3", + "pivot": [-9, 19, -8], + "cubes": [ + {"origin": [-10, 16, -7], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle24", + "parent": "impact_group3", + "pivot": [-16, 31, -8], + "cubes": [ + {"origin": [-17, 28, -7], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle25", + "parent": "impact_group3", + "pivot": [-13, 6, -8], + "cubes": [ + {"origin": [-14, 3, -7], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_group2", + "parent": "impact", + "pivot": [17, 6, -17] + }, + { + "name": "impact_particle8", + "parent": "impact_group2", + "pivot": [3, 22, -17], + "cubes": [ + {"origin": [-1, 19, -16], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle9", + "parent": "impact_group2", + "pivot": [8, 32, -17], + "cubes": [ + {"origin": [4, 29, -16], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle10", + "parent": "impact_group2", + "pivot": [8, 32, -17], + "cubes": [ + {"origin": [4, 29, -16], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle11", + "parent": "impact_group2", + "pivot": [21, 22, -17], + "cubes": [ + {"origin": [20, 19, -16], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle12", + "parent": "impact_group2", + "pivot": [14, 34, -17], + "cubes": [ + {"origin": [13, 31, -16], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle13", + "parent": "impact_group2", + "pivot": [17, 9, -17], + "cubes": [ + {"origin": [16, 6, -16], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "particle3", + "parent": "impact", + "pivot": [-5, 26.5, -10], + "cubes": [ + {"origin": [-10, 21, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "particle5", + "parent": "impact", + "pivot": [21, 10.5, -10], + "cubes": [ + {"origin": [16, 5, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "particle2", + "parent": "impact", + "pivot": [6, 16.5, -10], + "cubes": [ + {"origin": [1, 11, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "particle6", + "parent": "impact", + "pivot": [20, 30.5, -10], + "cubes": [ + {"origin": [15, 25, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "particle4", + "parent": "impact", + "pivot": [-18, 16.5, -10], + "cubes": [ + {"origin": [-23, 11, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "particle", + "parent": "impact", + "pivot": [-5, 5.5, -10], + "cubes": [ + {"origin": [-10, 0, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "eye", + "parent": "impact", + "pivot": [0, 38.66667, -0.66667], + "cubes": [ + {"origin": [-6, 34, -2], "size": [12, 8, 4], "uv": [0, 11]} + ] + }, + { + "name": "Iris", + "parent": "eye", + "pivot": [0, 37.5, -2], + "cubes": [ + {"origin": [-2, 35.5, -2], "size": [4, 4, 0], "inflate": 0.01, "uv": [0, 0]} + ] + }, + { + "name": "eyelid", + "parent": "eye", + "pivot": [0, 40.5, 0], + "cubes": [ + {"origin": [-6, 39, -2], "size": [12, 3, 4], "inflate": 0.1, "uv": [0, 4]} + ] + }, + { + "name": "impact_particle14", + "pivot": [-20, 19, -14] + }, + { + "name": "impact_particle15", + "pivot": [-15, 29, -14] + }, + { + "name": "impact_particle16", + "pivot": [-15, 29, -14] + }, + { + "name": "impact_particle17", + "pivot": [-2, 19, -14] + }, + { + "name": "impact_particle18", + "pivot": [-9, 31, -14] + }, + { + "name": "impact_particle19", + "pivot": [-6, 6, -14] + } + ] + } + ] +} \ 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 new file mode 100644 index 00000000..d42c4716 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/lurking_terror.geo.json @@ -0,0 +1,281 @@ +{ + "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/mantis.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/mantis.geo.json new file mode 100644 index 00000000..ad88837b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/mantis.geo.json @@ -0,0 +1,292 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.mantis", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 8, + "visible_bounds_height": 5.5, + "visible_bounds_offset": [0, 2.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "waist", + "parent": "root", + "pivot": [0, 28, 0], + "cubes": [ + {"origin": [-6, 24, -2], "size": [12, 8, 4], "uv": [80, 47]} + ] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 32, 0], + "cubes": [ + {"origin": [-5, 32, -4], "size": [10, 16, 8], "uv": [80, 0]} + ] + }, + { + "name": "neck", + "parent": "body", + "pivot": [0, 48, 0], + "cubes": [ + {"origin": [-4, 48, -2], "size": [8, 8, 4], "uv": [26, 104]}, + {"origin": [-4, 35, -5], "size": [0, 22, 11], "pivot": [-4, 56, 0], "rotation": [-45, 0, 22.5], "uv": [0, 53]}, + {"origin": [4, 35, -5], "size": [0, 22, 11], "pivot": [4, 56, 0], "rotation": [-45, 0, -22.5], "uv": [0, 53], "mirror": true} + ] + }, + { + "name": "head", + "parent": "neck", + "pivot": [-2, 56, 0], + "cubes": [ + {"origin": [-6.5, 59.5, -5], "size": [13, 0, 17], "uv": [75, 65]}, + {"origin": [-4, 56, -5], "size": [8, 4, 8], "uv": [84, 92]} + ] + }, + { + "name": "rightJaw", + "parent": "head", + "pivot": [-0.025, 58, -5], + "cubes": [ + {"origin": [-4.025, 56, -9], "size": [4, 4, 4], "inflate": 0.025, "uv": [102, 104]} + ] + }, + { + "name": "leftJaw", + "parent": "head", + "pivot": [0.025, 58, -5], + "cubes": [ + {"origin": [0.025, 56, -9], "size": [4, 4, 4], "inflate": 0.025, "uv": [102, 104], "mirror": true} + ] + }, + { + "name": "rightAntenna", + "parent": "head", + "pivot": [-2.5, 58.25, 3], + "cubes": [ + {"origin": [-3, 58, 3], "size": [1, 1, 8], "uv": [84, 104]} + ] + }, + { + "name": "rightAntennaBend", + "parent": "rightAntenna", + "pivot": [-2, 58.5, 11], + "cubes": [ + {"origin": [-3, 58.5, 11], "size": [1, 0, 12], "uv": [0, 104]} + ] + }, + { + "name": "leftAntenna", + "parent": "head", + "pivot": [2.5, 58.25, 3], + "cubes": [ + {"origin": [2, 58, 3], "size": [1, 1, 8], "uv": [84, 104], "mirror": true} + ] + }, + { + "name": "leftAntennaBend", + "parent": "leftAntenna", + "pivot": [2, 58.5, 11], + "cubes": [ + {"origin": [2, 58.5, 11], "size": [1, 0, 12], "uv": [0, 104], "mirror": true} + ] + }, + { + "name": "rightUpperWing", + "parent": "body", + "pivot": [-3, 48, 4], + "cubes": [ + {"origin": [-3, 24, 4], "size": [0, 24, 40], "uv": [0, 0]} + ] + }, + { + "name": "leftUpperWing", + "parent": "body", + "pivot": [3, 48, 4], + "cubes": [ + {"origin": [3, 24, 4], "size": [0, 24, 40], "uv": [0, 0], "mirror": true} + ] + }, + { + "name": "rightLowerWing", + "parent": "body", + "pivot": [-4, 40, 4], + "cubes": [ + {"origin": [-4, 16, 4], "size": [0, 24, 40], "uv": [0, 0]} + ] + }, + { + "name": "leftLowerWing", + "parent": "body", + "pivot": [4, 40, 4], + "cubes": [ + {"origin": [4, 16, 4], "size": [0, 24, 40], "uv": [0, 0], "mirror": true} + ] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-5, 46, 0], + "cubes": [ + {"origin": [-9, 44, -14], "size": [4, 4, 16], "uv": [80, 24]} + ] + }, + { + "name": "rightElbow", + "parent": "rightArm", + "pivot": [-7, 46, -14], + "cubes": [ + {"origin": [-8, 44, -38], "size": [2, 4, 24], "uv": [64, 64]} + ] + }, + { + "name": "rightClaw", + "parent": "rightElbow", + "pivot": [-7, 48, -38], + "cubes": [ + {"origin": [-7, 41, -70], "size": [0, 8, 32], "uv": [0, 64]} + ] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [5, 46, 0], + "cubes": [ + {"origin": [5, 44, -14], "size": [4, 4, 16], "uv": [80, 24], "mirror": true} + ] + }, + { + "name": "leftElbow", + "parent": "leftArm", + "pivot": [7, 46, -14], + "cubes": [ + {"origin": [6, 44, -38], "size": [2, 4, 24], "uv": [64, 64], "mirror": true} + ] + }, + { + "name": "leftClaw", + "parent": "leftElbow", + "pivot": [7, 48, -38], + "cubes": [ + {"origin": [7, 41, -70], "size": [0, 8, 32], "uv": [0, 64], "mirror": true} + ] + }, + { + "name": "abdomen", + "parent": "waist", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 0, -1], "size": [8, 24, 2], "uv": [64, 92]} + ] + }, + { + "name": "frontRightLeg", + "parent": "waist", + "pivot": [-6, 31, -1], + "cubes": [ + {"origin": [-22, 30, -1], "size": [16, 2, 2], "uv": [80, 59]} + ] + }, + { + "name": "frontRightKnee", + "parent": "frontRightLeg", + "pivot": [-22, 31, 1], + "cubes": [ + {"origin": [-28, 27.5, 1.25], "size": [6, 7, 0], "uv": [84, 33]}, + {"origin": [-46, 30.5, -1], "size": [24, 1, 2], "uv": [80, 44]} + ] + }, + { + "name": "frontRightFoot", + "parent": "frontRightKnee", + "pivot": [-46, 31, -1], + "cubes": [ + {"origin": [-54, 30.5, -1], "size": [8, 1, 0], "uv": [80, 63]} + ] + }, + { + "name": "frontLeftLeg", + "parent": "waist", + "pivot": [6, 31, -1], + "cubes": [ + {"origin": [6, 30, -1], "size": [16, 2, 2], "uv": [80, 59], "mirror": true} + ] + }, + { + "name": "frontLeftKnee", + "parent": "frontLeftLeg", + "pivot": [22, 31, 1], + "cubes": [ + {"origin": [22, 30.5, -1], "size": [24, 1, 2], "uv": [80, 44], "mirror": true}, + {"origin": [22, 27.5, 1.25], "size": [6, 7, 0], "uv": [84, 33], "mirror": true} + ] + }, + { + "name": "frontLeftFoot", + "parent": "frontLeftKnee", + "pivot": [46, 31, -1], + "cubes": [ + {"origin": [46, 30.5, -1], "size": [8, 1, 0], "uv": [80, 63], "mirror": true} + ] + }, + { + "name": "backRightLeg", + "parent": "waist", + "pivot": [-6, 26, -1], + "cubes": [ + {"origin": [-22, 25, -1], "size": [16, 2, 2], "uv": [80, 59]} + ] + }, + { + "name": "backRightKnee", + "parent": "backRightLeg", + "pivot": [-22, 26, 1], + "cubes": [ + {"origin": [-46, 25.5, -1], "size": [24, 1, 2], "uv": [80, 44]}, + {"origin": [-28, 22.5, 1.25], "size": [6, 7, 0], "uv": [84, 33]} + ] + }, + { + "name": "backRightFoot", + "parent": "backRightKnee", + "pivot": [-46, 26, -1], + "cubes": [ + {"origin": [-54, 25.5, -1], "size": [8, 1, 0], "uv": [80, 63]} + ] + }, + { + "name": "backLeftLeg", + "parent": "waist", + "pivot": [6, 26, -1], + "cubes": [ + {"origin": [6, 25, -1], "size": [16, 2, 2], "uv": [80, 59], "mirror": true} + ] + }, + { + "name": "backLeftKnee", + "parent": "backLeftLeg", + "pivot": [22, 26, 1], + "cubes": [ + {"origin": [22, 25.5, -1], "size": [24, 1, 2], "uv": [80, 44], "mirror": true}, + {"origin": [22, 22.5, 1.25], "size": [6, 7, 0], "uv": [84, 33], "mirror": true} + ] + }, + { + "name": "backLeftFoot", + "parent": "backLeftKnee", + "pivot": [46, 26, -1], + "cubes": [ + {"origin": [46, 25.5, -1], "size": [8, 1, 0], "uv": [80, 63], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/mature_jerry.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/mature_jerry.geo.json new file mode 100644 index 00000000..84278a68 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/mature_jerry.geo.json @@ -0,0 +1,90 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.maturejerry", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "body", + "pivot": [0, 2, 0], + "cubes": [ + {"origin": [-5, 1, -4.5], "size": [10, 4, 9], "uv": [0, 26]}, + {"origin": [-4, 5, -3.5], "size": [8, 2, 7], "uv": [38, 26]} + ] + }, + { + "name": "eye1", + "parent": "body", + "pivot": [-4, 7, -3], + "cubes": [ + {"origin": [-6, 6, -4.5], "size": [3, 3, 3], "uv": [38, 35]} + ] + }, + { + "name": "eye2", + "parent": "body", + "pivot": [0, 7, -2], + "cubes": [ + {"origin": [-1.5, 7, -3.5], "size": [3, 3, 3], "uv": [38, 35]} + ] + }, + { + "name": "eye3", + "parent": "body", + "pivot": [4, 7, -3], + "cubes": [ + {"origin": [3, 6, -4.5], "size": [3, 3, 3], "uv": [38, 35]} + ] + }, + { + "name": "gel", + "parent": "body", + "pivot": [0, 2.5, -0.5], + "cubes": [ + {"origin": [-7.5, 1.5, 0], "size": [15, 15, 0], "uv": [44, 56]}, + {"origin": [-7, 2, -6], "size": [14, 14, 12], "uv": [0, 0]} + ] + }, + { + "name": "rightTooth", + "parent": "body", + "pivot": [-5, 1, -0.5], + "cubes": [ + {"origin": [-6, -3, -1.5], "size": [2, 5, 2], "uv": [0, 39]} + ] + }, + { + "name": "leftTooth", + "parent": "body", + "pivot": [5, 1, -0.5], + "cubes": [ + {"origin": [4, -3, -1.5], "size": [2, 5, 2], "uv": [0, 39], "mirror": true} + ] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-1.5, 1, -4], + "cubes": [ + {"origin": [-2, -2, -4.5], "size": [1, 3, 1], "uv": [8, 39]} + ] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [1.5, 1, -4], + "cubes": [ + {"origin": [1, -2, -4.5], "size": [1, 3, 1], "uv": [8, 39], "mirror": true} + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/missile_squid.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/missile_squid.geo.json new file mode 100644 index 00000000..9c247ed6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/missile_squid.geo.json @@ -0,0 +1,289 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 7.5, + "visible_bounds_offset": [0, 3.25, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [0, 58.36, 0.224], + "cubes": [ + {"origin": [-6, 64, -6.5], "size": [12, 4, 12], "uv": [38, 64]}, + {"origin": [-5.5, 52, -6], "size": [11, 12, 11], "uv": [44, 0]}, + {"origin": [-7.5, 55, -4], "size": [2, 6, 7], "uv": [52, 80]}, + {"origin": [-7.5, 54, -4], "size": [2, 1, 7], "inflate": 0.1, "uv": [0, 81]}, + {"origin": [-7.5, 60, -4], "size": [2, 1, 7], "inflate": 0.1, "uv": [18, 81]}, + {"origin": [5.5, 60, -4], "size": [2, 1, 7], "inflate": 0.1, "uv": [18, 81], "mirror": true}, + {"origin": [5.5, 55, -4], "size": [2, 6, 7], "uv": [52, 80], "mirror": true}, + {"origin": [5.5, 54, -4], "size": [2, 1, 7], "inflate": 0.1, "uv": [0, 81], "mirror": true}, + {"origin": [-4.5, 51, -1], "size": [9, 1, 5], "uv": [44, 23]}, + {"origin": [-4.5, 50, -7], "size": [9, 10, 6], "uv": [76, 23]} + ] + }, + { + "name": "cranium", + "parent": "bone", + "pivot": [0, 66.625, -0.5], + "cubes": [ + {"origin": [-5.5, 68, -6], "size": [11, 21, 11], "uv": [0, 0]}, + {"origin": [0, 73, -10], "size": [0, 16, 19], "uv": [0, 32]} + ] + }, + { + "name": "cranium_2", + "parent": "cranium", + "pivot": [0, 87.5, -0.5], + "cubes": [ + {"origin": [0, 89, -10], "size": [0, 13, 19], "uv": [38, 32]}, + {"origin": [-4.5, 89, -5], "size": [9, 5, 9], "uv": [0, 67]} + ] + }, + { + "name": "mouth_left", + "parent": "bone", + "pivot": [1.75, 51.5, -1.5], + "cubes": [ + {"origin": [0, 47, -4], "size": [3, 4, 5], "uv": [82, 80]}, + {"origin": [0, 45, -3], "size": [2, 2, 3], "uv": [88, 17]} + ] + }, + { + "name": "mouth_right", + "parent": "bone", + "pivot": [-1.75, 51.5, -1.5], + "cubes": [ + {"origin": [-3, 47, -4], "size": [3, 4, 5], "uv": [82, 80], "mirror": true}, + {"origin": [-2, 45, -3], "size": [2, 2, 3], "uv": [88, 17], "mirror": true} + ] + }, + { + "name": "arm_left_1", + "parent": "bone", + "pivot": [5.5, 52, -3], + "cubes": [ + {"origin": [4.5, 42, -4], "size": [2, 7, 2], "uv": [88, 0]}, + {"origin": [4.5, 39.2, -4], "size": [2, 3, 2], "inflate": 0.1, "uv": [16, 89]}, + {"origin": [4.5, 49, -4], "size": [2, 4, 2], "inflate": 0.1, "uv": [8, 89]} + ] + }, + { + "name": "elbow_left_1", + "parent": "arm_left_1", + "pivot": [5.5, 39, -3], + "cubes": [ + {"origin": [4.5, 29, -4], "size": [2, 5, 2], "uv": [86, 73]}, + {"origin": [4.5, 34, -4], "size": [2, 5, 2], "inflate": 0.1, "uv": [0, 89]}, + {"origin": [5.5, 20, -6], "size": [0, 9, 6], "uv": [70, 80]}, + {"origin": [4.5, 23, -4], "size": [2, 6, 2], "inflate": 0.1, "uv": [88, 9]} + ] + }, + { + "name": "arm_right_1", + "parent": "bone", + "pivot": [-5.5, 52, -3], + "cubes": [ + {"origin": [-6.5, 42, -4], "size": [2, 7, 2], "uv": [88, 0], "mirror": true}, + {"origin": [-6.5, 39.2, -4], "size": [2, 3, 2], "inflate": 0.1, "uv": [16, 89], "mirror": true}, + {"origin": [-6.5, 49, -4], "size": [2, 4, 2], "inflate": 0.1, "uv": [8, 89], "mirror": true} + ] + }, + { + "name": "elbow_right_1", + "parent": "arm_right_1", + "pivot": [-5.5, 39, -3], + "cubes": [ + {"origin": [-6.5, 29, -4], "size": [2, 5, 2], "uv": [86, 73], "mirror": true}, + {"origin": [-6.5, 34, -4], "size": [2, 5, 2], "inflate": 0.1, "uv": [0, 89], "mirror": true}, + {"origin": [-5.5, 20, -6], "size": [0, 9, 6], "uv": [70, 80], "mirror": true}, + {"origin": [-6.5, 23, -4], "size": [2, 6, 2], "inflate": 0.1, "uv": [88, 9], "mirror": true} + ] + }, + { + "name": "arm_left_2", + "parent": "bone", + "pivot": [5.5, 52, 0.5], + "cubes": [ + {"origin": [4.5, 42, -0.5], "size": [2, 7, 2], "uv": [88, 0]}, + {"origin": [4.5, 39.2, -0.5], "size": [2, 3, 2], "inflate": 0.1, "uv": [16, 89]}, + {"origin": [4.5, 49, -0.5], "size": [2, 4, 2], "inflate": 0.1, "uv": [8, 89]} + ] + }, + { + "name": "elbow_left_2", + "parent": "arm_left_2", + "pivot": [5.5, 39, 0.5], + "cubes": [ + {"origin": [4.5, 29, -0.5], "size": [2, 5, 2], "uv": [86, 73]}, + {"origin": [4.5, 34, -0.5], "size": [2, 5, 2], "inflate": 0.1, "uv": [0, 89]}, + {"origin": [5.5, 20, -2.5], "size": [0, 9, 6], "uv": [70, 80]}, + {"origin": [4.5, 23, -0.5], "size": [2, 6, 2], "inflate": 0.1, "uv": [88, 9]} + ] + }, + { + "name": "arm_right_2", + "parent": "bone", + "pivot": [-5.5, 52, 0.5], + "cubes": [ + {"origin": [-6.5, 42, -0.5], "size": [2, 7, 2], "uv": [88, 0], "mirror": true}, + {"origin": [-6.5, 39.2, -0.5], "size": [2, 3, 2], "inflate": 0.1, "uv": [16, 89], "mirror": true}, + {"origin": [-6.5, 49, -0.5], "size": [2, 4, 2], "inflate": 0.1, "uv": [8, 89], "mirror": true} + ] + }, + { + "name": "elbow_right_2", + "parent": "arm_right_2", + "pivot": [-5.5, 39, 0.5], + "cubes": [ + {"origin": [-6.5, 29, -0.5], "size": [2, 5, 2], "uv": [86, 73], "mirror": true}, + {"origin": [-6.5, 34, -0.5], "size": [2, 5, 2], "inflate": 0.1, "uv": [0, 89], "mirror": true}, + {"origin": [-5.5, 20, -2.5], "size": [0, 9, 6], "uv": [70, 80], "mirror": true}, + {"origin": [-6.5, 23, -0.5], "size": [2, 6, 2], "inflate": 0.1, "uv": [88, 9], "mirror": true} + ] + }, + { + "name": "arm_left_3", + "parent": "bone", + "pivot": [5.5, 52, 3.4], + "cubes": [ + {"origin": [4.5, 42, 2.4], "size": [2, 7, 2], "uv": [88, 0]}, + {"origin": [4.5, 39.2, 2.4], "size": [2, 3, 2], "inflate": 0.1, "uv": [16, 89]}, + {"origin": [4.5, 49, 2.4], "size": [2, 4, 2], "inflate": 0.1, "uv": [8, 89]} + ] + }, + { + "name": "elbow_left_3", + "parent": "arm_left_3", + "pivot": [5.5, 39, 3.4], + "cubes": [ + {"origin": [4.5, 29, 2.4], "size": [2, 5, 2], "uv": [86, 73]}, + {"origin": [4.5, 34, 2.4], "size": [2, 5, 2], "inflate": 0.1, "uv": [0, 89]}, + {"origin": [5.5, 20, 0.4], "size": [0, 9, 6], "uv": [70, 80]}, + {"origin": [4.5, 23, 2.4], "size": [2, 6, 2], "inflate": 0.1, "uv": [88, 9]} + ] + }, + { + "name": "arm_right_3", + "parent": "bone", + "pivot": [-5.5, 52, 3.4], + "cubes": [ + {"origin": [-6.5, 42, 2.4], "size": [2, 7, 2], "uv": [88, 0], "mirror": true}, + {"origin": [-6.5, 39.2, 2.4], "size": [2, 3, 2], "inflate": 0.1, "uv": [16, 89], "mirror": true}, + {"origin": [-6.5, 49, 2.4], "size": [2, 4, 2], "inflate": 0.1, "uv": [8, 89], "mirror": true} + ] + }, + { + "name": "elbow_right_3", + "parent": "arm_right_3", + "pivot": [-5.5, 39, 3.4], + "cubes": [ + {"origin": [-6.5, 29, 2.4], "size": [2, 5, 2], "uv": [86, 73], "mirror": true}, + {"origin": [-6.5, 34, 2.4], "size": [2, 5, 2], "inflate": 0.1, "uv": [0, 89], "mirror": true}, + {"origin": [-5.5, 20, 0.4], "size": [0, 9, 6], "uv": [70, 80], "mirror": true}, + {"origin": [-6.5, 23, 2.4], "size": [2, 6, 2], "inflate": 0.1, "uv": [88, 9], "mirror": true} + ] + }, + { + "name": "arm_left_4", + "parent": "bone", + "pivot": [2.4, 52, 5.1], + "cubes": [ + {"origin": [1.4, 42, 4.1], "size": [2, 7, 2], "uv": [88, 0]}, + {"origin": [1.4, 39.2, 4.1], "size": [2, 3, 2], "inflate": 0.1, "uv": [16, 89]}, + {"origin": [1.4, 49, 4.1], "size": [2, 4, 2], "inflate": 0.1, "uv": [8, 89]} + ] + }, + { + "name": "elbow_left_4", + "parent": "arm_left_4", + "pivot": [2.4, 39, 5.1], + "cubes": [ + {"origin": [1.4, 29, 4.1], "size": [2, 5, 2], "uv": [86, 73]}, + {"origin": [1.4, 34, 4.1], "size": [2, 5, 2], "inflate": 0.1, "uv": [0, 89]}, + {"origin": [2.4, 20, 2.1], "size": [0, 9, 6], "uv": [70, 80]}, + {"origin": [1.4, 23, 4.1], "size": [2, 6, 2], "inflate": 0.1, "uv": [88, 9]} + ] + }, + { + "name": "arm_right_4", + "parent": "bone", + "pivot": [-2.4, 52, 5.1], + "cubes": [ + {"origin": [-3.4, 42, 4.1], "size": [2, 7, 2], "uv": [88, 0], "mirror": true}, + {"origin": [-3.4, 39.2, 4.1], "size": [2, 3, 2], "inflate": 0.1, "uv": [16, 89], "mirror": true}, + {"origin": [-3.4, 49, 4.1], "size": [2, 4, 2], "inflate": 0.1, "uv": [8, 89], "mirror": true} + ] + }, + { + "name": "elbow_right_4", + "parent": "arm_right_4", + "pivot": [-2.4, 39, 5.1], + "cubes": [ + {"origin": [-3.4, 29, 4.1], "size": [2, 5, 2], "uv": [86, 73], "mirror": true}, + {"origin": [-3.4, 34, 4.1], "size": [2, 5, 2], "inflate": 0.1, "uv": [0, 89], "mirror": true}, + {"origin": [-2.4, 20, 2.1], "size": [0, 9, 6], "uv": [70, 80], "mirror": true}, + {"origin": [-3.4, 23, 4.1], "size": [2, 6, 2], "inflate": 0.1, "uv": [88, 9], "mirror": true} + ] + }, + { + "name": "tentacle_left", + "parent": "bone", + "pivot": [4.28, 52.5, -3], + "cubes": [ + {"origin": [2.3, 37, -4.4], "size": [3, 2, 3], "uv": [86, 68]}, + {"origin": [1.9, 39, -5], "size": [4, 15, 4], "uv": [76, 39]} + ] + }, + { + "name": "tentacle_left_2", + "parent": "tentacle_left", + "pivot": [4.56667, 37, -3.03333], + "cubes": [ + {"origin": [1.9, 22, -5], "size": [4, 15, 4], "uv": [36, 80]} + ] + }, + { + "name": "tentacle_left_3", + "parent": "tentacle_left_2", + "pivot": [4.9, 22.15, -3.05], + "cubes": [ + {"origin": [3.9, 16, -5], "size": [2, 6, 4], "uv": [86, 58]}, + {"origin": [3.9, 13, -4.6], "size": [2, 3, 3], "uv": [76, 58]} + ] + }, + { + "name": "tentacle_right", + "parent": "bone", + "pivot": [-4.28, 52.5, -3], + "cubes": [ + {"origin": [-5.3, 37, -4.4], "size": [3, 2, 3], "uv": [86, 68], "mirror": true}, + {"origin": [-5.9, 39, -5], "size": [4, 15, 4], "uv": [76, 39], "mirror": true} + ] + }, + { + "name": "tentacle_right_2", + "parent": "tentacle_right", + "pivot": [-4.56667, 37, -3.03333], + "cubes": [ + {"origin": [-5.9, 22, -5], "size": [4, 15, 4], "uv": [36, 80], "mirror": true} + ] + }, + { + "name": "tentacle_right_3", + "parent": "tentacle_right_2", + "pivot": [-4.9, 22.15, -3.05], + "cubes": [ + {"origin": [-5.9, 16, -5], "size": [2, 6, 4], "uv": [86, 58], "mirror": true}, + {"origin": [-5.9, 13, -4.6], "size": [2, 3, 3], "uv": [76, 58], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/molevore.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/molevore.geo.json new file mode 100644 index 00000000..aa91b277 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/molevore.geo.json @@ -0,0 +1,112 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 256, + "texture_height": 128, + "visible_bounds_width": 6, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "mole_big", + "pivot": [0, 10.2, 0] + }, + { + "name": "all", + "parent": "mole_big", + "pivot": [0, -0.8, 0] + }, + { + "name": "body", + "parent": "all", + "pivot": [0, -0.8, 0], + "cubes": [ + {"origin": [-11, 0, -16], "size": [22, 18, 32], "uv": [0, 0]}, + {"origin": [-12, 0, -17], "size": [24, 19, 34], "uv": [14, 51]}, + {"origin": [-6, 18, -16], "size": [0, 9, 32], "uv": [97, 32]}, + {"origin": [6, 18, -16], "size": [0, 9, 32], "uv": [97, 21]}, + {"origin": [0, 18, -16], "size": [0, 9, 32], "uv": [97, 43]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 6.15625, -15.625] + }, + { + "name": "jaw", + "parent": "head", + "pivot": [0, 4.3125, -15.8125], + "cubes": [ + {"origin": [-5, 2, -28], "size": [10, 2, 12], "uv": [77, 0]}, + {"origin": [-4, 4, -27], "size": [1, 1, 3], "uv": [16, 23]}, + {"origin": [-4, 4, -23], "size": [1, 1, 2], "uv": [9, 9]}, + {"origin": [-4, 4, -20], "size": [1, 1, 3], "uv": [16, 23]}, + {"origin": [3, 4, -23], "size": [1, 1, 2], "uv": [9, 9]}, + {"origin": [3, 4, -27], "size": [1, 1, 3], "uv": [16, 23]}, + {"origin": [3, 4, -20], "size": [1, 1, 3], "uv": [16, 23]}, + {"origin": [-2, 4, -27], "size": [4, 1, 1], "uv": [14, 16]} + ] + }, + { + "name": "jaw2", + "parent": "head", + "pivot": [0, 4.95455, -15.90909], + "cubes": [ + {"origin": [-5, 4, -30], "size": [10, 7, 14], "uv": [0, 50]}, + {"origin": [0, 10, -28], "size": [0, 9, 11], "uv": [63, 96]}, + {"origin": [-2, 3, -27], "size": [4, 1, 1], "uv": [14, 16]}, + {"origin": [3, 3, -20], "size": [1, 1, 3], "uv": [16, 23]}, + {"origin": [3, 3, -27], "size": [1, 1, 3], "uv": [16, 23]}, + {"origin": [3, 3, -23], "size": [1, 1, 2], "uv": [9, 9]}, + {"origin": [-4, 3, -20], "size": [1, 1, 3], "uv": [16, 23]}, + {"origin": [-4, 3, -23], "size": [1, 1, 2], "uv": [9, 9]}, + {"origin": [-5, -3, -30], "size": [10, 7, 0], "uv": [42, 107]}, + {"origin": [-10, -1, -29], "size": [20, 17, 0], "uv": [0, 105]}, + {"origin": [-4, 3, -27], "size": [1, 1, 3], "uv": [16, 23]} + ] + }, + { + "name": "left_arm", + "parent": "all", + "pivot": [10, 1, -16.5], + "cubes": [ + {"origin": [8, 0, -24], "size": [10, 4, 10], "inflate": 0.1, "uv": [76, 14]}, + {"origin": [4, 0.1, -31], "size": [18, 0, 18], "uv": [105, 0]} + ] + }, + { + "name": "left_leg", + "parent": "all", + "pivot": [10, 1, 16.5], + "cubes": [ + {"origin": [8, 0, 14], "size": [10, 4, 10], "inflate": 0.1, "uv": [0, 71]}, + {"origin": [4, 0.1, 15], "size": [18, 0, 18], "uv": [105, 19]} + ] + }, + { + "name": "right_arm", + "parent": "all", + "pivot": [-10, 1, -16.5], + "cubes": [ + {"origin": [-18, 0, -24], "size": [10, 4, 10], "inflate": 0.1, "uv": [76, 14], "mirror": true}, + {"origin": [-22, 0.1, -31], "size": [18, 0, 18], "uv": [105, 0], "mirror": true} + ] + }, + { + "name": "right_leg", + "parent": "all", + "pivot": [-10, 1, 16.5], + "cubes": [ + {"origin": [-18, 0, 14], "size": [10, 4, 10], "inflate": 0.1, "uv": [0, 71], "mirror": true}, + {"origin": [-22, 0.1, 15], "size": [18, 0, 18], "uv": [105, 19], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/moleworm.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/moleworm.geo.json new file mode 100644 index 00000000..ad7e3971 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/moleworm.geo.json @@ -0,0 +1,73 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 3, + "visible_bounds_height": 1.5, + "visible_bounds_offset": [0, 0.25, 0] + }, + "bones": [ + { + "name": "mole_little", + "pivot": [-0.41667, -0.16667, 1.41667] + }, + { + "name": "body", + "parent": "mole_little", + "pivot": [0, -0.38889, -1.75], + "cubes": [ + {"origin": [-3.5, 0, -4], "size": [7, 6, 8], "uv": [1, 1]} + ] + }, + { + "name": "tail", + "parent": "body", + "pivot": [0, 2.5, 4], + "cubes": [ + {"origin": [-1.5, 1, 4], "size": [3, 3, 4], "uv": [25, 0]} + ] + }, + { + "name": "tail2", + "parent": "tail", + "pivot": [0, 1.5, 8], + "cubes": [ + {"origin": [-1, 1.5, 8], "size": [2, 2, 4], "uv": [39, 0]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 2.22222, -4], + "cubes": [ + {"origin": [-1.5, 1, -8], "size": [3, 3, 4], "uv": [0, 15]}, + {"origin": [-3.5, 0, -7], "size": [7, 6, 0], "uv": [0, 22]}, + {"origin": [-0.5, 0, -8], "size": [1, 1, 0], "uv": [16, 30]} + ] + }, + { + "name": "left_arm", + "parent": "mole_little", + "pivot": [3, 0.25, -3], + "cubes": [ + {"origin": [2.5, 0, -6], "size": [3, 1, 3], "uv": [14, 15]}, + {"origin": [1.5, 0.1, -7], "size": [5, 0, 3], "uv": [19, 29]} + ] + }, + { + "name": "right_arm", + "parent": "mole_little", + "pivot": [-3, 0.25, -3], + "cubes": [ + {"origin": [-5.5, 0, -6], "size": [3, 1, 3], "uv": [14, 15], "mirror": true}, + {"origin": [-6.5, 0.1, -7], "size": [5, 0, 3], "uv": [19, 29], "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 new file mode 100644 index 00000000..f724110b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json @@ -0,0 +1,206 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 17, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "Nightmare", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "Nightmare", + "pivot": [0, 17.5, 15] + }, + { + "name": "R_Tight", + "parent": "body", + "pivot": [-11, 21.25, 18.25], + "cubes": [ + {"origin": [-15, 9, 10], "size": [8, 20, 13], "uv": [0, 128], "mirror": true} + ] + }, + { + "name": "R_leg", + "parent": "R_Tight", + "pivot": [-11, 12, 19.5], + "cubes": [ + {"origin": [-14, 2, 16.5], "size": [6, 10, 6], "uv": [52, 77], "mirror": true} + ] + }, + { + "name": "R_foot", + "parent": "R_leg", + "pivot": [-11, 1, 19.5], + "cubes": [ + {"origin": [-15, 0, 12.5], "size": [8, 2, 10], "uv": [51, 0], "mirror": true}, + {"origin": [-8.5, 0, 5.5], "size": [0, 4, 7], "uv": [0, -7], "mirror": true}, + {"origin": [-13.5, 0, 5.5], "size": [0, 4, 7], "uv": [0, -7], "mirror": true} + ] + }, + { + "name": "L_Tight", + "parent": "body", + "pivot": [11, 21.25, 18.25], + "cubes": [ + {"origin": [7, 9, 10], "size": [8, 20, 13], "uv": [0, 128]} + ] + }, + { + "name": "L_leg", + "parent": "L_Tight", + "pivot": [11, 12, 19.5], + "cubes": [ + {"origin": [8, 2, 16.5], "size": [6, 10, 6], "uv": [52, 77]} + ] + }, + { + "name": "L_foot", + "parent": "L_leg", + "pivot": [11, 1, 19.5], + "cubes": [ + {"origin": [7, 0, 12.5], "size": [8, 2, 10], "uv": [51, 0]}, + {"origin": [8.5, 0, 5.5], "size": [0, 4, 7], "uv": [0, -7]}, + {"origin": [13.5, 0, 5.5], "size": [0, 4, 7], "uv": [0, -7]} + ] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 19.5, 15], + "cubes": [ + {"origin": [-7, 6, -9], "size": [14, 27, 24], "uv": [0, 77]} + ] + }, + { + "name": "Tail", + "parent": "torso", + "pivot": [0, 32, 13.08333], + "cubes": [ + {"origin": [-5, 24, 13], "size": [10, 13, 22], "uv": [54, 106]} + ] + }, + { + "name": "Tail2", + "parent": "Tail", + "pivot": [0, 32.75, 35], + "cubes": [ + {"origin": [-4, 27, 35], "size": [8, 10, 21], "uv": [68, 28]} + ] + }, + { + "name": "Tail3", + "parent": "Tail2", + "pivot": [0, 33.5, 56], + "cubes": [ + {"origin": [0, 32, 66], "size": [0, 14, 20], "uv": [88, 40]}, + {"origin": [-3, 30, 56], "size": [6, 7, 21], "uv": [70, 0]} + ] + }, + { + "name": "neck", + "parent": "torso", + "pivot": [0, 22.5, -8], + "cubes": [ + {"origin": [-9, 13, -24], "size": [18, 19, 16], "uv": [0, 42]} + ] + }, + { + "name": "head", + "parent": "neck", + "pivot": [0, 26.3125, -22.875], + "cubes": [ + {"origin": [-5, 13.075, -34], "size": [0, 9, 11], "uv": [42, 130]}, + {"origin": [5, 13.075, -34], "size": [0, 9, 11], "uv": [42, 130], "mirror": true}, + {"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": [-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]} + ] + }, + { + "name": "jaw", + "parent": "head", + "pivot": [0, 20, -23], + "cubes": [ + {"origin": [-10, 11, -37], "size": [20, 9, 14], "inflate": 0.1, "uv": [0, 179]}, + {"origin": [-5, 16.075, -53], "size": [10, 4, 16], "uv": [48, 141]}, + {"origin": [-4, 20.075, -53], "size": [0, 4, 16], "uv": [30, 186]}, + {"origin": [-4, 20.075, -52], "size": [8, 4, 0], "uv": [30, 206], "mirror": true}, + {"origin": [4, 20.075, -53], "size": [0, 4, 16], "uv": [30, 186], "mirror": true} + ] + }, + { + "name": "L_Wing", + "parent": "torso", + "pivot": [5.83333, 28, -1.66667], + "cubes": [ + {"origin": [5, 23, -5], "size": [11, 9, 9], "uv": [76, 75]} + ] + }, + { + "name": "L_Wing2", + "parent": "L_Wing", + "pivot": [16, 28.25, -2.25], + "cubes": [ + {"origin": [16, 26, -5], "size": [43, 4, 7], "uv": [0, 161]}, + {"origin": [55, 30, 2], "size": [4, 0, 50], "uv": [70, 128]}, + {"origin": [55, 28.75, 2], "size": [4, 0, 50], "uv": [70, 128]}, + {"origin": [-3, 29, 2], "size": [10, 0, 41], "uv": [87, 128]}, + {"origin": [7, 29, 2], "size": [52, 0, 44], "uv": [80, 0]} + ] + }, + { + "name": "L_Wing3", + "parent": "L_Wing2", + "pivot": [59, 28.5, -3], + "cubes": [ + {"origin": [59, 27, -5], "size": [43, 3, 4], "uv": [0, 172]}, + {"origin": [59, 29, -5], "size": [69, 0, 51], "uv": [66, 74]} + ] + }, + { + "name": "R_Wing", + "parent": "torso", + "pivot": [-5.83333, 28, -1.66667], + "cubes": [ + {"origin": [-16, 23, -5], "size": [11, 9, 9], "uv": [76, 75], "mirror": true} + ] + }, + { + "name": "R_Wing2", + "parent": "R_Wing", + "pivot": [-16, 28.25, -2.25], + "cubes": [ + {"origin": [-59, 26, -5], "size": [43, 4, 7], "uv": [0, 161], "mirror": true}, + {"origin": [-59, 30, 2], "size": [4, 0, 50], "uv": [70, 128], "mirror": true}, + {"origin": [-59, 28.75, 2], "size": [4, 0, 50], "uv": [70, 128], "mirror": true}, + {"origin": [-59, 29, 2], "size": [52, 0, 44], "uv": [80, 0], "mirror": true}, + {"origin": [-7, 29, 2], "size": [10, 0, 41], "uv": [87, 128], "mirror": true} + ] + }, + { + "name": "R_Wing3", + "parent": "R_Wing2", + "pivot": [-59, 28.5, -3], + "cubes": [ + {"origin": [-128, 29, -5], "size": [69, 0, 51], "uv": [66, 74], "mirror": true}, + {"origin": [-102, 27, -5], "size": [43, 3, 4], "uv": [0, 172], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/nightmare_bite.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/nightmare_bite.geo.json new file mode 100644 index 00000000..2d6e80fd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/nightmare_bite.geo.json @@ -0,0 +1,82 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 64, + "visible_bounds_width": 4, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "Bite", + "pivot": [0, 23, 0.5] + }, + { + "name": "particles_left", + "parent": "Bite", + "pivot": [7.5, 33.5, -5], + "rotation": [0, 0, -45], + "cubes": [ + {"origin": [6, 32, -5], "size": [5, 3, 0], "uv": [52, 0]} + ] + }, + { + "name": "particles_left_bottom", + "parent": "Bite", + "pivot": [7.5, 16.5, -5], + "rotation": [9.30219, 7.61662, 44.98747], + "cubes": [ + {"origin": [6, 15, -5], "size": [5, 3, 0], "uv": [52, 0]} + ] + }, + { + "name": "particles_right_bottom", + "parent": "Bite", + "pivot": [-7.5, 16.5, -5], + "rotation": [9.30219, -7.61662, -44.98747], + "cubes": [ + {"origin": [-11, 15, -5], "size": [5, 3, 0], "uv": [52, 0], "mirror": true} + ] + }, + { + "name": "particles_right", + "parent": "Bite", + "pivot": [-7.5, 33.5, -5], + "rotation": [0, 0, 45], + "cubes": [ + {"origin": [-11, 32, -5], "size": [5, 3, 0], "uv": [52, 0], "mirror": true} + ] + }, + { + "name": "impact", + "parent": "Bite", + "pivot": [0, 25.5, -7.75], + "cubes": [ + {"origin": [-18.5, 23, -8], "size": [37, 5, 0], "uv": [0, 30]}, + {"origin": [-18.5, 23, -7.5], "size": [37, 5, 0], "pivot": [0, 25.5, -8], "rotation": [0, 0, 90], "uv": [0, 30]} + ] + }, + { + "name": "lower_jaw", + "parent": "Bite", + "pivot": [0, 13.5, 1], + "cubes": [ + {"origin": [-13, 6, 1], "size": [26, 15, 0], "uv": [0, 0]} + ] + }, + { + "name": "upper_jaw", + "parent": "Bite", + "pivot": [0, 32.5, 0], + "cubes": [ + {"origin": [-13, 25, 0], "size": [26, 15, 0], "uv": [0, 15]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/nightmare_portal.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/nightmare_portal.geo.json new file mode 100644 index 00000000..26830799 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/nightmare_portal.geo.json @@ -0,0 +1,109 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 6, + "visible_bounds_height": 5, + "visible_bounds_offset": [0, 1.5, 0] + }, + "bones": [ + { + "name": "Beam", + "pivot": [-1.5, 21, 5.25], + "cubes": [ + {"origin": [-30, 20, -0.75], "size": [60, 5, 0], "uv": [0, 223]} + ] + }, + { + "name": "Portal", + "pivot": [0, 21, 4] + }, + { + "name": "particle_left", + "parent": "Portal", + "pivot": [25.24264, 46.57107, -3.75], + "cubes": [ + {"origin": [13.24264, 39.07107, -3.75], "size": [24, 15, 0], "uv": [0, 208]} + ] + }, + { + "name": "particle_right", + "parent": "Portal", + "pivot": [-25.24264, 46.57107, -3.75], + "cubes": [ + {"origin": [-37.24264, 39.07107, -3.75], "size": [24, 15, 0], "uv": [0, 208], "mirror": true} + ] + }, + { + "name": "particle_right_bottom", + "parent": "Portal", + "pivot": [-25.24264, -2.57107, -3.75], + "cubes": [ + {"origin": [-37.24264, -10.07107, -3.75], "size": [24, 15, 0], "uv": [0, 208], "mirror": true} + ] + }, + { + "name": "particle_left_bottom", + "parent": "Portal", + "pivot": [25.24264, -2.57107, -3.75], + "cubes": [ + {"origin": [13.24264, -10.07107, -3.75], "size": [24, 15, 0], "uv": [0, 208]} + ] + }, + { + "name": "Portal_Layer_Highlight", + "parent": "Portal", + "pivot": [0, 21, -1], + "cubes": [ + {"origin": [-20, 1, -2.75], "size": [37, 40, 0], "uv": [0, 168]}, + {"origin": [-21, 0, -1], "size": [42, 42, 0], "uv": [0, 126]} + ] + }, + { + "name": "Back_Portal_Layer", + "parent": "Portal", + "pivot": [0, 21, 5], + "cubes": [ + {"origin": [-21, 0, 5], "size": [42, 42, 0], "uv": [0, 42]} + ] + }, + { + "name": "Back_Portal_Layer2", + "parent": "Portal", + "pivot": [0, 21, 7], + "cubes": [ + {"origin": [-21, 0, 7], "size": [42, 42, 0], "uv": [0, 42]} + ] + }, + { + "name": "Back_Portal_Layer3", + "parent": "Portal", + "pivot": [0, 21, 11], + "cubes": [ + {"origin": [-21, 0, 11], "size": [42, 42, 0], "uv": [0, 42]} + ] + }, + { + "name": "Portal_Layer", + "parent": "Portal", + "pivot": [0, 21, 0], + "cubes": [ + {"origin": [-21, 0, 0], "size": [42, 42, 0], "uv": [0, 84]} + ] + }, + { + "name": "Portal_Layer2", + "parent": "Portal", + "pivot": [0, 21, 2], + "cubes": [ + {"origin": [-21, 0, 2], "size": [42, 42, 0], "uv": [84, 0]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/octopus_bomb.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/octopus_bomb.geo.json new file mode 100644 index 00000000..5d60c348 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/octopus_bomb.geo.json @@ -0,0 +1,318 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 8, + "visible_bounds_height": 7, + "visible_bounds_offset": [0, 1.5, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [0, 46.50635, 20.87778] + }, + { + "name": "head", + "parent": "bone", + "pivot": [0, 48.23333, 11.63333], + "cubes": [ + {"origin": [-9, 48, -3], "size": [5, 5, 6], "uv": [20, 103]}, + {"origin": [-7, 39, -5], "size": [14, 8, 17], "uv": [54, 49]}, + {"origin": [-8, 47, -2], "size": [16, 8, 14], "uv": [96, 0]}, + {"origin": [-7, 55, -1], "size": [14, 2, 11], "uv": [0, 90]}, + {"origin": [-9, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93]}, + {"origin": [-9, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49]}, + {"origin": [4, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93], "mirror": true}, + {"origin": [4, 48, -3], "size": [5, 5, 6], "uv": [20, 103], "mirror": true}, + {"origin": [4, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49], "mirror": true}, + {"origin": [-5.5, 35, -8], "size": [11, 5, 6], "uv": [96, 38]}, + {"origin": [-4.5, 40, -7], "size": [9, 9, 2], "uv": [112, 74]}, + {"origin": [-4.5, 47, -5], "size": [9, 5, 3], "uv": [112, 85]} + ] + }, + { + "name": "mouth", + "parent": "head", + "pivot": [0, 35.1, -6], + "cubes": [ + {"origin": [-5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [-3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [-1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]} + ] + }, + { + "name": "cranium", + "parent": "head", + "pivot": [0, 47.5, 12], + "cubes": [ + {"origin": [-10, 38, 8], "size": [20, 21, 28], "pivot": [0, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 0]}, + {"origin": [-12, 40, 10], "size": [2, 16, 25], "pivot": [-2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49]}, + {"origin": [10, 40, 10], "size": [2, 16, 25], "pivot": [2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49], "mirror": true} + ] + }, + { + "name": "cranium_2", + "parent": "cranium", + "pivot": [0, 53.55, 32.5], + "cubes": [ + {"origin": [-9, 46, 32], "size": [18, 16, 11], "uv": [54, 74]} + ] + }, + { + "name": "cranium_3", + "parent": "cranium_2", + "pivot": [0, 49.1, 41.5], + "cubes": [ + {"origin": [-5, 44.6, 40], "size": [10, 9, 7], "pivot": [0, 49.1, 43.5], "rotation": [-22.5, 0, 0], "uv": [96, 22]} + ] + }, + { + "name": "Tentacles", + "parent": "bone", + "pivot": [0, 45.64286, 8.5] + }, + { + "name": "Tentacles_Left", + "parent": "Tentacles", + "pivot": [6.78571, 45.64286, 25.5] + }, + { + "name": "Tentacle_1_Left", + "parent": "Tentacles_Left", + "pivot": [6.78571, 38.64286, 1.5], + "cubes": [ + {"origin": [4, 16, -2], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left", + "parent": "Tentacle_1_Left", + "pivot": [6.9, 11, 1.5], + "cubes": [ + {"origin": [4, -14, -2], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left", + "parent": "Tentacle_part_1_left", + "pivot": [5, -21, -1], + "cubes": [ + {"origin": [4, -25, -2], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -33, -2], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -34, -1], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacle_1_Left2", + "parent": "Tentacles_Left", + "pivot": [6.78571, 39.64286, 9.5], + "cubes": [ + {"origin": [4, 17, 6], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left2", + "parent": "Tentacle_1_Left2", + "pivot": [6.9, 12, 9.5], + "cubes": [ + {"origin": [4, -13, 6], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left2", + "parent": "Tentacle_part_1_left2", + "pivot": [5, -20, 7], + "cubes": [ + {"origin": [4, -24, 6], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -32, 6], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -33, 7], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacle_1_Left3", + "parent": "Tentacles_Left", + "pivot": [6.78571, 41.64286, 17.5], + "cubes": [ + {"origin": [4, 19, 14], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left3", + "parent": "Tentacle_1_Left3", + "pivot": [6.9, 14, 17.5], + "cubes": [ + {"origin": [4, -11, 14], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left3", + "parent": "Tentacle_part_1_left3", + "pivot": [5, -18, 15], + "cubes": [ + {"origin": [4, -22, 14], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -30, 14], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -31, 15], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacle_1_Left4", + "parent": "Tentacles_Left", + "pivot": [6.78571, 43.64286, 25.5], + "cubes": [ + {"origin": [4, 21, 22], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left4", + "parent": "Tentacle_1_Left4", + "pivot": [6.9, 16, 25.5], + "cubes": [ + {"origin": [4, -9, 22], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left4", + "parent": "Tentacle_part_1_left4", + "pivot": [5, -16, 23], + "cubes": [ + {"origin": [4, -20, 22], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -28, 22], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -29, 23], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacles_Right", + "parent": "Tentacles", + "pivot": [-6.78571, 45.64286, 25.5] + }, + { + "name": "Tentacle_1_Right", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 38.64286, 1.5], + "cubes": [ + {"origin": [-9, 16, -2], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right", + "parent": "Tentacle_1_Right", + "pivot": [-6.9, 11, 1.5], + "cubes": [ + {"origin": [-9, -14, -2], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right", + "parent": "Tentacle_part_1_right", + "pivot": [-5, -21, -1], + "cubes": [ + {"origin": [-9, -25, -2], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -33, -2], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -34, -1], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + }, + { + "name": "Tentacle_1_Right2", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 39.64286, 9.5], + "cubes": [ + {"origin": [-9, 17, 6], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right2", + "parent": "Tentacle_1_Right2", + "pivot": [-6.9, 12, 9.5], + "cubes": [ + {"origin": [-9, -13, 6], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right2", + "parent": "Tentacle_part_1_right2", + "pivot": [-5, -20, 7], + "cubes": [ + {"origin": [-9, -24, 6], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -32, 6], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -33, 7], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + }, + { + "name": "Tentacle_1_Right3", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 41.64286, 17.5], + "cubes": [ + {"origin": [-9, 19, 14], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right3", + "parent": "Tentacle_1_Right3", + "pivot": [-6.9, 14, 17.5], + "cubes": [ + {"origin": [-9, -11, 14], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right3", + "parent": "Tentacle_part_1_right3", + "pivot": [-5, -18, 15], + "cubes": [ + {"origin": [-9, -22, 14], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -30, 14], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -31, 15], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + }, + { + "name": "Tentacle_1_Right4", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 43.64286, 25.5], + "cubes": [ + {"origin": [-9, 21, 22], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right4", + "parent": "Tentacle_1_Right4", + "pivot": [-6.9, 16, 25.5], + "cubes": [ + {"origin": [-9, -9, 22], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right4", + "parent": "Tentacle_part_1_right4", + "pivot": [-5, -16, 23], + "cubes": [ + {"origin": [-9, -20, 22], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -28, 22], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -29, 23], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/ouranwood_deer.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/ouranwood_deer.geo.json new file mode 100644 index 00000000..2ac10f7c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/ouranwood_deer.geo.json @@ -0,0 +1,104 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "Glimmer", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "Glimmer", + "pivot": [0, 22.2, 0] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-5, 18.5, -8], + "cubes": [ + {"origin": [-7.5, 0, -11.5], "size": [5, 19, 7], "uv": [36, 66]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [5, 18.5, -8], + "cubes": [ + {"origin": [2.5, 0, -11.5], "size": [5, 19, 7], "uv": [36, 66], "mirror": true} + ] + }, + { + "name": "back_right_leg", + "parent": "body", + "pivot": [-5, 18.5, 8], + "cubes": [ + {"origin": [-7.5, 0, 4.5], "size": [5, 19, 7], "uv": [36, 66]} + ] + }, + { + "name": "back_left_leg", + "parent": "body", + "pivot": [5, 18.5, 8], + "cubes": [ + {"origin": [2.5, 0, 4.5], "size": [5, 19, 7], "uv": [36, 66], "mirror": true} + ] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 19, 0], + "cubes": [ + {"origin": [-6.5, 12, -12], "size": [13, 14, 24], "uv": [0, 0]}, + {"origin": [-5.5, 15, 12], "size": [11, 16, 7], "pivot": [0, 23, 14.5], "rotation": [7.5, 0, 0], "uv": [0, 80]} + ] + }, + { + "name": "neck", + "parent": "torso", + "pivot": [0, 20.5, -11.5], + "cubes": [ + {"origin": [-4.5, 14, -16], "size": [9, 19, 7], "uv": [0, 38]} + ] + }, + { + "name": "head", + "parent": "neck", + "pivot": [0, 33, -12.5], + "cubes": [ + {"origin": [-4.5, 33, -17], "size": [9, 9, 9], "inflate": 0.1, "uv": [32, 38]}, + {"origin": [-18.5, 41, -12], "size": [18, 14, 0], "uv": [0, 66]}, + {"origin": [0.5, 41, -12], "size": [18, 14, 0], "uv": [0, 66], "mirror": true}, + {"origin": [-3.5, 33, -22], "size": [7, 5, 5], "uv": [32, 56]} + ] + }, + { + "name": "right_ear", + "parent": "head", + "pivot": [-4.5, 41.25, -13], + "cubes": [ + {"origin": [-9.5, 40, -13], "size": [5, 4, 0], "uv": [25, 38]}, + {"origin": [-9.5, 40, -12.975], "size": [5, 4, 0], "uv": [0, 20]} + ] + }, + { + "name": "left_ear", + "parent": "head", + "pivot": [4.5, 41.25, -13], + "cubes": [ + {"origin": [4.5, 40, -12.975], "size": [5, 4, 0], "uv": [0, 20], "mirror": true}, + {"origin": [4.5, 40, -13], "size": [5, 4, 0], "uv": [25, 38], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/ouranwood_deer_baby.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/ouranwood_deer_baby.geo.json new file mode 100644 index 00000000..fa42bb28 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/ouranwood_deer_baby.geo.json @@ -0,0 +1,102 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "Glimmer", + "pivot": [0, 16.2, 3] + }, + { + "name": "body", + "parent": "Glimmer", + "pivot": [0, 16.2, 3] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-4, 12.5, -5], + "cubes": [ + {"origin": [-5.5, 0, -8.5], "size": [4, 13, 5], "uv": [0, 25]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [4, 12.5, -5], + "cubes": [ + {"origin": [1.5, 0, -8.5], "size": [4, 13, 5], "uv": [0, 25], "mirror": true} + ] + }, + { + "name": "back_right_leg", + "parent": "body", + "pivot": [-5, 12.5, 6], + "cubes": [ + {"origin": [-6.5, 0, 3.5], "size": [4, 13, 5], "uv": [0, 25]} + ] + }, + { + "name": "back_left_leg", + "parent": "body", + "pivot": [5, 12.5, 6], + "cubes": [ + {"origin": [2.5, 0, 3.5], "size": [4, 13, 5], "uv": [0, 25], "mirror": true} + ] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 13, 3], + "cubes": [ + {"origin": [-5, 7, -8], "size": [10, 10, 17], "uv": [58, 0]}, + {"origin": [-5.5, 9, 8], "size": [11, 16, 7], "pivot": [0, 17, 17.5], "rotation": [7.5, 0, 0], "uv": [18, 21]} + ] + }, + { + "name": "neck", + "parent": "torso", + "pivot": [0, 14.5, -8.5], + "cubes": [ + {"origin": [-3.5, 8, -13], "size": [7, 14, 7], "uv": [30, 0]} + ] + }, + { + "name": "head", + "parent": "neck", + "pivot": [0, 21, -9.5], + "cubes": [ + {"origin": [-3.5, 21, -14], "size": [7, 8, 8], "inflate": 0.1, "uv": [0, 0]}, + {"origin": [-2.5, 21, -19], "size": [5, 4, 5], "uv": [0, 16]} + ] + }, + { + "name": "right_ear", + "parent": "head", + "pivot": [-3.5, 27.25, -10], + "cubes": [ + {"origin": [-7.5, 26, -10], "size": [4, 4, 0], "uv": [53, 0]} + ] + }, + { + "name": "left_ear", + "parent": "head", + "pivot": [3.5, 27.25, -10], + "cubes": [ + {"origin": [3.5, 26, -10], "size": [4, 4, 0], "uv": [53, 0], "mirror": true}, + {"origin": [3.5, 26, -9.975], "size": [4, 4, 0], "uv": [61, 0], "mirror": true}, + {"origin": [-7.5, 26, -9.975], "size": [4, 4, 0], "uv": [61, 0]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/reverie.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/reverie.geo.json new file mode 100644 index 00000000..6a452d15 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/reverie.geo.json @@ -0,0 +1,45 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "Reverie", + "pivot": [0, 9, 2] + }, + { + "name": "trail", + "parent": "Reverie", + "pivot": [0, 7, 4.5] + }, + { + "name": "core", + "parent": "Reverie", + "pivot": [0, 11, -0.5], + "cubes": [ + {"origin": [-4, 7, -0.5], "size": [8, 8, 0], "pivot": [0, 11, -0.5], "rotation": [0, 45, 0], "uv": [0, 20]}, + {"origin": [-4, 7, -0.5], "size": [8, 8, 0], "pivot": [0, 11, -0.5], "rotation": [0, -45, 0], "uv": [0, 20], "mirror": true}, + {"origin": [0, 6, -5.5], "size": [0, 10, 10], "pivot": [0, 11, -0.5], "rotation": [0, -90, 0], "uv": [0, 0]}, + {"origin": [0, 6, -5.5], "size": [0, 10, 10], "uv": [0, 0]} + ] + }, + { + "name": "core_bone", + "parent": "core", + "pivot": [0, 11, -0.5], + "cubes": [ + {"origin": [-1, 10, -1.5], "size": [2, 2, 2], "uv": [0, 28]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/rolly_polly.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/rolly_polly.geo.json new file mode 100644 index 00000000..d5d12503 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/rolly_polly.geo.json @@ -0,0 +1,116 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "pill_bug", + "pivot": [0, 11.875, 0.01563] + }, + { + "name": "body", + "parent": "pill_bug", + "pivot": [0, 2.25, -0.46875] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-6, 2, -4.5], + "cubes": [ + {"origin": [-9, 0, -6], "size": [3, 2, 3], "uv": [0, 7]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [6, 2, -4.5], + "cubes": [ + {"origin": [6, 0, -6], "size": [3, 2, 3], "uv": [0, 7], "mirror": true} + ] + }, + { + "name": "right_leg2", + "parent": "body", + "pivot": [-6, 2, 1.5], + "cubes": [ + {"origin": [-9, 0, 0], "size": [3, 2, 3], "uv": [0, 7]} + ] + }, + { + "name": "left_leg2", + "parent": "body", + "pivot": [6, 2, 1.5], + "cubes": [ + {"origin": [6, 0, 0], "size": [3, 2, 3], "uv": [0, 7], "mirror": true} + ] + }, + { + "name": "right_leg3", + "parent": "body", + "pivot": [-6, 2, 6.5], + "cubes": [ + {"origin": [-9, 0, 5], "size": [3, 2, 3], "uv": [0, 7]} + ] + }, + { + "name": "left_leg3", + "parent": "body", + "pivot": [6, 2, 6.5], + "cubes": [ + {"origin": [6, 0, 5], "size": [3, 2, 3], "uv": [0, 7], "mirror": true} + ] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 2, -1.75], + "cubes": [ + {"origin": [-6, 2, -9], "size": [12, 6, 19], "uv": [0, 0]}, + {"origin": [-6, 2, -9], "size": [12, 6, 19], "inflate": 0.1, "uv": [0, 55]} + ] + }, + { + "name": "head", + "parent": "torso", + "pivot": [0, 4, -9], + "cubes": [ + {"origin": [-3, 2, -11], "size": [6, 4, 2], "uv": [0, 0]} + ] + }, + { + "name": "right_antenna", + "parent": "head", + "pivot": [-1.5, 4, -10], + "cubes": [ + {"origin": [-7, 4, -23], "size": [6, 0, 13], "uv": [-13, 25]} + ] + }, + { + "name": "left_antenna", + "parent": "head", + "pivot": [1.5, 4, -10], + "cubes": [ + {"origin": [1, 4, -23], "size": [6, 0, 13], "uv": [-13, 25], "mirror": true} + ] + }, + { + "name": "wheel", + "parent": "pill_bug", + "pivot": [0, 21.5, 0.5], + "cubes": [ + {"origin": [-6, 14, -7], "size": [12, 15, 15], "inflate": 0.1, "uv": [4, 80]}, + {"origin": [-6, 14, -7], "size": [12, 15, 15], "uv": [10, 25]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/rpo_launcher.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/rpo_launcher.geo.json new file mode 100644 index 00000000..07451faf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/rpo_launcher.geo.json @@ -0,0 +1,287 @@ +{ + "format_version": "1.21.110", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 9, + "visible_bounds_height": 3, + "visible_bounds_offset": [0, 0.5, 0] + }, + "bones": [ + { + "name": "RPO_Launcher", + "pivot": [0, 6, 0] + }, + { + "name": "all", + "parent": "RPO_Launcher", + "pivot": [0, 6, 0] + }, + { + "name": "bazooka", + "parent": "all", + "pivot": [0, 7, 0], + "cubes": [ + { + "origin": [-6, 1, -46], + "size": [12, 12, 84], + "uv": { + "north": {"uv": [84, 84], "uv_size": [12, 12]}, + "east": {"uv": [0, 84], "uv_size": [84, 12]}, + "south": {"uv": [84, 84], "uv_size": [12, 12]}, + "west": {"uv": [84, 84], "uv_size": [-84, 12]}, + "up": {"uv": [0, 84], "uv_size": [84, 12], "uv_rotation": 90}, + "down": {"uv": [84, 84], "uv_size": [-84, 12], "uv_rotation": 90} + } + }, + { + "origin": [-8, -1, -52], + "size": [16, 16, 6], + "uv": { + "north": {"uv": [28, 102], "uv_size": [16, 16]}, + "east": {"uv": [0, 102], "uv_size": [6, 16]}, + "south": {"uv": [6, 102], "uv_size": [16, 16]}, + "west": {"uv": [22, 102], "uv_size": [6, 16]}, + "up": {"uv": [6, 96], "uv_size": [16, 6]}, + "down": {"uv": [22, 102], "uv_size": [16, -6]} + } + }, + { + "origin": [-8, -1, 38], + "size": [16, 16, 6], + "uv": { + "north": {"uv": [6, 102], "uv_size": [16, 16]}, + "east": {"uv": [0, 102], "uv_size": [6, 16]}, + "south": {"uv": [0, 145], "uv_size": [16, 16]}, + "west": {"uv": [22, 102], "uv_size": [6, 16]}, + "up": {"uv": [6, 96], "uv_size": [16, 6]}, + "down": {"uv": [22, 102], "uv_size": [16, -6]} + } + } + ] + }, + { + "name": "center", + "parent": "all", + "pivot": [0, 7, 0], + "cubes": [ + { + "origin": [4.1, -7, -12], + "size": [0, 8, 12], + "uv": { + "north": {"uv": [12, 130], "uv_size": [0, 8]}, + "south": {"uv": [24, 130], "uv_size": [0, 8]}, + "west": {"uv": [12, 130], "uv_size": [12, 8]}, + "up": {"uv": [12, 118], "uv_size": [0, 12]}, + "down": {"uv": [12, 130], "uv_size": [0, -12]} + } + }, + { + "origin": [2.6, -10, 0], + "size": [3, 10, 3], + "uv": { + "north": {"uv": [114, 138], "uv_size": [3, 10]}, + "east": {"uv": [114, 138], "uv_size": [3, 10]}, + "south": {"uv": [114, 138], "uv_size": [3, 10]}, + "west": {"uv": [114, 138], "uv_size": [3, 10]}, + "up": {"uv": [111, 135], "uv_size": [3, 3]}, + "down": {"uv": [114, 138], "uv_size": [3, -3]} + } + }, + { + "origin": [-7, 0, -3], + "size": [14, 14, 6], + "uv": { + "north": {"uv": [94, 102], "uv_size": [14, 14]}, + "east": {"uv": [88, 102], "uv_size": [6, 14]}, + "south": {"uv": [114, 102], "uv_size": [14, 14]}, + "west": {"uv": [108, 102], "uv_size": [6, 14]}, + "up": {"uv": [94, 96], "uv_size": [14, 6]}, + "down": {"uv": [108, 102], "uv_size": [14, -6]} + } + }, + { + "origin": [-1, 14, -12], + "size": [2, 2, 17], + "uv": { + "north": {"uv": [105, 133], "uv_size": [2, 2]}, + "east": {"uv": [107, 133], "uv_size": [-2, -17], "uv_rotation": 90}, + "south": {"uv": [124, 133], "uv_size": [2, 2]}, + "west": {"uv": [107, 116], "uv_size": [-2, 17], "uv_rotation": 90}, + "up": {"uv": [105, 116], "uv_size": [2, 17]}, + "down": {"uv": [105, 133], "uv_size": [2, -17]} + } + } + ] + }, + { + "name": "tentacles", + "parent": "all", + "pivot": [0, 6, 0] + }, + { + "name": "start_1", + "parent": "tentacles", + "pivot": [0, 7, 44], + "cubes": [ + { + "origin": [-2.5, 10, 42], + "size": [5, 4, 10], + "uv": { + "north": {"uv": [138, 106], "uv_size": [5, 4]}, + "east": {"uv": [128, 106], "uv_size": [10, 4]}, + "south": {"uv": [153, 106], "uv_size": [5, 4]}, + "west": {"uv": [143, 106], "uv_size": [10, 4]}, + "up": {"uv": [138, 96], "uv_size": [5, 10]}, + "down": {"uv": [143, 106], "uv_size": [5, -10]} + } + } + ] + }, + { + "name": "end_1", + "parent": "start_1", + "pivot": [0, 11, 52], + "cubes": [ + { + "origin": [-2.5, 11, 51], + "size": [5, 3, 9], + "inflate": -0.01, + "uv": { + "north": {"uv": [135, 139], "uv_size": [5, 3]}, + "east": {"uv": [126, 139], "uv_size": [9, 3]}, + "south": {"uv": [149, 139], "uv_size": [5, 3]}, + "west": {"uv": [140, 139], "uv_size": [9, 3]}, + "up": {"uv": [135, 130], "uv_size": [5, 9]}, + "down": {"uv": [140, 139], "uv_size": [5, -9]} + } + } + ] + }, + { + "name": "start_2", + "parent": "tentacles", + "pivot": [0, 7, 44], + "rotation": [0, 0, -180], + "cubes": [ + { + "origin": [-2.5, 10, 42], + "size": [5, 4, 10], + "uv": { + "north": {"uv": [138, 106], "uv_size": [5, 4]}, + "east": {"uv": [128, 106], "uv_size": [10, 4]}, + "south": {"uv": [153, 106], "uv_size": [5, 4]}, + "west": {"uv": [143, 106], "uv_size": [10, 4]}, + "up": {"uv": [138, 96], "uv_size": [5, 10]}, + "down": {"uv": [143, 106], "uv_size": [5, -10]} + } + } + ] + }, + { + "name": "end_2", + "parent": "start_2", + "pivot": [0, 11, 52], + "cubes": [ + { + "origin": [-2.5, 11, 51], + "size": [5, 3, 9], + "inflate": -0.01, + "uv": { + "north": {"uv": [135, 139], "uv_size": [5, 3]}, + "east": {"uv": [126, 139], "uv_size": [9, 3]}, + "south": {"uv": [149, 139], "uv_size": [5, 3]}, + "west": {"uv": [140, 139], "uv_size": [9, 3]}, + "up": {"uv": [135, 130], "uv_size": [5, 9]}, + "down": {"uv": [140, 139], "uv_size": [5, -9]} + } + } + ] + }, + { + "name": "start_3", + "parent": "tentacles", + "pivot": [0, 7, 44], + "rotation": [0, 0, -90], + "cubes": [ + { + "origin": [-2.5, 10, 42], + "size": [5, 4, 10], + "uv": { + "north": {"uv": [138, 106], "uv_size": [5, 4]}, + "east": {"uv": [128, 106], "uv_size": [10, 4]}, + "south": {"uv": [153, 106], "uv_size": [5, 4]}, + "west": {"uv": [143, 106], "uv_size": [10, 4]}, + "up": {"uv": [138, 96], "uv_size": [5, 10]}, + "down": {"uv": [143, 106], "uv_size": [5, -10]} + } + } + ] + }, + { + "name": "end_3", + "parent": "start_3", + "pivot": [0, 11, 52], + "cubes": [ + { + "origin": [-2.5, 11, 51], + "size": [5, 3, 9], + "inflate": -0.01, + "uv": { + "north": {"uv": [135, 139], "uv_size": [5, 3]}, + "east": {"uv": [126, 139], "uv_size": [9, 3]}, + "south": {"uv": [149, 139], "uv_size": [5, 3]}, + "west": {"uv": [140, 139], "uv_size": [9, 3]}, + "up": {"uv": [135, 130], "uv_size": [5, 9]}, + "down": {"uv": [140, 139], "uv_size": [5, -9]} + } + } + ] + }, + { + "name": "start_4", + "parent": "tentacles", + "pivot": [0, 7, 44], + "rotation": [0, 0, 90], + "cubes": [ + { + "origin": [-2.5, 10, 42], + "size": [5, 4, 10], + "uv": { + "north": {"uv": [138, 106], "uv_size": [5, 4]}, + "east": {"uv": [128, 106], "uv_size": [10, 4]}, + "south": {"uv": [153, 106], "uv_size": [5, 4]}, + "west": {"uv": [143, 106], "uv_size": [10, 4]}, + "up": {"uv": [138, 96], "uv_size": [5, 10]}, + "down": {"uv": [143, 106], "uv_size": [5, -10]} + } + } + ] + }, + { + "name": "end_4", + "parent": "start_4", + "pivot": [0, 11, 52], + "cubes": [ + { + "origin": [-2.5, 11, 51], + "size": [5, 3, 9], + "inflate": -0.01, + "uv": { + "north": {"uv": [135, 139], "uv_size": [5, 3]}, + "east": {"uv": [126, 139], "uv_size": [9, 3]}, + "south": {"uv": [149, 139], "uv_size": [5, 3]}, + "west": {"uv": [140, 139], "uv_size": [9, 3]}, + "up": {"uv": [135, 130], "uv_size": [5, 9]}, + "down": {"uv": [140, 139], "uv_size": [5, -9]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/scorpion.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/scorpion.geo.json new file mode 100644 index 00000000..0e3340b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/scorpion.geo.json @@ -0,0 +1,152 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 64, + "visible_bounds_width": 6, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "scorpion", + "pivot": [0.5, 0.54167, 7.75] + }, + { + "name": "r_leg", + "parent": "scorpion", + "pivot": [-6, 2.025, -0.5], + "rotation": [0, 0, -5], + "cubes": [ + {"origin": [-20, 1.025, -2], "size": [14, 2, 3], "uv": [48, 26]} + ] + }, + { + "name": "l_leg", + "parent": "scorpion", + "pivot": [6, 2.025, -0.5], + "rotation": [0, 0, 5], + "cubes": [ + {"origin": [6, 1.025, -2], "size": [14, 2, 3], "uv": [48, 26], "mirror": true} + ] + }, + { + "name": "r_leg2", + "parent": "scorpion", + "pivot": [-6, 2.025, 4.5], + "rotation": [0, 0, -5], + "cubes": [ + {"origin": [-20, 1.025, 3], "size": [14, 2, 3], "uv": [48, 26]} + ] + }, + { + "name": "l_leg2", + "parent": "scorpion", + "pivot": [6, 2.025, 4.5], + "rotation": [0, 0, 5], + "cubes": [ + {"origin": [6, 1.025, 3], "size": [14, 2, 3], "uv": [48, 26], "mirror": true} + ] + }, + { + "name": "r_leg3", + "parent": "scorpion", + "pivot": [-6, 2.025, 9.5], + "rotation": [0, 0, -5], + "cubes": [ + {"origin": [-20, 1.025, 8], "size": [14, 2, 3], "uv": [48, 26]} + ] + }, + { + "name": "l_leg3", + "parent": "scorpion", + "pivot": [6, 2.025, 9.5], + "rotation": [0, 0, 5], + "cubes": [ + {"origin": [6, 1.025, 8], "size": [14, 2, 3], "uv": [48, 26], "mirror": true} + ] + }, + { + "name": "torso", + "parent": "scorpion", + "pivot": [0, 0, 4.5], + "cubes": [ + {"origin": [-7, 0, -2], "size": [14, 6, 13], "inflate": 0.05, "uv": [0, 0]} + ] + }, + { + "name": "tail", + "parent": "torso", + "pivot": [1, 1.08333, 11], + "cubes": [ + {"origin": [-3, 1, 11], "size": [6, 5, 7], "inflate": 0.01, "uv": [0, 35]} + ] + }, + { + "name": "tail2", + "parent": "tail", + "pivot": [1, 1, 18], + "cubes": [ + {"origin": [-3, 1, 18], "size": [6, 5, 8], "uv": [0, 47]} + ] + }, + { + "name": "tail3", + "parent": "tail2", + "pivot": [1, 1, 24], + "cubes": [ + {"origin": [-5, 1, 24], "size": [10, 7, 8], "inflate": 0.01, "uv": [28, 35]}, + {"origin": [-0.5, 8, 28], "size": [1, 8, 3], "uv": [28, 50]} + ] + }, + { + "name": "head", + "parent": "torso", + "pivot": [0, 3, -1], + "cubes": [ + {"origin": [-7, 0, -11], "size": [14, 6, 10], "inflate": 0.1, "uv": [0, 19]}, + {"origin": [-3, -3, -14], "size": [0, 8, 4], "uv": [0, 17]}, + {"origin": [3, -3, -14], "size": [0, 8, 4], "uv": [0, 17], "mirror": true} + ] + }, + { + "name": "r_claw", + "parent": "head", + "pivot": [-7, 5, -4.75], + "cubes": [ + {"origin": [-11, 3, -11], "size": [4, 4, 8], "uv": [56, 31]}, + {"origin": [-16, 3, -20], "size": [5, 4, 17], "uv": [54, 0]} + ] + }, + { + "name": "r_claw_open", + "parent": "r_claw", + "pivot": [-11, 5, -11], + "cubes": [ + {"origin": [-11, 3, -20], "size": [4, 4, 9], "inflate": -0.01, "uv": [41, 0]} + ] + }, + { + "name": "l_claw", + "parent": "head", + "pivot": [7, 5, -4.75], + "cubes": [ + {"origin": [7, 3, -11], "size": [4, 4, 8], "uv": [56, 31], "mirror": true}, + {"origin": [11, 3, -20], "size": [5, 4, 17], "uv": [54, 0], "mirror": true} + ] + }, + { + "name": "l_claw_open", + "parent": "l_claw", + "pivot": [11, 5, -11], + "cubes": [ + {"origin": [7, 3, -20], "size": [4, 4, 9], "inflate": -0.01, "uv": [41, 0], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/seashell.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/seashell.geo.json new file mode 100644 index 00000000..73910555 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/seashell.geo.json @@ -0,0 +1,173 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "seashell", + "pivot": [0, 0, 0] + }, + { + "name": "lower", + "parent": "seashell", + "pivot": [0, 0, 0], + "cubes": [ + { + "origin": [-7, 0, -7], + "size": [14, 2, 14], + "uv": { + "north": {"uv": [14, 15], "uv_size": [14, 2]}, + "east": {"uv": [0, 15], "uv_size": [14, 2]}, + "south": {"uv": [42, 15], "uv_size": [14, 2]}, + "west": {"uv": [28, 15], "uv_size": [14, 2]}, + "up": {"uv": [14, 0], "uv_size": [14, 14]}, + "down": {"uv": [28, 14], "uv_size": [14, -14]} + } + }, + { + "origin": [-7, 2, -7], + "size": [14, 1, 1], + "uv": { + "north": {"uv": [14, 14], "uv_size": [14, 1]}, + "east": {"uv": [13, 14], "uv_size": [1, 1]}, + "south": {"uv": [42, 14], "uv_size": [14, 1]}, + "west": {"uv": [28, 14], "uv_size": [1, 1]}, + "up": {"uv": [14, 0], "uv_size": [14, 1]}, + "down": {"uv": [28, 14], "uv_size": [14, -14]} + } + }, + { + "origin": [-7, 2, -6], + "size": [1, 1, 12], + "uv": { + "north": {"uv": [14, 14], "uv_size": [14, 1]}, + "east": {"uv": [1, 14], "uv_size": [12, 1]}, + "south": {"uv": [42, 14], "uv_size": [14, 1]}, + "west": {"uv": [29, 14], "uv_size": [12, 1]}, + "up": {"uv": [14, 1], "uv_size": [1, 12]}, + "down": {"uv": [28, 14], "uv_size": [14, -14]} + } + }, + { + "origin": [6, 2, -6], + "size": [1, 1, 12], + "uv": { + "north": {"uv": [14, 14], "uv_size": [14, 1]}, + "east": {"uv": [1, 14], "uv_size": [12, 1]}, + "south": {"uv": [42, 14], "uv_size": [14, 1]}, + "west": {"uv": [29, 14], "uv_size": [12, 1]}, + "up": {"uv": [27, 1], "uv_size": [1, 12]}, + "down": {"uv": [28, 14], "uv_size": [14, -14]} + } + }, + { + "origin": [-7, 2, 6], + "size": [14, 1, 1], + "uv": { + "north": {"uv": [14, 14], "uv_size": [14, 1]}, + "east": {"uv": [13, 14], "uv_size": [1, 1]}, + "south": {"uv": [42, 14], "uv_size": [14, 1]}, + "west": {"uv": [28, 14], "uv_size": [1, 1]}, + "up": {"uv": [14, 0], "uv_size": [14, 1]}, + "down": {"uv": [28, 14], "uv_size": [14, -14]} + } + } + ] + }, + { + "name": "upper_moving", + "parent": "seashell", + "pivot": [0, 2.5, 7], + "cubes": [ + { + "origin": [-2, 1.5, 7], + "size": [4, 2, 1], + "inflate": 0.01, + "uv": { + "north": {"uv": [2, 34], "uv_size": [4, 2]}, + "east": {"uv": [1, 34], "uv_size": [1, 2]}, + "south": {"uv": [7, 34], "uv_size": [4, 2]}, + "west": {"uv": [6, 34], "uv_size": [1, 2]}, + "up": {"uv": [2, 33], "uv_size": [4, 1]}, + "down": {"uv": [6, 34], "uv_size": [4, -1]} + } + }, + { + "origin": [-7, 3.5, -7], + "size": [14, 1, 14], + "inflate": 0.01, + "uv": { + "north": {"uv": [14, 31], "uv_size": [14, 1]}, + "east": {"uv": [0, 31], "uv_size": [14, 1]}, + "south": {"uv": [42, 31], "uv_size": [14, 1]}, + "west": {"uv": [28, 31], "uv_size": [14, 1]}, + "up": {"uv": [14, 17], "uv_size": [14, 14]}, + "down": {"uv": [28, 31], "uv_size": [14, -14]} + } + }, + { + "origin": [-7, 2.5, 6], + "size": [14, 1, 1], + "inflate": 0.01, + "uv": { + "north": {"uv": [14, 14], "uv_size": [14, 1]}, + "east": {"uv": [13, 14], "uv_size": [1, 1]}, + "south": {"uv": [42, 14], "uv_size": [14, 1]}, + "west": {"uv": [28, 14], "uv_size": [1, 1]}, + "up": {"uv": [14, 0], "uv_size": [14, 1]}, + "down": {"uv": [28, 1], "uv_size": [14, -1]} + } + }, + { + "origin": [6, 2.5, -6], + "size": [1, 1, 12], + "inflate": 0.01, + "uv": { + "north": {"uv": [14, 14], "uv_size": [14, 1]}, + "east": {"uv": [1, 14], "uv_size": [12, 1]}, + "south": {"uv": [42, 14], "uv_size": [14, 1]}, + "west": {"uv": [29, 32], "uv_size": [12, 1]}, + "up": {"uv": [27, 1], "uv_size": [1, 12]}, + "down": {"uv": [41, 13], "uv_size": [1, -12]} + } + }, + { + "origin": [-7, 2.5, -7], + "size": [14, 1, 1], + "inflate": 0.01, + "uv": { + "north": {"uv": [14, 32], "uv_size": [14, 1]}, + "east": {"uv": [13, 14], "uv_size": [1, 1]}, + "south": {"uv": [42, 32], "uv_size": [14, 1]}, + "west": {"uv": [28, 32], "uv_size": [1, 1]}, + "up": {"uv": [14, 0], "uv_size": [14, 1]}, + "down": {"uv": [28, 1], "uv_size": [14, -1]} + } + }, + { + "origin": [-7, 2.5, -6], + "size": [1, 1, 12], + "inflate": 0.01, + "uv": { + "north": {"uv": [14, 14], "uv_size": [14, 1]}, + "east": {"uv": [1, 32], "uv_size": [12, 1]}, + "south": {"uv": [42, 14], "uv_size": [14, 1]}, + "west": {"uv": [29, 14], "uv_size": [12, 1]}, + "up": {"uv": [14, 1], "uv_size": [1, 12]}, + "down": {"uv": [28, 13], "uv_size": [1, -12]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/shrink_ray.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/shrink_ray.geo.json new file mode 100644 index 00000000..7a625872 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/shrink_ray.geo.json @@ -0,0 +1,64 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "shrink_ray", + "pivot": [0, 6, 7] + }, + { + "name": "handle", + "parent": "shrink_ray", + "pivot": [0, 6, 7], + "cubes": [ + {"origin": [-1, 0, 6], "size": [2, 6, 2], "pivot": [0, 6, 7], "rotation": [10, 0, 0], "uv": [0, 24]}, + {"origin": [-1, 2.53798, 1.88412], "size": [2, 1, 5], "inflate": -0.005, "pivot": [0, 3.03798, 5.88412], "rotation": [-21, 0, 0], "uv": [22, 10]} + ] + }, + { + "name": "ray_body", + "parent": "shrink_ray", + "pivot": [0, 11, 1], + "cubes": [ + {"origin": [-2, 5, 3], "size": [4, 4, 6], "uv": [22, 0]}, + {"origin": [0, 5, 9], "size": [0, 2, 2], "uv": [8, 24]} + ] + }, + { + "name": "blaster", + "parent": "ray_body", + "pivot": [0, 7, 0], + "cubes": [ + {"origin": [-3, 4, -2], "size": [6, 6, 5], "uv": [0, 13]}, + {"origin": [0, 9, 1], "size": [0, 2, 11], "uv": [0, 0]} + ] + }, + { + "name": "blaster_end", + "parent": "blaster", + "pivot": [0, 7, -7.5], + "cubes": [ + {"origin": [-1.5, 5.5, -9], "size": [3, 3, 3], "uv": [22, 22]} + ] + }, + { + "name": "blaster_rotating", + "parent": "blaster", + "pivot": [0, 7, -2], + "cubes": [ + {"origin": [-1, 6, -6], "size": [2, 2, 4], "uv": [22, 16]} + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/spit_bug.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/spit_bug.geo.json new file mode 100644 index 00000000..ee5d6389 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/spit_bug.geo.json @@ -0,0 +1,231 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.spitbug", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 6, + "visible_bounds_height": 5.5, + "visible_bounds_offset": [0, 2.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 36, 0], + "cubes": [ + {"origin": [-11.5, 36, -18], "size": [23, 18, 37], "inflate": -0.05, "uv": [0, 103]}, + {"origin": [-9.5, 54, -35], "size": [19, 7, 59], "uv": [0, 0]}, + {"origin": [-7.5, 54, -52], "size": [15, 7, 17], "uv": [112, 28]}, + {"origin": [-6.5, 42, -51.75], "size": [3, 12, 5], "uv": [34, 23]}, + {"origin": [3.5, 42, -51.75], "size": [3, 12, 5], "uv": [34, 23], "mirror": true}, + {"origin": [-7.5, 52, -52], "size": [15, 2, 0], "uv": [0, 24]}, + {"origin": [-7.5, 44, -52], "size": [0, 10, 17], "uv": [5, 29]}, + {"origin": [-9.5, 47, -35], "size": [2, 7, 0], "uv": [37, 16]}, + {"origin": [-9.5, 45, -35], "size": [0, 9, 17], "uv": [0, 18]}, + {"origin": [9.5, 45, -35], "size": [0, 9, 17], "uv": [0, 18], "mirror": true}, + {"origin": [7.5, 47, -35], "size": [2, 7, 0], "uv": [37, 16], "mirror": true}, + {"origin": [7.5, 44, -52], "size": [0, 10, 17], "uv": [5, 29], "mirror": true}, + {"origin": [-11.5, 32.1, -18], "size": [23, 4, 33], "inflate": -0.05, "uv": [0, 66]} + ] + }, + { + "name": "jaw", + "parent": "body", + "pivot": [-3.07143, 33.92857, -16], + "cubes": [ + {"origin": [-8.5, 32, -51], "size": [17, 2, 18], "uv": [97, 0]}, + {"origin": [-11.5, 30, -33], "size": [23, 4, 17], "uv": [79, 66]}, + {"origin": [-11.5, 34, -33], "size": [0, 8, 17], "uv": [0, -17]}, + {"origin": [-11.5, 34, -33], "size": [3, 8, 0], "uv": [0, 8]}, + {"origin": [8.5, 34, -33], "size": [3, 8, 0], "uv": [0, 8], "mirror": true}, + {"origin": [11.5, 34, -33], "size": [0, 8, 17], "uv": [0, -17], "mirror": true}, + {"origin": [-8.5, 34, -51], "size": [0, 8, 18], "uv": [0, -2]}, + {"origin": [-4.5, 32.5, -52.575], "size": [3, 8, 4], "pivot": [-3, 36.5, -50.575], "rotation": [22.5, 0, 0], "uv": [35, 0]}, + {"origin": [1.5, 32.5, -52.575], "size": [3, 8, 4], "pivot": [3, 36.5, -50.575], "rotation": [22.5, 0, 0], "uv": [35, 0], "mirror": true}, + {"origin": [-8.5, 34, -51], "size": [17, 8, 0], "uv": [0, 26]}, + {"origin": [8.5, 34, -51], "size": [0, 8, 18], "uv": [0, -2], "mirror": true} + ] + }, + { + "name": "rightEye", + "parent": "body", + "pivot": [-11, 45.5, -17], + "cubes": [ + {"origin": [-12, 45.5, -19], "size": [3, 3, 3], "uv": [83, 114]} + ] + }, + { + "name": "leftEye", + "parent": "body", + "pivot": [11, 45.5, -17], + "cubes": [ + {"origin": [9, 45.5, -19], "size": [3, 3, 3], "uv": [83, 114], "mirror": true} + ] + }, + { + "name": "rightGrip", + "parent": "body", + "pivot": [-11.5, 54, -16], + "rotation": [0, 0, 90] + }, + { + "name": "leftGrip", + "parent": "body", + "pivot": [11.5, 54, -16], + "rotation": [0, 0, -90] + }, + { + "name": "backRightThigh", + "parent": "root", + "pivot": [-11.5, 37, 10], + "cubes": [ + {"origin": [-20.5, 33, 8], "size": [9, 4, 4], "uv": [83, 120]} + ] + }, + { + "name": "backRightKnee", + "parent": "backRightThigh", + "pivot": [-20.5, 37, 10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-34.5, 32, 7], "size": [14, 5, 6], "inflate": 0.025, "uv": [83, 103]} + ] + }, + { + "name": "backRightLeg", + "parent": "backRightKnee", + "pivot": [-34.5, 32, 10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-53.5, 32, 8], "size": [19, 4, 4], "uv": [97, 20]} + ] + }, + { + "name": "backRightFoot", + "parent": "backRightLeg", + "pivot": [-53.5, 32, 10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-67.5, 30, 9], "size": [14, 2, 2], "inflate": 0.025, "uv": [97, 28]}, + {"origin": [-76.5, 30, 10], "size": [9, 2, 0], "uv": [97, 32]} + ] + }, + { + "name": "backLeftThigh", + "parent": "root", + "pivot": [11.5, 37, 10], + "cubes": [ + {"origin": [11.5, 33, 8], "size": [9, 4, 4], "uv": [83, 120]} + ] + }, + { + "name": "backLeftKnee", + "parent": "backLeftThigh", + "pivot": [20.5, 37, 10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [20.5, 32, 7], "size": [14, 5, 6], "inflate": 0.025, "uv": [83, 103]} + ] + }, + { + "name": "backLeftLeg", + "parent": "backLeftKnee", + "pivot": [34.5, 32, 10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [34.5, 32, 8], "size": [19, 4, 4], "uv": [97, 20]} + ] + }, + { + "name": "backLeftFoot", + "parent": "backLeftLeg", + "pivot": [53.5, 32, 10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [53.5, 30, 9], "size": [14, 2, 2], "inflate": 0.025, "uv": [97, 28]}, + {"origin": [67.5, 30, 10], "size": [9, 2, 0], "uv": [97, 32], "mirror": true} + ] + }, + { + "name": "frontRightThigh", + "parent": "root", + "pivot": [-11.5, 37, -10], + "cubes": [ + {"origin": [-20.5, 33, -12], "size": [9, 4, 4], "uv": [83, 120]} + ] + }, + { + "name": "frontRightKnee", + "parent": "frontRightThigh", + "pivot": [-20.5, 37, -10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-34.5, 32, -13], "size": [14, 5, 6], "inflate": 0.025, "uv": [83, 103]} + ] + }, + { + "name": "frontRightLeg", + "parent": "frontRightKnee", + "pivot": [-34.5, 32, -10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-53.5, 32, -12], "size": [19, 4, 4], "uv": [97, 20]} + ] + }, + { + "name": "frontRightFoot", + "parent": "frontRightLeg", + "pivot": [-53.5, 32, -10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-67.5, 30, -11], "size": [14, 2, 2], "inflate": 0.025, "uv": [97, 28]}, + {"origin": [-76.5, 30, -10], "size": [9, 2, 0], "uv": [97, 32]} + ] + }, + { + "name": "frontLeftThigh", + "parent": "root", + "pivot": [11.5, 37, -10], + "cubes": [ + {"origin": [11.5, 33, -12], "size": [9, 4, 4], "uv": [83, 120]} + ] + }, + { + "name": "frontLeftKnee", + "parent": "frontLeftThigh", + "pivot": [20.5, 37, -10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [20.5, 32, -13], "size": [14, 5, 6], "inflate": 0.025, "uv": [83, 103]} + ] + }, + { + "name": "frontLeftLeg", + "parent": "frontLeftKnee", + "pivot": [34.5, 32, -10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [34.5, 32, -12], "size": [19, 4, 4], "uv": [97, 20]} + ] + }, + { + "name": "frontLeftFoot", + "parent": "frontLeftLeg", + "pivot": [53.5, 32, -10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [53.5, 30, -11], "size": [14, 2, 2], "inflate": 0.025, "uv": [97, 28]}, + {"origin": [67.5, 30, -10], "size": [9, 2, 0], "uv": [97, 32], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/squidzooka.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/squidzooka.geo.json new file mode 100644 index 00000000..1d543e88 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/squidzooka.geo.json @@ -0,0 +1,68 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 5, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "squidzooka", + "pivot": [0, 0, 0] + }, + { + "name": "all", + "parent": "squidzooka", + "pivot": [0, 9, 0] + }, + { + "name": "bazooka", + "parent": "all", + "pivot": [0, 9, 0], + "cubes": [ + {"origin": [-2.5, 6.5, -20], "size": [5, 5, 20], "uv": [0, 0]}, + {"origin": [-2.5, 6.5, 0], "size": [5, 5, 14], "uv": [0, 25]}, + {"origin": [-3.5, 5.5, -24], "size": [7, 7, 4], "uv": [50, 0]}, + {"origin": [-3.5, 5.5, 13], "size": [7, 7, 4], "uv": [63, 44]} + ] + }, + { + "name": "squid", + "parent": "bazooka", + "pivot": [0, 9, 17] + }, + { + "name": "squid2", + "parent": "squid", + "pivot": [0, 9, 17], + "cubes": [ + {"origin": [-2.5, 6, 16], "size": [5, 6, 7], "uv": [28, 45]}, + {"origin": [0, 5, 17], "size": [0, 8, 12], "uv": [38, 25]}, + {"origin": [-1.5, 7, 21], "size": [3, 4, 5], "uv": [52, 55]} + ] + }, + { + "name": "center", + "parent": "all", + "pivot": [0, 9, 0] + }, + { + "name": "handle", + "parent": "center", + "pivot": [0, 4, 0.5], + "cubes": [ + {"origin": [-1, 0, -1], "size": [2, 6, 3], "uv": [12, 58]}, + {"origin": [0, 3, -7], "size": [0, 4, 6], "uv": [0, 58]}, + {"origin": [-3, 6, -2], "size": [6, 6, 4], "uv": [50, 11]}, + {"origin": [-1, 12, -9], "size": [2, 2, 12], "uv": [0, 44]} + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/stink_bug.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/stink_bug.geo.json new file mode 100644 index 00000000..07b58cbc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/stink_bug.geo.json @@ -0,0 +1,134 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.Stinkbug", + "texture_width": 64, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 1.14286, -0.57143] + }, + { + "name": "right_leg", + "parent": "root", + "pivot": [-3, 1, 0.5], + "cubes": [ + {"origin": [-7, 1, 0], "size": [4, 0, 1], "uv": [3, 10]} + ] + }, + { + "name": "left_leg", + "parent": "root", + "pivot": [3, 1, 0.5], + "cubes": [ + {"origin": [3, 1, 0], "size": [4, 0, 1], "uv": [3, 10], "mirror": true} + ] + }, + { + "name": "right_leg_front", + "parent": "root", + "pivot": [-3, 1, -1.5], + "cubes": [ + {"origin": [-7, 1, -2], "size": [4, 0, 1], "uv": [3, 10]} + ] + }, + { + "name": "left_leg_front", + "parent": "root", + "pivot": [3, 1, -1.5], + "cubes": [ + {"origin": [3, 1, -2], "size": [4, 0, 1], "uv": [3, 10], "mirror": true} + ] + }, + { + "name": "right_leg_back", + "parent": "root", + "pivot": [-3, 1, 2.5], + "cubes": [ + {"origin": [-7, 1, 2], "size": [4, 0, 1], "uv": [3, 10]} + ] + }, + { + "name": "left_leg_back", + "parent": "root", + "pivot": [3, 1, 2.5], + "cubes": [ + {"origin": [3, 1, 2], "size": [4, 0, 1], "uv": [3, 10], "mirror": true} + ] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 1, 1], + "cubes": [ + {"origin": [-3, 1, -2], "size": [6, 4, 6], "uv": [0, 0]}, + {"origin": [-3, 1, -2], "size": [6, 4, 6], "inflate": 0.2, "uv": [0, 11]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 2.25, -2], + "cubes": [ + {"origin": [-3, 1.25, -6], "size": [6, 2, 4], "uv": [18, 0]} + ] + }, + { + "name": "right_eye", + "parent": "head", + "pivot": [-3, 2.75, -5.5], + "cubes": [ + {"origin": [-3, 2.25, -6], "size": [0, 1, 1], "inflate": 0.02, "uv": [12, 9]} + ] + }, + { + "name": "left_eye", + "parent": "head", + "pivot": [3, 2.75, -5.5], + "cubes": [ + {"origin": [3, 2.25, -6], "size": [0, 1, 1], "inflate": 0.02, "uv": [12, 9], "mirror": true} + ] + }, + { + "name": "r_antenna", + "parent": "head", + "pivot": [-2, 2.75, -5], + "cubes": [ + {"origin": [-2, 2.75, -6], "size": [0, 4, 2], "uv": [18, -2]} + ] + }, + { + "name": "r_antenna2", + "parent": "r_antenna", + "pivot": [-2, 6.75, -5], + "cubes": [ + {"origin": [-2, 6.75, -6], "size": [0, 4, 2], "uv": [0, 8]} + ] + }, + { + "name": "l_antenna", + "parent": "head", + "pivot": [2, 2.75, -5], + "cubes": [ + {"origin": [2, 2.75, -6], "size": [0, 4, 2], "uv": [18, -2], "mirror": true} + ] + }, + { + "name": "l_antenna2", + "parent": "l_antenna", + "pivot": [2, 6.75, -5], + "cubes": [ + {"origin": [2, 6.75, -6], "size": [0, 4, 2], "uv": [0, 8], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/tentacle.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/tentacle.geo.json new file mode 100644 index 00000000..f3e0a41a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/tentacle.geo.json @@ -0,0 +1,115 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 4, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "tentacle", + "pivot": [0, -3.05, 9], + "cubes": [ + {"origin": [-3, -3, 8], "size": [6, 19, 2], "uv": [0, 0]} + ] + }, + { + "name": "tentacle2", + "parent": "tentacle", + "pivot": [0, 16, 9], + "cubes": [ + {"origin": [-2, 16, 8], "size": [4, 14, 2], "uv": [16, 0]} + ] + }, + { + "name": "tentacle3", + "parent": "tentacle2", + "pivot": [0, 30.00833, 9], + "cubes": [ + {"origin": [-1, 30, 8], "size": [2, 8, 2], "uv": [0, 21]} + ] + }, + { + "name": "tentacle4", + "parent": "tentacle3", + "pivot": [0, 38, 9], + "cubes": [ + {"origin": [-3, 38, 8], "size": [6, 8, 2], "uv": [16, 16]}, + {"origin": [-2, 46, 8], "size": [4, 4, 2], "uv": [8, 26]} + ] + }, + { + "name": "tentacle_right", + "pivot": [-9, -3.05, 0], + "rotation": [0, -90, 0], + "cubes": [ + {"origin": [-12, -3, -1], "size": [6, 19, 2], "uv": [0, 0]} + ] + }, + { + "name": "tentacle_right2", + "parent": "tentacle_right", + "pivot": [-9, 16, 0], + "cubes": [ + {"origin": [-11, 16, -1], "size": [4, 14, 2], "uv": [16, 0]} + ] + }, + { + "name": "tentacle_right3", + "parent": "tentacle_right2", + "pivot": [-9, 30.00833, 0], + "cubes": [ + {"origin": [-10, 30, -1], "size": [2, 8, 2], "uv": [0, 21]} + ] + }, + { + "name": "tentacle_right4", + "parent": "tentacle_right3", + "pivot": [-9, 38, 0], + "cubes": [ + {"origin": [-12, 38, -1], "size": [6, 8, 2], "uv": [16, 16]}, + {"origin": [-11, 46, -1], "size": [4, 4, 2], "uv": [8, 26]} + ] + }, + { + "name": "tentacle_left", + "pivot": [9, -3.05, 0], + "rotation": [0, 90, 0], + "cubes": [ + {"origin": [6, -3, -1], "size": [6, 19, 2], "uv": [0, 0], "mirror": true} + ] + }, + { + "name": "tentacle_left2", + "parent": "tentacle_left", + "pivot": [9, 16, 0], + "cubes": [ + {"origin": [7, 16, -1], "size": [4, 14, 2], "uv": [16, 0], "mirror": true} + ] + }, + { + "name": "tentacle_left3", + "parent": "tentacle_left2", + "pivot": [9, 30.00833, 0], + "cubes": [ + {"origin": [8, 30, -1], "size": [2, 8, 2], "uv": [0, 21], "mirror": true} + ] + }, + { + "name": "tentacle_left4", + "parent": "tentacle_left3", + "pivot": [9, 38, 0], + "cubes": [ + {"origin": [6, 38, -1], "size": [6, 8, 2], "uv": [16, 16], "mirror": true}, + {"origin": [7, 46, -1], "size": [4, 4, 2], "uv": [8, 26], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/termite.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/termite.geo.json new file mode 100644 index 00000000..d6262550 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/termite.geo.json @@ -0,0 +1,197 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.Termite", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 1.5, + "visible_bounds_offset": [0, 0.25, 0] + }, + "bones": [ + { + "name": "Termite", + "pivot": [0, 1.21429, -1.91667] + }, + { + "name": "r_leg", + "parent": "Termite", + "pivot": [-1.5, 1, -3.5], + "cubes": [ + {"origin": [-7.5, 1, -3.5], "size": [6, 0, 1], "uv": [-1, 12]} + ] + }, + { + "name": "r_leg2", + "parent": "r_leg", + "pivot": [-7.5, 1, -3.5], + "cubes": [ + {"origin": [-12.5, 1, -3.5], "size": [5, 0, 1], "uv": [-1, 28]} + ] + }, + { + "name": "l_leg", + "parent": "Termite", + "pivot": [1.5, 1, -3.5], + "cubes": [ + {"origin": [1.5, 1, -3.5], "size": [6, 0, 1], "uv": [-1, 14]} + ] + }, + { + "name": "l_leg2", + "parent": "l_leg", + "pivot": [7.5, 1, -3.5], + "cubes": [ + {"origin": [7.5, 1, -3.5], "size": [5, 0, 1], "uv": [-1, 30]} + ] + }, + { + "name": "r_leg5", + "parent": "Termite", + "pivot": [-1.5, 1, -2.5], + "cubes": [ + {"origin": [-7.5, 1, -2.5], "size": [6, 0, 1], "uv": [-1, 16]} + ] + }, + { + "name": "r_leg6", + "parent": "r_leg5", + "pivot": [-7.5, 1, -2.5], + "cubes": [ + {"origin": [-12.5, 1, -2.5], "size": [5, 0, 1], "uv": [-1, 24]} + ] + }, + { + "name": "l_leg5", + "parent": "Termite", + "pivot": [1.5, 1, -2.5], + "cubes": [ + {"origin": [1.5, 1, -2.5], "size": [6, 0, 1], "uv": [-1, 18]} + ] + }, + { + "name": "l_leg6", + "parent": "l_leg5", + "pivot": [7.5, 1, -2.5], + "cubes": [ + {"origin": [7.5, 1, -2.5], "size": [5, 0, 1], "uv": [-1, 34]} + ] + }, + { + "name": "r_leg3", + "parent": "Termite", + "pivot": [-1.5, 1, -4.5], + "cubes": [ + {"origin": [-7.5, 1, -4.5], "size": [6, 0, 1], "uv": [-1, 20]} + ] + }, + { + "name": "r_leg4", + "parent": "r_leg3", + "pivot": [-7.5, 1, -4.5], + "cubes": [ + {"origin": [-12.5, 1, -4.5], "size": [5, 0, 1], "uv": [-1, 32]} + ] + }, + { + "name": "l_leg3", + "parent": "Termite", + "pivot": [1.5, 1, -4.5], + "cubes": [ + {"origin": [1.5, 1, -4.5], "size": [6, 0, 1], "uv": [-1, 22]} + ] + }, + { + "name": "l_leg4", + "parent": "l_leg3", + "pivot": [7.5, 1, -4.5], + "cubes": [ + {"origin": [7.5, 1, -4.5], "size": [5, 0, 1], "uv": [-1, 26]} + ] + }, + { + "name": "thorax", + "parent": "Termite", + "pivot": [0, 2.5, -4.41667], + "cubes": [ + {"origin": [-2, 1, -4.5], "size": [4, 3, 4], "uv": [11, 20]} + ] + }, + { + "name": "head", + "parent": "thorax", + "pivot": [-0.27778, 1.83333, -4.27778], + "cubes": [ + {"origin": [-1.5, 1.25, -4.5], "size": [3, 2, 1], "uv": [12, 13]}, + {"origin": [-3, 1, -12.25], "size": [6, 3, 8], "inflate": 0.01, "uv": [20, 4]} + ] + }, + { + "name": "r_mandibule", + "parent": "head", + "pivot": [-1.33333, 1.5, -11.99167], + "cubes": [ + {"origin": [-3.5, 1, -18], "size": [2, 1, 6], "uv": [5, 31]}, + {"origin": [-1.5, 1.5, -14.1], "size": [1, 0, 1], "uv": [1, 1]}, + {"origin": [-1.5, 1.5, -17.1], "size": [1, 0, 1], "uv": [-1, 0]}, + {"origin": [-2.5, 1.5, -19], "size": [1, 0, 1], "uv": [1, 0]} + ] + }, + { + "name": "l_mandibule", + "parent": "head", + "pivot": [1.33333, 1.5, -11.99167], + "cubes": [ + {"origin": [1.5, 1, -18], "size": [2, 1, 6], "uv": [15, 28], "mirror": true}, + {"origin": [0.5, 1.5, -14.1], "size": [1, 0, 1], "uv": [1, 1], "mirror": true}, + {"origin": [0.5, 1.5, -17.1], "size": [1, 0, 1], "uv": [-1, 0], "mirror": true}, + {"origin": [1.5, 1.5, -19], "size": [1, 0, 1], "uv": [1, 0], "mirror": true} + ] + }, + { + "name": "l_eye", + "parent": "head", + "pivot": [3, 2.75, -8.25], + "cubes": [ + {"origin": [3, 1.75, -9.25], "size": [0, 2, 2], "inflate": 0.05, "uv": [15, 15]} + ] + }, + { + "name": "r_eye", + "parent": "head", + "pivot": [-3, 2.75, -8.25], + "cubes": [ + {"origin": [-3, 1.75, -9.25], "size": [0, 2, 2], "inflate": 0.05, "uv": [15, 15], "mirror": true} + ] + }, + { + "name": "l_antenna", + "parent": "head", + "pivot": [3, 3, -9.25], + "cubes": [ + {"origin": [3, 3, -17.25], "size": [1, 0, 8], "inflate": 0.01, "uv": [12, 0]} + ] + }, + { + "name": "r_antenna", + "parent": "head", + "pivot": [-3, 3, -9.25], + "cubes": [ + {"origin": [-4, 3, -17.25], "size": [1, 0, 8], "inflate": 0.01, "uv": [12, 0], "mirror": true} + ] + }, + { + "name": "abdomen", + "parent": "thorax", + "pivot": [0, 2.5, -2.125], + "cubes": [ + {"origin": [-2.5, 1, -1.25], "size": [5, 4, 8], "inflate": 0.05, "uv": [1, 0]}, + {"origin": [-1.5, 1.25, -2.25], "size": [3, 2, 1], "uv": [11, 28]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/toreterror.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/toreterror.geo.json new file mode 100644 index 00000000..7d17099c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/toreterror.geo.json @@ -0,0 +1,151 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 8, + "visible_bounds_height": 6.5, + "visible_bounds_offset": [0, 2.75, 0] + }, + "bones": [ + { + "name": "Toreterror", + "pivot": [0.0625, 21.6731, -10.63321] + }, + { + "name": "R-Leg", + "parent": "Toreterror", + "pivot": [-9, 18, -13], + "cubes": [ + {"origin": [-13, 2, -19], "size": [8, 18, 12], "inflate": 0.01, "uv": [72, 75]} + ] + }, + { + "name": "L-Leg", + "parent": "Toreterror", + "pivot": [9, 18, -13], + "cubes": [ + {"origin": [5, 2, -19], "size": [8, 18, 12], "inflate": 0.01, "uv": [72, 75], "mirror": true} + ] + }, + { + "name": "Torso", + "parent": "Toreterror", + "pivot": [0.25, 18, -9.5] + }, + { + "name": "R_arm", + "parent": "Torso", + "pivot": [-12.75, 43.25, -12], + "cubes": [ + {"origin": [-26, 37, -16], "size": [16, 8, 9], "uv": [84, 58]} + ] + }, + { + "name": "R_arm2", + "parent": "R_arm", + "pivot": [-25.5, 41, -12.5], + "cubes": [ + {"origin": [-52, 35, -18], "size": [27, 11, 14], "uv": [138, 0]} + ] + }, + { + "name": "L_arm", + "parent": "Torso", + "pivot": [12.75, 43.25, -12], + "cubes": [ + {"origin": [10, 37, -16], "size": [16, 8, 9], "uv": [84, 58], "mirror": true} + ] + }, + { + "name": "L_arm2", + "parent": "L_arm", + "pivot": [25.5, 41, -12.5], + "cubes": [ + {"origin": [25, 35, -18], "size": [27, 11, 14], "uv": [138, 0], "mirror": true} + ] + }, + { + "name": "Shell", + "parent": "Torso", + "pivot": [-1.75, 32.65328, -0.7294], + "cubes": [ + {"origin": [-17, 17, -6], "size": [34, 32, 12], "pivot": [4, 32, -1], "rotation": [22.5, 0, 0], "uv": [0, 0]} + ] + }, + { + "name": "cannon", + "parent": "Shell", + "pivot": [-3.5, 32, -1], + "cubes": [ + {"origin": [-8, 35, 6], "size": [16, 12, 7], "pivot": [-5, 32, -1], "rotation": [22.5, 0, 0], "uv": [92, 0]} + ] + }, + { + "name": "barrel", + "parent": "cannon", + "pivot": [-1.16667, 49.50153, 3.17891], + "cubes": [ + {"origin": [-3.5, 64, 6], "size": [7, 17, 7], "pivot": [-3.5, 32, -1], "rotation": [22.5, 0, 0], "uv": [48, 105]}, + {"origin": [-2.5, 47, 7], "size": [5, 17, 5], "pivot": [-3.5, 32, -1], "rotation": [22.5, 0, 0], "uv": [76, 105]}, + {"origin": [-3.5, 75, -7], "size": [0, 4, 16], "pivot": [-3.5, 32, -1], "rotation": [22.5, 0, 0], "uv": [16, 102]} + ] + }, + { + "name": "Torso_2", + "parent": "Torso", + "pivot": [-0.4, 37.8, -11.5], + "cubes": [ + {"origin": [-10.5, 18, -16], "size": [21, 12, 15], "uv": [0, 75]}, + {"origin": [-13, 28, -17], "size": [26, 15, 16], "uv": [0, 44]} + ] + }, + { + "name": "Head", + "parent": "Torso_2", + "pivot": [-2, 43, -16], + "cubes": [ + {"origin": [-6, 45, -23], "size": [12, 7, 11], "uv": [92, 19]}, + {"origin": [-5, 45, -28], "size": [10, 3, 5], "uv": [96, 105]}, + {"origin": [-3, 43, -28], "size": [6, 2, 1], "uv": [48, 102]} + ] + }, + { + "name": "Jaw", + "parent": "Head", + "pivot": [-2, 46.08333, -12.08333], + "cubes": [ + {"origin": [-5, 41, -27], "size": [10, 3, 4], "uv": [92, 37]}, + {"origin": [-5, 37.5, -26.5], "size": [10, 4, 0], "uv": [116, 37]}, + {"origin": [-6.5, 41, -23], "size": [13, 3, 11], "uv": [0, 102]}, + {"origin": [-6.5, 44, -22], "size": [0, 4, 2], "uv": [0, 114]}, + {"origin": [6.5, 44, -22], "size": [0, 4, 2], "uv": [0, 114], "mirror": true}, + {"origin": [-6.5, 39, -23], "size": [0, 2, 4], "uv": [7, 112]}, + {"origin": [6.5, 39, -23], "size": [0, 2, 4], "uv": [7, 112], "mirror": true}, + {"origin": [-7, 41, -20], "size": [1, 5, 8], "uv": [112, 75]}, + {"origin": [6, 41, -20], "size": [1, 5, 8], "uv": [112, 75], "mirror": true} + ] + }, + { + "name": "R_eye", + "parent": "Head", + "pivot": [-4.5, 48.5, -23], + "cubes": [ + {"origin": [-5, 48, -23], "size": [1, 1, 0], "inflate": 0.1, "uv": [101, 29]} + ] + }, + { + "name": "L_eye", + "parent": "Head", + "pivot": [4.5, 48.5, -23], + "cubes": [ + {"origin": [4, 48, -23], "size": [1, 1, 0], "inflate": 0.1, "uv": [101, 29], "mirror": true} + ] + } + ] + } + ] +} \ 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 new file mode 100644 index 00000000..696e0a31 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/triffid.geo.json @@ -0,0 +1,210 @@ +{ + "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/geo/wasp.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/wasp.geo.json new file mode 100644 index 00000000..0a170da1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/wasp.geo.json @@ -0,0 +1,182 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.wasp", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 5, + "visible_bounds_height": 3, + "visible_bounds_offset": [0, 0.5, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 5, 1], + "cubes": [ + {"origin": [-5, 0, -6], "size": [10, 10, 14], "uv": [0, 0]}, + {"origin": [-5, 0, -6], "size": [10, 10, 14], "inflate": 0.3, "uv": [64, 0]} + ] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-4.95577, 1.35871, -3], + "cubes": [ + {"origin": [-6, -3, -4], "size": [2, 5, 2], "uv": [34, 0]}, + {"origin": [-5, -5.25, -3.5], "size": [2, 3, 1], "pivot": [-4, -4.75, -3], "rotation": [0, 0, -22.5], "uv": [34, 7]}, + {"origin": [-5, -8.25, -3], "size": [2, 3, 0], "pivot": [-4, -4.75, -3], "rotation": [0, 0, -22.5], "uv": [42, 0]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [4.95577, 1.35871, -3], + "cubes": [ + {"origin": [4, -3, -4], "size": [2, 5, 2], "uv": [34, 0], "mirror": true}, + {"origin": [3, -5.25, -3.5], "size": [2, 3, 1], "pivot": [4, -4.75, -3], "rotation": [0, 0, 22.5], "uv": [34, 7], "mirror": true}, + {"origin": [3, -8.25, -3], "size": [2, 3, 0], "pivot": [4, -4.75, -3], "rotation": [0, 0, 22.5], "uv": [42, 0], "mirror": true} + ] + }, + { + "name": "right_leg2", + "parent": "body", + "pivot": [-4.95577, 1.35871, 1], + "cubes": [ + {"origin": [-6, -3, 0], "size": [2, 5, 2], "uv": [34, 0]}, + {"origin": [-5, -5.25, 0.5], "size": [2, 3, 1], "pivot": [-4, -4.75, 1], "rotation": [0, 0, -22.5], "uv": [34, 7]}, + {"origin": [-5, -8.25, 1], "size": [2, 3, 0], "pivot": [-4, -4.75, 1], "rotation": [0, 0, -22.5], "uv": [42, 0]} + ] + }, + { + "name": "left_leg2", + "parent": "body", + "pivot": [4.95577, 1.35871, 1], + "cubes": [ + {"origin": [4, -3, 0], "size": [2, 5, 2], "uv": [34, 0], "mirror": true}, + {"origin": [3, -5.25, 0.5], "size": [2, 3, 1], "pivot": [4, -4.75, 1], "rotation": [0, 0, 22.5], "uv": [34, 7], "mirror": true}, + {"origin": [3, -8.25, 1], "size": [2, 3, 0], "pivot": [4, -4.75, 1], "rotation": [0, 0, 22.5], "uv": [42, 0], "mirror": true} + ] + }, + { + "name": "right_leg3", + "parent": "body", + "pivot": [-4.95577, 1.35871, 5], + "cubes": [ + {"origin": [-6, -3, 4], "size": [2, 5, 2], "uv": [34, 0]}, + {"origin": [-5, -5.25, 4.5], "size": [2, 3, 1], "pivot": [-4, -4.75, 5], "rotation": [0, 0, -22.5], "uv": [34, 7]}, + {"origin": [-5, -8.25, 5], "size": [2, 3, 0], "pivot": [-4, -4.75, 5], "rotation": [0, 0, -22.5], "uv": [42, 0]} + ] + }, + { + "name": "left_leg3", + "parent": "body", + "pivot": [4.95577, 1.35871, 5], + "cubes": [ + {"origin": [4, -3, 4], "size": [2, 5, 2], "uv": [34, 0], "mirror": true}, + {"origin": [3, -5.25, 4.5], "size": [2, 3, 1], "pivot": [4, -4.75, 5], "rotation": [0, 0, 22.5], "uv": [34, 7], "mirror": true}, + {"origin": [3, -8.25, 5], "size": [2, 3, 0], "pivot": [4, -4.75, 5], "rotation": [0, 0, 22.5], "uv": [42, 0], "mirror": true} + ] + }, + { + "name": "connector", + "parent": "body", + "pivot": [0, 5, 8], + "cubes": [ + {"origin": [-2, 3, 6], "size": [4, 4, 8], "uv": [0, 44]} + ] + }, + { + "name": "stinger", + "parent": "connector", + "pivot": [0, 5, 12], + "cubes": [ + {"origin": [-4, 1, 12], "size": [8, 8, 12], "uv": [0, 24]}, + {"origin": [0, 5, 26], "size": [0, 1, 6], "uv": [25, 47]}, + {"origin": [-1, 4, 24], "size": [2, 3, 2], "uv": [29, 25]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 5, -8], + "cubes": [ + {"origin": [-4, 1, -16], "size": [8, 5, 8], "uv": [40, 31]} + ] + }, + { + "name": "leftjaw", + "parent": "head", + "pivot": [0, 2.5, -16], + "cubes": [ + {"origin": [0, 2, -20], "size": [4, 1, 4], "uv": [48, 19], "mirror": true} + ] + }, + { + "name": "rightjaw", + "parent": "head", + "pivot": [0, 2.5, -16], + "cubes": [ + {"origin": [-4, 2, -20], "size": [4, 1, 4], "uv": [48, 19]} + ] + }, + { + "name": "rightAntenna", + "parent": "head", + "pivot": [-1.5, 4.91667, -15.5], + "cubes": [ + {"origin": [-1.5, 5, -16], "size": [0, 11, 1], "uv": [61, 0]} + ] + }, + { + "name": "rightAntenna2", + "parent": "rightAntenna", + "pivot": [-1.5, 15, -15.5], + "cubes": [ + {"origin": [-2, 15, -16], "size": [1, 4, 1], "uv": [56, 0]}, + {"origin": [-2, 15, -16], "size": [1, 4, 1], "inflate": 0.1, "uv": [56, 5]} + ] + }, + { + "name": "leftAntenna", + "parent": "head", + "pivot": [1.5, 4.91667, -15.5], + "cubes": [ + {"origin": [1.5, 5, -16], "size": [0, 11, 1], "uv": [61, 0], "mirror": true} + ] + }, + { + "name": "leftAntenna2", + "parent": "leftAntenna", + "pivot": [1.5, 15, -15.5], + "cubes": [ + {"origin": [1, 15, -16], "size": [1, 4, 1], "uv": [56, 0], "mirror": true}, + {"origin": [1, 15, -16], "size": [1, 4, 1], "inflate": 0.1, "uv": [56, 5], "mirror": true} + ] + }, + { + "name": "rightWing", + "parent": "body", + "pivot": [-3, 10, -1.5], + "cubes": [ + {"origin": [-29, 10.3, -6], "size": [26, 0, 8], "uv": [8, 44]} + ] + }, + { + "name": "leftWing", + "parent": "body", + "pivot": [3, 10, -1.5], + "cubes": [ + {"origin": [3, 10.3, -6], "size": [26, 0, 8], "uv": [8, 44], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/water_bomb.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/water_bomb.geo.json new file mode 100644 index 00000000..80ea459b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/water_bomb.geo.json @@ -0,0 +1,32 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "Water_projectile", + "pivot": [0, 8, 0], + "cubes": [ + {"origin": [-8, 0, -8], "size": [16, 16, 16], "uv": [0, 0]} + ] + }, + { + "name": "water_ring", + "parent": "Water_projectile", + "pivot": [7, 0, 4], + "cubes": [ + {"origin": [-8, 0, -11], "size": [16, 16, 8], "inflate": 1, "uv": [8, 40]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/water_cannon.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/water_cannon.geo.json new file mode 100644 index 00000000..4240f801 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/water_cannon.geo.json @@ -0,0 +1,95 @@ +{ + "format_version": "1.21.110", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.water_cannon - Converted", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 4, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "water_cannon", + "pivot": [1, 2.5, -24], + "cubes": [ + { + "origin": [-3.5, 10, -24], + "size": [7, 7, 14], + "uv": { + "north": {"uv": [37, 19], "uv_size": [7, 7]}, + "east": {"uv": [0, 14], "uv_size": [14, 7]}, + "south": {"uv": [37, 26], "uv_size": [7, 7]}, + "west": {"uv": [14, 14], "uv_size": [-14, 7]}, + "up": {"uv": [0, 21], "uv_size": [7, 14]}, + "down": {"uv": [7, 35], "uv_size": [7, -14]} + } + }, + { + "origin": [-3.5, 3, -24], + "size": [7, 7, 0], + "uv": { + "north": {"uv": [57, 12], "uv_size": [7, 7]}, + "east": {"uv": [57, 12], "uv_size": [7, 7]}, + "south": {"uv": [64, 12], "uv_size": [-7, 7]}, + "west": {"uv": [57, 12], "uv_size": [7, 7]}, + "up": {"uv": [64, 19], "uv_size": [-7, -7]}, + "down": {"uv": [64, 19], "uv_size": [-7, -7]} + } + }, + { + "origin": [-4.5, 7, -10], + "size": [9, 11, 5], + "uv": { + "north": {"uv": [49, 0], "uv_size": [9, 11]}, + "east": {"uv": [19, 36], "uv_size": [5, 11]}, + "south": {"uv": [49, 0], "uv_size": [9, 11]}, + "west": {"uv": [24, 36], "uv_size": [-5, 11]}, + "up": {"uv": [29, 37], "uv_size": [9, 5]}, + "down": {"uv": [29, 42], "uv_size": [9, -5]} + } + }, + { + "origin": [-2.5, 11, -5], + "size": [5, 5, 18], + "uv": { + "north": {"uv": [42, 38], "uv_size": [5, 5]}, + "east": {"uv": [28, 14], "uv_size": [18, 5]}, + "south": {"uv": [42, 43], "uv_size": [5, 5]}, + "west": {"uv": [46, 14], "uv_size": [-18, 5]}, + "up": {"uv": [32, 19], "uv_size": [5, 18]}, + "down": {"uv": [0, 53], "uv_size": [5, -18]} + } + }, + { + "origin": [0, 4, -24], + "size": [0, 7, 41], + "uv": { + "north": {"uv": [0, 0], "uv_size": [0, 7]}, + "east": {"uv": [0, 0], "uv_size": [41, 7]}, + "south": {"uv": [0, 0], "uv_size": [0, 7]}, + "west": {"uv": [0, 7], "uv_size": [41, 7]}, + "up": {"uv": [0, 0], "uv_size": [0, 41]}, + "down": {"uv": [0, 41], "uv_size": [0, -41]} + } + }, + { + "origin": [-3.5, 8, 13], + "size": [7, 9, 4], + "uv": { + "north": {"uv": [5, 35], "uv_size": [7, 9]}, + "east": {"uv": [38, 38], "uv_size": [4, 9]}, + "south": {"uv": [12, 36], "uv_size": [7, 9]}, + "west": {"uv": [41, 0], "uv_size": [4, 9]}, + "up": {"uv": [41, 9], "uv_size": [7, 4]}, + "down": {"uv": [29, 46], "uv_size": [7, -4]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/worm_large.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/worm_large.geo.json new file mode 100644 index 00000000..54772af0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/worm_large.geo.json @@ -0,0 +1,109 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.largeworm", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 6.5, + "visible_bounds_offset": [0, 2.75, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 36, 0], + "cubes": [ + {"origin": [-6, 20, -6], "size": [12, 32, 12], "uv": [0, 40]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 52, 0], + "cubes": [ + {"origin": [-8, 52, -8], "size": [16, 24, 16], "uv": [0, 0]} + ] + }, + { + "name": "tooth1", + "parent": "head", + "pivot": [-6.64264, 76, 6.64264], + "cubes": [ + {"origin": [-3, 76, -7], "size": [4, 8, 4], "pivot": [-1, 80, 1], "rotation": [-180, 45, 180], "uv": [64, 68]} + ] + }, + { + "name": "tooth2", + "parent": "head", + "pivot": [0, 76, 8], + "cubes": [ + {"origin": [-2, 76, 4], "size": [4, 8, 4], "uv": [80, 24]} + ] + }, + { + "name": "tooth3", + "parent": "head", + "pivot": [6.64264, 76, 6.64264], + "cubes": [ + {"origin": [-1, 76, -7], "size": [4, 8, 4], "pivot": [1, 80, 1], "rotation": [-180, -45, -180], "uv": [80, 0]} + ] + }, + { + "name": "tooth4", + "parent": "head", + "pivot": [-8, 76, 0], + "cubes": [ + {"origin": [-2, 76, -8], "size": [4, 8, 4], "pivot": [0, 80, 0], "rotation": [0, 90, 0], "uv": [64, 68]} + ] + }, + { + "name": "tooth5", + "parent": "head", + "pivot": [8, 76, 0], + "cubes": [ + {"origin": [-2, 76, 4], "size": [4, 8, 4], "pivot": [0, 80, 0], "rotation": [0, 90, 0], "uv": [80, 24]} + ] + }, + { + "name": "tooth6", + "parent": "head", + "pivot": [-6.64264, 76, -6.64264], + "cubes": [ + {"origin": [-3, 76, 3], "size": [4, 8, 4], "pivot": [-1, 80, -1], "rotation": [180, -45, 180], "uv": [80, 24]} + ] + }, + { + "name": "tooth7", + "parent": "head", + "pivot": [0, 76, -8], + "cubes": [ + {"origin": [-2, 76, -8], "size": [4, 8, 4], "uv": [80, 0]} + ] + }, + { + "name": "tooth8", + "parent": "head", + "pivot": [6.64264, 76, -6.64264], + "cubes": [ + {"origin": [-1, 76, 3], "size": [4, 8, 4], "pivot": [1, 80, -1], "rotation": [180, 45, -180], "uv": [80, 24]} + ] + }, + { + "name": "tail", + "parent": "body", + "pivot": [0, 20, 0], + "cubes": [ + {"origin": [-4, 0, -4], "size": [8, 20, 8], "uv": [48, 40]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone.json b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone.json new file mode 100644 index 00000000..4ee42f0b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "antarchy:item/bluestone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_block.json b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_block.json new file mode 100644 index 00000000..6492eaf8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "antarchy:item/bluestone_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_comparator.json b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_comparator.json new file mode 100644 index 00000000..c78171b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_comparator.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "antarchy:item/bluestone_comparator" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_ore.json new file mode 100644 index 00000000..dea04e06 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "antarchy:item/bluestone_ore" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_repeater.json b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_repeater.json new file mode 100644 index 00000000..075290b3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_repeater.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "antarchy:item/bluestone_repeater" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_torch.json b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_torch.json new file mode 100644 index 00000000..13eadd1d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_torch.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "antarchy:item/bluestone_torch" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_wire.json b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_wire.json new file mode 100644 index 00000000..1d8c4ff9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/items/bluestone_wire.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "antarchy:item/bluestone_wire" + } +} 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 new file mode 100644 index 00000000..e72f4b4c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/de_de.json @@ -0,0 +1,962 @@ +{ + "block.antarchy.duplicator_log": "Duplikatorstamm", + "block.antarchy.ouranwood_log": "Ouranwood-Stamm", + "block.antarchy.ouranwood_wood": "Ouranwood-Holz", + "block.antarchy.mossy_ouranwood_log": "Bemoost Ouranwood-Stamm", + "block.antarchy.mossy_ouranwood_wood": "Bemoost Ouranwood-Holz", + "block.antarchy.stripped_ouranwood_log": "Entrindet Ouranwood-Stamm", + "block.antarchy.stripped_ouranwood_wood": "Entrindet Ouranwood-Holz", + "block.antarchy.ouranwood_planks": "Ouranwood-Bretter", + "block.antarchy.ouranwood_stairs": "Ouranwood-Treppe", + "block.antarchy.ouranwood_slab": "Ouranwood-Stufe", + "block.antarchy.ouranwood_fence": "Ouranwood-Zaun", + "block.antarchy.ouranwood_fence_gate": "Ouranwood-Zauntor", + "block.antarchy.ouranwood_door": "Ouranwood-Tür", + "block.antarchy.ouranwood_trapdoor": "Ouranwood-Falltür", + "block.antarchy.ouranwood_pressure_plate": "Ouranwood-Druckplatte", + "block.antarchy.ouranwood_button": "Ouranwood-Knopf", + "block.antarchy.ouranwood_leaves": "Ouranwood-Laub", + "block.antarchy.ouranwood_acorn": "Ouranwood-Eichel", + "block.antarchy.ouranwood_sign": "Ouranwood-Schild", + "block.antarchy.ouranwood_hanging_sign": "Ouranwood-Hängeschild", + "block.antarchy.peach_log": "Pfirsich-Stamm", + "block.antarchy.peach_wood": "Pfirsich-Holz", + "block.antarchy.stripped_peach_log": "Entrindet Pfirsich-Stamm", + "block.antarchy.stripped_peach_wood": "Entrindet Pfirsich-Holz", + "block.antarchy.peach_planks": "Pfirsich-Bretter", + "block.antarchy.peach_stairs": "Pfirsich-Treppe", + "block.antarchy.peach_slab": "Pfirsich-Stufe", + "block.antarchy.peach_fence": "Pfirsich-Zaun", + "block.antarchy.peach_fence_gate": "Pfirsich-Zauntor", + "block.antarchy.peach_door": "Pfirsich-Tür", + "block.antarchy.peach_trapdoor": "Pfirsich-Falltür", + "block.antarchy.peach_pressure_plate": "Pfirsich-Druckplatte", + "block.antarchy.peach_button": "Pfirsich-Knopf", + "block.antarchy.peach_leaves": "Pfirsich-Laub", + "block.antarchy.hanging_peach": "Hängend Pfirsich", + "block.antarchy.peach_sapling": "Pfirsich-Setzling", + "block.antarchy.peach_sign": "Pfirsich-Schild", + "block.antarchy.peach_hanging_sign": "Pfirsich-Hängeschild", + "block.antarchy.orange_milkweed": "Orange Seidenpflanze", + "block.antarchy.pink_milkweed": "Rosa Seidenpflanze", + "block.antarchy.camellia": "Kamelie", + "block.antarchy.spider_lily": "Spinnenlilie", + "block.antarchy.lotus": "Lotus", + "item.antarchy.lotus": "Lotus", + "item.antarchy.critter_cage": "Kleintierkäfig", + "block.antarchy.giant_lily_pad": "Riesenseerosenblatt", + "block.antarchy.seashell": "Muschel", + "block.antarchy.critter_cage_block": "Kleintierkäfig", + "block.antarchy.hushweed": "Hushweed", + "block.antarchy.umbral_moss_block": "Umbralmoos-Block", + "block.antarchy.umbral_moss_carpet": "Umbralmoos-Teppich", + "block.antarchy.blush_moss_block": "Rosamoos-Block", + "block.antarchy.blush_moss_carpet": "Rosamoos-Teppich", + "block.antarchy.duplicator_sapling": "Duplikatorsetzling", + "block.antarchy.duct_tape": "Panzerband", + "block.antarchy.infested_rooted_dirt": "Befallen Verwurzelt Erde", + "block.antarchy.infested_coarse_dirt": "Befallen Grob Erde", + "block.antarchy.nyxite": "Nyxite", + "block.antarchy.polished_nyxite": "Poliert Nyxite", + "block.antarchy.chiseled_nyxite": "Gemeißelt Nyxite", + "block.antarchy.nyxite_bricks": "Nyxiteziegel", + "block.antarchy.shellstone": "Shellstone", + "block.antarchy.polished_shellstone": "Polierter Shellstone", + "block.antarchy.shellstone_bricks": "Shellstoneziegel", + "block.antarchy.chiseled_shellstone": "Gemeißelter Shellstone", + "block.antarchy.mossy_shellstone_bricks": "Bemooste Shellstoneziegel", + "block.antarchy.mossy_shellstone_brick_stairs": "Bemooste Shellstoneziegeltreppe", + "block.antarchy.mossy_shellstone_brick_slab": "Bemooste Shellstoneziegelstufe", + "block.antarchy.mossy_shellstone_brick_wall": "Bemooste Shellstoneziegelmauer", + "block.antarchy.cracked_shellstone_bricks": "Rissige Shellstoneziegel", + "block.antarchy.shellstone_stairs": "Shellstone-Treppe", + "block.antarchy.shellstone_slab": "Shellstone-Stufe", + "block.antarchy.shellstone_wall": "Shellstone-Mauer", + "block.antarchy.polished_shellstone_stairs": "Treppe aus poliertem Shellstone", + "block.antarchy.polished_shellstone_slab": "Stufe aus poliertem Shellstone", + "block.antarchy.polished_shellstone_wall": "Mauer aus poliertem Shellstone", + "block.antarchy.shellstone_brick_stairs": "Shellstoneziegeltreppe", + "block.antarchy.shellstone_brick_slab": "Shellstoneziegelstufe", + "block.antarchy.shellstone_brick_wall": "Shellstoneziegelmauer", + "block.antarchy.nyxite_stairs": "Nyxite-Treppe", + "block.antarchy.nyxite_slab": "Nyxite-Stufe", + "block.antarchy.nyxite_wall": "Nyxite-Mauer", + "block.antarchy.polished_nyxite_stairs": "Poliert Nyxite-Treppe", + "block.antarchy.polished_nyxite_slab": "Poliert Nyxite-Stufe", + "block.antarchy.polished_nyxite_wall": "Poliert Nyxite-Mauer", + "block.antarchy.nyxite_brick_stairs": "Nyxiteziegeltreppe", + "block.antarchy.nyxite_brick_slab": "Nyxiteziegelstufe", + "block.antarchy.nyxite_brick_wall": "Nyxiteziegelmauer", + "block.antarchy.pale_nyxite": "Blass Nyxite", + "block.antarchy.nyxite_spike": "Nyxite-Stachel", + "block.antarchy.potent_nyxite": "Potent Nyxite", + "block.antarchy.triffid_goo_block": "Triffid Schleim-Block", + "block.antarchy.elythia_portal": "Elythia-Portal", + "block.antarchy.cloud_block": "Wolke-Block", + "block.antarchy.thoraxis_portal": "Thoraxis-Portal", + "block.antarchy.antimetal": "Antimetal", + "block.antarchy.polished_antimetal": "Poliert Antimetal", + "block.antarchy.antimetal_scaffolding": "Antimetal-Gerüst", + "block.antarchy.cornea_stalk": "Cornea-Stängel", + "block.antarchy.corn_crop": "Mais-Pflanze", + "block.antarchy.dream_torch": "Traum-Fackel", + "block.antarchy.dream_wall_torch": "Traumwandfackel", + "block.antarchy.dream_lantern": "Traum-Laterne", + "block.antarchy.dream_campfire": "Traum-Lagerfeuer", + "block.antarchy.dream_fire": "Traum-Feuer", + "block.antarchy.dream_fire_ceiling": "Traum-Feuer", + "block.antarchy.budding_blood_crystal": "Knospenbildend Blutkristall", + "block.antarchy.blood_crystal_block": "Blutkristall-Block", + "block.antarchy.small_blood_crystal_bud": "Klein Blutkristall-Knospe", + "block.antarchy.medium_blood_crystal_bud": "Mittelgroß Blutkristall-Knospe", + "block.antarchy.large_blood_crystal_bud": "Groß Blutkristall-Knospe", + "block.antarchy.blood_crystal_cluster": "Blutkristall-Haufen", + "block.antarchy.dream_sand": "Traum-Sand", + "block.antarchy.dream_sandstone": "Traumsandstein", + "block.antarchy.chiseled_dream_sandstone": "Gemeißelter Traumsandstein", + "block.antarchy.cut_dream_sandstone": "Geschnittener Traumsandstein", + "block.antarchy.smooth_dream_sandstone": "Glatter Traumsandstein", + "block.antarchy.dream_sandstone_stairs": "Traumsandsteintreppe", + "block.antarchy.dream_sandstone_slab": "Traumsandsteinstufe", + "block.antarchy.dream_sandstone_wall": "Traumsandsteinmauer", + "block.antarchy.smooth_dream_sandstone_stairs": "Glatte Traumsandsteintreppe", + "block.antarchy.smooth_dream_sandstone_slab": "Glatte Traumsandsteinstufe", + "block.antarchy.cut_dream_sandstone_slab": "Geschnittene Traumsandsteinstufe", + "block.antarchy.bed_bug_egg": "Bettwanze-Ei", + "block.antarchy.wasp_nest": "Wespe-Nest", + "block.antarchy.red_ant_nest": "Rote Ameise-Nest", + "block.antarchy.brown_ant_nest": "Braune Ameise-Nest", + "block.antarchy.rainbow_ant_nest": "Regenbogen-Ameise-Nest", + "block.antarchy.uranium_ore": "Uran-Erz", + "block.antarchy.deepslate_uranium_ore": "Tiefenschiefer Uran-Erz", + "block.antarchy.titanium_ore": "Titan-Erz", + "block.antarchy.deepslate_titanium_ore": "Tiefenschiefer Titan-Erz", + "block.antarchy.uranium_block": "Uranblock", + "block.antarchy.titanium_block": "Titanblock", + "block.antarchy.raw_uranium_block": "Roh Uranblock", + "block.antarchy.raw_titanium_block": "Roh Titanblock", + "block.antarchy.cut_uranium": "Geschnitten Uran", + "block.antarchy.cut_titanium": "Geschnitten Titan", + "block.antarchy.cut_uranium_slab": "Geschnitten Uran-Stufe", + "block.antarchy.cut_titanium_slab": "Geschnitten Titan-Stufe", + "block.antarchy.cut_uranium_stairs": "Geschnitten Uran-Treppe", + "block.antarchy.cut_titanium_stairs": "Geschnitten Titan-Treppe", + "block.antarchy.chiseled_uranium": "Gemeißelt Uran", + "block.antarchy.chiseled_titanium": "Gemeißelt Titan", + "block.antarchy.uranium_bulb": "Uran-Leuchtkörper", + "block.antarchy.titanium_bulb": "Titan-Leuchtkörper", + "block.antarchy.uranium_door": "Uran-Tür", + "block.antarchy.titanium_door": "Titan-Tür", + "block.antarchy.uranium_trapdoor": "Uran-Falltür", + "block.antarchy.titanium_trapdoor": "Titan-Falltür", + "block.antarchy.uranium_bars": "Uran-Gitter", + "block.antarchy.titanium_bars": "Titan-Gitter", + "tooltip.antarchy.signal_saving_bulb": "Schaltet sich ein und aus. Die Lichtstärke entspricht der gespeicherten Signalstärke.", + "block.antarchy.bile": "Galle", + "block.antarchy.ichor": "Ichor", + "block.antarchy.antiwater": "Antiwasser", + "block.antarchy.lumen": "Lumen", + "block.antarchy.lumen_froglight": "Lumen-Froschlicht", + "block.antarchy.roseate_froglight": "Rosenrot Froschlicht", + "block.antarchy.star_coral": "Sternkoralle", + "block.antarchy.star_coral_fan": "Sternkorallenfächer", + "block.antarchy.star_coral_block": "Sternkorallenblock", + "block.antarchy.dead_star_coral": "Abgestorbene Sternkoralle", + "block.antarchy.dead_star_coral_fan": "Abgestorbener Sternkorallenfächer", + "block.antarchy.dead_star_coral_block": "Abgestorbener Sternkorallenblock", + "entity.antarchy.apple_cow": "Apfelkuh", + "entity.antarchy.golden_apple_cow": "Goldapfelkuh", + "entity.antarchy.enchanted_golden_apple_cow": "Verzauberte Goldapfelkuh", + "entity.antarchy.easter_bunny": "Osterhase", + "entity.antarchy.glimmer": "Glimmer", + "entity.antarchy.ouranwood_deer": "Ouranwood-Hirsch", + "entity.antarchy.elka": "Elka", + "entity.antarchy.dorrie": "Dorrie", + "entity.antarchy.flying_squirrel": "Flughörnchen", + "entity.antarchy.caterpillar": "Raupe", + "entity.antarchy.butterfly": "Schmetterling", + "entity.antarchy.brutalfly": "Brutalfly", + "entity.antarchy.red_ant": "Rote Ameise", + "entity.antarchy.brown_ant": "Braune Ameise", + "entity.antarchy.rainbow_ant": "Regenbogen-Ameise", + "entity.antarchy.diamond_minecart": "Die Diamantlore", + "entity.antarchy.dr_trayaurus": "Dr. Trayaurus", + "entity.antarchy.cloud_shark": "Wolkenhai", + "entity.antarchy.kraken": "Der Kraken", + "entity.antarchy.missile_squid": "Raketenkalmar", + "entity.antarchy.octopus_bomb": "Oktopusbombe", + "entity.antarchy.nightmare": "Albtraum", + "entity.antarchy.bed_bug": "Bettwanze", + "entity.antarchy.wasp": "Wespe", + "entity.antarchy.bomber": "Bomber", + "entity.antarchy.moleworm": "Moleworm", + "entity.antarchy.molevore": "Molevore", + "entity.antarchy.mantis": "Gottesanbeterin", + "entity.antarchy.alpha_mantis": "Alpha-Gottesanbeterin", + "entity.antarchy.triffid": "Triffid", + "entity.antarchy.toreterror": "Toreterror", + "entity.antarchy.water_bomb": "Wasserbombe", + "subtitles.antarchy.mantis_ambient": "Gottesanbeterin klickt", + "subtitles.antarchy.mantis_hurt": "Gottesanbeterin kreischt", + "subtitles.antarchy.mantis_attack": "Gottesanbeterin schnappt", + "subtitles.antarchy.mantis_fly_loop": "Gottesanbeterin Flügel summen", + "item.antarchy.big_bertha": "Big Bertha", + "item.antarchy.wasp_nest": "Wespe-Nest", + "item.antarchy.stink_bug": "Stinkwanze", + "item.antarchy.wasp_spawn_egg": "Wespe-Spawn-Ei", + "item.antarchy.bomber_spawn_egg": "Bomber-Spawn-Ei", + "item.antarchy.big_bertha_blade": "Big-Bertha-Klinge", + "item.antarchy.big_bertha_handle": "Big-Bertha-Griff", + "item.antarchy.big_bertha_hilt": "Big-Bertha-Heft", + "item.antarchy.battle_axe": "Streitaxt", + "item.antarchy.attitude_adjuster": "Benimmhammer", + "tooltip.antarchy.attitude_adjuster.grounded": "Schleudert Ziele am Boden nach oben; Ziele in der Luft werden auf den Boden geschmettert.", + "tooltip.antarchy.attitude_adjuster.slam": "Rechtsklicke in der Luft, um auf den Boden zu schmettern.", + "item.antarchy.cloud_shark_fin": "Wolkenhai-Flosse", + "item.antarchy.cloud_shark_fin_soup": "Wolkenhai-Flosse-Suppe", + "tooltip.antarchy.cloud_shark_fin_soup": "Gewährt Stärke und Sanften Fall.", + "tooltip.antarchy.critter_cage.empty": "Rechtsklick zum Werfen", + "tooltip.antarchy.critter_cage.contains": "Enthält: %s", + "tooltip.antarchy.critter_cage.release": "Rechtsklick zum Freilassen", + "tooltip.antarchy.critter_cage.place": "Umschalt + Rechtsklick zum Platzieren", + "item.antarchy.kraken_tooth": "Kraken-Zahn", + "item.antarchy.kraken_tentacle": "Kraken-Tentakel", + "item.antarchy.krakens_grasp": "Griff des Kraken", + "entity.antarchy.tentacle": "Tentakel", + "item.antarchy.basilisk_fang": "Basilisk-Fangzahn", + "item.antarchy.basilisk_dagger": "Basilisk-Dolch", + "item.antarchy.blood_crystal_block": "Blutkristall-Block", + "item.antarchy.small_blood_crystal_bud": "Klein Blutkristall-Knospe", + "item.antarchy.medium_blood_crystal_bud": "Mittelgroß Blutkristall-Knospe", + "item.antarchy.large_blood_crystal_bud": "Groß Blutkristall-Knospe", + "item.antarchy.blood_crystal_cluster": "Blutkristall-Haufen", + "item.antarchy.dream_sand": "Traum-Sand", + "item.antarchy.dream_sandstone": "Traumsandstein", + "item.antarchy.chiseled_dream_sandstone": "Gemeißelter Traumsandstein", + "item.antarchy.cut_dream_sandstone": "Geschnittener Traumsandstein", + "item.antarchy.smooth_dream_sandstone": "Glatter Traumsandstein", + "item.antarchy.dream_sandstone_stairs": "Traumsandsteintreppe", + "item.antarchy.dream_sandstone_slab": "Traumsandsteinstufe", + "item.antarchy.dream_sandstone_wall": "Traumsandsteinmauer", + "item.antarchy.smooth_dream_sandstone_stairs": "Glatte Traumsandsteintreppe", + "item.antarchy.smooth_dream_sandstone_slab": "Glatte Traumsandsteinstufe", + "item.antarchy.cut_dream_sandstone_slab": "Geschnittene Traumsandsteinstufe", + "item.antarchy.dream_torch": "Traum-Fackel", + "item.antarchy.dream_lantern": "Traum-Laterne", + "item.antarchy.dream_campfire": "Traum-Lagerfeuer", + "item.antarchy.giant_lily_pad": "Riesenseerosenblatt", + "item.antarchy.seashell": "Muschel", + "item.antarchy.nightmare_scale": "Albtraum-Schuppe", + "item.antarchy.nightmare_helmet": "Albtraum-Helm", + "item.antarchy.nightmare_chestplate": "Albtraum-Brustpanzer", + "item.antarchy.nightmare_leggings": "Albtraum-Beinschutz", + "item.antarchy.nightmare_boots": "Albtraum-Stiefel", + "item.antarchy.nightmare_sword": "Albtraum-Schwert", + "tooltip.antarchy.nightmare_armor_double_damage": "%s%% Chance, doppelten Schaden zu verursachen", + "tooltip.antarchy.nightmare_armor_set_bonus": "Komplettes Set: Immunität gegen Wither und Grauen", + "tooltip.antarchy.nightmare_sword": "Verursacht mehr Schaden, je niedriger deine Gesundheit ist.", + "tooltip.antarchy.nightmare_sword_damage": "Verursacht %s Schaden", + "tooltip.antarchy.primordial_helmet_water_breathing": "Gewährt dem Träger Unterwasseratmung", + "tooltip.antarchy.primordial_armor_knockback_dealt": "Jedes Teil erhöht den Angriffsrückstoß um %s", + "tooltip.antarchy.primordial_armor_set_bonus": "Komplettes Set: Angriffe ignorieren die Rückstoßresistenz von Gegnern", + "attribute.antarchy.double_damage_chance": "Chance auf doppelten Schaden", + "attribute.antarchy.bloodglass_max_hearts": "Maximale Blutglasherzen", + "item.antarchy.molevore_nose": "Molevore-Nase", + "item.antarchy.moleworm": "Moleworm", + "item.antarchy.triffid_spawn_egg": "Triffid-Spawn-Ei", + "item.antarchy.infested_rooted_dirt": "Befallen Verwurzelt Erde", + "item.antarchy.infested_coarse_dirt": "Befallen Grob Erde", + "item.antarchy.pale_nyxite": "Blass Nyxite", + "item.antarchy.polished_nyxite": "Poliert Nyxite", + "item.antarchy.chiseled_nyxite": "Gemeißelt Nyxite", + "item.antarchy.nyxite_bricks": "Nyxiteziegel", + "item.antarchy.shellstone": "Shellstone", + "item.antarchy.polished_shellstone": "Polierter Shellstone", + "item.antarchy.shellstone_bricks": "Shellstoneziegel", + "item.antarchy.chiseled_shellstone": "Gemeißelter Shellstone", + "item.antarchy.mossy_shellstone_bricks": "Bemooste Shellstoneziegel", + "item.antarchy.mossy_shellstone_brick_stairs": "Bemooste Shellstoneziegeltreppe", + "item.antarchy.mossy_shellstone_brick_slab": "Bemooste Shellstoneziegelstufe", + "item.antarchy.mossy_shellstone_brick_wall": "Bemooste Shellstoneziegelmauer", + "item.antarchy.cracked_shellstone_bricks": "Rissige Shellstoneziegel", + "item.antarchy.shellstone_stairs": "Shellstone-Treppe", + "item.antarchy.shellstone_slab": "Shellstone-Stufe", + "item.antarchy.shellstone_wall": "Shellstone-Mauer", + "item.antarchy.polished_shellstone_stairs": "Treppe aus poliertem Shellstone", + "item.antarchy.polished_shellstone_slab": "Stufe aus poliertem Shellstone", + "item.antarchy.polished_shellstone_wall": "Mauer aus poliertem Shellstone", + "item.antarchy.shellstone_brick_stairs": "Shellstoneziegeltreppe", + "item.antarchy.shellstone_brick_slab": "Shellstoneziegelstufe", + "item.antarchy.shellstone_brick_wall": "Shellstoneziegelmauer", + "item.antarchy.nyxite_stairs": "Nyxite-Treppe", + "item.antarchy.nyxite_slab": "Nyxite-Stufe", + "item.antarchy.nyxite_wall": "Nyxite-Mauer", + "item.antarchy.polished_nyxite_stairs": "Poliert Nyxite-Treppe", + "item.antarchy.polished_nyxite_slab": "Poliert Nyxite-Stufe", + "item.antarchy.polished_nyxite_wall": "Poliert Nyxite-Mauer", + "item.antarchy.nyxite_brick_stairs": "Nyxiteziegeltreppe", + "item.antarchy.nyxite_brick_slab": "Nyxiteziegelstufe", + "item.antarchy.nyxite_brick_wall": "Nyxiteziegelmauer", + "item.antarchy.potent_nyxite": "Potent Nyxite", + "item.antarchy.antimetal": "Antimetal", + "item.antarchy.polished_antimetal": "Poliert Antimetal", + "item.antarchy.antimetal_scaffolding": "Antimetal-Gerüst", + "item.antarchy.ouranwood_acorn": "Ouranwood-Eichel", + "item.antarchy.ouranwood_boat": "Ouranwood-Boot", + "item.antarchy.ouranwood_chest_boat": "Ouranwood-Truhenboot", + "item.antarchy.raw_venison": "Rohes Wildbret", + "item.antarchy.cooked_venison": "Gebratenes Wildbret", + "item.antarchy.peach_sapling": "Pfirsich-Setzling", + "item.antarchy.peach": "Pfirsich", + "item.antarchy.peach_pie": "Pfirsich-Kuchen", + "item.antarchy.cornbread": "Maisbrot", + "item.antarchy.popcorn": "Popcorn", + "item.antarchy.peach_sign": "Pfirsich-Schild", + "item.antarchy.peach_hanging_sign": "Pfirsich-Hängeschild", + "item.antarchy.peach_boat": "Pfirsich-Boot", + "item.antarchy.peach_chest_boat": "Pfirsich-Truhenboot", + "item.antarchy.orange_milkweed": "Orange Seidenpflanze", + "item.antarchy.pink_milkweed": "Rosa Seidenpflanze", + "item.antarchy.camellia": "Kamelie", + "item.antarchy.spider_lily": "Spinnenlilie", + "item.antarchy.hushweed": "Hushweed", + "item.antarchy.umbral_moss_block": "Umbralmoos-Block", + "item.antarchy.umbral_moss_carpet": "Umbralmoos-Teppich", + "item.antarchy.blush_moss_block": "Rosamoos-Block", + "item.antarchy.blush_moss_carpet": "Rosamoos-Teppich", + "item.antarchy.mud_pie": "Schlammkuchen", + "item.antarchy.duct_tape": "Panzerband", + "item.antarchy.duct_tape.tooltip": "Platziere es und rechtsklicke, um Werkzeuge zu reparieren", + "item.antarchy.rainbow_sugar": "Regenbogenzucker", + "item.antarchy.uranium_nugget": "Uran-Klumpen", + "item.antarchy.titanium_nugget": "Titan-Klumpen", + "item.antarchy.raw_uranium_scrap": "Roh Uran-Schrott", + "item.antarchy.raw_titanium_scrap": "Roh Titan-Schrott", + "item.antarchy.raw_uranium": "Roh Uran", + "item.antarchy.raw_titanium": "Roh Titan", + "item.antarchy.uranium_ingot": "Uran-Barren", + "item.antarchy.titanium_ingot": "Titan-Barren", + "item.antarchy.blood_crystal_shard": "Blutkristall-Splitter", + "item.antarchy.blood_crystal_apple": "Blutkristallapfel", + "item.antarchy.blood_crystal_katana": "Blutkristall-Katana", + "item.antarchy.blood_crystal_helmet": "Blutkristall-Helm", + "item.antarchy.blood_crystal_chestplate": "Blutkristall-Brustpanzer", + "item.antarchy.blood_crystal_leggings": "Blutkristall-Beinschutz", + "item.antarchy.blood_crystal_boots": "Blutkristall-Stiefel", + "item.antarchy.blood_crystal_armor.tooltip": "Gewährt ein Blutglasherz, das einen eingehenden Treffer blockiert, zerbricht und sich danach wieder auflädt.", + "item.antarchy.blood_crystal_boots.tooltip2": "Verhindert Fallschaden beim Aufwärtsfallen unter umgekehrter Gravitation.", + "item.antarchy.blood_crystal_apple.tooltip": "Gewährt Blutglasbarriere mit vorübergehenden Blutglasherzen, die sich während der Wirkungsdauer wieder aufladen.", + "tooltip.antarchy.blood_crystal_katana.launch": "Schleudert dich bei einem Treffer nach vorn.", + "tooltip.antarchy.blood_crystal_katana.trail": "Hinterlässt eine karmesinrote Spur.", + "item.antarchy.mantis_claw": "Gottesanbeterin-Klaue", + "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", + "item.antarchy.king_scale": "König-Schuppe", + "item.antarchy.queen_scale": "Königin-Schuppe", + "item.antarchy.jumpy_bug_leg": "Sprungkäfer-Bein", + "item.antarchy.jumpy_boots": "Sprungstiefel", + "tooltip.antarchy.jumpy_boots": "Schleiche zum Aufladen und springe dann, um nach oben zu schnellen.", + "item.antarchy.brutalfly_wing": "Brutalfly-Flügel", + "item.antarchy.brutalfly_elytra": "Brutalfly-Elytren", + "tooltip.antarchy.brutalfly_elytra.flap": "Halte beim Fliegen %s gedrückt, um mit den Flügeln zu schlagen", + "item.antarchy.cornea_ear": "Ohr der Cornea", + "item.antarchy.corn": "Mais", + "item.antarchy.corn_seeds": "Mais-Samen", + "item.antarchy.raw_corndog": "Roher Corn Dog", + "item.antarchy.cooked_corndog": "Gegarter Corn Dog", + "item.antarchy.high_fructose_corn_syrup": "Maissirup mit hohem Fruktosegehalt", + "jei.antarchy.americanize": "Amerikanisieren", + "item.antarchy.american_name": "Amerikanisch: %s", + "item.antarchy.root_beer": "Root Beer", + "item.antarchy.primordial_scute": "Urzeitlich-Hornplatte", + "item.antarchy.triffid_goo": "Triffid Schleim", + "item.antarchy.triffid_goo_block": "Triffid Schleim-Block", + "tooltip.antarchy.triffid_goo_block": "Bei hoher Geschwindigkeit prallst du nach oben ab, andernfalls sinkst du hindurch.", + "item.antarchy.cloud_bucket": "Wolke-Eimer", + "tooltip.antarchy.cloud_bucket.midair": "Kann in der Luft platziert werden", + "item.antarchy.lumen_bucket": "Lumen-Eimer", + "item.antarchy.scorpion_whip": "Kaiserskorpion-Peitsche", + "tooltip.antarchy.scorpion_whip.lash": "Peitscht Beute aus der Ferne und verankert eine giftige Leine.", + "tooltip.antarchy.scorpion_whip.reel": "Rechtsklick, um angebundene Beute heranzuziehen.", + "tooltip.antarchy.scorpion_whip.snap": "Linksklicke erneut auf angebundene Beute, um den Stachel loszureißen.", + "item.antarchy.fallen_king_crown": "Krone des gefallenen Königs", + "tooltip.antarchy.fallen_king_crown.hero": "Das Töten feindlicher Kreaturen gewährt Held des Dorfes", + "item.antarchy.vortex_eye": "Wirbel-Auge", + "item.antarchy.ultimate_helmet": "Ultimativer Helm", + "item.antarchy.ultimate_chestplate": "Ultimativer Brustpanzer", + "item.antarchy.ultimate_leggings": "Ultimativer Beinschutz", + "item.antarchy.ultimate_boots": "Ultimative Stiefel", + "item.antarchy.ultimate_sword": "Ultimatives Schwert", + "item.antarchy.ultimate_pickaxe": "Ultimative Spitzhacke", + "item.antarchy.ultimate_axe": "Ultimative Axt", + "item.antarchy.ultimate_shovel": "Ultimative Schaufel", + "item.antarchy.ultimate_hoe": "Ultimative Hacke", + "item.antarchy.ultimate_bow": "Ultimativer Bogen", + "item.antarchy.ultimate_crossbow": "Ultimative Armbrust", + "item.antarchy.ultimate_crossbow.capacity": "Lädt bis zu 16 Pfeile gleichzeitig", + "item.antarchy.ultimate_crossbow.arrows_remaining": "%1$s %2$s geladen", + "item.antarchy.ultimate_mace": "Ultimativer Streitkolben", + "item.antarchy.moggles": "Moggles", + "itemGroup.antarchy.antarchy": "Antarchy", + "item.antarchy.bile_bucket": "Galle-Eimer", + "item.antarchy.ichor_bucket": "Ichor-Eimer", + "item.antarchy.antiwater_bucket": "Antiwasser-Eimer", + "item.antarchy.reverie_bottle": "Flasche der Reverie", + "item.antarchy.squidzooka": "Squidzooka", + "item.antarchy.rpo_launcher": "R.O.-Werfer", + "item.antarchy.shrink_ray": "Schrumpfstrahler", + "item.antarchy.growth_ray": "Wachstumsstrahler", + "tooltip.antarchy.shrink_ray": "Schrumpft Ziele dauerhaft. Gedrückt halten zum Aufladen.", + "tooltip.antarchy.growth_ray": "Vergrößert Ziele dauerhaft. Gedrückt halten zum Aufladen.", + "tooltip.antarchy.size_ray_milk_reset": "Milch trinken setzt diesen Effekt zurück.", + "tooltip.antarchy.reverie_bottle.capture": "Rechtsklicke mit einer Glasflasche auf eine Reverie, um sie einzufangen.", + "tooltip.antarchy.reverie_bottle.release": "Rechtsklick, um die Reverie freizulassen.", + "item.antarchy.gravity_gun": "Gravitationskanone", + "item.antarchy.miners_dream": "Traum des Bergmanns", + "tooltip.antarchy.miners_dream.line1": "Rechtsklick, um eine gewundene Höhle zu graben.", + "tooltip.antarchy.miners_dream.line2": "Lässt wertvolle Blöcke unberührt.", + "message.antarchy.miners_dream_disabled": "Der Traum des Bergmanns ist deaktiviert.", + "message.antarchy.miners_dream_busy": "Dein vorheriger Traum entfaltet sich noch.", + "item.antarchy.diamond_minecart": "Die Diamantlore", + "item.antarchy.cogwheel_pet": "Zahnrad-Haustier", + "item.antarchy.fire_dragon_pet": "Feuerdrachen-Haustier", + "item.antarchy.ice_dragon_pet": "Eisdrachen-Haustier", + "item.antarchy.lightning_dragon_pet": "Blitzdrachen-Haustier", + "item.antarchy.gorgon_pet": "Gorgon-Haustier", + "item.antarchy.apple_cow_spawn_egg": "Apfelkuh-Spawn-Ei", + "item.antarchy.red_ant_spawn_egg": "Rote Ameise-Spawn-Ei", + "item.antarchy.brown_ant_spawn_egg": "Braune Ameise-Spawn-Ei", + "item.antarchy.rainbow_ant_spawn_egg": "Regenbogen-Ameise-Spawn-Ei", + "item.antarchy.golden_apple_cow_spawn_egg": "Golden Apfelkuh-Spawn-Ei", + "item.antarchy.enchanted_golden_apple_cow_spawn_egg": "Verzaubert golden Apfelkuh-Spawn-Ei", + "item.antarchy.dr_trayaurus_spawn_egg": "Dr. Trayaurus-Spawn-Ei", + "item.antarchy.easter_bunny_spawn_egg": "Osterhase-Spawn-Ei", + "item.antarchy.glimmer_spawn_egg": "Glimmer-Spawn-Ei", + "item.antarchy.ouranwood_deer_spawn_egg": "Ouranwood-Hirsch-Spawn-Ei", + "item.antarchy.spirit_apple": "Geisterapfel", + "item.antarchy.elka_spawn_egg": "Elka-Spawn-Ei", + "item.antarchy.glimmer_bottle": "Flasche der Glimmer", + "item.antarchy.glimmer_bottle.contains": "Enthält: %s", + "glimmer_variant.antarchy.apple_cow": "Apfelkuh", + "glimmer_variant.antarchy.ouranwood_deer": "Ouranwood-Hirsch", + "glimmer_variant.antarchy.frog": "Frosch", + "glimmer_variant.antarchy.ant": "Ameise", + "glimmer_variant.antarchy.elka": "Elka", + "entity.antarchy.glimmer.set_sit": "Glimmer sitzt nun.", + "entity.antarchy.glimmer.set_follow": "Glimmer folgt dir nun.", + "entity.antarchy.glimmer.set_wander": "Glimmer streift nun umher.", + "entity.antarchy.glimmer.ability.ant": "Deine Ameise stachelt dich gegen %s an!", + "entity.antarchy.glimmer.ability.apple_cow": "Deine Apfelkuh muht und stärkt dich!", + "entity.antarchy.glimmer.ability.elka": "Deine Elka schreit auf und zerschmettert die Barriere!", + "entity.antarchy.glimmer.ability.deer": "Dein Ouranwood-Hirsch stürmt durch den Gegner!", + "entity.antarchy.glimmer.ability.frog": "Dein Frosch hat %s verschlungen!", + "item.antarchy.glimmer_bottle.passive.apple_cow": "Passiv: Hunger sinkt 25% langsamer", + "item.antarchy.glimmer_bottle.ability.apple_cow": "Fähigkeit: Muht bei niedrigem Hunger für einen Schub an Sättigung und Regeneration", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "Passiv: Schnelligkeit I", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "Fähigkeit: Stürmt beim Sprinten durch feindliche Kreaturen und schleudert sie davon", + "item.antarchy.glimmer_bottle.passive.frog": "Passiv: Sprungkraft I", + "item.antarchy.glimmer_bottle.ability.frog": "Fähigkeit: Verschlingt eine nahe feindliche Kreatur und wird vorübergehend größer und stärker", + "item.antarchy.glimmer_bottle.passive.ant": "Passiv: Etwas größere Angriffsreichweite", + "item.antarchy.glimmer_bottle.ability.ant": "Fähigkeit: Ein Treffer gegen einen großen Gegner gewährt kurzzeitig Stärke II", + "item.antarchy.glimmer_bottle.passive.elka": "Passiv: Blutglasbarriere II", + "item.antarchy.glimmer_bottle.ability.elka": "Fähigkeit: Schreit und zerbirst zu einer Schockwelle, wenn eines deiner Barriereherzen zerbricht", + "advancements.antarchy.spirant_animal.title": "Ameisengeist", + "advancements.antarchy.spirant_animal.description": "Zähme einen Ameisen-Glimmer.", + "advancements.antarchy.hoppy_together.title": "Gemeinsam gehüpft", + "advancements.antarchy.hoppy_together.description": "Zähme einen Frosch-Glimmer.", + "advancements.antarchy.deerly_beloved.title": "Hirschlich geliebt", + "advancements.antarchy.deerly_beloved.description": "Zähme einen Ouranwood-Hirsch-Glimmer.", + "advancements.antarchy.elkcellent_choice.title": "HIRSCHorragende Wahl", + "advancements.antarchy.elkcellent_choice.description": "Zähme einen Elka-Glimmer.", + "advancements.antarchy.apple_of_my_eye.title": "Mein Augapfel", + "advancements.antarchy.apple_of_my_eye.description": "Zähme einen Apfelkuh-Glimmer.", + "item.antarchy.dorrie_spawn_egg": "Dorrie-Spawn-Ei", + "item.antarchy.flying_squirrel_spawn_egg": "Flughörnchen-Spawn-Ei", + "item.antarchy.caterpillar_spawn_egg": "Raupe-Spawn-Ei", + "item.antarchy.butterfly_spawn_egg": "Schmetterling-Spawn-Ei", + "item.antarchy.brutalfly_spawn_egg": "Brutalfly-Spawn-Ei", + "item.antarchy.cloud_shark_spawn_egg": "Wolkenhai-Spawn-Ei", + "item.antarchy.kraken_spawn_egg": "Äh, nein. Lass das.", + "item.antarchy.missile_squid_spawn_egg": "Raketenkalmar-Spawn-Ei", + "item.antarchy.octopus_bomb_spawn_egg": "Oktopusbombe-Spawn-Ei", + "item.antarchy.nightmare_spawn_egg": "Albtraum-Spawn-Ei", + "item.antarchy.toreterror_spawn_egg": "Toreterror-Spawn-Ei", + "item.antarchy.water_cannon": "Wasserkanone", + "item.antarchy.primordial_helmet": "Urzeitlicher Helm", + "item.antarchy.primordial_chestplate": "Urzeitlicher Brustpanzer", + "item.antarchy.primordial_leggings": "Urzeitlicher Beinschutz", + "item.antarchy.primordial_boots": "Urzeitliche Stiefel", + "item.antarchy.bed_bug_spawn_egg": "Bettwanze-Spawn-Ei", + "item.antarchy.moleworm_spawn_egg": "Moleworm-Spawn-Ei", + "item.antarchy.molevore_spawn_egg": "Molevore-Spawn-Ei", + "item.antarchy.reverie_spawn_egg": "Reverie-Spawn-Ei", + "item.antarchy.mantis_spawn_egg": "Gottesanbeterin-Spawn-Ei", + "item.antarchy.alpha_mantis_spawn_egg": "Alpha-Gottesanbeterin-Spawn-Ei", + "biome.antarchy.moleworm_caves": "Moleworm-Höhlen", + "biome.antarchy.elythia_meadow": "Elythische Wiesen", + "biome.antarchy.butterfly_fields": "Schmetterlingsfelder", + "biome.antarchy.ouranwood_forest": "Ouranwood Wald", + "biome.antarchy.glimmering_pools": "Schimmernde Teiche", + "biome.antarchy.peach_forest": "Pfirsichwald", + "biome.antarchy.fungal_ouranwood_forest": "Pilzartig Ouranwood Wald", + "biome.antarchy.glowcap_caves": "Leuchtkappenhöhlen", + "message.antarchy.brown_ant_activated": "Die braune Ameise ist bereit, ihr Ziel zu öffnen.", + "message.antarchy.brown_ant_needs_reagent": "Diese braune Ameise benötigt ein Reagenz, bevor sie ihr Ziel öffnen kann.", + "message.antarchy.rainbow_ant_activated": "Die Regenbogen-Ameise summt mit einem neuen Infinity-Ziel.", + "message.antarchy.rainbow_ant_activated_inherited": "Die Regenbogen-Ameise summt mit einem geerbten Infinity-Ziel.", + "message.antarchy.rainbow_ant_activated_inherited_existing": "Die Regenbogen-Ameise verbindet sich erneut mit einem geerbten Infinity-Ziel.", + "message.antarchy.rainbow_ant_failed_dimension_create": "Dimension konnte nicht erstellt werden. Vermutlich stimmt etwas in deiner Infinity-Konfiguration nicht. Starte neu oder melde dich erneut an und versuche es noch einmal.", + "message.antarchy.rainbow_ant_infinity_missing": "Infinity muss installiert sein, damit Regenbogen-Ameisen-Dimensionen funktionieren.", + "message.antarchy.rainbow_ant_needs_reagent": "Diese Regenbogen-Ameise benötigt ein Reagenz, bevor sie eine Dimension öffnen kann.", + "message.antarchy.red_ant_activated": "Die rote Ameise ist bereit, ihr Ziel zu öffnen.", + "message.antarchy.red_ant_needs_reagent": "Diese rote Ameise benötigt ein Reagenz, bevor sie ihr Ziel öffnen kann.", + "message.antarchy.termite_activated": "Die Termite ist bereit, ihr Ziel zu öffnen.", + "message.antarchy.termite_needs_reagent": "Diese Termite benötigt ein Reagenz, bevor sie ihr Ziel öffnen kann.", + "death.attack.spit_bug_disrespect": "%1$s wurde vom Spuckkäfer respektlos behandelt", + "death.attack.jumpy_bug_jump": "%1$s wurde vom Sprungkäfer angesprungen", + "death.attack.hercules_beetle_obliteration": "%1$s wurde vom Herkuleskäfer ausgelöscht", + "message.antarchy.big_bertha.mode": "Big-Bertha-Modus: %s", + "message.antarchy.big_bertha.mode.basilisk": "Basilisk", + "message.antarchy.big_bertha.mode.lucid": "Lucid", + "message.antarchy.big_bertha.mode.nightmare": "Albtraum", + "message.antarchy.big_bertha.mode.kraken": "Kraken", + "message.antarchy.big_bertha.mode.molevore": "Molevore", + "message.antarchy.big_bertha.mode.toreterror": "Toreterror", + "message.antarchy.ultimate_tool.mode_3x3": "Auf 3x3-Abbau umgeschaltet", + "message.antarchy.ultimate_tool.mode_default": "Auf normalen Abbau umgeschaltet", + "advancements.antarchy.hey_listen.title": "Hey, hör zu!", + "advancements.antarchy.hey_listen.description": "Eine Reverie hat sich dir angeschlossen.", + "advancements.antarchy.very_hungry_caterpillar.title": "Die kleine Raupe Nimmersatt", + "advancements.antarchy.very_hungry_caterpillar.description": "Hilf einer Raupe beim Wachsen.", + "effect.antarchy.dread": "Grauen", + "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.stinky": "Stinkend", + "effect.antarchy.stinky.description": "Vertreibt passive und neutrale Kreaturen und zieht Gliederfüßer an.", + "effect.antarchy.gooped.description": "Verlangsamt Bewegung und Angriffsgeschwindigkeit.", + "effect.antarchy.shrinking": "Schrumpfung", + "effect.antarchy.growth": "Wachstum", + "effect.antarchy.bloodglass_ward": "Blutglasbarriere", + "effect.antarchy.bloodglass_ward.description": "Verleiht Herzen, die zersplittern und einen gesamten Treffer absorbieren. Sie regenerieren sich mit der Zeit.", + "death.attack.triffid_mauling": "%1$s wurde von einer Pflanze zu Tode zerfleischt", + "death.attack.triffid_mauling.player": "%1$s wurde von einer Pflanze zu Tode zerfleischt", + "death.attack.triffid_swallow": "%1$s wurde von einem Triffid verschlungen", + "death.attack.triffid_swallow.player": "%1$s wurde von einem Triffid verschlungen", + "potion.antarchy.haste": "Eiletrank", + "potion.antarchy.strong_haste": "Starker Eiletrank", + "tooltip.antarchy.big_bertha.mode": "Modus: %s", + "tooltip.antarchy.big_bertha.toggle_mode": "Umschalt-Rechtsklick, um zwischen Bossmodi zu wechseln.", + "tooltip.antarchy.big_bertha.mode.basilisk": "Rechtsklick lähmt ein Ziel. Treffer verursachen Gift und Verlangsamung.", + "tooltip.antarchy.big_bertha.mode.lucid": "Treffer kehren Ziele für einige Sekunden um. Während du umgekehrt bist, verursachen Treffer mehr Schaden.", + "tooltip.antarchy.big_bertha.mode.nightmare": "Spieler erleiden Grauen; Treffer verursachen Schwäche.", + "tooltip.antarchy.big_bertha.mode.kraken": "Treffer schleudern Ziele zurück und rufen Blitze herbei.", + "tooltip.antarchy.big_bertha.mode.molevore": "Rechtsklick, um dich drehend nach vorn zu bohren und Molevore-Blöcke zu durchdringen.", + "tooltip.antarchy.big_bertha.mode.toreterror": "Rechtsklick, um in die Luft zu springen und mit einer Flächenschockwelle herabzustürzen.", + "tooltip.antarchy.ultimate_tools_3x3": "Umschalt-Rechtsklick, um 3x3-Abbau umzuschalten.", + "tooltip.antarchy.moggles.reveal": "Gewährt Nachtsicht und weist auf nahe Höhlen hin.", + "tooltip.antarchy.moggles.underground": "Funktioniert nur, wenn du keinen freien Blick zum Himmel hast.", + "tooltip.antarchy.cornea_ear.vision": "Gewährt %s Sekunden lang Nachtsicht.", + "tooltip.antarchy.mob_coming_soon": "Kreatur folgt bald!", + "tooltip.antarchy.gravity_gun.primary": "Linksklick: Schleudert nahe Wesen weg oder wirft das gehaltene Ziel.", + "tooltip.antarchy.gravity_gun.secondary": "Rechtsklick: Zieht ein Wesen oder einen gültigen Block heran.", + "tooltip.antarchy.gravity_gun.scroll": "Halte Strg gedrückt und scrolle, um das gehaltene Ziel näher oder weiter weg zu bewegen.", + "tooltip.antarchy.gravity_gun.blacklist": "Wirkt nicht auf gesperrte Blöcke oder Wesen.", + "tooltip.antarchy.antimetal_inversion": "Kehrt Wesen direkt darunter um", + "tooltip.antarchy.diamond_minecart.forward": "Wird später implementiert.", + "tooltip.antarchy.diamond_minecart.rails": " ", + "tooltip.antarchy.rainbow_sugar": "Aktiviert Regenbogen-Ameisen-Dimensionen. Iss ihn in einer solchen Dimension, um nach Hause zurückzukehren.", + "advancements.antarchy.visit_elythia.title": "InterdimAMEISional", + "advancements.antarchy.visit_elythia.description": "Benutze eine braune Ameise, um Elythia zu erreichen.", + "advancements.antarchy.visit_thoraxis.title": "Ameisen-Aggressionsbewältigung", + "advancements.antarchy.visit_thoraxis.description": "Benutze eine rote Ameise, um Thoraxis zu erreichen.", + "advancements.antarchy.fallen_kingdom_castle.title": "Einst herrschte ich über die Welt ...", + "advancements.antarchy.fallen_kingdom_castle.description": "Entdecke die Burg des gefallenen Königreichs.", + "advancements.antarchy.fallen_king_crown.title": "Chunks luden, wenn ich es befahl ...", + "advancements.antarchy.fallen_king_crown.description": "Erhalte die Krone des gefallenen Königs.", + "advancements.antarchy.the_lab.title": "Hallo zusammen, hier ist Dan!", + "advancements.antarchy.the_lab.description": "Entdecke Dr. Trayaurus’ Labor.", + "advancements.antarchy.sweater_dreams.title": "Pulloverträume", + "advancements.antarchy.sweater_dreams.description": "Besiege den Albtraum.", + "advancements.antarchy.stone_cold.title": "Steinkalt", + "advancements.antarchy.stone_cold.description": "Besiege einen Basilisken.", + "advancements.antarchy.moley_poley.title": "Maulwurf-Kugel", + "advancements.antarchy.moley_poley.description": "Besiege einen Molevore.", + "advancements.antarchy.lucid_dreams.title": "Luzide Träume", + "advancements.antarchy.lucid_dreams.description": "Besiege einen Lucid.", + "advancements.antarchy.davy_jones_locker.title": "Davy Jones’ Kiste", + "advancements.antarchy.davy_jones_locker.description": "Besiege den Kraken.", + "advancements.antarchy.shark_weak.title": "Wenn Haie fliegen", + "advancements.antarchy.shark_weak.description": "Besiege einen Wolkenhai.", + "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "Lass dich nicht von Bettwanzen beißen", + "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "Besiege eine Bettwanze.", + "advancements.antarchy.soups_up.title": "Suppe ist fertig", + "advancements.antarchy.soups_up.description": "Iss Wolkenhai-Flossensuppe.", + "advancements.antarchy.in_the_upside_down.title": "In der verkehrten Welt", + "advancements.antarchy.in_the_upside_down.description": "Werde zum ersten Mal umgekehrt.", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "Wer es gerochen hat, hat es verbrochen", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "Werde zum ersten Mal stinkend.", + "advancements.antarchy.ultimate_armor.title": "Ultimativer Schutz", + "advancements.antarchy.ultimate_armor.description": "Sammle das vollständige Set der ultimativen Rüstung.", + "advancements.antarchy.ultimate_bow.title": "Bogenhemian Rhapsody", + "advancements.antarchy.ultimate_bow.description": "Erhalte einen ultimativen Bogen.", + "advancements.antarchy.brutalfly.title": "Schwebe wie ein Brutalfly, stich wie eine Biene", + "advancements.antarchy.brutalfly.description": "Erhalte Brutalfly-Elytren.", + "advancements.antarchy.now_watch_me_whip.title": "Und jetzt sieh mir beim Peitschen zu", + "advancements.antarchy.now_watch_me_whip.description": "Und jetzt sieh mir beim Nae Nae zu", + "advancements.antarchy.kill_molevore.title": "Maulwurf-Kugel", + "advancements.antarchy.kill_molevore.description": "Töte einen Molevore.", + "advancements.antarchy.water_cannon_craft.title": "Nasser ist besser!", + "advancements.antarchy.water_cannon_craft.description": "Erhalte eine Wasserkanone.", + "advancements.antarchy.kill_toreterror.title": "Eher Tore-schreckliches Zielen!", + "advancements.antarchy.kill_toreterror.description": "Besiege den Toreterror.", + "advancements.antarchy.challenge_games.title": "Challenge Games!", + "advancements.antarchy.challenge_games.description": "Betritt die zerstörte Arena.", + "advancements.antarchy.bugged_out.title": "Ausgekäfert", + "advancements.antarchy.bugged_out.description": "Besiege die Alpha-Gottesanbeterin.", + "death.attack.bed_bug_bite": "%1$s wurde von Bettwanzen gebissen", + "death.attack.bed_bug_bite.player": "%1$s wurde im Kampf gegen %2$s von Bettwanzen gebissen", + "message.antarchy.dread_too_scared_to_sleep": "Du hast zu viel Angst zum Schlafen.", + "death.attack.kraken_mauling": "%1$s wurde vom Kraken in die Tiefe gezogen", + "death.attack.kraken_mauling.player": "%1$s wurde im Kampf gegen %2$s vom Kraken in die Tiefe gezogen", + "death.attack.kraken_lightning": "%1$s wurde vom Sturm des Kraken niedergestreckt", + "death.attack.kraken_lightning.player": "%1$s wurde im Kampf gegen %2$s vom Sturm des Kraken niedergestreckt", + "death.attack.rpo_launcher_blast": "%1$s wurde von einem R.O. ausgeknockt", + "death.attack.rpo_launcher_blast.player": "%1$s wurde im Kampf gegen %2$s von einem R.O. ausgeknockt", + "death.attack.nightmare_mauling": "%1$s wurde vom Albtraum verschlungen", + "death.attack.nightmare_mauling.player": "%1$s wurde im Kampf gegen %2$s vom Albtraum verschlungen", + "death.attack.basilisk_bite": "%1$s wurde von einem Basilisken verschlungen", + "death.attack.basilisk_bite.player": "%1$s wurde im Kampf gegen %2$s von einem Basilisken verschlungen", + "death.attack.emperor_scorpion_sting": "%1$s wurde vom Kaiserskorpion gestochen", + "death.attack.emperor_scorpion_sting.player": "%1$s wurde im Kampf gegen %2$s vom Kaiserskorpion gestochen", + "death.attack.cornea_stalk_prick": "%1$s wurde von einem Cornea-Stängel zu Tode gestochen", + "death.attack.toreterror_spin": "%1$s wurde von Toreterror zu Tode gekreiselt", + "death.attack.toreterror_spin.player": "%1$s wurde von Toreterror zu Tode gekreiselt", + "death.attack.toreterror_jump": "%1$s wurde von Toreterror zu Tode gestampft", + "death.attack.toreterror_jump.player": "%1$s wurde von Toreterror zu Tode gestampft", + "death.attack.water_soaked": "%1$s wurde von %2$s zu Tode durchnässt", + "death.attack.water_soaked.player": "%1$s wurde von %2$s zu Tode durchnässt", + "entity.antarchy.lucid": "Lucid", + "item.antarchy.lucid_spawn_egg": "Lucid-Spawn-Ei", + "item.antarchy.lucid_eye": "Lucid-Auge", + "entity.antarchy.scorpion": "Skorpion", + "item.antarchy.scorpion_spawn_egg": "Skorpion-Spawn-Ei", + "entity.antarchy.basilisk": "Basilisk", + "item.antarchy.basilisk_spawn_egg": "Basilisk-Spawn-Ei", + "entity.antarchy.emperor_scorpion": "Kaiserskorpion", + "item.antarchy.emperor_scorpion_spawn_egg": "Kaiserskorpion-Spawn-Ei", + "item.antarchy.emperor_scorpion_stinger": "Kaiserskorpionstachel", + "item.antarchy.lucid_pearl": "Lucid-Perle", + "tooltip.antarchy.lucid_pearl": "Wirft ein Projektil mit umgekehrter Gravitation.", + "tooltip.antarchy.lucid_pearl.detail": "Teleportiert dich zum Aufschlagpunkt und wendet Umgekehrt an.", + "subtitles.antarchy.squidzooka_fire": "Squidzooka feuert", + "subtitles.antarchy.shrink_ray": "Schrumpfstrahler feuert", + "subtitles.antarchy.growth_ray": "Wachstumsstrahler feuert", + "subtitles.antarchy.size_ray_charge": "Größenstrahl lädt sich auf", + "subtitles.antarchy.ant_ambient": "Ameisen zirpen", + "subtitles.antarchy.ant_idle": "Ameisen ist zu hören", + "subtitles.antarchy.ant_hurt": "Ameisen wird verletzt", + "subtitles.antarchy.ant_bite": "Ameisen beißt", + "subtitles.antarchy.ant_gather": "Ameisen sammeln", + "subtitles.antarchy.ant_nest": "Ameisennest raschelt", + "subtitles.antarchy.cloud_shark_bite": "Wolkenhai beißt", + "subtitles.antarchy.cloud_shark_idle": "Wolkenhai ist zu hören", + "subtitles.antarchy.cloud_shark_hurt": "Wolkenhai wird verletzt", + "subtitles.antarchy.cloud_shark_death": "Wolkenhai stirbt", + "subtitles.antarchy.cloud_shark_fly": "Wolkenhai fliegt", + "subtitles.antarchy.caterpillar_idle": "Raupe ist zu hören", + "subtitles.antarchy.caterpillar_hurt": "Raupe wird verletzt", + "subtitles.antarchy.caterpillar_crawl": "Raupe kriecht", + "subtitles.antarchy.butterfly_hurt": "Schmetterling wird verletzt", + "subtitles.antarchy.brutalfly_idle": "Brutalfly ist zu hören", + "subtitles.antarchy.brutalfly_death": "Brutalfly stirbt", + "subtitles.antarchy.thoraxis_nightmare_wastes_ambient": "Albtraumöde summt", + "subtitles.antarchy.thoraxis_nightmare_wastes_additions": "Albtraumöde regt sich", + "subtitles.antarchy.thoraxis_nightmare_wastes_mood": "Albtraumöde murmelt", + "subtitles.antarchy.thoraxis_dream_dunes_ambient": "Traumdünen flüstern", + "subtitles.antarchy.thoraxis_dream_dunes_additions": "Traumdünen rascheln", + "subtitles.antarchy.thoraxis_dream_dunes_mood": "Traumdünen seufzen", + "subtitles.antarchy.thoraxis_lucid_pools_ambient": "Luzide Teiche summen", + "subtitles.antarchy.thoraxis_lucid_pools_additions": "Luzide Teiche fluchen", + "subtitles.antarchy.thoraxis_lucid_pools_mood": "Luzide Teiche murmeln", + "subtitles.antarchy.lucid_ambient": "Lucid summt", + "subtitles.antarchy.lucid_flying": "Lucid flattert", + "subtitles.antarchy.lucid_attack": "Lucid greift an", + "subtitles.antarchy.lucid_bolt": "Lucid Geschoss wird abgefeuert", + "subtitles.antarchy.lucid_hurt": "Lucid wird verletzt", + "subtitles.antarchy.lucid_death": "Lucid stirbt", + "subtitles.antarchy.reverie_idle": "Reverie schwebt", + "subtitles.antarchy.reverie_hurt": "Reverie wird verletzt", + "subtitles.antarchy.reverie_worry": "Reverie ist besorgt", + "subtitles.antarchy.reverie_save": "Reverie rettet dich", + "subtitles.antarchy.reverie_join_player": "Reverie schließt sich dir an", + "subtitles.antarchy.reverie_alert": "Reverie warnt dich", + "subtitles.antarchy.flying_squirrel_idle": "Flughörnchen zwitschert", + "subtitles.antarchy.flying_squirrel_beg": "Flughörnchen bettelt um Futter", + "subtitles.antarchy.flying_squirrel_nut": "Flughörnchen frisst", + "subtitles.antarchy.flying_squirrel_glide_loop": "Flughörnchen gleitet", + "subtitles.antarchy.flying_squirrel_hurt": "Flughörnchen wird verletzt", + "subtitles.antarchy.flying_squirrel_death": "Flughörnchen stirbt", + "subtitles.antarchy.nightmare_idle": "Albtraum faucht", + "subtitles.antarchy.nightmare_hurt": "Albtraum wird verletzt", + "subtitles.antarchy.nightmare_roar": "Albtraum brüllt", + "subtitles.antarchy.nightmare_death": "Albtraum stirbt", + "subtitles.antarchy.nightmare_bite": "Albtraum beißt", + "subtitles.antarchy.nightmare_flap": "Albtraum schlägt mit den Flügeln", + "subtitles.antarchy.triffid_attack": "Triffid greift an", + "subtitles.antarchy.triffid_grab": "Triffid packt zu", + "subtitles.antarchy.triffid_hurt": "Triffid wird verletzt", + "subtitles.antarchy.triffid_death": "Triffid stirbt", + "subtitles.antarchy.triffid_hiss": "Triffid zischt", + "subtitles.antarchy.triffid_growl": "Triffid knurrt", + "subtitles.antarchy.gravity_gun_pickup": "Gravitationskanone hebt etwas auf", + "subtitles.antarchy.gravity_gun_drop": "Gravitationskanone lässt los", + "subtitles.antarchy.gravity_gun_hold_loop": "Gravitationskanone summt", + "subtitles.antarchy.gravity_gun_launch": "Gravitationskanone schleudert", + "subtitles.antarchy.gravity_gun_dryfire": "Gravitationskanone klickt leer", + "subtitles.antarchy.bed_bug_ambient": "Bettwanze zwitschert", + "subtitles.antarchy.bed_bug_hurt": "Bettwanze wird verletzt", + "subtitles.antarchy.bed_bug_attack": "Bettwanze beißt", + "subtitles.antarchy.wasp_idle": "Wespe summt", + "subtitles.antarchy.wasp_hurt": "Wespe wird verletzt", + "subtitles.antarchy.wasp_attack": "Wespe sticht", + "subtitles.antarchy.wasp_death": "Wespe stirbt", + "subtitles.antarchy.scorpion_ambient": "Skorpion rasselt", + "subtitles.antarchy.scorpion_hurt": "Skorpion wird verletzt", + "subtitles.antarchy.scorpion_attack": "Skorpion greift an", + "subtitles.antarchy.emperor_scorpion_ambient": "Kaiserskorpion rasselt", + "subtitles.antarchy.emperor_scorpion_hurt": "Kaiserskorpion wird verletzt", + "subtitles.antarchy.emperor_scorpion_attack": "Kaiserskorpion greift an", + "subtitles.antarchy.emperor_scorpion_roar": "Kaiserskorpion brüllt", + "subtitles.antarchy.moleworm_ambient": "Moleworm raschelt", + "subtitles.antarchy.moleworm_hurt": "Moleworm wird verletzt", + "subtitles.antarchy.moleworm_attack": "Moleworm greift an", + "subtitles.antarchy.moleworm_dig": "Moleworm gräbt", + "subtitles.antarchy.molevore_ambient": "Molevore grollt", + "subtitles.antarchy.molevore_hurt": "Molevore wird verletzt", + "subtitles.antarchy.molevore_attack": "Molevore greift an", + "subtitles.antarchy.molevore_dig": "Molevore gräbt", + "subtitles.antarchy.duct_tape_use": "Panzerband reißt", + "subtitles.antarchy.potent_nyxite_hypnotic_gas": "Potent Nyxite zischt", + "subtitles.antarchy.potent_nyxite_geyser_eruption": "Potent Nyxite bricht aus", + "subtitles.antarchy.potent_nyxite_geyser_continuous": "Potent Nyxite Geysir tost", + "subtitles.antarchy.missile_squid_ambient": "Raketenkalmar summt", + "subtitles.antarchy.missile_squid_hurt": "Raketenkalmar wird verletzt", + "subtitles.antarchy.missile_squid_death": "Raketenkalmar stirbt", + "subtitles.antarchy.missile_squid_attack": "Raketenkalmar greift an", + "subtitles.antarchy.kraken_flying_loop": "Kraken gleitet", + "subtitles.antarchy.kraken_flying_sideways_loop": "Kraken kreist", + "subtitles.antarchy.kraken_attack": "Kraken schlägt zu", + "subtitles.antarchy.kraken_spin": "Kraken dreht sich", + "subtitles.antarchy.kraken_roar": "Kraken brüllt", + "subtitles.antarchy.kraken_summon": "Kraken taucht auf", + "subtitles.antarchy.kraken_hurt": "Kraken wird verletzt", + "subtitles.antarchy.kraken_death": "Kraken stirbt", + "subtitles.antarchy.basilisk_idle_loop": "Basilisk ist zu hören", + "subtitles.antarchy.basilisk_slither_loop": "Basilisk schlängelt sich", + "subtitles.antarchy.basilisk_bite": "Basilisk beißt", + "subtitles.antarchy.basilisk_hiss": "Basilisk zischt", + "subtitles.antarchy.basilisk_hurt": "Basilisk wird verletzt", + "subtitles.antarchy.basilisk_death": "Basilisk stirbt", + "subtitles.antarchy.bomber_walk": "Bomber läuft", + "subtitles.antarchy.bomber_knock": "Bomber wird getroffen", + "subtitles.antarchy.bomber_explode": "Bomber Lunte zischt", + "subtitles.antarchy.toreterror_idle": "Toreterror ist zu hören", + "subtitles.antarchy.toreterror_hurt": "Toreterror wird verletzt", + "subtitles.antarchy.toreterror_death": "Toreterror stirbt", + "subtitles.antarchy.toreterror_bomber_fire": "Toreterror schleudert Bomber", + "subtitles.antarchy.toreterror_spin": "Toreterror dreht sich", + "subtitles.antarchy.toreterror_ricochet": "Toreterror prallt ab", + "subtitles.antarchy.water_cannon_fire": "Wasserkanone feuert", + "subtitles.antarchy.toreterror_jump_up": "Toreterror springt", + "subtitles.antarchy.toreterror_jump_land": "Toreterror landet", + "subtitles.antarchy.stinky_fly": "Stinkfliegen summen", + "item.minecraft.potion.effect.inversion": "Trank der Umkehrung", + "item.minecraft.potion.effect.long_inversion": "Trank der Umkehrung", + "item.minecraft.splash_potion.effect.inversion": "Wurftrank der Umkehrung", + "item.minecraft.splash_potion.effect.long_inversion": "Wurftrank der Umkehrung", + "item.minecraft.lingering_potion.effect.inversion": "Verweiltrank der Umkehrung", + "item.minecraft.lingering_potion.effect.long_inversion": "Verweiltrank der Umkehrung", + "item.minecraft.tipped_arrow.effect.inversion": "Pfeil der Umkehrung", + "item.minecraft.tipped_arrow.effect.long_inversion": "Pfeil der Umkehrung", + "item.minecraft.potion.effect.paralysis": "Trank der Lähmung", + "item.minecraft.potion.effect.long_paralysis": "Trank der Lähmung", + "item.minecraft.splash_potion.effect.paralysis": "Wurftrank der Lähmung", + "item.minecraft.splash_potion.effect.long_paralysis": "Wurftrank der Lähmung", + "item.minecraft.lingering_potion.effect.paralysis": "Verweiltrank der Lähmung", + "item.minecraft.lingering_potion.effect.long_paralysis": "Verweiltrank der Lähmung", + "item.minecraft.tipped_arrow.effect.paralysis": "Pfeil der Lähmung", + "item.minecraft.tipped_arrow.effect.long_paralysis": "Pfeil der Lähmung", + "item.minecraft.potion.effect.shrinking": "Trank der Schrumpfung", + "item.minecraft.potion.effect.strong_shrinking": "Trank der Schrumpfung II", + "item.minecraft.potion.effect.extreme_shrinking": "Trank der Schrumpfung III", + "item.minecraft.splash_potion.effect.shrinking": "Wurftrank der Schrumpfung", + "item.minecraft.splash_potion.effect.strong_shrinking": "Wurftrank der Schrumpfung II", + "item.minecraft.splash_potion.effect.extreme_shrinking": "Wurftrank der Schrumpfung III", + "item.minecraft.lingering_potion.effect.shrinking": "Verweiltrank der Schrumpfung", + "item.minecraft.lingering_potion.effect.strong_shrinking": "Verweiltrank der Schrumpfung II", + "item.minecraft.lingering_potion.effect.extreme_shrinking": "Verweiltrank der Schrumpfung III", + "item.minecraft.tipped_arrow.effect.shrinking": "Pfeil der Schrumpfung", + "item.minecraft.tipped_arrow.effect.strong_shrinking": "Pfeil der Schrumpfung II", + "item.minecraft.tipped_arrow.effect.extreme_shrinking": "Pfeil der Schrumpfung III", + "item.minecraft.potion.effect.growing": "Trank der Wachstum", + "item.minecraft.potion.effect.strong_growing": "Trank der Wachstum II", + "item.minecraft.potion.effect.extreme_growing": "Trank der Wachstum III", + "item.minecraft.splash_potion.effect.growing": "Wurftrank der Wachstum", + "item.minecraft.splash_potion.effect.strong_growing": "Wurftrank der Wachstum II", + "item.minecraft.splash_potion.effect.extreme_growing": "Wurftrank der Wachstum III", + "item.minecraft.lingering_potion.effect.growing": "Verweiltrank der Wachstum", + "item.minecraft.lingering_potion.effect.strong_growing": "Verweiltrank der Wachstum II", + "item.minecraft.lingering_potion.effect.extreme_growing": "Verweiltrank der Wachstum III", + "item.minecraft.tipped_arrow.effect.growing": "Pfeil der Wachstum", + "item.minecraft.tipped_arrow.effect.strong_growing": "Pfeil der Wachstum II", + "item.minecraft.tipped_arrow.effect.extreme_growing": "Pfeil der Wachstum III", + "item.minecraft.potion.effect.dread": "Trank der Grauen", + "item.minecraft.potion.effect.long_dread": "Trank der Grauen", + "item.minecraft.splash_potion.effect.dread": "Wurftrank der Grauen", + "item.minecraft.splash_potion.effect.long_dread": "Wurftrank der Grauen", + "item.minecraft.lingering_potion.effect.dread": "Verweiltrank der Grauen", + "item.minecraft.lingering_potion.effect.long_dread": "Verweiltrank der Grauen", + "item.minecraft.tipped_arrow.effect.dread": "Pfeil der Grauen", + "item.minecraft.tipped_arrow.effect.long_dread": "Pfeil der Grauen", + "item.minecraft.potion.effect.stinky": "Trank der Gestank", + "item.minecraft.potion.effect.long_stinky": "Trank der Gestank", + "item.minecraft.splash_potion.effect.stinky": "Wurftrank der Gestank", + "item.minecraft.splash_potion.effect.long_stinky": "Wurftrank der Gestank", + "item.minecraft.lingering_potion.effect.stinky": "Verweiltrank der Gestank", + "item.minecraft.lingering_potion.effect.long_stinky": "Verweiltrank der Gestank", + "item.minecraft.tipped_arrow.effect.stinky": "Pfeil der Gestank", + "item.minecraft.tipped_arrow.effect.long_stinky": "Pfeil der Gestank", + "item.minecraft.potion.effect.haste": "Trank der Eile", + "item.minecraft.potion.effect.strong_haste": "Trank der Eile II", + "item.minecraft.splash_potion.effect.haste": "Wurftrank der Eile", + "item.minecraft.splash_potion.effect.strong_haste": "Wurftrank der Eile II", + "item.minecraft.lingering_potion.effect.haste": "Verweiltrank der Eile", + "item.minecraft.lingering_potion.effect.strong_haste": "Verweiltrank der Eile II", + "item.minecraft.tipped_arrow.effect.haste": "Pfeil der Eile", + "item.minecraft.tipped_arrow.effect.strong_haste": "Pfeil der Eile II", + "advancements.antarchy.cancel_out.title": "1 - 1 = ?", + "advancements.antarchy.cancel_out.description": "Habe Wachstum und Schrumpfung gleichzeitig aktiv.", + "entity.antarchy.cheep": "Cheep", + "item.antarchy.cheep": "Cheep", + "item.antarchy.cheep_spawn_egg": "Cheep-Spawn-Ei", + "entity.antarchy.reverie": "Reverie", + "biome.antarchy.thoraxis": "Thoraxis", + "biome.antarchy.nightmare_wastes": "Albtraumöde", + "biome.antarchy.umbral_hills": "Umbralhügel", + "biome.antarchy.lucid_pools": "Luzide Teiche", + "biome.antarchy.dream_dunes": "Traumdünen", + "block.antarchy.wild_corn": "Wild Mais", + "trim_material.antarchy.blood_crystal": "Blutkristall", + "trim_material.antarchy.nightmare_scale": "Albtraum-Schuppe", + "trim_material.antarchy.uranium": "Uran", + "trim_material.antarchy.titanium": "Titan", + "advancements.antarchy.duct_tape.title": "Ich habe dieses Boot in zwei Hälften gesägt!", + "advancements.antarchy.duct_tape.description": "und mit der Kraft des Panzerbands repariert!", + "key.categories.antarchy": "Antarchy", + "key.antarchy.brutalfly_flap": "Brutalfly-Elytren: Flügelschlag", + "advancements.antarchy.shrink_ray_craft.title": "Liebling, ich habe die Kreaturen geschrumpft", + "advancements.antarchy.shrink_ray_craft.description": "Stelle einen Schrumpfstrahler her.", + "advancements.antarchy.growth_ray_craft.title": "Ganz groß oder gar nicht", + "advancements.antarchy.growth_ray_craft.description": "Stelle einen Wachstumsstrahler her.", + "advancements.antarchy.squidzooka_craft.title": "Tinte und Zerstörung", + "advancements.antarchy.squidzooka_craft.description": "Stelle eine Squidzooka her.", + "advancements.antarchy.rocket_powered_octopus.title": "Raketengetriebener Oktopus", + "advancements.antarchy.rocket_powered_octopus.description": "Stelle einen R.O.-Werfer her.", + "advancements.antarchy.gravity_gun_craft.title": "Aufreißkünstler", + "advancements.antarchy.gravity_gun_craft.description": "Stelle eine Gravitationskanone her.", + "block.antarchy.cavaryn_portal": "Cavaryn-Portal", + "block.antarchy.termite_nest": "Termite-Nest", + "block.antarchy.chitin_spike": "Chitin-Stachel", + "block.antarchy.chitin_block": "Chitin-Block", + "block.antarchy.myrmite": "Myrmite", + "block.antarchy.broodstone": "Broodstone", + "block.antarchy.amber_moss_block": "Bernsteinmoosblock", + "block.antarchy.amber_moss_carpet": "Bernsteinmoosteppich", + "block.antarchy.amber_lichen": "Bernsteinflechte", + "block.antarchy.bile_vein": "Gallenader", + "block.antarchy.creepvine": "Creepvine", + "block.antarchy.creeping_horror_egg": "Kriechender Schrecken-Ei", + "block.antarchy.lurking_terror_egg": "Lauernder Terror-Ei", + "entity.antarchy.termite": "Termite", + "entity.antarchy.jumpy_bug": "Sprungkäfer", + "entity.antarchy.spit_bug": "Spuckkäfer", + "entity.antarchy.stink_bug": "Stinkwanze", + "entity.antarchy.rolly_polly": "Rollassel", + "entity.antarchy.creeping_horror": "Kriechender Schrecken", + "entity.antarchy.lurking_terror": "Lauernder Terror", + "entity.antarchy.hercules_beetle": "Herkuleskäfer", + "item.antarchy.jumpy_bug_spawn_egg": "Sprungkäfer-Spawn-Ei", + "item.antarchy.spit_bug_spawn_egg": "Spuckkäfer-Spawn-Ei", + "item.antarchy.stink_bug_spawn_egg": "Stinkwanze-Spawn-Ei", + "item.antarchy.termite_spawn_egg": "Termite-Spawn-Ei", + "item.antarchy.rolly_polly_spawn_egg": "Rollassel-Spawn-Ei", + "item.antarchy.creeping_horror_spawn_egg": "Kriechender Schrecken-Spawn-Ei", + "item.antarchy.lurking_terror_spawn_egg": "Lauernder Terror-Spawn-Ei", + "item.antarchy.hercules_beetle_spawn_egg": "Herkuleskäfer-Spawn-Ei", + "item.antarchy.chitin": "Chitin", + "block.antarchy.polished_broodstone": "Poliert Broodstone", + "block.antarchy.chiseled_broodstone": "Gemeißelt Broodstone", + "block.antarchy.broodstone_bricks": "Broodstoneziegel", + "block.antarchy.broodstone_stairs": "Broodstone-Treppe", + "block.antarchy.broodstone_slab": "Broodstone-Stufe", + "block.antarchy.broodstone_wall": "Broodstone-Mauer", + "block.antarchy.polished_broodstone_stairs": "Poliert Broodstone-Treppe", + "block.antarchy.polished_broodstone_slab": "Poliert Broodstone-Stufe", + "block.antarchy.polished_broodstone_wall": "Poliert Broodstone-Mauer", + "block.antarchy.broodstone_brick_stairs": "Broodstoneziegeltreppe", + "block.antarchy.broodstone_brick_slab": "Broodstoneziegelstufe", + "block.antarchy.broodstone_brick_wall": "Broodstoneziegelmauer", + "block.antarchy.myrmite_coal_ore": "Myrmite Kohleerz", + "block.antarchy.broodstone_uranium_ore": "Broodstone Uran-Erz", + "block.antarchy.broodstone_titanium_ore": "Broodstone Titan-Erz", + "item.antarchy.raw_bug_meat": "Rohes Insektenfleisch", + "item.antarchy.cooked_bug_meat": "Gebratenes Insektenfleisch", + "item.antarchy.hercules_horn": "Herkuleshorn", + "block.antarchy.hanging_creeproots": "Hängende Kriechwurzeln", + "block.antarchy.glowcap_mushroom": "Leuchtkappenpilz", + "block.antarchy.potted_glowcap_mushroom": "Eingetopfter Leuchtkappenpilz", + "block.antarchy.glowcap_mushroom_block": "Leuchtkappenpilzblock", + "block.antarchy.molting_vines": "Häutungsranken", + "item.antarchy.broodfruit": "Brutfrucht", + "block.antarchy.jumpy_bug_egg": "Sprungkäfer-Ei", + "subtitles.antarchy.creeping_horror_growl": "Kriechender Schrecken knurrt", + "subtitles.antarchy.creeping_horror_hurt": "Kriechender Schrecken wird verletzt", + "subtitles.antarchy.creeping_horror_bite": "Kriechender Schrecken beißt", + "subtitles.antarchy.lurking_terror_snarl": "Lauernder Terror faucht", + "subtitles.antarchy.lurking_terror_hurt": "Lauernder Terror wird verletzt", + "subtitles.antarchy.lurking_terror_bite": "Lauernder Terror beißt", + "subtitles.antarchy.lurking_terror_fly_loop": "Lauernder Terror fliegt", + "subtitles.antarchy.stink_bug_fart": "Stinkwanze furzt", + "subtitles.antarchy.stink_bug_idle": "Stinkwanze ist zu hören", + "subtitles.antarchy.rolly_polly_idle": "Rollassel ist zu hören", + "subtitles.antarchy.rolly_polly_wheel_mode": "Rollassel rollt sich ein", + "subtitles.antarchy.rolly_polly_normal_mode": "Rollassel rollt sich aus", + "subtitles.antarchy.rolly_polly_roll": "Rollassel rollt", + "subtitles.antarchy.hercules_beetle_idle": "Herkuleskäfer ist zu hören", + "subtitles.antarchy.hercules_beetle_hurt": "Herkuleskäfer wird verletzt", + "subtitles.antarchy.hercules_beetle_attack": "Herkuleskäfer greift an", + "subtitles.antarchy.hercules_beetle_cry": "Herkuleskäfer brüllt", + "subtitles.antarchy.hercules_beetle_charge_start": "Herkuleskäfer lädt einen Angriff auf", + "subtitles.antarchy.hercules_beetle_knocked_down": "Herkuleskäfer wird zu Boden geworfen", + "subtitles.antarchy.jerry_idle": "Jerry schwatzt", + "subtitles.antarchy.jerry_hurt": "Jerry wird verletzt", + "subtitles.antarchy.jerry_death": "Jerry stirbt", + "subtitles.antarchy.jerry_attack": "Jerry greift an", + "subtitles.antarchy.jumpy_bug_idle": "Sprungkäfer ist zu hören", + "subtitles.antarchy.spit_bug_idle": "Spuckkäfer ist zu hören", + "subtitles.antarchy.jumpy_bug_hurt": "Sprungkäfer wird verletzt", + "subtitles.antarchy.jumpy_bug_jump": "Sprungkäfer springt", + "subtitles.antarchy.spit_bug_hurt": "Spuckkäfer wird verletzt", + "subtitles.antarchy.spit_bug_spit": "Spuckkäfer spuckt", + "subtitles.antarchy.brutalfly_spit": "Brutalfly spuckt", + "advancements.antarchy.bug_apetit.title": "Käfer-Appetit", + "advancements.antarchy.bug_apetit.description": "Iss gebratenes Insektenfleisch.", + "advancements.antarchy.behavioral_correction.title": "Verhaltenskorrektur", + "advancements.antarchy.behavioral_correction.description": "Erhalte einen Benimmhammer.", + "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." +} 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 new file mode 100644 index 00000000..63382276 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/en_us.json @@ -0,0 +1,1049 @@ +{ + "block.antarchy.duplicator_log": "Duplicator Log", + "block.antarchy.ouranwood_log": "Ouranwood Log", + "block.antarchy.ouranwood_wood": "Ouranwood Wood", + "block.antarchy.mossy_ouranwood_log": "Mossy Ouranwood Log", + "block.antarchy.mossy_ouranwood_wood": "Mossy Ouranwood Wood", + "block.antarchy.stripped_ouranwood_log": "Stripped Ouranwood Log", + "block.antarchy.stripped_ouranwood_wood": "Stripped Ouranwood Wood", + "block.antarchy.ouranwood_planks": "Ouranwood Planks", + "block.antarchy.ouranwood_stairs": "Ouranwood Stairs", + "block.antarchy.ouranwood_slab": "Ouranwood Slab", + "block.antarchy.ouranwood_fence": "Ouranwood Fence", + "block.antarchy.ouranwood_fence_gate": "Ouranwood Fence Gate", + "block.antarchy.ouranwood_door": "Ouranwood Door", + "block.antarchy.ouranwood_trapdoor": "Ouranwood Trapdoor", + "block.antarchy.ouranwood_pressure_plate": "Ouranwood Pressure Plate", + "block.antarchy.ouranwood_button": "Ouranwood Button", + "block.antarchy.ouranwood_leaves": "Ouranwood Leaves", + "block.antarchy.ouranwood_acorn": "Ouranwood Acorn", + "block.antarchy.ouranwood_sign": "Ouranwood Sign", + "block.antarchy.ouranwood_hanging_sign": "Ouranwood Hanging Sign", + "block.antarchy.peach_log": "Peach Log", + "block.antarchy.peach_wood": "Peach Wood", + "block.antarchy.stripped_peach_log": "Stripped Peach Log", + "block.antarchy.stripped_peach_wood": "Stripped Peach Wood", + "block.antarchy.peach_planks": "Peach Planks", + "block.antarchy.peach_stairs": "Peach Stairs", + "block.antarchy.peach_slab": "Peach Slab", + "block.antarchy.peach_fence": "Peach Fence", + "block.antarchy.peach_fence_gate": "Peach Fence Gate", + "block.antarchy.peach_door": "Peach Door", + "block.antarchy.peach_trapdoor": "Peach Trapdoor", + "block.antarchy.peach_pressure_plate": "Peach Pressure Plate", + "block.antarchy.peach_button": "Peach Button", + "block.antarchy.peach_leaves": "Peach Leaves", + "block.antarchy.hanging_peach": "Hanging Peach", + "block.antarchy.peach_sapling": "Peach Sapling", + "block.antarchy.peach_sign": "Peach Sign", + "block.antarchy.peach_hanging_sign": "Peach Hanging Sign", + "block.antarchy.orange_milkweed": "Orange Milkweed", + "block.antarchy.pink_milkweed": "Pink Milkweed", + "block.antarchy.camellia": "Camellia", + "block.antarchy.spider_lily": "Spider Lily", + "block.antarchy.lotus": "Lotus", + "item.antarchy.lotus": "Lotus", + "item.antarchy.critter_cage": "Critter Cage", + "block.antarchy.giant_lily_pad": "Giant Lily Pad", + "block.antarchy.seashell": "Seashell", + "block.antarchy.critter_cage_block": "Critter Cage", + "block.antarchy.hushweed": "Hushweed", + "block.antarchy.umbral_moss_block": "Umbral Moss Block", + "block.antarchy.umbral_moss_carpet": "Umbral Moss Carpet", + "block.antarchy.blush_moss_block": "Blush Moss Block", + "block.antarchy.blush_moss_carpet": "Blush Moss Carpet", + "block.antarchy.duplicator_sapling": "Duplicator Sapling", + "block.antarchy.duct_tape": "Duct Tape", + "block.antarchy.infested_rooted_dirt": "Infested Rooted Dirt", + "block.antarchy.infested_coarse_dirt": "Infested Coarse Dirt", + "block.antarchy.nyxite": "Nyxite", + "block.antarchy.polished_nyxite": "Polished Nyxite", + "block.antarchy.chiseled_nyxite": "Chiseled Nyxite", + "block.antarchy.nyxite_bricks": "Nyxite Bricks", + "block.antarchy.nyxite_pillar": "Nyxite Pillar", + "block.antarchy.shellstone": "Shellstone", + "block.antarchy.polished_shellstone": "Polished Shellstone", + "block.antarchy.shellstone_bricks": "Shellstone Bricks", + "block.antarchy.chiseled_shellstone": "Chiseled Shellstone", + "block.antarchy.mossy_shellstone_bricks": "Mossy Shellstone Bricks", + "block.antarchy.mossy_shellstone_brick_stairs": "Mossy Shellstone Brick Stairs", + "block.antarchy.mossy_shellstone_brick_slab": "Mossy Shellstone Brick Slab", + "block.antarchy.mossy_shellstone_brick_wall": "Mossy Shellstone Brick Wall", + "block.antarchy.cracked_shellstone_bricks": "Cracked Shellstone Bricks", + "block.antarchy.shellstone_pillar": "Shellstone Pillar", + "block.antarchy.shellstone_stairs": "Shellstone Stairs", + "block.antarchy.shellstone_slab": "Shellstone Slab", + "block.antarchy.shellstone_wall": "Shellstone Wall", + "block.antarchy.polished_shellstone_stairs": "Polished Shellstone Stairs", + "block.antarchy.polished_shellstone_slab": "Polished Shellstone Slab", + "block.antarchy.polished_shellstone_wall": "Polished Shellstone Wall", + "block.antarchy.shellstone_brick_stairs": "Shellstone Brick Stairs", + "block.antarchy.shellstone_brick_slab": "Shellstone Brick Slab", + "block.antarchy.shellstone_brick_wall": "Shellstone Brick Wall", + "block.antarchy.nyxite_stairs": "Nyxite Stairs", + "block.antarchy.nyxite_slab": "Nyxite Slab", + "block.antarchy.nyxite_wall": "Nyxite Wall", + "block.antarchy.polished_nyxite_stairs": "Polished Nyxite Stairs", + "block.antarchy.polished_nyxite_slab": "Polished Nyxite Slab", + "block.antarchy.polished_nyxite_wall": "Polished Nyxite Wall", + "block.antarchy.polished_nyxite_pressure_plate": "Polished Nyxite Pressure Plate", + "block.antarchy.polished_nyxite_button": "Polished Nyxite Button", + "block.antarchy.nyxite_brick_stairs": "Nyxite Brick Stairs", + "block.antarchy.nyxite_brick_slab": "Nyxite Brick Slab", + "block.antarchy.nyxite_brick_wall": "Nyxite Brick Wall", + "block.antarchy.pale_nyxite": "Pale Nyxite", + "block.antarchy.nyxite_spike": "Nyxite Spike", + "block.antarchy.potent_nyxite": "Potent Nyxite", + "block.antarchy.triffid_goo_block": "Triffid Goo Block", + "block.antarchy.elythia_portal": "Elythia Portal", + "block.antarchy.cloud_block": "Cloud Block", + "block.antarchy.thoraxis_portal": "Thoraxis Portal", + "block.antarchy.antimetal": "Antimetal", + "block.antarchy.antimetal_stairs": "Antimetal Stairs", + "block.antarchy.antimetal_slab": "Antimetal Slab", + "block.antarchy.polished_antimetal": "Polished Antimetal", + "block.antarchy.polished_antimetal_stairs": "Polished Antimetal Stairs", + "block.antarchy.polished_antimetal_slab": "Polished Antimetal Slab", + "block.antarchy.antimetal_scaffolding": "Antimetal Scaffolding", + "block.antarchy.antimetal_rail": "Antimetal Rail", + "block.antarchy.antimetal_powered_rail": "Antimetal Powered Rail", + "block.antarchy.antimetal_detector_rail": "Antimetal Detector Rail", + "block.antarchy.antimetal_activator_rail": "Antimetal Activator Rail", + "block.antarchy.upper": "Upper", + "container.antarchy.upper": "Upper", + "block.antarchy.lucid_anchor": "Lucid Anchor", + "block.antarchy.cornea_stalk": "Cornea Stalk", + "block.antarchy.corn_crop": "Corn Crop", + "block.antarchy.dream_torch": "Dream Torch", + "block.antarchy.dream_wall_torch": "Dream Wall Torch", + "block.antarchy.dream_lantern": "Dream Lantern", + "block.antarchy.dream_campfire": "Dream Campfire", + "block.antarchy.dream_fire": "Dream Fire", + "block.antarchy.dream_fire_ceiling": "Dream Fire", + "block.antarchy.budding_blood_crystal": "Budding Blood Crystal", + "block.antarchy.blood_crystal_block": "Blood Crystal Block", + "block.antarchy.small_blood_crystal_bud": "Small Blood Crystal Bud", + "block.antarchy.medium_blood_crystal_bud": "Medium Blood Crystal Bud", + "block.antarchy.large_blood_crystal_bud": "Large Blood Crystal Bud", + "block.antarchy.blood_crystal_cluster": "Blood Crystal Cluster", + "block.antarchy.dream_sand": "Dream Sand", + "block.antarchy.antigravel": "Antigravel", + "block.antarchy.loam": "Loam", + "block.antarchy.dream_sandstone": "Dream Sandstone", + "block.antarchy.chiseled_dream_sandstone": "Chiseled Dream Sandstone", + "block.antarchy.cut_dream_sandstone": "Cut Dream Sandstone", + "block.antarchy.smooth_dream_sandstone": "Smooth Dream Sandstone", + "block.antarchy.dream_sandstone_stairs": "Dream Sandstone Stairs", + "block.antarchy.dream_sandstone_slab": "Dream Sandstone Slab", + "block.antarchy.dream_sandstone_wall": "Dream Sandstone Wall", + "block.antarchy.smooth_dream_sandstone_stairs": "Smooth Dream Sandstone Stairs", + "block.antarchy.smooth_dream_sandstone_slab": "Smooth Dream Sandstone Slab", + "block.antarchy.cut_dream_sandstone_slab": "Cut Dream Sandstone Slab", + "block.antarchy.bed_bug_egg": "Bed Bug Egg", + "block.antarchy.wasp_nest": "Wasp Nest", + "block.antarchy.red_ant_nest": "Red Ant Nest", + "block.antarchy.brown_ant_nest": "Brown Ant Nest", + "block.antarchy.rainbow_ant_nest": "Rainbow Ant Nest", + "block.antarchy.uranium_ore": "Uranium Ore", + "block.antarchy.deepslate_uranium_ore": "Deepslate Uranium Ore", + "block.antarchy.titanium_ore": "Titanium Ore", + "block.antarchy.deepslate_titanium_ore": "Deepslate Titanium Ore", + "block.antarchy.bluestone_ore": "Bluestone Ore", + "block.antarchy.bluestone_block": "Bluestone Block", + "block.antarchy.bluestone_repeater": "Bluestone Repeater", + "block.antarchy.bluestone_comparator": "Bluestone Comparator", + "block.antarchy.bluestone_torch": "Bluestone Torch", + "block.antarchy.bluestone_lamp": "Bluestone Lamp", + "block.antarchy.uranium_block": "Block of Uranium", + "block.antarchy.titanium_block": "Block of Titanium", + "block.antarchy.raw_uranium_block": "Block of Raw Uranium", + "block.antarchy.raw_titanium_block": "Block of Raw Titanium", + "block.antarchy.cut_uranium": "Cut Uranium", + "block.antarchy.cut_titanium": "Cut Titanium", + "block.antarchy.cut_uranium_slab": "Cut Uranium Slab", + "block.antarchy.cut_titanium_slab": "Cut Titanium Slab", + "block.antarchy.cut_uranium_stairs": "Cut Uranium Stairs", + "block.antarchy.cut_titanium_stairs": "Cut Titanium Stairs", + "block.antarchy.chiseled_uranium": "Chiseled Uranium", + "block.antarchy.chiseled_titanium": "Chiseled Titanium", + "block.antarchy.uranium_bulb": "Uranium Bulb", + "block.antarchy.titanium_bulb": "Titanium Bulb", + "block.antarchy.uranium_door": "Uranium Door", + "block.antarchy.titanium_door": "Titanium Door", + "block.antarchy.uranium_trapdoor": "Uranium Trapdoor", + "block.antarchy.titanium_trapdoor": "Titanium Trapdoor", + "block.antarchy.uranium_bars": "Uranium Bars", + "block.antarchy.titanium_bars": "Titanium Bars", + "tooltip.antarchy.signal_saving_bulb": "Toggles on/off. Has light level equal to the signal strength stored on it.", + "tooltip.antarchy.lucid_anchor.pyramid": "Requires an Antimetal Beacon pyramid above it", + "tooltip.antarchy.lucid_anchor.path": "Projects Inverted downward while it has an unobstructed path to the world below", + "tooltip.antarchy.bluestone_placement": "Places below blocks", + "tooltip.antarchy.ceiling_compatible_placement": "Can also be placed on ceilings", + "tooltip.antarchy.antimetal_scaffolding": "Acts as normal scaffolding, or inverted scaffolding while your gravity is flipped", + "block.antarchy.bile": "Bile", + "block.antarchy.ichor": "Ichor", + "block.antarchy.antiwater": "Antiwater", + "block.antarchy.lumen": "Lumen", + "block.antarchy.lumen_froglight": "Lumen Froglight", + "block.antarchy.roseate_froglight": "Roseate Froglight", + "block.antarchy.star_coral": "Star Coral", + "block.antarchy.star_coral_fan": "Star Coral Fan", + "block.antarchy.star_coral_block": "Star Coral Block", + "block.antarchy.dead_star_coral": "Dead Star Coral", + "block.antarchy.dead_star_coral_fan": "Dead Star Coral Fan", + "block.antarchy.dead_star_coral_block": "Dead Star Coral Block", + "entity.antarchy.apple_cow": "Apple Cow", + "entity.antarchy.golden_apple_cow": "Golden Apple Cow", + "entity.antarchy.enchanted_golden_apple_cow": "Enchanted Golden Apple Cow", + "entity.antarchy.easter_bunny": "Easter Bunny", + "entity.antarchy.glimmer": "Glimmer", + "entity.antarchy.ouranwood_deer": "Ouranwood Deer", + "entity.antarchy.elka": "Elka", + "entity.antarchy.dorrie": "Dorrie", + "entity.antarchy.flying_squirrel": "Flying Squirrel", + "entity.antarchy.caterpillar": "Caterpillar", + "entity.antarchy.butterfly": "Butterfly", + "entity.antarchy.brutalfly": "Brutalfly", + "entity.antarchy.red_ant": "Red Ant", + "entity.antarchy.brown_ant": "Brown Ant", + "entity.antarchy.rainbow_ant": "Rainbow Ant", + "entity.antarchy.diamond_minecart": "The Diamond Minecart", + "entity.antarchy.dr_trayaurus": "Dr. Trayaurus", + "entity.antarchy.cloud_shark": "Cloud Shark", + "entity.antarchy.kraken": "The Kraken", + "entity.antarchy.missile_squid": "Missile Squid", + "entity.antarchy.octopus_bomb": "Octopus Bomb", + "entity.antarchy.nightmare": "Nightmare", + "entity.antarchy.bed_bug": "Bed Bug", + "entity.antarchy.wasp": "Wasp", + "entity.antarchy.bomber": "Bomber", + "entity.antarchy.moleworm": "Moleworm", + "entity.antarchy.molevore": "Molevore", + "entity.antarchy.mantis": "Mantis", + "entity.antarchy.alpha_mantis": "Alpha Mantis", + "entity.antarchy.triffid": "Triffid", + "entity.antarchy.toreterror": "Toreterror", + "entity.antarchy.water_bomb": "Water Bomb", + "subtitles.antarchy.mantis_ambient": "Mantis clicks", + "subtitles.antarchy.mantis_hurt": "Mantis screeches", + "subtitles.antarchy.mantis_attack": "Mantis snaps", + "subtitles.antarchy.mantis_fly_loop": "Mantis wings buzz", + "item.antarchy.big_bertha": "Big Bertha", + "item.antarchy.bluestone": "Bluestone Dust", + "item.antarchy.wasp_nest": "Wasp Nest", + "item.antarchy.stink_bug": "Stink Bug", + "item.antarchy.wasp_spawn_egg": "Wasp Spawn Egg", + "item.antarchy.bomber_spawn_egg": "Bomber Spawn Egg", + "item.antarchy.big_bertha_blade": "Big Bertha Blade", + "item.antarchy.big_bertha_handle": "Big Bertha Handle", + "item.antarchy.big_bertha_hilt": "Big Bertha Hilt", + "item.antarchy.battle_axe": "Battle Axe", + "item.antarchy.attitude_adjuster": "Attitude Adjuster", + "tooltip.antarchy.attitude_adjuster.grounded": "Smashes targets on the ground upward, targets in the air slam onto the ground.", + "tooltip.antarchy.attitude_adjuster.slam": "Use while airborne to ground slam.", + "item.antarchy.cloud_shark_fin": "Cloud Shark Fin", + "item.antarchy.cloud_shark_fin_soup": "Cloud Shark Fin Soup", + "tooltip.antarchy.cloud_shark_fin_soup": "Grants Strength and Slow Falling.", + "tooltip.antarchy.critter_cage.empty": "Use to throw", + "tooltip.antarchy.critter_cage.contains": "Contains: %s", + "tooltip.antarchy.critter_cage.release": "Use to release", + "tooltip.antarchy.critter_cage.place": "Shift + click to place", + "item.antarchy.kraken_tooth": "Kraken Tooth", + "item.antarchy.kraken_tentacle": "Kraken Tentacle", + "item.antarchy.kraken_kalamari": "Kraken Calamari", + "item.antarchy.krakens_grasp": "Kraken's Grasp", + "entity.antarchy.tentacle": "Tentacle", + "item.antarchy.basilisk_fang": "Basilisk Fang", + "item.antarchy.basilisk_dagger": "Basilisk Dagger", + "item.antarchy.blood_crystal_block": "Blood Crystal Block", + "item.antarchy.small_blood_crystal_bud": "Small Blood Crystal Bud", + "item.antarchy.medium_blood_crystal_bud": "Medium Blood Crystal Bud", + "item.antarchy.large_blood_crystal_bud": "Large Blood Crystal Bud", + "item.antarchy.blood_crystal_cluster": "Blood Crystal Cluster", + "item.antarchy.dream_sand": "Dream Sand", + "item.antarchy.dream_sandstone": "Dream Sandstone", + "item.antarchy.chiseled_dream_sandstone": "Chiseled Dream Sandstone", + "item.antarchy.cut_dream_sandstone": "Cut Dream Sandstone", + "item.antarchy.smooth_dream_sandstone": "Smooth Dream Sandstone", + "item.antarchy.dream_sandstone_stairs": "Dream Sandstone Stairs", + "item.antarchy.dream_sandstone_slab": "Dream Sandstone Slab", + "item.antarchy.dream_sandstone_wall": "Dream Sandstone Wall", + "item.antarchy.smooth_dream_sandstone_stairs": "Smooth Dream Sandstone Stairs", + "item.antarchy.smooth_dream_sandstone_slab": "Smooth Dream Sandstone Slab", + "item.antarchy.cut_dream_sandstone_slab": "Cut Dream Sandstone Slab", + "item.antarchy.dream_torch": "Dream Torch", + "item.antarchy.dream_lantern": "Dream Lantern", + "item.antarchy.dream_campfire": "Dream Campfire", + "item.antarchy.giant_lily_pad": "Giant Lily Pad", + "item.antarchy.seashell": "Seashell", + "item.antarchy.nightmare_scale": "Nightmare Scale", + "item.antarchy.nightmare_helmet": "Nightmare Helmet", + "item.antarchy.nightmare_chestplate": "Nightmare Chestplate", + "item.antarchy.nightmare_leggings": "Nightmare Leggings", + "item.antarchy.nightmare_boots": "Nightmare Boots", + "item.antarchy.nightmare_sword": "Nightmare Sword", + "tooltip.antarchy.nightmare_armor_double_damage": "%s%% chance to deal double damage", + "tooltip.antarchy.nightmare_armor_set_bonus": "Full Set: Wither \u0026 Dread immunity", + "tooltip.antarchy.nightmare_sword": "Deals more damage as your health drops.", + "tooltip.antarchy.nightmare_sword_damage": "Deals %s damage", + "tooltip.antarchy.primordial_helmet_water_breathing": "Grants the wearer Water Breathing", + "tooltip.antarchy.primordial_armor_knockback_dealt": "Adds %s attack knockback per piece", + "tooltip.antarchy.primordial_armor_set_bonus": "Full Set: Attacks ignore enemy knockback resistance", + "attribute.antarchy.double_damage_chance": "Double Damage Chance", + "attribute.antarchy.bloodglass_max_hearts": "Max Bloodglass Hearts", + "item.antarchy.molevore_nose": "Molevore Nose", + "item.antarchy.moleworm": "Moleworm", + "item.antarchy.triffid_spawn_egg": "Triffid Spawn Egg", + "item.antarchy.infested_rooted_dirt": "Infested Rooted Dirt", + "item.antarchy.infested_coarse_dirt": "Infested Coarse Dirt", + "item.antarchy.pale_nyxite": "Pale Nyxite", + "item.antarchy.polished_nyxite": "Polished Nyxite", + "item.antarchy.chiseled_nyxite": "Chiseled Nyxite", + "item.antarchy.nyxite_bricks": "Nyxite Bricks", + "item.antarchy.shellstone": "Shellstone", + "item.antarchy.polished_shellstone": "Polished Shellstone", + "item.antarchy.shellstone_bricks": "Shellstone Bricks", + "item.antarchy.chiseled_shellstone": "Chiseled Shellstone", + "item.antarchy.mossy_shellstone_bricks": "Mossy Shellstone Bricks", + "item.antarchy.mossy_shellstone_brick_stairs": "Mossy Shellstone Brick Stairs", + "item.antarchy.mossy_shellstone_brick_slab": "Mossy Shellstone Brick Slab", + "item.antarchy.mossy_shellstone_brick_wall": "Mossy Shellstone Brick Wall", + "item.antarchy.cracked_shellstone_bricks": "Cracked Shellstone Bricks", + "item.antarchy.shellstone_stairs": "Shellstone Stairs", + "item.antarchy.shellstone_slab": "Shellstone Slab", + "item.antarchy.shellstone_wall": "Shellstone Wall", + "item.antarchy.polished_shellstone_stairs": "Polished Shellstone Stairs", + "item.antarchy.polished_shellstone_slab": "Polished Shellstone Slab", + "item.antarchy.polished_shellstone_wall": "Polished Shellstone Wall", + "item.antarchy.shellstone_brick_stairs": "Shellstone Brick Stairs", + "item.antarchy.shellstone_brick_slab": "Shellstone Brick Slab", + "item.antarchy.shellstone_brick_wall": "Shellstone Brick Wall", + "item.antarchy.nyxite_stairs": "Nyxite Stairs", + "item.antarchy.nyxite_slab": "Nyxite Slab", + "item.antarchy.nyxite_wall": "Nyxite Wall", + "item.antarchy.polished_nyxite_stairs": "Polished Nyxite Stairs", + "item.antarchy.polished_nyxite_slab": "Polished Nyxite Slab", + "item.antarchy.polished_nyxite_wall": "Polished Nyxite Wall", + "item.antarchy.nyxite_brick_stairs": "Nyxite Brick Stairs", + "item.antarchy.nyxite_brick_slab": "Nyxite Brick Slab", + "item.antarchy.nyxite_brick_wall": "Nyxite Brick Wall", + "item.antarchy.potent_nyxite": "Potent Nyxite", + "item.antarchy.antimetal": "Antimetal", + "item.antarchy.polished_antimetal": "Polished Antimetal", + "item.antarchy.antimetal_scaffolding": "Antimetal Scaffolding", + "item.antarchy.antimetal_rail": "Antimetal Rail", + "item.antarchy.antimetal_powered_rail": "Antimetal Powered Rail", + "item.antarchy.antimetal_detector_rail": "Antimetal Detector Rail", + "item.antarchy.antimetal_activator_rail": "Antimetal Activator Rail", + "item.antarchy.ouranwood_acorn": "Ouranwood Acorn", + "item.antarchy.ouranwood_boat": "Ouranwood Boat", + "item.antarchy.ouranwood_chest_boat": "Ouranwood Chest Boat", + "item.antarchy.raw_venison": "Raw Venison", + "item.antarchy.cooked_venison": "Cooked Venison", + "item.antarchy.peach_sapling": "Peach Sapling", + "item.antarchy.peach": "Peach", + "item.antarchy.peach_pie": "Peach Pie", + "item.antarchy.cornbread": "Cornbread", + "item.antarchy.popcorn": "Popcorn", + "item.antarchy.peach_sign": "Peach Sign", + "item.antarchy.peach_hanging_sign": "Peach Hanging Sign", + "item.antarchy.peach_boat": "Peach Boat", + "item.antarchy.peach_chest_boat": "Peach Chest Boat", + "item.antarchy.orange_milkweed": "Orange Milkweed", + "item.antarchy.pink_milkweed": "Pink Milkweed", + "item.antarchy.camellia": "Camellia", + "item.antarchy.spider_lily": "Spider Lily", + "item.antarchy.hushweed": "Hushweed", + "item.antarchy.umbral_moss_block": "Umbral Moss Block", + "item.antarchy.umbral_moss_carpet": "Umbral Moss Carpet", + "item.antarchy.blush_moss_block": "Blush Moss Block", + "item.antarchy.blush_moss_carpet": "Blush Moss Carpet", + "item.antarchy.mud_pie": "Mud Pie", + "item.antarchy.duct_tape": "Duct Tape", + "item.antarchy.duct_tape.tooltip": "Place down and interact to repair tools", + "item.antarchy.rainbow_sugar": "Rainbow Sugar", + "item.antarchy.uranium_nugget": "Uranium Nugget", + "item.antarchy.titanium_nugget": "Titanium Nugget", + "item.antarchy.raw_uranium_scrap": "Raw Uranium Scrap", + "item.antarchy.raw_titanium_scrap": "Raw Titanium Scrap", + "item.antarchy.raw_uranium": "Raw Uranium", + "item.antarchy.raw_titanium": "Raw Titanium", + "item.antarchy.uranium_ingot": "Uranium Ingot", + "item.antarchy.titanium_ingot": "Titanium Ingot", + "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_crystal_helmet": "Blood Crystal Helmet", + "item.antarchy.blood_crystal_chestplate": "Blood Crystal Chestplate", + "item.antarchy.blood_crystal_leggings": "Blood Crystal Leggings", + "item.antarchy.blood_crystal_boots": "Blood Crystal Boots", + "item.antarchy.blood_crystal_armor.tooltip": "Grants a Bloodglass Heart that blocks one incoming hit, shatters, then recharges.", + "item.antarchy.blood_crystal_boots.tooltip2": "Cancels fall damage when falling upward while gravity is inverted.", + "item.antarchy.blood_crystal_apple.tooltip": "Grants Bloodglass Ward, providing temporary Bloodglass Hearts that recharge while the effect lasts.", + "tooltip.antarchy.blood_crystal_katana.launch": "Launches you forward on hit.", + "tooltip.antarchy.blood_crystal_katana.trail": "Leaves a crimson trail behind you.", + "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.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.dorrie_charge_jump": "Dorrie Charge Jump", + "key.antarchy.hercules_beetle_charge": "Hercules Beetle Charge", + "key.antarchy.hercules_beetle_flight_toggle": "Hercules Beetle Flight Toggle", + "item.antarchy.jumpy_bug_leg": "Jumpy Bug Leg", + "item.antarchy.jumpy_boots": "Jumpy Boots", + "tooltip.antarchy.jumpy_boots": "Sneak to charge, then jump to spring upward.", + "item.antarchy.brutalfly_wing": "Brutalfly Wing", + "item.antarchy.brutalfly_elytra": "Brutalfly Elytra", + "tooltip.antarchy.brutalfly_elytra.flap": "While flying, hold %s to flap your wings", + "item.antarchy.cornea_ear": "Ear of Cornea", + "item.antarchy.corn": "Corn", + "item.antarchy.corn_seeds": "Corn Seeds", + "item.antarchy.raw_corndog": "Raw Corndog", + "item.antarchy.cooked_corndog": "Cooked Corndog", + "item.antarchy.high_fructose_corn_syrup": "High Fructose Corn Syrup", + "jei.antarchy.americanize": "Americanize", + "item.antarchy.american_name": "American %s", + "item.antarchy.root_beer": "Root Beer", + "item.antarchy.primordial_scute": "Primordial Scute", + "item.antarchy.triffid_goo": "Triffid Goo", + "item.antarchy.triffid_goo_block": "Triffid Goo Block", + "tooltip.antarchy.triffid_goo_block": "At high velocity bounce up, otherwise sink through.", + "item.antarchy.cloud_bucket": "Cloud Bucket", + "tooltip.antarchy.cloud_bucket.midair": "Can be placed midair", + "item.antarchy.lumen_bucket": "Lumen Bucket", + "item.antarchy.scorpion_whip": "Emperor Scorpion Whip", + "tooltip.antarchy.scorpion_whip.lash": "Lashes prey from afar and embeds a venomous tether.", + "tooltip.antarchy.scorpion_whip.reel": "Use to reel tethered prey.", + "tooltip.antarchy.scorpion_whip.snap": "Attack with tethered prey to snap the stinger free.", + "item.antarchy.fallen_king_crown": "Fallen King\u0027s Crown", + "tooltip.antarchy.fallen_king_crown.hero": "Grants Hero of the Village when you slay hostile mobs", + "item.antarchy.vortex_eye": "Vortex Eye", + "item.antarchy.ultimate_helmet": "Ultimate Helmet", + "item.antarchy.ultimate_chestplate": "Ultimate Chestplate", + "item.antarchy.ultimate_leggings": "Ultimate Leggings", + "item.antarchy.ultimate_boots": "Ultimate Boots", + "item.antarchy.ultimate_sword": "Ultimate Sword", + "item.antarchy.ultimate_pickaxe": "Ultimate Pickaxe", + "item.antarchy.ultimate_axe": "Ultimate Axe", + "item.antarchy.ultimate_shovel": "Ultimate Shovel", + "item.antarchy.ultimate_hoe": "Ultimate Hoe", + "item.antarchy.ultimate_bow": "Ultimate Bow", + "item.antarchy.ultimate_crossbow": "Ultimate Crossbow", + "item.antarchy.ultimate_crossbow.capacity": "Loads up to 16 arrows at once", + "item.antarchy.ultimate_crossbow.arrows_remaining": "%1$s %2$s loaded", + "item.antarchy.ultimate_mace": "Ultimate Mace", + "item.antarchy.moggles": "Moggles", + "itemGroup.antarchy.antarchy": "Antarchy", + "item.antarchy.bile_bucket": "Bile Bucket", + "item.antarchy.ichor_bucket": "Ichor Bucket", + "item.antarchy.antiwater_bucket": "Antiwater Bucket", + "item.antarchy.reverie_bottle": "Bottle of Reverie", + "item.antarchy.squidzooka": "Squidzooka", + "item.antarchy.rpo_launcher": "R.P.O. Launcher", + "item.antarchy.shrink_ray": "Shrink Ray", + "item.antarchy.growth_ray": "Growth Ray", + "tooltip.antarchy.shrink_ray": "Permanently shrinks targets. Hold down to charge.", + "tooltip.antarchy.growth_ray": "Permanently Grows Targets. Hold down to charge.", + "tooltip.antarchy.size_ray_milk_reset": "Drinking milk resets this effect.", + "tooltip.antarchy.reverie_bottle.capture": "Right click a Reverie with a glass bottle to store it.", + "tooltip.antarchy.reverie_bottle.release": "Right click to release the Reverie.", + "item.antarchy.gravity_gun": "Gravity Gun", + "item.antarchy.miners_dream": "Miner's Dream", + "tooltip.antarchy.miners_dream.line1": "Use to carve a winding cave.", + "tooltip.antarchy.miners_dream.line2": "Leaves valuable blocks untouched.", + "message.antarchy.miners_dream_disabled": "The Miner's Dream is disabled.", + "message.antarchy.miners_dream_busy": "Your previous dream is still unfolding.", + "item.antarchy.diamond_minecart": "The Diamond Minecart", + "item.antarchy.cogwheel_pet": "Cogwheel Pet", + "item.antarchy.fire_dragon_pet": "Fire Dragon Pet", + "item.antarchy.ice_dragon_pet": "Ice Dragon Pet", + "item.antarchy.lightning_dragon_pet": "Lightning Dragon Pet", + "item.antarchy.gorgon_pet": "Gorgon Pet", + "item.antarchy.apple_cow_spawn_egg": "Apple Cow Spawn Egg", + "item.antarchy.red_ant_spawn_egg": "Red Ant Spawn Egg", + "item.antarchy.brown_ant_spawn_egg": "Brown Ant Spawn Egg", + "item.antarchy.rainbow_ant_spawn_egg": "Rainbow Ant Spawn Egg", + "item.antarchy.golden_apple_cow_spawn_egg": "Golden Apple Cow Spawn Egg", + "item.antarchy.enchanted_golden_apple_cow_spawn_egg": "Enchanted Golden Apple Cow Spawn Egg", + "item.antarchy.dr_trayaurus_spawn_egg": "Dr. Trayaurus Spawn Egg", + "item.antarchy.easter_bunny_spawn_egg": "Easter Bunny Spawn Egg", + "item.antarchy.glimmer_spawn_egg": "Glimmer Spawn Egg", + "item.antarchy.ouranwood_deer_spawn_egg": "Ouranwood Deer Spawn Egg", + "item.antarchy.spirit_apple": "Spirit Apple", + "tooltip.antarchy.spirit_apple": "Tames a Glimmer", + "tooltip.antarchy.spirit_apple.eaten": "Grants Glimmering when eaten", + "item.antarchy.elka_spawn_egg": "Elka Spawn Egg", + "item.antarchy.glimmer_bottle": "Bottle of Glimmer", + "item.antarchy.glimmer_bottle.contains": "Contains: %s", + "glimmer_variant.antarchy.apple_cow": "Apple Cow", + "glimmer_variant.antarchy.ouranwood_deer": "Ouranwood Deer", + "glimmer_variant.antarchy.frog": "Frog", + "glimmer_variant.antarchy.ant": "Ant", + "glimmer_variant.antarchy.elka": "Elka", + "entity.antarchy.glimmer.set_sit": "Glimmer set to sit.", + "entity.antarchy.glimmer.set_follow": "Glimmer set to follow.", + "entity.antarchy.glimmer.set_wander": "Glimmer set to wander.", + "entity.antarchy.glimmer.ability.ant": "Your Ant riles you up against the %s!", + "entity.antarchy.glimmer.ability.apple_cow": "Your Apple Cow moos and nourishes you!", + "entity.antarchy.glimmer.ability.elka": "Your Elka cries out and shatters the ward!", + "entity.antarchy.glimmer.ability.deer": "Your Ouranwood Deer charges through the enemy!", + "entity.antarchy.glimmer.ability.frog": "Your Frog devoured a %s!", + "item.antarchy.glimmer_bottle.passive.apple_cow": "Passive: Hunger drains 25% slower", + "item.antarchy.glimmer_bottle.ability.apple_cow": "Ability: Moos for a burst of Saturation and Regeneration when you're low on food", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "Passive: Speed I", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "Ability: Charges through hostile mobs when you sprint at them, knocking them flying", + "item.antarchy.glimmer_bottle.passive.frog": "Passive: Jump Boost I", + "item.antarchy.glimmer_bottle.ability.frog": "Ability: Devours a nearby hostile mob, growing bigger and stronger for a while", + "item.antarchy.glimmer_bottle.passive.ant": "Passive: Slightly further attack reach", + "item.antarchy.glimmer_bottle.ability.ant": "Ability: Landing a hit on a large enemy grants you a burst of Strength II", + "item.antarchy.glimmer_bottle.passive.elka": "Passive: Bloodglass Ward II", + "item.antarchy.glimmer_bottle.ability.elka": "Ability: Cries and shatters into a shockwave when one of your ward hearts breaks", + "advancements.antarchy.spirant_animal.title": "SpirANT Animal", + "advancements.antarchy.spirant_animal.description": "Tame an Ant Glimmer", + "advancements.antarchy.hoppy_together.title": "Hoppy Together", + "advancements.antarchy.hoppy_together.description": "Tame a Frog Glimmer", + "advancements.antarchy.deerly_beloved.title": "Deerly Beloved", + "advancements.antarchy.deerly_beloved.description": "Tame an Ouranwood Deer Glimmer", + "advancements.antarchy.elkcellent_choice.title": "ELKcellent Choice", + "advancements.antarchy.elkcellent_choice.description": "Tame an Elka Glimmer", + "advancements.antarchy.apple_of_my_eye.title": "Apple of my Eye", + "advancements.antarchy.apple_of_my_eye.description": "Tame an Apple Cow Glimmer", + "item.antarchy.dorrie_spawn_egg": "Dorrie Spawn Egg", + "item.antarchy.flying_squirrel_spawn_egg": "Flying Squirrel Spawn Egg", + "item.antarchy.caterpillar_spawn_egg": "Caterpillar Spawn Egg", + "item.antarchy.butterfly_spawn_egg": "Butterfly Spawn Egg", + "item.antarchy.brutalfly_spawn_egg": "Brutalfly Spawn Egg", + "item.antarchy.cloud_shark_spawn_egg": "Cloud Shark Spawn Egg", + "item.antarchy.kraken_spawn_egg": "Uh, no. Don\u0027t.", + "item.antarchy.missile_squid_spawn_egg": "Missile Squid Spawn Egg", + "item.antarchy.octopus_bomb_spawn_egg": "Octopus Bomb Spawn Egg", + "item.antarchy.nightmare_spawn_egg": "Nightmare Spawn Egg", + "item.antarchy.toreterror_spawn_egg": "Toreterror Spawn Egg", + "item.antarchy.water_cannon": "Water Cannon", + "item.antarchy.primordial_helmet": "Primordial Helmet", + "item.antarchy.primordial_chestplate": "Primordial Chestplate", + "item.antarchy.primordial_leggings": "Primordial Leggings", + "item.antarchy.primordial_boots": "Primordial Boots", + "item.antarchy.bed_bug_spawn_egg": "Bed Bug Spawn Egg", + "item.antarchy.moleworm_spawn_egg": "Moleworm Spawn Egg", + "item.antarchy.molevore_spawn_egg": "Molevore Spawn Egg", + "item.antarchy.reverie_spawn_egg": "Reverie Spawn Egg", + "item.antarchy.mantis_spawn_egg": "Mantis Spawn Egg", + "item.antarchy.alpha_mantis_spawn_egg": "Alpha Mantis Spawn Egg", + "biome.antarchy.moleworm_caves": "Moleworm Caves", + "biome.antarchy.elythia_meadow": "Elythian Meadows", + "biome.antarchy.butterfly_fields": "Butterfly Fields", + "biome.antarchy.ouranwood_forest": "Ouranwood Forest", + "biome.antarchy.glimmering_pools": "Glimmering Pools", + "biome.antarchy.peach_forest": "Peach Forest", + "biome.antarchy.fungal_ouranwood_forest": "Fungal Ouranwood Forest", + "biome.antarchy.glowcap_caves": "Glowcap Caves", + "message.antarchy.brown_ant_activated": "The brown ant is ready to open its destination.", + "message.antarchy.brown_ant_needs_reagent": "This brown ant needs a reagent before it can open its destination.", + "message.antarchy.rainbow_ant_activated": "The rainbow ant hums with a new Infinity destination.", + "message.antarchy.rainbow_ant_activated_inherited": "The rainbow ant hums with an inherited Infinity destination.", + "message.antarchy.rainbow_ant_activated_inherited_existing": "The rainbow ant reconnects to an inherited Infinity destination.", + "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.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.", + "message.antarchy.termite_needs_reagent": "This termite needs a reagent before it can open its destination.", + "death.attack.spit_bug_disrespect": "%1$s was disrespected by Spit Bug", + "death.attack.jumpy_bug_jump": "%1$s was jumped by Jumpy Bug", + "death.attack.hercules_beetle_obliteration": "%1$s was obliterated by Hercules Beetle", + "message.antarchy.big_bertha.mode": "Big Bertha Mode: %s", + "message.antarchy.big_bertha.mode.none": "None", + "message.antarchy.big_bertha.mode.basilisk": "Basilisk", + "message.antarchy.big_bertha.mode.lucid": "Lucid", + "message.antarchy.big_bertha.mode.nightmare": "Nightmare", + "message.antarchy.big_bertha.mode.kraken": "Kraken", + "message.antarchy.big_bertha.mode.hercules": "Hercules", + "message.antarchy.big_bertha.mode.molevore": "Molevore", + "message.antarchy.big_bertha.mode.toreterror": "Toreterror", + "message.antarchy.ultimate_tool.mode_3x3": "Switched to 3x3 Mining", + "message.antarchy.ultimate_tool.mode_default": "Switched to Default Mining", + "advancements.antarchy.hey_listen.title": "Hey Listen", + "advancements.antarchy.hey_listen.description": "A Reverie has joined you.", + "advancements.antarchy.very_hungry_caterpillar.title": "Very Hungry Caterpillar", + "advancements.antarchy.very_hungry_caterpillar.description": "Help a caterpillar grow.", + "effect.antarchy.dread": "Dread", + "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.stinky": "Stinky", + "effect.antarchy.stinky.description": "Repels passive and neutral mobs, attracts arthropods.", + "effect.antarchy.gooped": "Gooped", + "effect.antarchy.gooped.description": "Slows movement and attack speed.", + "effect.antarchy.shrinking": "Shrinking", + "effect.antarchy.growth": "Growth", + "effect.antarchy.bloodglass_ward": "Bloodglass Ward", + "effect.antarchy.bloodglass_ward.description": "Gives hearts that shatter, absorbing an entire hit of damage. They regenerate over time.", + "effect.antarchy.glimmering": "Glimmering", + "effect.antarchy.glimmering.description": "Passes through entities and attacks unharmed, like a spirit.", + "death.attack.triffid_mauling": "%1$s was mauled to death by a plant", + "death.attack.triffid_mauling.player": "%1$s was mauled to death by a plant", + "death.attack.triffid_swallow": "%1$s was swallowed by a triffid", + "death.attack.triffid_swallow.player": "%1$s was swallowed by a triffid", + "potion.antarchy.haste": "Haste Potion", + "potion.antarchy.strong_haste": "Strong Haste Potion", + "tooltip.antarchy.big_bertha.mode": "Mode: %s", + "tooltip.antarchy.big_bertha.toggle_mode": "Shift + use to cycle boss modes.", + "tooltip.antarchy.big_bertha.mode.none": "Hits deal a small amount of bonus damage.", + "tooltip.antarchy.big_bertha.mode.basilisk": "Usage paralyzes a target. Hits inflict poison and slow.", + "tooltip.antarchy.big_bertha.mode.lucid": "Hits invert targets for a few seconds. Hits deal more damage while you are inverted.", + "tooltip.antarchy.big_bertha.mode.nightmare": "Hits deal bonus damage; players suffer Dread and hits inflict weakness.", + "tooltip.antarchy.big_bertha.mode.kraken": "Hits slam targets back and call lightning.", + "tooltip.antarchy.big_bertha.mode.hercules": "Hits deal bonus damage and launch targets high into the air.", + "tooltip.antarchy.big_bertha.mode.molevore": "Use to spin forward and drill through Molevore blocks.", + "tooltip.antarchy.big_bertha.mode.toreterror": "Use to launch into the air and crash down with an AOE shockwave.", + "tooltip.antarchy.ultimate_tools_3x3": "Shift + use to toggle 3x3 Mining.", + "tooltip.antarchy.moggles.reveal": "Gives night vision and points to nearby caves.", + "tooltip.antarchy.moggles.underground": "Works only while you have no sky access.", + "tooltip.antarchy.cornea_ear.vision": "Grants Night Vision for %s seconds.", + "tooltip.antarchy.mob_coming_soon": "Mob Coming Soon!", + "tooltip.antarchy.gravity_gun.primary": "Attack: blast nearby entities or throw the held target.", + "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.antimetal_inversion": "Inverts entites directly below it", + "tooltip.antarchy.diamond_minecart.forward": "Will be implemented later.", + "tooltip.antarchy.diamond_minecart.rails": " ", + "tooltip.antarchy.rainbow_sugar": "Activates Rainbow Ant Dimensions. Eat while in one to return home.", + "advancements.antarchy.visit_elythia.title": "InterdimANTsional", + "advancements.antarchy.visit_elythia.description": "Use a brown ant to reach Elythia.", + "advancements.antarchy.visit_thoraxis.title": "Ant-ger Management", + "advancements.antarchy.visit_thoraxis.description": "Use a red ant to reach Thoraxis.", + "advancements.antarchy.visit_cavaryn.title": "Antfestation Problem", + "advancements.antarchy.visit_cavaryn.description": "Enter the infested dimension of Cavaryn.", + "advancements.antarchy.fallen_kingdom_castle.title": "I Used to Rule the World...", + "advancements.antarchy.fallen_kingdom_castle.description": "Discover the Fallen Kingdom Castle.", + "advancements.antarchy.cops_n_robbers.title": "Cops N Robbers!", + "advancements.antarchy.cops_n_robbers.description": "This is just a nostalgic structure, no affiliation with Sky :)", + "advancements.antarchy.fallen_king_crown.title": "Chunks would load when I gave the word...", + "advancements.antarchy.fallen_king_crown.description": "Obtain the Fallen King\u0027s Crown.", + "advancements.antarchy.the_lab.title": "Hello Everyone, Dan Here!", + "advancements.antarchy.the_lab.description": "Discover Dr. Trayaurus\u0027 lab.", + "advancements.antarchy.sweater_dreams.title": "Sweater Dreams", + "advancements.antarchy.sweater_dreams.description": "Defeat the Nightmare.", + "advancements.antarchy.stone_cold.title": "Stone Cold", + "advancements.antarchy.stone_cold.description": "Defeat a Basilisk.", + "advancements.antarchy.moley_poley.title": "Moley Poley", + "advancements.antarchy.moley_poley.description": "Defeat a Molevore.", + "advancements.antarchy.lucid_dreams.title": "Lucid Dreams", + "advancements.antarchy.lucid_dreams.description": "Defeat a Lucid.", + "advancements.antarchy.davy_jones_locker.title": "Davy Jones\u0027 Locker", + "advancements.antarchy.davy_jones_locker.description": "Defeat the Kraken.", + "advancements.antarchy.shark_weak.title": "When Sharks Fly", + "advancements.antarchy.shark_weak.description": "Defeat a Cloud Shark.", + "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "Don\u0027t Let the Bed Bugs Bite", + "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "Defeat a Bed Bug.", + "advancements.antarchy.soups_up.title": "Soups Up", + "advancements.antarchy.soups_up.description": "Eat Cloud Shark Fin Soup.", + "advancements.antarchy.in_the_upside_down.title": "In the Upside Down", + "advancements.antarchy.in_the_upside_down.description": "Become inverted for the first time.", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "Whoever smelt it, dealt it", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "Get Stinky for the first time.", + "advancements.antarchy.ultimate_armor.title": "Ultimate Protection", + "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.brutalfly.title": "Float Like a Brutalfly, Sting Like a Bee", + "advancements.antarchy.brutalfly.description": "Obtain a Brutalfly Elytra.", + "advancements.antarchy.now_watch_me_whip.title": "Now Watch Me Whip", + "advancements.antarchy.now_watch_me_whip.description": "Now watch me nae nae", + "advancements.antarchy.kill_molevore.title": "Moley Poley", + "advancements.antarchy.kill_molevore.description": "Kill a Molevore.", + "advancements.antarchy.water_cannon_craft.title": "Wetter is Better!", + "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.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", + "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", + "death.attack.kraken_lightning": "%1$s was struck down by the Kraken\u0027s storm", + "death.attack.kraken_lightning.player": "%1$s was struck down by the Kraken\u0027s storm while fighting %2$s", + "death.attack.rpo_launcher_blast": "%1$s was RKO-ed by an R.P.O.", + "death.attack.rpo_launcher_blast.player": "%1$s was RKO-ed by an R.P.O. while fighting %2$s", + "death.attack.nightmare_mauling": "%1$s was devoured by the Nightmare", + "death.attack.nightmare_mauling.player": "%1$s was devoured by the Nightmare while fighting %2$s", + "death.attack.basilisk_bite": "%1$s was swallowed by a Basilisk", + "death.attack.basilisk_bite.player": "%1$s was swallowed by a Basilisk while fighting %2$s", + "death.attack.emperor_scorpion_sting": "%1$s was stung by the Emperor Scorpion", + "death.attack.emperor_scorpion_sting.player": "%1$s was stung by the Emperor Scorpion while fighting %2$s", + "death.attack.cornea_stalk_prick": "%1$s was pricked to death by a Cornea Stalk", + "death.attack.toreterror_spin": "%1$s was beybladed to death by Toreterror", + "death.attack.toreterror_spin.player": "%1$s was beybladed to death by Toreterror", + "death.attack.toreterror_jump": "%1$s was pounded to death by Toreterror", + "death.attack.toreterror_jump.player": "%1$s was pounded to death by Toreterror", + "death.attack.water_soaked": "%1$s was super soaked to death by %2$s", + "death.attack.water_soaked.player": "%1$s was super soaked to death by %2$s", + "entity.antarchy.lucid": "Lucid", + "item.antarchy.lucid_spawn_egg": "Lucid Spawn Egg", + "item.antarchy.lucid_eye": "Lucid Eye", + "entity.antarchy.scorpion": "Scorpion", + "item.antarchy.scorpion_spawn_egg": "Scorpion Spawn Egg", + "entity.antarchy.basilisk": "Basilisk", + "item.antarchy.basilisk_spawn_egg": "Basilisk Spawn Egg", + "entity.antarchy.emperor_scorpion": "Emperor Scorpion", + "item.antarchy.emperor_scorpion_spawn_egg": "Emperor Scorpion Spawn Egg", + "item.antarchy.emperor_scorpion_stinger": "Emperor Scorpion Stinger", + "item.antarchy.lucid_pearl": "Lucid Pearl", + "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.shrink_ray": "Shrink Ray fires", + "subtitles.antarchy.growth_ray": "Growth Ray fires", + "subtitles.antarchy.size_ray_charge": "Size Ray charges", + "subtitles.antarchy.ant_ambient": "Ants chirp", + "subtitles.antarchy.ant_idle": "Ants idle", + "subtitles.antarchy.ant_hurt": "Ants hurt", + "subtitles.antarchy.ant_bite": "Ants bite", + "subtitles.antarchy.ant_gather": "Ants gather", + "subtitles.antarchy.ant_nest": "Ant nest rustles", + "subtitles.antarchy.cloud_shark_bite": "Cloud Shark bites", + "subtitles.antarchy.cloud_shark_idle": "Cloud Shark idles", + "subtitles.antarchy.cloud_shark_hurt": "Cloud Shark hurts", + "subtitles.antarchy.cloud_shark_death": "Cloud Shark dies", + "subtitles.antarchy.cloud_shark_fly": "Cloud Shark flies", + "subtitles.antarchy.caterpillar_idle": "Caterpillar idles", + "subtitles.antarchy.caterpillar_hurt": "Caterpillar hurts", + "subtitles.antarchy.caterpillar_crawl": "Caterpillar crawls", + "subtitles.antarchy.butterfly_hurt": "Butterfly hurts", + "subtitles.antarchy.brutalfly_idle": "Brutalfly idles", + "subtitles.antarchy.brutalfly_death": "Brutalfly dies", + "subtitles.antarchy.thoraxis_nightmare_wastes_ambient": "Nightmare Wastes hums", + "subtitles.antarchy.thoraxis_nightmare_wastes_additions": "Nightmare Wastes stirs", + "subtitles.antarchy.thoraxis_nightmare_wastes_mood": "Nightmare Wastes murmurs", + "subtitles.antarchy.thoraxis_dream_dunes_ambient": "Dream Dunes whisper", + "subtitles.antarchy.thoraxis_dream_dunes_additions": "Dream Dunes rustle", + "subtitles.antarchy.thoraxis_dream_dunes_mood": "Dream Dunes sigh", + "subtitles.antarchy.thoraxis_lucid_pools_ambient": "Lucid Pools hum", + "subtitles.antarchy.thoraxis_lucid_pools_additions": "Lucid Pools curse", + "subtitles.antarchy.thoraxis_lucid_pools_mood": "Lucid Pools murmur", + "subtitles.antarchy.lucid_ambient": "Lucid hums", + "subtitles.antarchy.lucid_flying": "Lucid flutters", + "subtitles.antarchy.lucid_attack": "Lucid attacks", + "subtitles.antarchy.lucid_bolt": "Lucid bolt fires", + "subtitles.antarchy.lucid_hurt": "Lucid hurts", + "subtitles.antarchy.lucid_death": "Lucid dies", + "subtitles.antarchy.reverie_idle": "Reverie drifts", + "subtitles.antarchy.reverie_hurt": "Reverie hurts", + "subtitles.antarchy.reverie_worry": "Reverie worries", + "subtitles.antarchy.reverie_save": "Reverie saves you", + "subtitles.antarchy.reverie_join_player": "Reverie joins you", + "subtitles.antarchy.reverie_alert": "Reverie alerts you", + "subtitles.antarchy.flying_squirrel_idle": "Flying squirrel chirps", + "subtitles.antarchy.flying_squirrel_beg": "Flying squirrel begs for food", + "subtitles.antarchy.flying_squirrel_nut": "Flying squirrel eats", + "subtitles.antarchy.flying_squirrel_glide_loop": "Flying squirrel glides", + "subtitles.antarchy.flying_squirrel_hurt": "Flying squirrel hurts", + "subtitles.antarchy.flying_squirrel_death": "Flying squirrel dies", + "subtitles.antarchy.nightmare_idle": "Nightmare snarls", + "subtitles.antarchy.nightmare_hurt": "Nightmare hurts", + "subtitles.antarchy.nightmare_roar": "Nightmare roars", + "subtitles.antarchy.nightmare_death": "Nightmare dies", + "subtitles.antarchy.nightmare_bite": "Nightmare bites", + "subtitles.antarchy.nightmare_flap": "Nightmare flaps", + "subtitles.antarchy.triffid_attack": "Triffid attacks", + "subtitles.antarchy.triffid_grab": "Triffid grabs", + "subtitles.antarchy.triffid_hurt": "Triffid hurts", + "subtitles.antarchy.triffid_death": "Triffid dies", + "subtitles.antarchy.triffid_hiss": "Triffid hisses", + "subtitles.antarchy.triffid_growl": "Triffid growls", + "subtitles.antarchy.gravity_gun_pickup": "Gravity Gun picks up", + "subtitles.antarchy.gravity_gun_drop": "Gravity Gun drops", + "subtitles.antarchy.gravity_gun_hold_loop": "Gravity Gun hums", + "subtitles.antarchy.gravity_gun_launch": "Gravity Gun launches", + "subtitles.antarchy.gravity_gun_dryfire": "Gravity Gun dry fires", + "subtitles.antarchy.bed_bug_ambient": "Bed Bug chirps", + "subtitles.antarchy.bed_bug_hurt": "Bed Bug hurts", + "subtitles.antarchy.bed_bug_attack": "Bed Bug bites", + "subtitles.antarchy.wasp_idle": "Wasp buzzes", + "subtitles.antarchy.wasp_hurt": "Wasp hurts", + "subtitles.antarchy.wasp_attack": "Wasp stings", + "subtitles.antarchy.wasp_death": "Wasp dies", + "subtitles.antarchy.scorpion_ambient": "Scorpion rattles", + "subtitles.antarchy.scorpion_hurt": "Scorpion hurts", + "subtitles.antarchy.scorpion_attack": "Scorpion attacks", + "subtitles.antarchy.emperor_scorpion_ambient": "Emperor Scorpion rattles", + "subtitles.antarchy.emperor_scorpion_hurt": "Emperor Scorpion hurts", + "subtitles.antarchy.emperor_scorpion_attack": "Emperor Scorpion attacks", + "subtitles.antarchy.emperor_scorpion_roar": "Emperor Scorpion roars", + "subtitles.antarchy.moleworm_ambient": "Moleworm rustles", + "subtitles.antarchy.moleworm_hurt": "Moleworm hurts", + "subtitles.antarchy.moleworm_attack": "Moleworm attacks", + "subtitles.antarchy.moleworm_dig": "Moleworm digs", + "subtitles.antarchy.molevore_ambient": "Molevore rumbles", + "subtitles.antarchy.molevore_hurt": "Molevore hurts", + "subtitles.antarchy.molevore_attack": "Molevore attacks", + "subtitles.antarchy.molevore_dig": "Molevore digs", + "subtitles.antarchy.duct_tape_use": "Duct Tape tears", + "subtitles.antarchy.potent_nyxite_hypnotic_gas": "Potent Nyxite hisses", + "subtitles.antarchy.potent_nyxite_geyser_eruption": "Potent Nyxite erupts", + "subtitles.antarchy.potent_nyxite_geyser_continuous": "Potent Nyxite geyser roars", + "subtitles.antarchy.missile_squid_ambient": "Missile Squid hums", + "subtitles.antarchy.missile_squid_hurt": "Missile Squid hurts", + "subtitles.antarchy.missile_squid_death": "Missile Squid dies", + "subtitles.antarchy.missile_squid_attack": "Missile Squid attacks", + "subtitles.antarchy.kraken_flying_loop": "Kraken glides", + "subtitles.antarchy.kraken_flying_sideways_loop": "Kraken circles", + "subtitles.antarchy.kraken_attack": "Kraken strikes", + "subtitles.antarchy.kraken_spin": "Kraken spins", + "subtitles.antarchy.kraken_roar": "Kraken roars", + "subtitles.antarchy.kraken_summon": "Kraken emerges", + "subtitles.antarchy.kraken_hurt": "Kraken hurts", + "subtitles.antarchy.kraken_death": "Kraken dies", + "subtitles.antarchy.basilisk_idle_loop": "Basilisk idles", + "subtitles.antarchy.basilisk_slither_loop": "Basilisk slithers", + "subtitles.antarchy.basilisk_bite": "Basilisk bites", + "subtitles.antarchy.basilisk_hiss": "Basilisk hisses", + "subtitles.antarchy.basilisk_hurt": "Basilisk hurts", + "subtitles.antarchy.basilisk_death": "Basilisk dies", + "subtitles.antarchy.bomber_walk": "Bomber walks", + "subtitles.antarchy.bomber_knock": "Bomber gets hit", + "subtitles.antarchy.bomber_explode": "Bomber fuse hisses", + "subtitles.antarchy.toreterror_idle": "Toreterror idles", + "subtitles.antarchy.toreterror_hurt": "Toreterror hurts", + "subtitles.antarchy.toreterror_death": "Toreterror dies", + "subtitles.antarchy.toreterror_bomber_fire": "Toreterror launches bombers", + "subtitles.antarchy.toreterror_spin": "Toreterror spins", + "subtitles.antarchy.toreterror_ricochet": "Toreterror ricochets", + "subtitles.antarchy.water_cannon_fire": "Water Cannon fires", + "subtitles.antarchy.toreterror_jump_up": "Toreterror jumps", + "subtitles.antarchy.toreterror_jump_land": "Toreterror lands", + "subtitles.antarchy.stinky_fly": "Stinky flies buzz", + "item.minecraft.potion.effect.inversion": "Potion of Inversion", + "item.minecraft.potion.effect.long_inversion": "Potion of Inversion", + "item.minecraft.splash_potion.effect.inversion": "Splash Potion of Inversion", + "item.minecraft.splash_potion.effect.long_inversion": "Splash Potion of Inversion", + "item.minecraft.lingering_potion.effect.inversion": "Lingering Potion of Inversion", + "item.minecraft.lingering_potion.effect.long_inversion": "Lingering Potion of Inversion", + "item.minecraft.tipped_arrow.effect.inversion": "Arrow of Inversion", + "item.minecraft.tipped_arrow.effect.long_inversion": "Arrow of Inversion", + "item.minecraft.potion.effect.paralysis": "Potion of Paralysis", + "item.minecraft.potion.effect.long_paralysis": "Potion of Paralysis", + "item.minecraft.splash_potion.effect.paralysis": "Splash Potion of Paralysis", + "item.minecraft.splash_potion.effect.long_paralysis": "Splash Potion of Paralysis", + "item.minecraft.lingering_potion.effect.paralysis": "Lingering Potion of Paralysis", + "item.minecraft.lingering_potion.effect.long_paralysis": "Lingering Potion of Paralysis", + "item.minecraft.tipped_arrow.effect.paralysis": "Arrow of Paralysis", + "item.minecraft.tipped_arrow.effect.long_paralysis": "Arrow of Paralysis", + "item.minecraft.potion.effect.shrinking": "Potion of Shrinking", + "item.minecraft.potion.effect.strong_shrinking": "Potion of Shrinking II", + "item.minecraft.potion.effect.extreme_shrinking": "Potion of Shrinking III", + "item.minecraft.splash_potion.effect.shrinking": "Splash Potion of Shrinking", + "item.minecraft.splash_potion.effect.strong_shrinking": "Splash Potion of Shrinking II", + "item.minecraft.splash_potion.effect.extreme_shrinking": "Splash Potion of Shrinking III", + "item.minecraft.lingering_potion.effect.shrinking": "Lingering Potion of Shrinking", + "item.minecraft.lingering_potion.effect.strong_shrinking": "Lingering Potion of Shrinking II", + "item.minecraft.lingering_potion.effect.extreme_shrinking": "Lingering Potion of Shrinking III", + "item.minecraft.tipped_arrow.effect.shrinking": "Arrow of Shrinking", + "item.minecraft.tipped_arrow.effect.strong_shrinking": "Arrow of Shrinking II", + "item.minecraft.tipped_arrow.effect.extreme_shrinking": "Arrow of Shrinking III", + "item.minecraft.potion.effect.growing": "Potion of Growth", + "item.minecraft.potion.effect.strong_growing": "Potion of Growth II", + "item.minecraft.potion.effect.extreme_growing": "Potion of Growth III", + "item.minecraft.splash_potion.effect.growing": "Splash Potion of Growth", + "item.minecraft.splash_potion.effect.strong_growing": "Splash Potion of Growth II", + "item.minecraft.splash_potion.effect.extreme_growing": "Splash Potion of Growth III", + "item.minecraft.lingering_potion.effect.growing": "Lingering Potion of Growth", + "item.minecraft.lingering_potion.effect.strong_growing": "Lingering Potion of Growth II", + "item.minecraft.lingering_potion.effect.extreme_growing": "Lingering Potion of Growth III", + "item.minecraft.tipped_arrow.effect.growing": "Arrow of Growth", + "item.minecraft.tipped_arrow.effect.strong_growing": "Arrow of Growth II", + "item.minecraft.tipped_arrow.effect.extreme_growing": "Arrow of Growth III", + "item.minecraft.potion.effect.dread": "Potion of Dread", + "item.minecraft.potion.effect.long_dread": "Potion of Dread", + "item.minecraft.splash_potion.effect.dread": "Splash Potion of Dread", + "item.minecraft.splash_potion.effect.long_dread": "Splash Potion of Dread", + "item.minecraft.lingering_potion.effect.dread": "Lingering Potion of Dread", + "item.minecraft.lingering_potion.effect.long_dread": "Lingering Potion of Dread", + "item.minecraft.tipped_arrow.effect.dread": "Arrow of Dread", + "item.minecraft.tipped_arrow.effect.long_dread": "Arrow of Dread", + "item.minecraft.potion.effect.stinky": "Potion of Stink", + "item.minecraft.potion.effect.long_stinky": "Potion of Stink", + "item.minecraft.splash_potion.effect.stinky": "Splash Potion of Stink", + "item.minecraft.splash_potion.effect.long_stinky": "Splash Potion of Stink", + "item.minecraft.lingering_potion.effect.stinky": "Lingering Potion of Stink", + "item.minecraft.lingering_potion.effect.long_stinky": "Lingering Potion of Stink", + "item.minecraft.tipped_arrow.effect.stinky": "Arrow of Stink", + "item.minecraft.tipped_arrow.effect.long_stinky": "Arrow of Stink", + "item.minecraft.potion.effect.haste": "Potion of Haste", + "item.minecraft.potion.effect.strong_haste": "Potion of Haste II", + "item.minecraft.splash_potion.effect.haste": "Splash Potion of Haste", + "item.minecraft.splash_potion.effect.strong_haste": "Splash Potion of Haste II", + "item.minecraft.lingering_potion.effect.haste": "Lingering Potion of Haste", + "item.minecraft.lingering_potion.effect.strong_haste": "Lingering Potion of Haste II", + "item.minecraft.tipped_arrow.effect.haste": "Arrow of Haste", + "item.minecraft.tipped_arrow.effect.strong_haste": "Arrow of Haste II", + "advancements.antarchy.cancel_out.title": "1 - 1 = ?", + "advancements.antarchy.cancel_out.description": "Have Growth and Shrinking active at the same time.", + "entity.antarchy.cheep": "Cheep", + "item.antarchy.cheep": "Cheep", + "item.antarchy.cheep_spawn_egg": "Cheep Spawn Egg", + "entity.antarchy.reverie": "Reverie", + "biome.antarchy.thoraxis": "Thoraxis", + "biome.antarchy.nightmare_wastes": "Nightmare Wastes", + "biome.antarchy.umbral_hills": "Umbral Hills", + "biome.antarchy.lucid_pools": "Lucid Pools", + "biome.antarchy.dream_dunes": "Dream Dunes", + "biome.antarchy.cloud_sea": "Cloud Sea", + "block.antarchy.wild_corn": "Wild Corn", + "trim_material.antarchy.blood_crystal": "Blood Crystal", + "trim_material.antarchy.bluestone": "Bluestone", + "trim_material.antarchy.nightmare_scale": "Nightmare Scale", + "trim_material.antarchy.uranium": "Uranium", + "trim_material.antarchy.titanium": "Titanium", + "trim_material.antarchy.tigers_eye": "Tiger's Eye", + "item.antarchy.tigers_eye": "Tiger's Eye", + "item.antarchy.tigers_eye_helmet": "Tiger's Eye Helmet", + "item.antarchy.tigers_eye_chestplate": "Tiger's Eye Chestplate", + "item.antarchy.tigers_eye_leggings": "Tiger's Eye Leggings", + "item.antarchy.tigers_eye_boots": "Tiger's Eye Boots", + "item.antarchy.tigers_eye_armor.passive": "Up to 10% detection reduction", + "item.antarchy.tigers_eye_armor.full_set": "Full Set: Adaptive Camouflage", + "item.antarchy.tigers_eye_armor.activate": "Press %s to mimic the block beneath you", + "item.antarchy.tigers_eye_armor.active_bonus": "Doubles detection reduction while active", + "key.antarchy.tigers_eye_camouflage": "Adaptive Camouflage", + "message.antarchy.tiger_eye_camouflage.activated": "Adaptive Camouflage activated", + "message.antarchy.tiger_eye_camouflage.disabled": "Adaptive Camouflage disabled", + "message.antarchy.tiger_eye_camouflage.full_set_required": "A full set of Tiger's Eye armor is required", + "message.antarchy.tiger_eye_camouflage.invalid_block": "There is no suitable block beneath you", + "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.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.", + "advancements.antarchy.growth_ray_craft.title": "Go Big or Go Home", + "advancements.antarchy.growth_ray_craft.description": "Craft a Growth Ray.", + "advancements.antarchy.squidzooka_craft.title": "Ink and Destroy", + "advancements.antarchy.squidzooka_craft.description": "Craft a Squidzooka.", + "advancements.antarchy.rocket_powered_octopus.title": "Rocket Powered Octopus", + "advancements.antarchy.rocket_powered_octopus.description": "Craft an R.P.O. Launcher.", + "advancements.antarchy.gravity_gun_craft.title": "Pick Up Artist", + "advancements.antarchy.gravity_gun_craft.description": "Craft a Gravity Gun.", + "advancements.antarchy.upper_craft.title": "Uppies?? Uppies!!!", + "advancements.antarchy.upper_craft.description": "Craft an Upper.", + "advancements.antarchy.mucus_obtained.title": "Gazuntite!", + "advancements.antarchy.mucus_obtained.description": "Obtain some Mucus.", + "block.antarchy.cavaryn_portal": "Cavaryn Portal", + "block.antarchy.termite_nest": "Termite Nest", + "block.antarchy.chitin_spike": "Chitin Spike", + "block.antarchy.chitin_block": "Chitin Block", + "block.antarchy.myrmite": "Myrmite", + "block.antarchy.broodstone": "Broodstone", + "block.antarchy.amber_moss_block": "Amber Moss Block", + "block.antarchy.amber_moss_carpet": "Amber Moss Carpet", + "block.antarchy.amber_lichen": "Amber Lichen", + "block.antarchy.mucus": "Mucus", + "tooltip.antarchy.mucus_slippery": "Makes the block it's on slippery like ice", + "block.antarchy.bile_vein": "Bile Vein", + "block.antarchy.creepvine": "Creepvine", + "block.antarchy.creeping_horror_egg": "Creeping Horror Egg", + "block.antarchy.lurking_terror_egg": "Lurking Terror Egg", + "entity.antarchy.termite": "Termite", + "entity.antarchy.jumpy_bug": "Jumpy Bug", + "entity.antarchy.spit_bug": "Spit Bug", + "entity.antarchy.stink_bug": "Stink Bug", + "entity.antarchy.rolly_polly": "Rolly Polly", + "entity.antarchy.creeping_horror": "Creeping Horror", + "entity.antarchy.lurking_terror": "Lurking Terror", + "entity.antarchy.hercules_beetle": "Hercules Beetle", + "item.antarchy.jumpy_bug_spawn_egg": "Jumpy Bug Spawn Egg", + "item.antarchy.spit_bug_spawn_egg": "Spit Bug Spawn Egg", + "item.antarchy.stink_bug_spawn_egg": "Stink Bug Spawn Egg", + "item.antarchy.termite_spawn_egg": "Termite Spawn Egg", + "item.antarchy.rolly_polly_spawn_egg": "Rolly Polly Spawn Egg", + "item.antarchy.creeping_horror_spawn_egg": "Creeping Horror Spawn Egg", + "item.antarchy.lurking_terror_spawn_egg": "Lurking Terror Spawn Egg", + "item.antarchy.hercules_beetle_spawn_egg": "Hercules Beetle Spawn Egg", + "item.antarchy.chitin": "Chitin", + "block.antarchy.polished_broodstone": "Polished Broodstone", + "block.antarchy.chiseled_broodstone": "Chiseled Broodstone", + "block.antarchy.broodstone_bricks": "Broodstone Bricks", + "block.antarchy.broodstone_stairs": "Broodstone Stairs", + "block.antarchy.broodstone_slab": "Broodstone Slab", + "block.antarchy.broodstone_wall": "Broodstone Wall", + "block.antarchy.polished_broodstone_stairs": "Polished Broodstone Stairs", + "block.antarchy.polished_broodstone_slab": "Polished Broodstone Slab", + "block.antarchy.polished_broodstone_wall": "Polished Broodstone Wall", + "block.antarchy.broodstone_brick_stairs": "Broodstone Brick Stairs", + "block.antarchy.broodstone_brick_slab": "Broodstone Brick Slab", + "block.antarchy.broodstone_brick_wall": "Broodstone Brick Wall", + "block.antarchy.broodstone_pillar": "Broodstone Pillar", + "block.antarchy.myrmite_coal_ore": "Myrmite Coal Ore", + "block.antarchy.broodstone_uranium_ore": "Broodstone Uranium Ore", + "block.antarchy.broodstone_titanium_ore": "Broodstone Titanium Ore", + "item.antarchy.raw_bug_meat": "Raw Bug Meat", + "item.antarchy.cooked_bug_meat": "Cooked Bug Meat", + "item.antarchy.hercules_horn": "Hercules Horn", + "block.antarchy.hanging_creeproots": "Hanging Creeproots", + "block.antarchy.glowcap_mushroom": "Glowcap Mushroom", + "block.antarchy.potted_glowcap_mushroom": "Potted Glowcap Mushroom", + "block.antarchy.glowcap_mushroom_block": "Glowcap Mushroom Block", + "block.antarchy.molting_vines": "Molting Vines", + "item.antarchy.broodfruit": "Broodfruit", + "block.antarchy.jumpy_bug_egg": "Jumpy Bug Egg", + "block.antarchy.spit_bug_egg": "Spit Bug Egg", + "block.antarchy.jerry_egg": "Jerry Egg", + "entity.antarchy.jerry": "Jerry", + "item.antarchy.jerry_spawn_egg": "Jerry Spawn Egg", + "block.antarchy.biomite": "Biomite", + "block.antarchy.biomite_turf": "Biomite Turf", + "block.antarchy.biowart": "Biowart", + "block.antarchy.biowart_tendrils": "Biowart Tendrils", + "biome.antarchy.biowart_caves": "Biowart Caves", + "subtitles.antarchy.creeping_horror_growl": "Creeping Horror growls", + "subtitles.antarchy.creeping_horror_hurt": "Creeping Horror hurts", + "subtitles.antarchy.creeping_horror_bite": "Creeping Horror bites", + "subtitles.antarchy.lurking_terror_snarl": "Lurking Terror snarls", + "subtitles.antarchy.lurking_terror_hurt": "Lurking Terror hurts", + "subtitles.antarchy.lurking_terror_bite": "Lurking Terror bites", + "subtitles.antarchy.lurking_terror_fly_loop": "Lurking Terror flies", + "subtitles.antarchy.stink_bug_fart": "Stink Bug farts", + "subtitles.antarchy.cavaryn_heartbeat": "Cavaryn pulses", + "subtitles.antarchy.stink_bug_idle": "Stink Bug idles", + "subtitles.antarchy.rolly_polly_idle": "Rolly Polly idles", + "subtitles.antarchy.rolly_polly_wheel_mode": "Rolly Polly curls up", + "subtitles.antarchy.rolly_polly_normal_mode": "Rolly Polly uncurls", + "subtitles.antarchy.rolly_polly_roll": "Rolly Polly rolls", + "subtitles.antarchy.hercules_beetle_idle": "Hercules Beetle idles", + "subtitles.antarchy.hercules_beetle_hurt": "Hercules Beetle hurts", + "subtitles.antarchy.hercules_beetle_attack": "Hercules Beetle attacks", + "subtitles.antarchy.hercules_beetle_cry": "Hercules Beetle roars", + "subtitles.antarchy.hercules_beetle_charge_start": "Hercules Beetle charges up", + "subtitles.antarchy.hercules_beetle_knocked_down": "Hercules Beetle is knocked down", + "subtitles.antarchy.jumpy_bug_idle": "Jumpy Bug idles", + "subtitles.antarchy.spit_bug_idle": "Spit Bug idles", + "subtitles.antarchy.jumpy_bug_hurt": "Jumpy Bug hurts", + "subtitles.antarchy.jumpy_bug_jump": "Jumpy Bug jumps", + "subtitles.antarchy.spit_bug_hurt": "Spit Bug hurts", + "subtitles.antarchy.spit_bug_spit": "Spit Bug spits", + "subtitles.antarchy.brutalfly_spit": "Brutalfly spits", + "subtitles.antarchy.jerry_idle": "Jerry chatters", + "subtitles.antarchy.jerry_hurt": "Jerry hurts", + "subtitles.antarchy.jerry_death": "Jerry dies", + "subtitles.antarchy.jerry_attack": "Jerry attacks", + "subtitles.antarchy.ambient_elythia_ouranwood_forest": "Ouranwood Forest Rustles", + "advancements.antarchy.bug_apetit.title": "Bug Apétit", + "advancements.antarchy.bug_apetit.description": "Eat Cooked Bug Meat.", + "advancements.antarchy.behavioral_correction.title": "Behavioral Correction", + "advancements.antarchy.behavioral_correction.description": "Obtain an Attitude Adjuster.", + "advancements.antarchy.beetle_buddies.title": "Beetle Buddies", + "advancements.antarchy.beetle_buddies.description": "Tame a Hercules Beetle.", + "advancements.antarchy.herculean_task.title": "Herculean Task", + "advancements.antarchy.herculean_task.description": "Slay a Hercules Beetle." +} 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 new file mode 100644 index 00000000..d2ce8428 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/es_es.json @@ -0,0 +1,962 @@ +{ + "block.antarchy.duplicator_log": "Tronco duplicador", + "block.antarchy.ouranwood_log": "Tronco de Ouranwood", + "block.antarchy.ouranwood_wood": "Madera de Ouranwood", + "block.antarchy.mossy_ouranwood_log": "Tronco de Ouranwood musgoso", + "block.antarchy.mossy_ouranwood_wood": "Madera de Ouranwood musgoso", + "block.antarchy.stripped_ouranwood_log": "Tronco de Ouranwood sin corteza", + "block.antarchy.stripped_ouranwood_wood": "Madera de Ouranwood sin corteza", + "block.antarchy.ouranwood_planks": "Tablones de Ouranwood", + "block.antarchy.ouranwood_stairs": "Escaleras de Ouranwood", + "block.antarchy.ouranwood_slab": "Losa de Ouranwood", + "block.antarchy.ouranwood_fence": "Valla de Ouranwood", + "block.antarchy.ouranwood_fence_gate": "Puerta de valla de Ouranwood", + "block.antarchy.ouranwood_door": "Puerta de Ouranwood", + "block.antarchy.ouranwood_trapdoor": "Trampilla de Ouranwood", + "block.antarchy.ouranwood_pressure_plate": "Placa de presión de Ouranwood", + "block.antarchy.ouranwood_button": "Botón de Ouranwood", + "block.antarchy.ouranwood_leaves": "Hojas de Ouranwood", + "block.antarchy.ouranwood_acorn": "Bellota de Ouranwood", + "block.antarchy.ouranwood_sign": "Cartel de Ouranwood", + "block.antarchy.ouranwood_hanging_sign": "Cartel colgante de Ouranwood", + "block.antarchy.peach_log": "Tronco de Melocotón", + "block.antarchy.peach_wood": "Madera de Melocotón", + "block.antarchy.stripped_peach_log": "Tronco de Melocotón sin corteza", + "block.antarchy.stripped_peach_wood": "Madera de Melocotón sin corteza", + "block.antarchy.peach_planks": "Tablones de Melocotón", + "block.antarchy.peach_stairs": "Escaleras de Melocotón", + "block.antarchy.peach_slab": "Losa de Melocotón", + "block.antarchy.peach_fence": "Valla de Melocotón", + "block.antarchy.peach_fence_gate": "Puerta de valla de Melocotón", + "block.antarchy.peach_door": "Puerta de Melocotón", + "block.antarchy.peach_trapdoor": "Trampilla de Melocotón", + "block.antarchy.peach_pressure_plate": "Placa de presión de Melocotón", + "block.antarchy.peach_button": "Botón de Melocotón", + "block.antarchy.peach_leaves": "Hojas de Melocotón", + "block.antarchy.hanging_peach": "Melocotón colgante", + "block.antarchy.peach_sapling": "Brote de Melocotón", + "block.antarchy.peach_sign": "Cartel de Melocotón", + "block.antarchy.peach_hanging_sign": "Cartel colgante de Melocotón", + "block.antarchy.orange_milkweed": "Algodoncillo naranja", + "block.antarchy.pink_milkweed": "Algodoncillo rosa", + "block.antarchy.camellia": "Camelia", + "block.antarchy.spider_lily": "Lirio araña", + "block.antarchy.lotus": "Loto", + "item.antarchy.lotus": "Loto", + "item.antarchy.critter_cage": "Jaula de criaturas", + "block.antarchy.giant_lily_pad": "Nenúfar gigante", + "block.antarchy.seashell": "Concha marina", + "block.antarchy.critter_cage_block": "Jaula de criaturas", + "block.antarchy.hushweed": "Hushweed", + "block.antarchy.umbral_moss_block": "Bloque de Musgo umbrío", + "block.antarchy.umbral_moss_carpet": "Alfombra de Musgo umbrío", + "block.antarchy.blush_moss_block": "Bloque de Musgo rubor", + "block.antarchy.blush_moss_carpet": "Alfombra de Musgo rubor", + "block.antarchy.duplicator_sapling": "Brote duplicador", + "block.antarchy.duct_tape": "Cinta americana", + "block.antarchy.infested_rooted_dirt": "Enraizada Tierra infestado", + "block.antarchy.infested_coarse_dirt": "Estéril Tierra infestado", + "block.antarchy.nyxite": "Nyxite", + "block.antarchy.polished_nyxite": "Nyxite pulido", + "block.antarchy.chiseled_nyxite": "Nyxite cincelado", + "block.antarchy.nyxite_bricks": "Ladrillos de Nyxite", + "block.antarchy.shellstone": "Shellstone", + "block.antarchy.polished_shellstone": "Shellstone pulido", + "block.antarchy.shellstone_bricks": "Ladrillos de Shellstone", + "block.antarchy.chiseled_shellstone": "Shellstone cincelado", + "block.antarchy.mossy_shellstone_bricks": "Ladrillos musgosos de Shellstone", + "block.antarchy.mossy_shellstone_brick_stairs": "Escaleras de ladrillos musgosos de Shellstone", + "block.antarchy.mossy_shellstone_brick_slab": "Losa de ladrillos musgosos de Shellstone", + "block.antarchy.mossy_shellstone_brick_wall": "Muro de ladrillos musgosos de Shellstone", + "block.antarchy.cracked_shellstone_bricks": "Ladrillos agrietados de Shellstone", + "block.antarchy.shellstone_stairs": "Escaleras de Shellstone", + "block.antarchy.shellstone_slab": "Losa de Shellstone", + "block.antarchy.shellstone_wall": "Muro de Shellstone", + "block.antarchy.polished_shellstone_stairs": "Escaleras de Shellstone pulido", + "block.antarchy.polished_shellstone_slab": "Losa de Shellstone pulido", + "block.antarchy.polished_shellstone_wall": "Muro de Shellstone pulido", + "block.antarchy.shellstone_brick_stairs": "Escaleras de ladrillos de Shellstone", + "block.antarchy.shellstone_brick_slab": "Losa de ladrillos de Shellstone", + "block.antarchy.shellstone_brick_wall": "Muro de ladrillos de Shellstone", + "block.antarchy.nyxite_stairs": "Escaleras de Nyxite", + "block.antarchy.nyxite_slab": "Losa de Nyxite", + "block.antarchy.nyxite_wall": "Muro de Nyxite", + "block.antarchy.polished_nyxite_stairs": "Escaleras de Nyxite pulido", + "block.antarchy.polished_nyxite_slab": "Losa de Nyxite pulido", + "block.antarchy.polished_nyxite_wall": "Muro de Nyxite pulido", + "block.antarchy.nyxite_brick_stairs": "Escaleras de ladrillos de Nyxite", + "block.antarchy.nyxite_brick_slab": "Losa de ladrillos de Nyxite", + "block.antarchy.nyxite_brick_wall": "Muro de ladrillos de Nyxite", + "block.antarchy.pale_nyxite": "Nyxite pálido", + "block.antarchy.nyxite_spike": "Púa de Nyxite", + "block.antarchy.potent_nyxite": "Nyxite potente", + "block.antarchy.triffid_goo_block": "Bloque de Triffid Baba", + "block.antarchy.elythia_portal": "Portal de Elythia", + "block.antarchy.cloud_block": "Bloque de Nube", + "block.antarchy.thoraxis_portal": "Portal de Thoraxis", + "block.antarchy.antimetal": "Antimetal", + "block.antarchy.polished_antimetal": "Antimetal pulido", + "block.antarchy.antimetal_scaffolding": "Andamio de Antimetal", + "block.antarchy.cornea_stalk": "Tallo de Cornea", + "block.antarchy.corn_crop": "Cultivo de Maíz", + "block.antarchy.dream_torch": "Antorcha de Sueño", + "block.antarchy.dream_wall_torch": "Antorcha de pared onírica", + "block.antarchy.dream_lantern": "Farol de Sueño", + "block.antarchy.dream_campfire": "Hoguera de Sueño", + "block.antarchy.dream_fire": "Fuego de Sueño", + "block.antarchy.dream_fire_ceiling": "Fuego de Sueño", + "block.antarchy.budding_blood_crystal": "Cristal de sangre brotante", + "block.antarchy.blood_crystal_block": "Bloque de Cristal de sangre", + "block.antarchy.small_blood_crystal_bud": "Brote de Cristal de sangre pequeño", + "block.antarchy.medium_blood_crystal_bud": "Brote de Cristal de sangre mediano", + "block.antarchy.large_blood_crystal_bud": "Brote de Cristal de sangre grande", + "block.antarchy.blood_crystal_cluster": "Cúmulo de Cristal de sangre", + "block.antarchy.dream_sand": "Arena de Sueño", + "block.antarchy.dream_sandstone": "Arenisca de sueño", + "block.antarchy.chiseled_dream_sandstone": "Arenisca onírica cincelada", + "block.antarchy.cut_dream_sandstone": "Arenisca onírica cortada", + "block.antarchy.smooth_dream_sandstone": "Arenisca onírica lisa", + "block.antarchy.dream_sandstone_stairs": "Escaleras de arenisca onírica", + "block.antarchy.dream_sandstone_slab": "Losa de arenisca onírica", + "block.antarchy.dream_sandstone_wall": "Muro de arenisca onírica", + "block.antarchy.smooth_dream_sandstone_stairs": "Escaleras de arenisca onírica lisa", + "block.antarchy.smooth_dream_sandstone_slab": "Losa de arenisca onírica lisa", + "block.antarchy.cut_dream_sandstone_slab": "Losa de arenisca onírica cortada", + "block.antarchy.bed_bug_egg": "Huevo de Chinche de cama", + "block.antarchy.wasp_nest": "Nido de Avispa", + "block.antarchy.red_ant_nest": "Nido de Hormiga roja", + "block.antarchy.brown_ant_nest": "Nido de Hormiga marrón", + "block.antarchy.rainbow_ant_nest": "Nido de Hormiga arcoíris", + "block.antarchy.uranium_ore": "Mena de Uranio", + "block.antarchy.deepslate_uranium_ore": "Mena de Uranio de pizarra profunda", + "block.antarchy.titanium_ore": "Mena de Titanio", + "block.antarchy.deepslate_titanium_ore": "Mena de Titanio de pizarra profunda", + "block.antarchy.uranium_block": "Bloque de Uranio", + "block.antarchy.titanium_block": "Bloque de Titanio", + "block.antarchy.raw_uranium_block": "Bloque de Uranio en bruto", + "block.antarchy.raw_titanium_block": "Bloque de Titanio en bruto", + "block.antarchy.cut_uranium": "Uranio cortado", + "block.antarchy.cut_titanium": "Titanio cortado", + "block.antarchy.cut_uranium_slab": "Losa de Uranio cortado", + "block.antarchy.cut_titanium_slab": "Losa de Titanio cortado", + "block.antarchy.cut_uranium_stairs": "Escaleras de Uranio cortado", + "block.antarchy.cut_titanium_stairs": "Escaleras de Titanio cortado", + "block.antarchy.chiseled_uranium": "Uranio cincelado", + "block.antarchy.chiseled_titanium": "Titanio cincelado", + "block.antarchy.uranium_bulb": "Bombilla de Uranio", + "block.antarchy.titanium_bulb": "Bombilla de Titanio", + "block.antarchy.uranium_door": "Puerta de Uranio", + "block.antarchy.titanium_door": "Puerta de Titanio", + "block.antarchy.uranium_trapdoor": "Trampilla de Uranio", + "block.antarchy.titanium_trapdoor": "Trampilla de Titanio", + "block.antarchy.uranium_bars": "Barrotes de Uranio", + "block.antarchy.titanium_bars": "Barrotes de Titanio", + "tooltip.antarchy.signal_saving_bulb": "Se enciende y se apaga. Su nivel de luz equivale a la intensidad de señal almacenada.", + "block.antarchy.bile": "Bilis", + "block.antarchy.ichor": "Icor", + "block.antarchy.antiwater": "Antiagua", + "block.antarchy.lumen": "Lumen", + "block.antarchy.lumen_froglight": "Ranaluz de Lumen", + "block.antarchy.roseate_froglight": "Luz de rana rosado", + "block.antarchy.star_coral": "Coral estrella", + "block.antarchy.star_coral_fan": "Abanico de coral estrella", + "block.antarchy.star_coral_block": "Bloque de coral estrella", + "block.antarchy.dead_star_coral": "Coral estrella muerto", + "block.antarchy.dead_star_coral_fan": "Abanico de coral estrella muerto", + "block.antarchy.dead_star_coral_block": "Bloque de coral estrella muerto", + "entity.antarchy.apple_cow": "Vaca manzana", + "entity.antarchy.golden_apple_cow": "Vaca de manzana dorada", + "entity.antarchy.enchanted_golden_apple_cow": "Vaca de manzana dorada encantada", + "entity.antarchy.easter_bunny": "Conejo de Pascua", + "entity.antarchy.glimmer": "Glimmer", + "entity.antarchy.ouranwood_deer": "Ciervo de Ouranwood", + "entity.antarchy.elka": "Elka", + "entity.antarchy.dorrie": "Dorrie", + "entity.antarchy.flying_squirrel": "Ardilla voladora", + "entity.antarchy.caterpillar": "Oruga", + "entity.antarchy.butterfly": "Mariposa", + "entity.antarchy.brutalfly": "Brutalfly", + "entity.antarchy.red_ant": "Hormiga roja", + "entity.antarchy.brown_ant": "Hormiga marrón", + "entity.antarchy.rainbow_ant": "Hormiga arcoíris", + "entity.antarchy.diamond_minecart": "La vagoneta de diamante", + "entity.antarchy.dr_trayaurus": "Dr. Trayaurus", + "entity.antarchy.cloud_shark": "Tiburón de nube", + "entity.antarchy.kraken": "El Kraken", + "entity.antarchy.missile_squid": "Calamar misil", + "entity.antarchy.octopus_bomb": "Bomba pulpo", + "entity.antarchy.nightmare": "Pesadilla", + "entity.antarchy.bed_bug": "Chinche de cama", + "entity.antarchy.wasp": "Avispa", + "entity.antarchy.bomber": "Bombardero", + "entity.antarchy.moleworm": "Moleworm", + "entity.antarchy.molevore": "Molevore", + "entity.antarchy.mantis": "Mantis", + "entity.antarchy.alpha_mantis": "Mantis alfa", + "entity.antarchy.triffid": "Triffid", + "entity.antarchy.toreterror": "Toreterror", + "entity.antarchy.water_bomb": "Bomba de agua", + "subtitles.antarchy.mantis_ambient": "Mantis hace clics", + "subtitles.antarchy.mantis_hurt": "Mantis chilla", + "subtitles.antarchy.mantis_attack": "Mantis chasquea", + "subtitles.antarchy.mantis_fly_loop": "Mantis aletea con un zumbido", + "item.antarchy.big_bertha": "Gran Bertha", + "item.antarchy.wasp_nest": "Nido de Avispa", + "item.antarchy.stink_bug": "Chinche apestosa", + "item.antarchy.wasp_spawn_egg": "Huevo generador de Avispa", + "item.antarchy.bomber_spawn_egg": "Huevo generador de Bombardero", + "item.antarchy.big_bertha_blade": "Hoja de Gran Bertha", + "item.antarchy.big_bertha_handle": "Mango de Gran Bertha", + "item.antarchy.big_bertha_hilt": "Empuñadura de Gran Bertha", + "item.antarchy.battle_axe": "Hacha de batalla", + "item.antarchy.attitude_adjuster": "Ajustador de actitud", + "tooltip.antarchy.attitude_adjuster.grounded": "Lanza hacia arriba a los objetivos en el suelo y estrella contra el suelo a los que están en el aire.", + "tooltip.antarchy.attitude_adjuster.slam": "Haz clic derecho en el aire para realizar un golpe contra el suelo.", + "item.antarchy.cloud_shark_fin": "Aleta de Tiburón de nube", + "item.antarchy.cloud_shark_fin_soup": "Sopa de Aleta de Tiburón de nube", + "tooltip.antarchy.cloud_shark_fin_soup": "Otorga Fuerza y Caída lenta.", + "tooltip.antarchy.critter_cage.empty": "Clic derecho para lanzar", + "tooltip.antarchy.critter_cage.contains": "Contiene: %s", + "tooltip.antarchy.critter_cage.release": "Clic derecho para liberar", + "tooltip.antarchy.critter_cage.place": "Mayús + clic derecho para colocar", + "item.antarchy.kraken_tooth": "Diente de Kraken", + "item.antarchy.kraken_tentacle": "Tentáculo del Kraken", + "item.antarchy.krakens_grasp": "Agarre del Kraken", + "entity.antarchy.tentacle": "Tentáculo", + "item.antarchy.basilisk_fang": "Colmillo de Basilisco", + "item.antarchy.basilisk_dagger": "Daga de Basilisco", + "item.antarchy.blood_crystal_block": "Bloque de Cristal de sangre", + "item.antarchy.small_blood_crystal_bud": "Brote de Cristal de sangre pequeño", + "item.antarchy.medium_blood_crystal_bud": "Brote de Cristal de sangre mediano", + "item.antarchy.large_blood_crystal_bud": "Brote de Cristal de sangre grande", + "item.antarchy.blood_crystal_cluster": "Cúmulo de Cristal de sangre", + "item.antarchy.dream_sand": "Arena de Sueño", + "item.antarchy.dream_sandstone": "Arenisca de sueño", + "item.antarchy.chiseled_dream_sandstone": "Arenisca onírica cincelada", + "item.antarchy.cut_dream_sandstone": "Arenisca onírica cortada", + "item.antarchy.smooth_dream_sandstone": "Arenisca onírica lisa", + "item.antarchy.dream_sandstone_stairs": "Escaleras de arenisca onírica", + "item.antarchy.dream_sandstone_slab": "Losa de arenisca onírica", + "item.antarchy.dream_sandstone_wall": "Muro de arenisca onírica", + "item.antarchy.smooth_dream_sandstone_stairs": "Escaleras de arenisca onírica lisa", + "item.antarchy.smooth_dream_sandstone_slab": "Losa de arenisca onírica lisa", + "item.antarchy.cut_dream_sandstone_slab": "Losa de arenisca onírica cortada", + "item.antarchy.dream_torch": "Antorcha de Sueño", + "item.antarchy.dream_lantern": "Farol de Sueño", + "item.antarchy.dream_campfire": "Hoguera de Sueño", + "item.antarchy.giant_lily_pad": "Nenúfar gigante", + "item.antarchy.seashell": "Concha marina", + "item.antarchy.nightmare_scale": "Escama de Pesadilla", + "item.antarchy.nightmare_helmet": "Casco de Pesadilla", + "item.antarchy.nightmare_chestplate": "Peto de Pesadilla", + "item.antarchy.nightmare_leggings": "Grebas de Pesadilla", + "item.antarchy.nightmare_boots": "Botas de Pesadilla", + "item.antarchy.nightmare_sword": "Espada de Pesadilla", + "tooltip.antarchy.nightmare_armor_double_damage": "%s%% de probabilidad de infligir el doble de daño", + "tooltip.antarchy.nightmare_armor_set_bonus": "Conjunto completo: inmunidad a Wither y Pavor", + "tooltip.antarchy.nightmare_sword": "Inflige más daño cuanto más baja sea tu salud.", + "tooltip.antarchy.nightmare_sword_damage": "Inflige %s de daño", + "tooltip.antarchy.primordial_helmet_water_breathing": "Otorga Respiración acuática al portador", + "tooltip.antarchy.primordial_armor_knockback_dealt": "Añade %s de empuje de ataque por pieza", + "tooltip.antarchy.primordial_armor_set_bonus": "Conjunto completo: los ataques ignoran la resistencia al empuje enemiga", + "attribute.antarchy.double_damage_chance": "Probabilidad de daño doble", + "attribute.antarchy.bloodglass_max_hearts": "Máximo de Corazones de Cristalsangre", + "item.antarchy.molevore_nose": "Nariz de Molevore", + "item.antarchy.moleworm": "Moleworm", + "item.antarchy.triffid_spawn_egg": "Huevo generador de Triffid", + "item.antarchy.infested_rooted_dirt": "Enraizada Tierra infestado", + "item.antarchy.infested_coarse_dirt": "Estéril Tierra infestado", + "item.antarchy.pale_nyxite": "Nyxite pálido", + "item.antarchy.polished_nyxite": "Nyxite pulido", + "item.antarchy.chiseled_nyxite": "Nyxite cincelado", + "item.antarchy.nyxite_bricks": "Ladrillos de Nyxite", + "item.antarchy.shellstone": "Shellstone", + "item.antarchy.polished_shellstone": "Shellstone pulido", + "item.antarchy.shellstone_bricks": "Ladrillos de Shellstone", + "item.antarchy.chiseled_shellstone": "Shellstone cincelado", + "item.antarchy.mossy_shellstone_bricks": "Ladrillos musgosos de Shellstone", + "item.antarchy.mossy_shellstone_brick_stairs": "Escaleras de ladrillos musgosos de Shellstone", + "item.antarchy.mossy_shellstone_brick_slab": "Losa de ladrillos musgosos de Shellstone", + "item.antarchy.mossy_shellstone_brick_wall": "Muro de ladrillos musgosos de Shellstone", + "item.antarchy.cracked_shellstone_bricks": "Ladrillos agrietados de Shellstone", + "item.antarchy.shellstone_stairs": "Escaleras de Shellstone", + "item.antarchy.shellstone_slab": "Losa de Shellstone", + "item.antarchy.shellstone_wall": "Muro de Shellstone", + "item.antarchy.polished_shellstone_stairs": "Escaleras de Shellstone pulido", + "item.antarchy.polished_shellstone_slab": "Losa de Shellstone pulido", + "item.antarchy.polished_shellstone_wall": "Muro de Shellstone pulido", + "item.antarchy.shellstone_brick_stairs": "Escaleras de ladrillos de Shellstone", + "item.antarchy.shellstone_brick_slab": "Losa de ladrillos de Shellstone", + "item.antarchy.shellstone_brick_wall": "Muro de ladrillos de Shellstone", + "item.antarchy.nyxite_stairs": "Escaleras de Nyxite", + "item.antarchy.nyxite_slab": "Losa de Nyxite", + "item.antarchy.nyxite_wall": "Muro de Nyxite", + "item.antarchy.polished_nyxite_stairs": "Escaleras de Nyxite pulido", + "item.antarchy.polished_nyxite_slab": "Losa de Nyxite pulido", + "item.antarchy.polished_nyxite_wall": "Muro de Nyxite pulido", + "item.antarchy.nyxite_brick_stairs": "Escaleras de ladrillos de Nyxite", + "item.antarchy.nyxite_brick_slab": "Losa de ladrillos de Nyxite", + "item.antarchy.nyxite_brick_wall": "Muro de ladrillos de Nyxite", + "item.antarchy.potent_nyxite": "Nyxite potente", + "item.antarchy.antimetal": "Antimetal", + "item.antarchy.polished_antimetal": "Antimetal pulido", + "item.antarchy.antimetal_scaffolding": "Andamio de Antimetal", + "item.antarchy.ouranwood_acorn": "Bellota de Ouranwood", + "item.antarchy.ouranwood_boat": "Barca de Ouranwood", + "item.antarchy.ouranwood_chest_boat": "Barca con cofre de Ouranwood", + "item.antarchy.raw_venison": "Venado crudo", + "item.antarchy.cooked_venison": "Venado cocinado", + "item.antarchy.peach_sapling": "Brote de Melocotón", + "item.antarchy.peach": "Melocotón", + "item.antarchy.peach_pie": "Pastel de Melocotón", + "item.antarchy.cornbread": "Pan de maíz", + "item.antarchy.popcorn": "Palomitas", + "item.antarchy.peach_sign": "Cartel de Melocotón", + "item.antarchy.peach_hanging_sign": "Cartel colgante de Melocotón", + "item.antarchy.peach_boat": "Barca de Melocotón", + "item.antarchy.peach_chest_boat": "Barca con cofre de Melocotón", + "item.antarchy.orange_milkweed": "Algodoncillo naranja", + "item.antarchy.pink_milkweed": "Algodoncillo rosa", + "item.antarchy.camellia": "Camelia", + "item.antarchy.spider_lily": "Lirio araña", + "item.antarchy.hushweed": "Hushweed", + "item.antarchy.umbral_moss_block": "Bloque de Musgo umbrío", + "item.antarchy.umbral_moss_carpet": "Alfombra de Musgo umbrío", + "item.antarchy.blush_moss_block": "Bloque de Musgo rubor", + "item.antarchy.blush_moss_carpet": "Alfombra de Musgo rubor", + "item.antarchy.mud_pie": "Pastel de barro", + "item.antarchy.duct_tape": "Cinta americana", + "item.antarchy.duct_tape.tooltip": "Colócala y haz clic derecho para reparar herramientas", + "item.antarchy.rainbow_sugar": "Azúcar arcoíris", + "item.antarchy.uranium_nugget": "Pepita de Uranio", + "item.antarchy.titanium_nugget": "Pepita de Titanio", + "item.antarchy.raw_uranium_scrap": "Fragmento de Uranio en bruto", + "item.antarchy.raw_titanium_scrap": "Fragmento de Titanio en bruto", + "item.antarchy.raw_uranium": "Uranio en bruto", + "item.antarchy.raw_titanium": "Titanio en bruto", + "item.antarchy.uranium_ingot": "Lingote de Uranio", + "item.antarchy.titanium_ingot": "Lingote de Titanio", + "item.antarchy.blood_crystal_shard": "Fragmento de Cristal de sangre", + "item.antarchy.blood_crystal_apple": "Manzana de cristal de sangre", + "item.antarchy.blood_crystal_katana": "Katana de Cristal de sangre", + "item.antarchy.blood_crystal_helmet": "Casco de Cristal de sangre", + "item.antarchy.blood_crystal_chestplate": "Peto de Cristal de sangre", + "item.antarchy.blood_crystal_leggings": "Grebas de Cristal de sangre", + "item.antarchy.blood_crystal_boots": "Botas de Cristal de sangre", + "item.antarchy.blood_crystal_armor.tooltip": "Otorga un Corazón de Cristalsangre que bloquea un golpe, se rompe y luego se recarga.", + "item.antarchy.blood_crystal_boots.tooltip2": "Anula el daño por caída al caer hacia arriba con la gravedad invertida.", + "item.antarchy.blood_crystal_apple.tooltip": "Otorga Guardia de Cristalsangre, que proporciona Corazones de Cristalsangre temporales que se recargan mientras dura el efecto.", + "tooltip.antarchy.blood_crystal_katana.launch": "Te impulsa hacia delante al golpear.", + "tooltip.antarchy.blood_crystal_katana.trail": "Deja un rastro carmesí tras de ti.", + "item.antarchy.mantis_claw": "Garra de Mantis", + "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", + "item.antarchy.king_scale": "Escama de Rey", + "item.antarchy.queen_scale": "Escama de Reina", + "item.antarchy.jumpy_bug_leg": "Pata de Bicho saltarín", + "item.antarchy.jumpy_boots": "Botas saltarinas", + "tooltip.antarchy.jumpy_boots": "Agáchate para cargar y luego salta para impulsarte hacia arriba.", + "item.antarchy.brutalfly_wing": "Ala de Brutalfly", + "item.antarchy.brutalfly_elytra": "Élitros de Brutalfly", + "tooltip.antarchy.brutalfly_elytra.flap": "Mientras vuelas, mantén %s para batir las alas", + "item.antarchy.cornea_ear": "Oreja de Cornea", + "item.antarchy.corn": "Maíz", + "item.antarchy.corn_seeds": "Semillas de Maíz", + "item.antarchy.raw_corndog": "Perrito de maíz crudo", + "item.antarchy.cooked_corndog": "Perrito de maíz cocinado", + "item.antarchy.high_fructose_corn_syrup": "Jarabe de maíz de alta fructosa", + "jei.antarchy.americanize": "Americanizar", + "item.antarchy.american_name": "%s americano", + "item.antarchy.root_beer": "Cerveza de raíz", + "item.antarchy.primordial_scute": "Escama de Primordial", + "item.antarchy.triffid_goo": "Triffid Baba", + "item.antarchy.triffid_goo_block": "Bloque de Triffid Baba", + "tooltip.antarchy.triffid_goo_block": "A gran velocidad rebotas hacia arriba; de lo contrario, te hundes.", + "item.antarchy.cloud_bucket": "Cubo de Nube", + "tooltip.antarchy.cloud_bucket.midair": "Se puede colocar en el aire", + "item.antarchy.lumen_bucket": "Cubo de Lumen", + "item.antarchy.scorpion_whip": "Látigo de Escorpión emperador", + "tooltip.antarchy.scorpion_whip.lash": "Azota a la presa desde lejos e incrusta una atadura venenosa.", + "tooltip.antarchy.scorpion_whip.reel": "Clic derecho para atraer a la presa atada.", + "tooltip.antarchy.scorpion_whip.snap": "Vuelve a hacer clic izquierdo sobre la presa atada para arrancar el aguijón.", + "item.antarchy.fallen_king_crown": "Corona del Rey Caído", + "tooltip.antarchy.fallen_king_crown.hero": "Otorga Héroe de la aldea al matar criaturas hostiles", + "item.antarchy.vortex_eye": "Ojo de Vórtice", + "item.antarchy.ultimate_helmet": "Casco definitivo", + "item.antarchy.ultimate_chestplate": "Peto definitivo", + "item.antarchy.ultimate_leggings": "Grebas definitivas", + "item.antarchy.ultimate_boots": "Botas definitivas", + "item.antarchy.ultimate_sword": "Espada definitiva", + "item.antarchy.ultimate_pickaxe": "Pico definitivo", + "item.antarchy.ultimate_axe": "Hacha definitiva", + "item.antarchy.ultimate_shovel": "Pala definitiva", + "item.antarchy.ultimate_hoe": "Azada definitiva", + "item.antarchy.ultimate_bow": "Arco definitivo", + "item.antarchy.ultimate_crossbow": "Ballesta definitiva", + "item.antarchy.ultimate_crossbow.capacity": "Carga hasta 16 flechas a la vez", + "item.antarchy.ultimate_crossbow.arrows_remaining": "%1$s %2$s cargadas", + "item.antarchy.ultimate_mace": "Maza definitiva", + "item.antarchy.moggles": "Moggles", + "itemGroup.antarchy.antarchy": "Antarchy", + "item.antarchy.bile_bucket": "Cubo de Bilis", + "item.antarchy.ichor_bucket": "Cubo de Icor", + "item.antarchy.antiwater_bucket": "Cubo de Antiagua", + "item.antarchy.reverie_bottle": "Botella de Reverie", + "item.antarchy.squidzooka": "Squidzooka", + "item.antarchy.rpo_launcher": "Lanzador P.P.C.", + "item.antarchy.shrink_ray": "Rayo reductor", + "item.antarchy.growth_ray": "Rayo de crecimiento", + "tooltip.antarchy.shrink_ray": "Encoge permanentemente a los objetivos. Mantén pulsado para cargar.", + "tooltip.antarchy.growth_ray": "Aumenta permanentemente a los objetivos. Mantén pulsado para cargar.", + "tooltip.antarchy.size_ray_milk_reset": "Beber leche restablece este efecto.", + "tooltip.antarchy.reverie_bottle.capture": "Haz clic derecho en una Reverie con una botella de cristal para guardarla.", + "tooltip.antarchy.reverie_bottle.release": "Clic derecho para liberar a la Reverie.", + "item.antarchy.gravity_gun": "Pistola gravitatoria", + "item.antarchy.miners_dream": "Sueño del minero", + "tooltip.antarchy.miners_dream.line1": "Clic derecho para excavar una cueva sinuosa.", + "tooltip.antarchy.miners_dream.line2": "Deja intactos los bloques valiosos.", + "message.antarchy.miners_dream_disabled": "El Sueño del minero está desactivado.", + "message.antarchy.miners_dream_busy": "Tu sueño anterior todavía se está desarrollando.", + "item.antarchy.diamond_minecart": "La vagoneta de diamante", + "item.antarchy.cogwheel_pet": "Mascota engranaje", + "item.antarchy.fire_dragon_pet": "Mascota de dragón de fuego", + "item.antarchy.ice_dragon_pet": "Mascota de dragón de hielo", + "item.antarchy.lightning_dragon_pet": "Mascota de dragón del rayo", + "item.antarchy.gorgon_pet": "Mascota de Gorgon", + "item.antarchy.apple_cow_spawn_egg": "Huevo generador de Vaca manzana", + "item.antarchy.red_ant_spawn_egg": "Huevo generador de Hormiga roja", + "item.antarchy.brown_ant_spawn_egg": "Huevo generador de Hormiga marrón", + "item.antarchy.rainbow_ant_spawn_egg": "Huevo generador de Hormiga arcoíris", + "item.antarchy.golden_apple_cow_spawn_egg": "Huevo generador de Vaca manzana dorado", + "item.antarchy.enchanted_golden_apple_cow_spawn_egg": "Huevo generador de Vaca manzana dorado encantado", + "item.antarchy.dr_trayaurus_spawn_egg": "Huevo generador de Dr. Trayaurus", + "item.antarchy.easter_bunny_spawn_egg": "Huevo generador de Conejo de Pascua", + "item.antarchy.glimmer_spawn_egg": "Huevo generador de Glimmer", + "item.antarchy.ouranwood_deer_spawn_egg": "Huevo generador de Ciervo de Ouranwood", + "item.antarchy.spirit_apple": "Manzana espiritual", + "item.antarchy.elka_spawn_egg": "Huevo generador de Elka", + "item.antarchy.glimmer_bottle": "Botella de Glimmer", + "item.antarchy.glimmer_bottle.contains": "Contiene: %s", + "glimmer_variant.antarchy.apple_cow": "Vaca manzana", + "glimmer_variant.antarchy.ouranwood_deer": "Ciervo de Ouranwood", + "glimmer_variant.antarchy.frog": "Rana", + "glimmer_variant.antarchy.ant": "Hormiga", + "glimmer_variant.antarchy.elka": "Elka", + "entity.antarchy.glimmer.set_sit": "Glimmer se ha sentado.", + "entity.antarchy.glimmer.set_follow": "Glimmer ahora te seguirá.", + "entity.antarchy.glimmer.set_wander": "Glimmer ahora deambulará.", + "entity.antarchy.glimmer.ability.ant": "¡Tu hormiga te envalentona contra %s!", + "entity.antarchy.glimmer.ability.apple_cow": "¡Tu vaca manzana muge y te nutre!", + "entity.antarchy.glimmer.ability.elka": "¡Tu Elka grita y hace añicos la guardia!", + "entity.antarchy.glimmer.ability.deer": "¡Tu ciervo de Ouranwood atraviesa al enemigo con una embestida!", + "entity.antarchy.glimmer.ability.frog": "¡Tu rana devoró a %s!", + "item.antarchy.glimmer_bottle.passive.apple_cow": "Pasiva: el hambre disminuye un 25% más despacio", + "item.antarchy.glimmer_bottle.ability.apple_cow": "Habilidad: muge para otorgar una ráfaga de Saturación y Regeneración cuando tienes poca comida", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "Pasiva: Velocidad I", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "Habilidad: atraviesa a las criaturas hostiles al correr hacia ellas y las manda volando", + "item.antarchy.glimmer_bottle.passive.frog": "Pasiva: Salto mejorado I", + "item.antarchy.glimmer_bottle.ability.frog": "Habilidad: devora una criatura hostil cercana y se vuelve más grande y fuerte durante un tiempo", + "item.antarchy.glimmer_bottle.passive.ant": "Pasiva: alcance de ataque ligeramente mayor", + "item.antarchy.glimmer_bottle.ability.ant": "Habilidad: golpear a un enemigo grande te otorga una ráfaga de Fuerza II", + "item.antarchy.glimmer_bottle.passive.elka": "Pasiva: Guardia de Cristalsangre II", + "item.antarchy.glimmer_bottle.ability.elka": "Habilidad: grita y estalla en una onda de choque cuando se rompe uno de tus corazones de guardia", + "advancements.antarchy.spirant_animal.title": "Animal hormigANTástico", + "advancements.antarchy.spirant_animal.description": "Domestica un Glimmer de hormiga.", + "advancements.antarchy.hoppy_together.title": "Saltando juntos", + "advancements.antarchy.hoppy_together.description": "Domestica un Glimmer de rana.", + "advancements.antarchy.deerly_beloved.title": "Ciervamente querido", + "advancements.antarchy.deerly_beloved.description": "Domestica un Glimmer de ciervo de Ouranwood.", + "advancements.antarchy.elkcellent_choice.title": "Elección alce-lente", + "advancements.antarchy.elkcellent_choice.description": "Domestica un Glimmer de Elka.", + "advancements.antarchy.apple_of_my_eye.title": "La niña de mis ojos", + "advancements.antarchy.apple_of_my_eye.description": "Domestica un Glimmer de vaca manzana.", + "item.antarchy.dorrie_spawn_egg": "Huevo generador de Dorrie", + "item.antarchy.flying_squirrel_spawn_egg": "Huevo generador de Ardilla voladora", + "item.antarchy.caterpillar_spawn_egg": "Huevo generador de Oruga", + "item.antarchy.butterfly_spawn_egg": "Huevo generador de Mariposa", + "item.antarchy.brutalfly_spawn_egg": "Huevo generador de Brutalfly", + "item.antarchy.cloud_shark_spawn_egg": "Huevo generador de Tiburón de nube", + "item.antarchy.kraken_spawn_egg": "Eh, no. No lo hagas.", + "item.antarchy.missile_squid_spawn_egg": "Huevo generador de Calamar misil", + "item.antarchy.octopus_bomb_spawn_egg": "Huevo generador de Bomba pulpo", + "item.antarchy.nightmare_spawn_egg": "Huevo generador de Pesadilla", + "item.antarchy.toreterror_spawn_egg": "Huevo generador de Toreterror", + "item.antarchy.water_cannon": "Cañón de agua", + "item.antarchy.primordial_helmet": "Casco primordial", + "item.antarchy.primordial_chestplate": "Peto primordial", + "item.antarchy.primordial_leggings": "Grebas primordiales", + "item.antarchy.primordial_boots": "Botas primordiales", + "item.antarchy.bed_bug_spawn_egg": "Huevo generador de Chinche de cama", + "item.antarchy.moleworm_spawn_egg": "Huevo generador de Moleworm", + "item.antarchy.molevore_spawn_egg": "Huevo generador de Molevore", + "item.antarchy.reverie_spawn_egg": "Huevo generador de Reverie", + "item.antarchy.mantis_spawn_egg": "Huevo generador de Mantis", + "item.antarchy.alpha_mantis_spawn_egg": "Huevo generador de Mantis alfa", + "biome.antarchy.moleworm_caves": "Cuevas de Moleworm", + "biome.antarchy.elythia_meadow": "Praderas elythianas", + "biome.antarchy.butterfly_fields": "Campos de mariposas", + "biome.antarchy.ouranwood_forest": "Ouranwood Bosque", + "biome.antarchy.glimmering_pools": "Pozas resplandecientes", + "biome.antarchy.peach_forest": "Bosque de melocotoneros", + "biome.antarchy.fungal_ouranwood_forest": "Ouranwood Bosque fúngico", + "biome.antarchy.glowcap_caves": "Cuevas sombrilluz", + "message.antarchy.brown_ant_activated": "La hormiga marrón está lista para abrir su destino.", + "message.antarchy.brown_ant_needs_reagent": "Esta hormiga marrón necesita un reactivo antes de poder abrir su destino.", + "message.antarchy.rainbow_ant_activated": "La hormiga arcoíris zumba con un nuevo destino de Infinity.", + "message.antarchy.rainbow_ant_activated_inherited": "La hormiga arcoíris zumba con un destino de Infinity heredado.", + "message.antarchy.rainbow_ant_activated_inherited_existing": "La hormiga arcoíris vuelve a conectarse a un destino de Infinity heredado.", + "message.antarchy.rainbow_ant_failed_dimension_create": "No se pudo crear la dimensión. Probablemente haya un problema en tu configuración de Infinity. Reinicia o vuelve a entrar e inténtalo de nuevo.", + "message.antarchy.rainbow_ant_infinity_missing": "Infinity debe estar instalado para que funcionen las dimensiones de hormiga arcoíris.", + "message.antarchy.rainbow_ant_needs_reagent": "Esta hormiga arcoíris necesita un reactivo antes de poder abrir una dimensión.", + "message.antarchy.red_ant_activated": "La hormiga roja está lista para abrir su destino.", + "message.antarchy.red_ant_needs_reagent": "Esta hormiga roja necesita un reactivo antes de poder abrir su destino.", + "message.antarchy.termite_activated": "La termita está lista para abrir su destino.", + "message.antarchy.termite_needs_reagent": "Esta termita necesita un reactivo antes de poder abrir su destino.", + "death.attack.spit_bug_disrespect": "El bicho escupidor le faltó al respeto a %1$s", + "death.attack.jumpy_bug_jump": "El bicho saltarín saltó sobre %1$s", + "death.attack.hercules_beetle_obliteration": "El escarabajo hércules aniquiló a %1$s", + "message.antarchy.big_bertha.mode": "Modo de Gran Bertha: %s", + "message.antarchy.big_bertha.mode.basilisk": "Basilisco", + "message.antarchy.big_bertha.mode.lucid": "Lucid", + "message.antarchy.big_bertha.mode.nightmare": "Pesadilla", + "message.antarchy.big_bertha.mode.kraken": "Kraken", + "message.antarchy.big_bertha.mode.molevore": "Molevore", + "message.antarchy.big_bertha.mode.toreterror": "Toreterror", + "message.antarchy.ultimate_tool.mode_3x3": "Cambiado a minería 3x3", + "message.antarchy.ultimate_tool.mode_default": "Cambiado a minería normal", + "advancements.antarchy.hey_listen.title": "¡Oye, escucha!", + "advancements.antarchy.hey_listen.description": "Una Reverie se ha unido a ti.", + "advancements.antarchy.very_hungry_caterpillar.title": "La oruga muy hambrienta", + "advancements.antarchy.very_hungry_caterpillar.description": "Ayuda a crecer a una oruga.", + "effect.antarchy.dread": "Pavor", + "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.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.", + "effect.antarchy.shrinking": "Reducción", + "effect.antarchy.growth": "Crecimiento", + "effect.antarchy.bloodglass_ward": "Guardia de Cristalsangre", + "effect.antarchy.bloodglass_ward.description": "Otorga corazones que se hacen añicos y absorben un golpe completo de daño. Se regeneran con el tiempo.", + "death.attack.triffid_mauling": "Una planta despedazó a %1$s", + "death.attack.triffid_mauling.player": "Una planta despedazó a %1$s", + "death.attack.triffid_swallow": "Un Triffid se tragó a %1$s", + "death.attack.triffid_swallow.player": "Un Triffid se tragó a %1$s", + "potion.antarchy.haste": "Poción de Prisa", + "potion.antarchy.strong_haste": "Poción de Prisa fuerte", + "tooltip.antarchy.big_bertha.mode": "Modo: %s", + "tooltip.antarchy.big_bertha.toggle_mode": "Mayús + clic derecho para cambiar de modo de jefe.", + "tooltip.antarchy.big_bertha.mode.basilisk": "El clic derecho paraliza a un objetivo. Los golpes infligen veneno y lentitud.", + "tooltip.antarchy.big_bertha.mode.lucid": "Los golpes invierten a los objetivos durante unos segundos. Infliges más daño mientras estás invertido.", + "tooltip.antarchy.big_bertha.mode.nightmare": "Los jugadores sufren Pavor; los golpes infligen Debilidad.", + "tooltip.antarchy.big_bertha.mode.kraken": "Los golpes lanzan a los objetivos hacia atrás e invocan rayos.", + "tooltip.antarchy.big_bertha.mode.molevore": "Clic derecho para girar hacia delante y perforar bloques de Molevore.", + "tooltip.antarchy.big_bertha.mode.toreterror": "Clic derecho para lanzarte al aire y caer con una onda de choque en área.", + "tooltip.antarchy.ultimate_tools_3x3": "Mayús + clic derecho para alternar la minería 3x3.", + "tooltip.antarchy.moggles.reveal": "Otorga Visión nocturna y señala cuevas cercanas.", + "tooltip.antarchy.moggles.underground": "Solo funciona cuando no tienes acceso al cielo.", + "tooltip.antarchy.cornea_ear.vision": "Otorga Visión nocturna durante %s segundos.", + "tooltip.antarchy.mob_coming_soon": "¡Criatura próximamente!", + "tooltip.antarchy.gravity_gun.primary": "Clic izquierdo: expulsa entidades cercanas o lanza al objetivo sostenido.", + "tooltip.antarchy.gravity_gun.secondary": "Clic derecho: atrae una entidad o un bloque válido.", + "tooltip.antarchy.gravity_gun.scroll": "Mantén Ctrl y desplaza la rueda para acercar o alejar el objetivo sostenido.", + "tooltip.antarchy.gravity_gun.blacklist": "No afecta a bloques ni entidades de la lista negra.", + "tooltip.antarchy.antimetal_inversion": "Invierte las entidades situadas directamente debajo", + "tooltip.antarchy.diamond_minecart.forward": "Se implementará más adelante.", + "tooltip.antarchy.diamond_minecart.rails": " ", + "tooltip.antarchy.rainbow_sugar": "Activa las dimensiones de hormiga arcoíris. Cómelo dentro de una para volver a casa.", + "advancements.antarchy.visit_elythia.title": "InterdimHORMIGAsional", + "advancements.antarchy.visit_elythia.description": "Usa una hormiga marrón para llegar a Elythia.", + "advancements.antarchy.visit_thoraxis.title": "Control de hormig-ira", + "advancements.antarchy.visit_thoraxis.description": "Usa una hormiga roja para llegar a Thoraxis.", + "advancements.antarchy.fallen_kingdom_castle.title": "Yo solía gobernar el mundo...", + "advancements.antarchy.fallen_kingdom_castle.description": "Descubre el Castillo del Reino Caído.", + "advancements.antarchy.fallen_king_crown.title": "Los chunks cargaban cuando yo lo ordenaba...", + "advancements.antarchy.fallen_king_crown.description": "Consigue la Corona del Rey Caído.", + "advancements.antarchy.the_lab.title": "¡Hola a todos, aquí Dan!", + "advancements.antarchy.the_lab.description": "Descubre el laboratorio del Dr. Trayaurus.", + "advancements.antarchy.sweater_dreams.title": "Sueños de suéter", + "advancements.antarchy.sweater_dreams.description": "Derrota a la Pesadilla.", + "advancements.antarchy.stone_cold.title": "Frío como la piedra", + "advancements.antarchy.stone_cold.description": "Derrota a un basilisco.", + "advancements.antarchy.moley_poley.title": "Topo bolo", + "advancements.antarchy.moley_poley.description": "Derrota a un Molevore.", + "advancements.antarchy.lucid_dreams.title": "Sueños lúcidos", + "advancements.antarchy.lucid_dreams.description": "Derrota a un Lucid.", + "advancements.antarchy.davy_jones_locker.title": "El cofre de Davy Jones", + "advancements.antarchy.davy_jones_locker.description": "Derrota al Kraken.", + "advancements.antarchy.shark_weak.title": "Cuando los tiburones vuelen", + "advancements.antarchy.shark_weak.description": "Derrota a un tiburón de nube.", + "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "Que no te piquen las chinches", + "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "Derrota a una chinche de cama.", + "advancements.antarchy.soups_up.title": "Sopa lista", + "advancements.antarchy.soups_up.description": "Come sopa de aleta de tiburón de nube.", + "advancements.antarchy.in_the_upside_down.title": "En el mundo del revés", + "advancements.antarchy.in_the_upside_down.description": "Queda invertido por primera vez.", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "Quien lo olió, lo soltó", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "Vuélvete apestoso por primera vez.", + "advancements.antarchy.ultimate_armor.title": "Protección definitiva", + "advancements.antarchy.ultimate_armor.description": "Reúne el conjunto completo de armadura definitiva.", + "advancements.antarchy.ultimate_bow.title": "Rapsodia de arcohemia", + "advancements.antarchy.ultimate_bow.description": "Consigue un arco definitivo.", + "advancements.antarchy.brutalfly.title": "Flota como una Brutalfly, pica como una abeja", + "advancements.antarchy.brutalfly.description": "Consigue unos élitros de Brutalfly.", + "advancements.antarchy.now_watch_me_whip.title": "Ahora mira cómo azoto", + "advancements.antarchy.now_watch_me_whip.description": "Ahora mira cómo hago el nae nae", + "advancements.antarchy.kill_molevore.title": "Topo bolo", + "advancements.antarchy.kill_molevore.description": "Mata a un Molevore.", + "advancements.antarchy.water_cannon_craft.title": "¡Más mojado es mejor!", + "advancements.antarchy.water_cannon_craft.description": "Consigue un cañón de agua.", + "advancements.antarchy.kill_toreterror.title": "¡Más bien Tore-puntería terrible!", + "advancements.antarchy.kill_toreterror.description": "Derrota al Toreterror.", + "advancements.antarchy.challenge_games.title": "¡Juegos de desafío!", + "advancements.antarchy.challenge_games.description": "Entra en la arena en ruinas.", + "advancements.antarchy.bugged_out.title": "Bicho fuera", + "advancements.antarchy.bugged_out.description": "Derrota a la mantis alfa.", + "death.attack.bed_bug_bite": "Las chinches de cama mordieron a %1$s", + "death.attack.bed_bug_bite.player": "Las chinches de cama mordieron a %1$s mientras luchaba contra %2$s", + "message.antarchy.dread_too_scared_to_sleep": "Tienes demasiado miedo para dormir.", + "death.attack.kraken_mauling": "El Kraken arrastró a %1$s a las profundidades", + "death.attack.kraken_mauling.player": "El Kraken arrastró a %1$s a las profundidades mientras luchaba contra %2$s", + "death.attack.kraken_lightning": "La tormenta del Kraken fulminó a %1$s", + "death.attack.kraken_lightning.player": "La tormenta del Kraken fulminó a %1$s mientras luchaba contra %2$s", + "death.attack.rpo_launcher_blast": "Un P.P.C. dejó K.O. a %1$s", + "death.attack.rpo_launcher_blast.player": "Un P.P.C. dejó K.O. a %1$s mientras luchaba contra %2$s", + "death.attack.nightmare_mauling": "La Pesadilla devoró a %1$s", + "death.attack.nightmare_mauling.player": "La Pesadilla devoró a %1$s mientras luchaba contra %2$s", + "death.attack.basilisk_bite": "Un basilisco se tragó a %1$s", + "death.attack.basilisk_bite.player": "Un basilisco se tragó a %1$s mientras luchaba contra %2$s", + "death.attack.emperor_scorpion_sting": "El escorpión emperador picó a %1$s", + "death.attack.emperor_scorpion_sting.player": "El escorpión emperador picó a %1$s mientras luchaba contra %2$s", + "death.attack.cornea_stalk_prick": "Un tallo de Cornea pinchó a %1$s hasta matarlo", + "death.attack.toreterror_spin": "Toreterror convirtió a %1$s en una peonza mortal", + "death.attack.toreterror_spin.player": "Toreterror convirtió a %1$s en una peonza mortal", + "death.attack.toreterror_jump": "Toreterror aplastó a %1$s", + "death.attack.toreterror_jump.player": "Toreterror aplastó a %1$s", + "death.attack.water_soaked": "%2$s empapó a %1$s hasta la muerte", + "death.attack.water_soaked.player": "%2$s empapó a %1$s hasta la muerte", + "entity.antarchy.lucid": "Lucid", + "item.antarchy.lucid_spawn_egg": "Huevo generador de Lucid", + "item.antarchy.lucid_eye": "Ojo de Lucid", + "entity.antarchy.scorpion": "Escorpión", + "item.antarchy.scorpion_spawn_egg": "Huevo generador de Escorpión", + "entity.antarchy.basilisk": "Basilisco", + "item.antarchy.basilisk_spawn_egg": "Huevo generador de Basilisco", + "entity.antarchy.emperor_scorpion": "Escorpión emperador", + "item.antarchy.emperor_scorpion_spawn_egg": "Huevo generador de Escorpión emperador", + "item.antarchy.emperor_scorpion_stinger": "Aguijón de escorpión emperador", + "item.antarchy.lucid_pearl": "Perla de Lucid", + "tooltip.antarchy.lucid_pearl": "Lanza un proyectil de gravedad invertida.", + "tooltip.antarchy.lucid_pearl.detail": "Te teletransporta al lugar donde aterriza y aplica Invertido.", + "subtitles.antarchy.squidzooka_fire": "Squidzooka dispara", + "subtitles.antarchy.shrink_ray": "Rayo reductor dispara", + "subtitles.antarchy.growth_ray": "Rayo de crecimiento dispara", + "subtitles.antarchy.size_ray_charge": "Rayo de tamaño se carga", + "subtitles.antarchy.ant_ambient": "Hormigas gorjean", + "subtitles.antarchy.ant_idle": "Hormigas hacen ruido", + "subtitles.antarchy.ant_hurt": "Hormigas reciben daño", + "subtitles.antarchy.ant_bite": "Hormigas muerden", + "subtitles.antarchy.ant_gather": "Hormigas recolectan", + "subtitles.antarchy.ant_nest": "Nido de hormigas cruje", + "subtitles.antarchy.cloud_shark_bite": "Tiburón de nube muerde", + "subtitles.antarchy.cloud_shark_idle": "Tiburón de nube hace ruido", + "subtitles.antarchy.cloud_shark_hurt": "Tiburón de nube recibe daño", + "subtitles.antarchy.cloud_shark_death": "Tiburón de nube muere", + "subtitles.antarchy.cloud_shark_fly": "Tiburón de nube vuela", + "subtitles.antarchy.caterpillar_idle": "Oruga hace ruido", + "subtitles.antarchy.caterpillar_hurt": "Oruga recibe daño", + "subtitles.antarchy.caterpillar_crawl": "Oruga se arrastra", + "subtitles.antarchy.butterfly_hurt": "Mariposa recibe daño", + "subtitles.antarchy.brutalfly_idle": "Brutalfly hace ruido", + "subtitles.antarchy.brutalfly_death": "Brutalfly muere", + "subtitles.antarchy.thoraxis_nightmare_wastes_ambient": "Yermos de pesadilla zumba", + "subtitles.antarchy.thoraxis_nightmare_wastes_additions": "Yermos de pesadilla se agita", + "subtitles.antarchy.thoraxis_nightmare_wastes_mood": "Yermos de pesadilla murmura", + "subtitles.antarchy.thoraxis_dream_dunes_ambient": "Dunas de ensueño susurran", + "subtitles.antarchy.thoraxis_dream_dunes_additions": "Dunas de ensueño crujen", + "subtitles.antarchy.thoraxis_dream_dunes_mood": "Dunas de ensueño suspiran", + "subtitles.antarchy.thoraxis_lucid_pools_ambient": "Pozas lúcidas zumban", + "subtitles.antarchy.thoraxis_lucid_pools_additions": "Pozas lúcidas maldicen", + "subtitles.antarchy.thoraxis_lucid_pools_mood": "Pozas lúcidas murmuran", + "subtitles.antarchy.lucid_ambient": "Lucid zumba", + "subtitles.antarchy.lucid_flying": "Lucid aletea", + "subtitles.antarchy.lucid_attack": "Lucid ataca", + "subtitles.antarchy.lucid_bolt": "Lucid dispara un proyectil", + "subtitles.antarchy.lucid_hurt": "Lucid recibe daño", + "subtitles.antarchy.lucid_death": "Lucid muere", + "subtitles.antarchy.reverie_idle": "Reverie flota", + "subtitles.antarchy.reverie_hurt": "Reverie recibe daño", + "subtitles.antarchy.reverie_worry": "Reverie se preocupa", + "subtitles.antarchy.reverie_save": "Reverie te salva", + "subtitles.antarchy.reverie_join_player": "Reverie se une a ti", + "subtitles.antarchy.reverie_alert": "Reverie te alerta", + "subtitles.antarchy.flying_squirrel_idle": "Ardilla voladora gorjea", + "subtitles.antarchy.flying_squirrel_beg": "Ardilla voladora pide comida", + "subtitles.antarchy.flying_squirrel_nut": "Ardilla voladora come", + "subtitles.antarchy.flying_squirrel_glide_loop": "Ardilla voladora planea", + "subtitles.antarchy.flying_squirrel_hurt": "Ardilla voladora recibe daño", + "subtitles.antarchy.flying_squirrel_death": "Ardilla voladora muere", + "subtitles.antarchy.nightmare_idle": "Pesadilla gruñe", + "subtitles.antarchy.nightmare_hurt": "Pesadilla recibe daño", + "subtitles.antarchy.nightmare_roar": "Pesadilla ruge", + "subtitles.antarchy.nightmare_death": "Pesadilla muere", + "subtitles.antarchy.nightmare_bite": "Pesadilla muerde", + "subtitles.antarchy.nightmare_flap": "Pesadilla aletea", + "subtitles.antarchy.triffid_attack": "Triffid ataca", + "subtitles.antarchy.triffid_grab": "Triffid agarra", + "subtitles.antarchy.triffid_hurt": "Triffid recibe daño", + "subtitles.antarchy.triffid_death": "Triffid muere", + "subtitles.antarchy.triffid_hiss": "Triffid sisea", + "subtitles.antarchy.triffid_growl": "Triffid gruñe", + "subtitles.antarchy.gravity_gun_pickup": "Pistola gravitatoria recoge", + "subtitles.antarchy.gravity_gun_drop": "Pistola gravitatoria suelta", + "subtitles.antarchy.gravity_gun_hold_loop": "Pistola gravitatoria zumba", + "subtitles.antarchy.gravity_gun_launch": "Pistola gravitatoria lanza", + "subtitles.antarchy.gravity_gun_dryfire": "Pistola gravitatoria dispara en seco", + "subtitles.antarchy.bed_bug_ambient": "Chinche de cama gorjea", + "subtitles.antarchy.bed_bug_hurt": "Chinche de cama recibe daño", + "subtitles.antarchy.bed_bug_attack": "Chinche de cama muerde", + "subtitles.antarchy.wasp_idle": "Avispa zumba", + "subtitles.antarchy.wasp_hurt": "Avispa recibe daño", + "subtitles.antarchy.wasp_attack": "Avispa pica", + "subtitles.antarchy.wasp_death": "Avispa muere", + "subtitles.antarchy.scorpion_ambient": "Escorpión traquetea", + "subtitles.antarchy.scorpion_hurt": "Escorpión recibe daño", + "subtitles.antarchy.scorpion_attack": "Escorpión ataca", + "subtitles.antarchy.emperor_scorpion_ambient": "Escorpión emperador traquetea", + "subtitles.antarchy.emperor_scorpion_hurt": "Escorpión emperador recibe daño", + "subtitles.antarchy.emperor_scorpion_attack": "Escorpión emperador ataca", + "subtitles.antarchy.emperor_scorpion_roar": "Escorpión emperador ruge", + "subtitles.antarchy.moleworm_ambient": "Moleworm cruje", + "subtitles.antarchy.moleworm_hurt": "Moleworm recibe daño", + "subtitles.antarchy.moleworm_attack": "Moleworm ataca", + "subtitles.antarchy.moleworm_dig": "Moleworm excava", + "subtitles.antarchy.molevore_ambient": "Molevore retumba", + "subtitles.antarchy.molevore_hurt": "Molevore recibe daño", + "subtitles.antarchy.molevore_attack": "Molevore ataca", + "subtitles.antarchy.molevore_dig": "Molevore excava", + "subtitles.antarchy.duct_tape_use": "Cinta americana se rasga", + "subtitles.antarchy.potent_nyxite_hypnotic_gas": "Nyxite potente sisea", + "subtitles.antarchy.potent_nyxite_geyser_eruption": "Nyxite potente entra en erupción", + "subtitles.antarchy.potent_nyxite_geyser_continuous": "Nyxite potente el géiser ruge", + "subtitles.antarchy.missile_squid_ambient": "Calamar misil zumba", + "subtitles.antarchy.missile_squid_hurt": "Calamar misil recibe daño", + "subtitles.antarchy.missile_squid_death": "Calamar misil muere", + "subtitles.antarchy.missile_squid_attack": "Calamar misil ataca", + "subtitles.antarchy.kraken_flying_loop": "Kraken planea", + "subtitles.antarchy.kraken_flying_sideways_loop": "Kraken da vueltas", + "subtitles.antarchy.kraken_attack": "Kraken golpea", + "subtitles.antarchy.kraken_spin": "Kraken gira", + "subtitles.antarchy.kraken_roar": "Kraken ruge", + "subtitles.antarchy.kraken_summon": "Kraken emerge", + "subtitles.antarchy.kraken_hurt": "Kraken recibe daño", + "subtitles.antarchy.kraken_death": "Kraken muere", + "subtitles.antarchy.basilisk_idle_loop": "Basilisco hace ruido", + "subtitles.antarchy.basilisk_slither_loop": "Basilisco se desliza", + "subtitles.antarchy.basilisk_bite": "Basilisco muerde", + "subtitles.antarchy.basilisk_hiss": "Basilisco sisea", + "subtitles.antarchy.basilisk_hurt": "Basilisco recibe daño", + "subtitles.antarchy.basilisk_death": "Basilisco muere", + "subtitles.antarchy.bomber_walk": "Bombardero camina", + "subtitles.antarchy.bomber_knock": "Bombardero recibe un golpe", + "subtitles.antarchy.bomber_explode": "Bombardero la mecha sisea", + "subtitles.antarchy.toreterror_idle": "Toreterror hace ruido", + "subtitles.antarchy.toreterror_hurt": "Toreterror recibe daño", + "subtitles.antarchy.toreterror_death": "Toreterror muere", + "subtitles.antarchy.toreterror_bomber_fire": "Toreterror lanza bombarderos", + "subtitles.antarchy.toreterror_spin": "Toreterror gira", + "subtitles.antarchy.toreterror_ricochet": "Toreterror rebota", + "subtitles.antarchy.water_cannon_fire": "Cañón de agua dispara", + "subtitles.antarchy.toreterror_jump_up": "Toreterror salta", + "subtitles.antarchy.toreterror_jump_land": "Toreterror aterriza", + "subtitles.antarchy.stinky_fly": "Moscas apestosas zumban", + "item.minecraft.potion.effect.inversion": "Poción de Inversión", + "item.minecraft.potion.effect.long_inversion": "Poción de Inversión", + "item.minecraft.splash_potion.effect.inversion": "Poción arrojadiza de Inversión", + "item.minecraft.splash_potion.effect.long_inversion": "Poción arrojadiza de Inversión", + "item.minecraft.lingering_potion.effect.inversion": "Poción persistente de Inversión", + "item.minecraft.lingering_potion.effect.long_inversion": "Poción persistente de Inversión", + "item.minecraft.tipped_arrow.effect.inversion": "Flecha de Inversión", + "item.minecraft.tipped_arrow.effect.long_inversion": "Flecha de Inversión", + "item.minecraft.potion.effect.paralysis": "Poción de Parálisis", + "item.minecraft.potion.effect.long_paralysis": "Poción de Parálisis", + "item.minecraft.splash_potion.effect.paralysis": "Poción arrojadiza de Parálisis", + "item.minecraft.splash_potion.effect.long_paralysis": "Poción arrojadiza de Parálisis", + "item.minecraft.lingering_potion.effect.paralysis": "Poción persistente de Parálisis", + "item.minecraft.lingering_potion.effect.long_paralysis": "Poción persistente de Parálisis", + "item.minecraft.tipped_arrow.effect.paralysis": "Flecha de Parálisis", + "item.minecraft.tipped_arrow.effect.long_paralysis": "Flecha de Parálisis", + "item.minecraft.potion.effect.shrinking": "Poción de Reducción", + "item.minecraft.potion.effect.strong_shrinking": "Poción de Reducción II", + "item.minecraft.potion.effect.extreme_shrinking": "Poción de Reducción III", + "item.minecraft.splash_potion.effect.shrinking": "Poción arrojadiza de Reducción", + "item.minecraft.splash_potion.effect.strong_shrinking": "Poción arrojadiza de Reducción II", + "item.minecraft.splash_potion.effect.extreme_shrinking": "Poción arrojadiza de Reducción III", + "item.minecraft.lingering_potion.effect.shrinking": "Poción persistente de Reducción", + "item.minecraft.lingering_potion.effect.strong_shrinking": "Poción persistente de Reducción II", + "item.minecraft.lingering_potion.effect.extreme_shrinking": "Poción persistente de Reducción III", + "item.minecraft.tipped_arrow.effect.shrinking": "Flecha de Reducción", + "item.minecraft.tipped_arrow.effect.strong_shrinking": "Flecha de Reducción II", + "item.minecraft.tipped_arrow.effect.extreme_shrinking": "Flecha de Reducción III", + "item.minecraft.potion.effect.growing": "Poción de Crecimiento", + "item.minecraft.potion.effect.strong_growing": "Poción de Crecimiento II", + "item.minecraft.potion.effect.extreme_growing": "Poción de Crecimiento III", + "item.minecraft.splash_potion.effect.growing": "Poción arrojadiza de Crecimiento", + "item.minecraft.splash_potion.effect.strong_growing": "Poción arrojadiza de Crecimiento II", + "item.minecraft.splash_potion.effect.extreme_growing": "Poción arrojadiza de Crecimiento III", + "item.minecraft.lingering_potion.effect.growing": "Poción persistente de Crecimiento", + "item.minecraft.lingering_potion.effect.strong_growing": "Poción persistente de Crecimiento II", + "item.minecraft.lingering_potion.effect.extreme_growing": "Poción persistente de Crecimiento III", + "item.minecraft.tipped_arrow.effect.growing": "Flecha de Crecimiento", + "item.minecraft.tipped_arrow.effect.strong_growing": "Flecha de Crecimiento II", + "item.minecraft.tipped_arrow.effect.extreme_growing": "Flecha de Crecimiento III", + "item.minecraft.potion.effect.dread": "Poción de Pavor", + "item.minecraft.potion.effect.long_dread": "Poción de Pavor", + "item.minecraft.splash_potion.effect.dread": "Poción arrojadiza de Pavor", + "item.minecraft.splash_potion.effect.long_dread": "Poción arrojadiza de Pavor", + "item.minecraft.lingering_potion.effect.dread": "Poción persistente de Pavor", + "item.minecraft.lingering_potion.effect.long_dread": "Poción persistente de Pavor", + "item.minecraft.tipped_arrow.effect.dread": "Flecha de Pavor", + "item.minecraft.tipped_arrow.effect.long_dread": "Flecha de Pavor", + "item.minecraft.potion.effect.stinky": "Poción de Hedor", + "item.minecraft.potion.effect.long_stinky": "Poción de Hedor", + "item.minecraft.splash_potion.effect.stinky": "Poción arrojadiza de Hedor", + "item.minecraft.splash_potion.effect.long_stinky": "Poción arrojadiza de Hedor", + "item.minecraft.lingering_potion.effect.stinky": "Poción persistente de Hedor", + "item.minecraft.lingering_potion.effect.long_stinky": "Poción persistente de Hedor", + "item.minecraft.tipped_arrow.effect.stinky": "Flecha de Hedor", + "item.minecraft.tipped_arrow.effect.long_stinky": "Flecha de Hedor", + "item.minecraft.potion.effect.haste": "Poción de Prisa", + "item.minecraft.potion.effect.strong_haste": "Poción de Prisa II", + "item.minecraft.splash_potion.effect.haste": "Poción arrojadiza de Prisa", + "item.minecraft.splash_potion.effect.strong_haste": "Poción arrojadiza de Prisa II", + "item.minecraft.lingering_potion.effect.haste": "Poción persistente de Prisa", + "item.minecraft.lingering_potion.effect.strong_haste": "Poción persistente de Prisa II", + "item.minecraft.tipped_arrow.effect.haste": "Flecha de Prisa", + "item.minecraft.tipped_arrow.effect.strong_haste": "Flecha de Prisa II", + "advancements.antarchy.cancel_out.title": "1 - 1 = ?", + "advancements.antarchy.cancel_out.description": "Ten Crecimiento y Reducción activos al mismo tiempo.", + "entity.antarchy.cheep": "Cheep", + "item.antarchy.cheep": "Cheep", + "item.antarchy.cheep_spawn_egg": "Huevo generador de Cheep", + "entity.antarchy.reverie": "Reverie", + "biome.antarchy.thoraxis": "Thoraxis", + "biome.antarchy.nightmare_wastes": "Yermos de pesadilla", + "biome.antarchy.umbral_hills": "Colinas umbrías", + "biome.antarchy.lucid_pools": "Pozas lúcidas", + "biome.antarchy.dream_dunes": "Dunas de ensueño", + "block.antarchy.wild_corn": "Maíz silvestre", + "trim_material.antarchy.blood_crystal": "Cristal de sangre", + "trim_material.antarchy.nightmare_scale": "Escama de Pesadilla", + "trim_material.antarchy.uranium": "Uranio", + "trim_material.antarchy.titanium": "Titanio", + "advancements.antarchy.duct_tape.title": "¡He serrado este barco por la mitad!", + "advancements.antarchy.duct_tape.description": "¡y lo arreglé con el poder de la cinta americana!", + "key.categories.antarchy": "Antarchy", + "key.antarchy.brutalfly_flap": "Élitros de Brutalfly: Aletear", + "advancements.antarchy.shrink_ray_craft.title": "Cariño, he encogido a las criaturas", + "advancements.antarchy.shrink_ray_craft.description": "Fabrica un rayo reductor.", + "advancements.antarchy.growth_ray_craft.title": "A lo grande o a casa", + "advancements.antarchy.growth_ray_craft.description": "Fabrica un rayo de crecimiento.", + "advancements.antarchy.squidzooka_craft.title": "Tinta y destrucción", + "advancements.antarchy.squidzooka_craft.description": "Fabrica una Squidzooka.", + "advancements.antarchy.rocket_powered_octopus.title": "Pulpo propulsado por cohete", + "advancements.antarchy.rocket_powered_octopus.description": "Fabrica un lanzador P.P.C.", + "advancements.antarchy.gravity_gun_craft.title": "Artista del ligue", + "advancements.antarchy.gravity_gun_craft.description": "Fabrica una pistola gravitatoria.", + "block.antarchy.cavaryn_portal": "Portal de Cavaryn", + "block.antarchy.termite_nest": "Nido de Termita", + "block.antarchy.chitin_spike": "Púa de Quitina", + "block.antarchy.chitin_block": "Bloque de Quitina", + "block.antarchy.myrmite": "Myrmite", + "block.antarchy.broodstone": "Broodstone", + "block.antarchy.amber_moss_block": "Bloque de musgo ámbar", + "block.antarchy.amber_moss_carpet": "Alfombra de musgo ámbar", + "block.antarchy.amber_lichen": "Liquen ámbar", + "block.antarchy.bile_vein": "Veta de bilis", + "block.antarchy.creepvine": "Enredadera rastrera", + "block.antarchy.creeping_horror_egg": "Huevo de Horror rastrero", + "block.antarchy.lurking_terror_egg": "Huevo de Terror acechante", + "entity.antarchy.termite": "Termita", + "entity.antarchy.jumpy_bug": "Bicho saltarín", + "entity.antarchy.spit_bug": "Bicho escupidor", + "entity.antarchy.stink_bug": "Chinche apestosa", + "entity.antarchy.rolly_polly": "Cochinilla", + "entity.antarchy.creeping_horror": "Horror rastrero", + "entity.antarchy.lurking_terror": "Terror acechante", + "entity.antarchy.hercules_beetle": "Escarabajo hércules", + "item.antarchy.jumpy_bug_spawn_egg": "Huevo generador de Bicho saltarín", + "item.antarchy.spit_bug_spawn_egg": "Huevo generador de Bicho escupidor", + "item.antarchy.stink_bug_spawn_egg": "Huevo generador de Chinche apestosa", + "item.antarchy.termite_spawn_egg": "Huevo generador de Termita", + "item.antarchy.rolly_polly_spawn_egg": "Huevo generador de Cochinilla", + "item.antarchy.creeping_horror_spawn_egg": "Huevo generador de Horror rastrero", + "item.antarchy.lurking_terror_spawn_egg": "Huevo generador de Terror acechante", + "item.antarchy.hercules_beetle_spawn_egg": "Huevo generador de Escarabajo hércules", + "item.antarchy.chitin": "Quitina", + "block.antarchy.polished_broodstone": "Broodstone pulido", + "block.antarchy.chiseled_broodstone": "Broodstone cincelado", + "block.antarchy.broodstone_bricks": "Ladrillos de Broodstone", + "block.antarchy.broodstone_stairs": "Escaleras de Broodstone", + "block.antarchy.broodstone_slab": "Losa de Broodstone", + "block.antarchy.broodstone_wall": "Muro de Broodstone", + "block.antarchy.polished_broodstone_stairs": "Escaleras de Broodstone pulido", + "block.antarchy.polished_broodstone_slab": "Losa de Broodstone pulido", + "block.antarchy.polished_broodstone_wall": "Muro de Broodstone pulido", + "block.antarchy.broodstone_brick_stairs": "Escaleras de ladrillos de Broodstone", + "block.antarchy.broodstone_brick_slab": "Losa de ladrillos de Broodstone", + "block.antarchy.broodstone_brick_wall": "Muro de ladrillos de Broodstone", + "block.antarchy.myrmite_coal_ore": "Mena de carbón de Myrmite", + "block.antarchy.broodstone_uranium_ore": "Mena de Broodstone Uranio", + "block.antarchy.broodstone_titanium_ore": "Mena de Broodstone Titanio", + "item.antarchy.raw_bug_meat": "Carne de insecto cruda", + "item.antarchy.cooked_bug_meat": "Carne de insecto cocinada", + "item.antarchy.hercules_horn": "Cuerno de Hércules", + "block.antarchy.hanging_creeproots": "Raíces rastreras colgantes", + "block.antarchy.glowcap_mushroom": "Hongo sombrilluz", + "block.antarchy.potted_glowcap_mushroom": "Hongo sombrilluz en maceta", + "block.antarchy.glowcap_mushroom_block": "Bloque de hongo sombrilluz", + "block.antarchy.molting_vines": "Enredaderas de muda", + "item.antarchy.broodfruit": "Fruto de cría", + "block.antarchy.jumpy_bug_egg": "Huevo de Bicho saltarín", + "subtitles.antarchy.creeping_horror_growl": "Horror rastrero gruñe", + "subtitles.antarchy.creeping_horror_hurt": "Horror rastrero recibe daño", + "subtitles.antarchy.creeping_horror_bite": "Horror rastrero muerde", + "subtitles.antarchy.lurking_terror_snarl": "Terror acechante gruñe", + "subtitles.antarchy.lurking_terror_hurt": "Terror acechante recibe daño", + "subtitles.antarchy.lurking_terror_bite": "Terror acechante muerde", + "subtitles.antarchy.lurking_terror_fly_loop": "Terror acechante vuela", + "subtitles.antarchy.stink_bug_fart": "Chinche apestosa se tira un pedo", + "subtitles.antarchy.stink_bug_idle": "Chinche apestosa hace ruido", + "subtitles.antarchy.rolly_polly_idle": "Cochinilla hace ruido", + "subtitles.antarchy.rolly_polly_wheel_mode": "La cochinilla se enrolla", + "subtitles.antarchy.rolly_polly_normal_mode": "La cochinilla se desenrolla", + "subtitles.antarchy.rolly_polly_roll": "La cochinilla rueda", + "subtitles.antarchy.hercules_beetle_idle": "Escarabajo hércules hace ruido", + "subtitles.antarchy.hercules_beetle_hurt": "Escarabajo hércules recibe daño", + "subtitles.antarchy.hercules_beetle_attack": "Escarabajo hércules ataca", + "subtitles.antarchy.hercules_beetle_cry": "Escarabajo hércules ruge", + "subtitles.antarchy.hercules_beetle_charge_start": "Escarabajo hércules carga un ataque", + "subtitles.antarchy.hercules_beetle_knocked_down": "Escarabajo hércules cae derribado", + "subtitles.antarchy.jerry_idle": "Jerry parlotea", + "subtitles.antarchy.jerry_hurt": "Jerry sufre daño", + "subtitles.antarchy.jerry_death": "Jerry muere", + "subtitles.antarchy.jerry_attack": "Jerry ataca", + "subtitles.antarchy.jumpy_bug_idle": "Bicho saltarín hace ruido", + "subtitles.antarchy.spit_bug_idle": "Bicho escupidor hace ruido", + "subtitles.antarchy.jumpy_bug_hurt": "Bicho saltarín recibe daño", + "subtitles.antarchy.jumpy_bug_jump": "Bicho saltarín salta", + "subtitles.antarchy.spit_bug_hurt": "Bicho escupidor recibe daño", + "subtitles.antarchy.spit_bug_spit": "Bicho escupidor escupe", + "subtitles.antarchy.brutalfly_spit": "Brutalfly escupe", + "advancements.antarchy.bug_apetit.title": "Bicho provecho", + "advancements.antarchy.bug_apetit.description": "Come carne de insecto cocinada.", + "advancements.antarchy.behavioral_correction.title": "Corrección de conducta", + "advancements.antarchy.behavioral_correction.description": "Consigue un Ajustador de actitud.", + "advancements.antarchy.beetle_buddies.title": "Amigos escarabajos", + "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." +} 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 new file mode 100644 index 00000000..2ce45048 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/fr_fr.json @@ -0,0 +1,962 @@ +{ + "block.antarchy.duplicator_log": "Bûche duplicatrice", + "block.antarchy.ouranwood_log": "Bûche d’Ouranwood", + "block.antarchy.ouranwood_wood": "Bois d’Ouranwood", + "block.antarchy.mossy_ouranwood_log": "Bûche d’Ouranwood moussu", + "block.antarchy.mossy_ouranwood_wood": "Bois d’Ouranwood moussu", + "block.antarchy.stripped_ouranwood_log": "Bûche d’Ouranwood écorcé", + "block.antarchy.stripped_ouranwood_wood": "Bois d’Ouranwood écorcé", + "block.antarchy.ouranwood_planks": "Planches de Ouranwood", + "block.antarchy.ouranwood_stairs": "Escaliers de Ouranwood", + "block.antarchy.ouranwood_slab": "Dalle de Ouranwood", + "block.antarchy.ouranwood_fence": "Barrière de Ouranwood", + "block.antarchy.ouranwood_fence_gate": "Portillon en Ouranwood", + "block.antarchy.ouranwood_door": "Porte de Ouranwood", + "block.antarchy.ouranwood_trapdoor": "Trappe de Ouranwood", + "block.antarchy.ouranwood_pressure_plate": "Plaque de pression en Ouranwood", + "block.antarchy.ouranwood_button": "Bouton de Ouranwood", + "block.antarchy.ouranwood_leaves": "Feuilles de Ouranwood", + "block.antarchy.ouranwood_acorn": "Gland de Ouranwood", + "block.antarchy.ouranwood_sign": "Panneau de Ouranwood", + "block.antarchy.ouranwood_hanging_sign": "Pancarte suspendue en Ouranwood", + "block.antarchy.peach_log": "Bûche de Pêche", + "block.antarchy.peach_wood": "Bois de Pêche", + "block.antarchy.stripped_peach_log": "Bûche de Pêche écorcé", + "block.antarchy.stripped_peach_wood": "Bois de Pêche écorcé", + "block.antarchy.peach_planks": "Planches de Pêche", + "block.antarchy.peach_stairs": "Escaliers de Pêche", + "block.antarchy.peach_slab": "Dalle de Pêche", + "block.antarchy.peach_fence": "Barrière de Pêche", + "block.antarchy.peach_fence_gate": "Portillon en Pêche", + "block.antarchy.peach_door": "Porte de Pêche", + "block.antarchy.peach_trapdoor": "Trappe de Pêche", + "block.antarchy.peach_pressure_plate": "Plaque de pression en Pêche", + "block.antarchy.peach_button": "Bouton de Pêche", + "block.antarchy.peach_leaves": "Feuilles de Pêche", + "block.antarchy.hanging_peach": "Pêche suspendu", + "block.antarchy.peach_sapling": "Pousse de Pêche", + "block.antarchy.peach_sign": "Panneau de Pêche", + "block.antarchy.peach_hanging_sign": "Pancarte suspendue en Pêche", + "block.antarchy.orange_milkweed": "Asclépiade orange", + "block.antarchy.pink_milkweed": "Asclépiade rose", + "block.antarchy.camellia": "Camélia", + "block.antarchy.spider_lily": "Lys araignée", + "block.antarchy.lotus": "Lotus", + "item.antarchy.lotus": "Lotus", + "item.antarchy.critter_cage": "Cage à bestioles", + "block.antarchy.giant_lily_pad": "Nénuphar géant", + "block.antarchy.seashell": "Coquillage", + "block.antarchy.critter_cage_block": "Cage à bestioles", + "block.antarchy.hushweed": "Hushweed", + "block.antarchy.umbral_moss_block": "Bloc de Mousse ombrale", + "block.antarchy.umbral_moss_carpet": "Tapis de Mousse ombrale", + "block.antarchy.blush_moss_block": "Bloc de Mousse rosée", + "block.antarchy.blush_moss_carpet": "Tapis de Mousse rosée", + "block.antarchy.duplicator_sapling": "Pousse duplicatrice", + "block.antarchy.duct_tape": "Ruban adhésif", + "block.antarchy.infested_rooted_dirt": "Racinée Terre infesté", + "block.antarchy.infested_coarse_dirt": "Stérile Terre infesté", + "block.antarchy.nyxite": "Nyxite", + "block.antarchy.polished_nyxite": "Nyxite poli", + "block.antarchy.chiseled_nyxite": "Nyxite ciselé", + "block.antarchy.nyxite_bricks": "Briques de Nyxite", + "block.antarchy.shellstone": "Shellstone", + "block.antarchy.polished_shellstone": "Shellstone poli", + "block.antarchy.shellstone_bricks": "Briques de Shellstone", + "block.antarchy.chiseled_shellstone": "Shellstone ciselé", + "block.antarchy.mossy_shellstone_bricks": "Briques moussues de Shellstone", + "block.antarchy.mossy_shellstone_brick_stairs": "Escalier en briques moussues de Shellstone", + "block.antarchy.mossy_shellstone_brick_slab": "Dalle en briques moussues de Shellstone", + "block.antarchy.mossy_shellstone_brick_wall": "Muret en briques moussues de Shellstone", + "block.antarchy.cracked_shellstone_bricks": "Briques fissurées de Shellstone", + "block.antarchy.shellstone_stairs": "Escaliers de Shellstone", + "block.antarchy.shellstone_slab": "Dalle de Shellstone", + "block.antarchy.shellstone_wall": "Muret de Shellstone", + "block.antarchy.polished_shellstone_stairs": "Escalier en Shellstone poli", + "block.antarchy.polished_shellstone_slab": "Dalle en Shellstone poli", + "block.antarchy.polished_shellstone_wall": "Muret en Shellstone poli", + "block.antarchy.shellstone_brick_stairs": "Escalier en briques de Shellstone", + "block.antarchy.shellstone_brick_slab": "Dalle en briques de Shellstone", + "block.antarchy.shellstone_brick_wall": "Muret en briques de Shellstone", + "block.antarchy.nyxite_stairs": "Escaliers de Nyxite", + "block.antarchy.nyxite_slab": "Dalle de Nyxite", + "block.antarchy.nyxite_wall": "Muret de Nyxite", + "block.antarchy.polished_nyxite_stairs": "Escaliers de Nyxite poli", + "block.antarchy.polished_nyxite_slab": "Dalle de Nyxite poli", + "block.antarchy.polished_nyxite_wall": "Muret de Nyxite poli", + "block.antarchy.nyxite_brick_stairs": "Escalier en briques de Nyxite", + "block.antarchy.nyxite_brick_slab": "Dalle en briques de Nyxite", + "block.antarchy.nyxite_brick_wall": "Muret en briques de Nyxite", + "block.antarchy.pale_nyxite": "Nyxite pâle", + "block.antarchy.nyxite_spike": "Pointe de Nyxite", + "block.antarchy.potent_nyxite": "Nyxite puissant", + "block.antarchy.triffid_goo_block": "Bloc de Triffid Glu", + "block.antarchy.elythia_portal": "Portail de Elythia", + "block.antarchy.cloud_block": "Bloc de Nuage", + "block.antarchy.thoraxis_portal": "Portail de Thoraxis", + "block.antarchy.antimetal": "Antimetal", + "block.antarchy.polished_antimetal": "Antimetal poli", + "block.antarchy.antimetal_scaffolding": "Échafaudage de Antimetal", + "block.antarchy.cornea_stalk": "Tige de Cornea", + "block.antarchy.corn_crop": "Culture de Maïs", + "block.antarchy.dream_torch": "Torche de Rêve", + "block.antarchy.dream_wall_torch": "Torche murale onirique", + "block.antarchy.dream_lantern": "Lanterne de Rêve", + "block.antarchy.dream_campfire": "Feu de camp de Rêve", + "block.antarchy.dream_fire": "Feu de Rêve", + "block.antarchy.dream_fire_ceiling": "Feu de Rêve", + "block.antarchy.budding_blood_crystal": "Cristal de sang bourgeonnant", + "block.antarchy.blood_crystal_block": "Bloc de Cristal de sang", + "block.antarchy.small_blood_crystal_bud": "Bourgeon de Cristal de sang petit", + "block.antarchy.medium_blood_crystal_bud": "Bourgeon de Cristal de sang moyen", + "block.antarchy.large_blood_crystal_bud": "Bourgeon de Cristal de sang grand", + "block.antarchy.blood_crystal_cluster": "Amas de Cristal de sang", + "block.antarchy.dream_sand": "Sable de Rêve", + "block.antarchy.dream_sandstone": "Grès onirique", + "block.antarchy.chiseled_dream_sandstone": "Grès onirique ciselé", + "block.antarchy.cut_dream_sandstone": "Grès onirique taillé", + "block.antarchy.smooth_dream_sandstone": "Grès onirique lisse", + "block.antarchy.dream_sandstone_stairs": "Escalier en grès onirique", + "block.antarchy.dream_sandstone_slab": "Dalle en grès onirique", + "block.antarchy.dream_sandstone_wall": "Muret en grès onirique", + "block.antarchy.smooth_dream_sandstone_stairs": "Escalier en grès onirique lisse", + "block.antarchy.smooth_dream_sandstone_slab": "Dalle en grès onirique lisse", + "block.antarchy.cut_dream_sandstone_slab": "Dalle en grès onirique taillé", + "block.antarchy.bed_bug_egg": "Œuf de Punaise de lit", + "block.antarchy.wasp_nest": "Nid de Guêpe", + "block.antarchy.red_ant_nest": "Nid de Fourmi rouge", + "block.antarchy.brown_ant_nest": "Nid de Fourmi brune", + "block.antarchy.rainbow_ant_nest": "Nid de Fourmi arc-en-ciel", + "block.antarchy.uranium_ore": "Minerai de Uranium", + "block.antarchy.deepslate_uranium_ore": "Minerai de Uranium d’ardoise des abîmes", + "block.antarchy.titanium_ore": "Minerai de Titane", + "block.antarchy.deepslate_titanium_ore": "Minerai de Titane d’ardoise des abîmes", + "block.antarchy.uranium_block": "Bloc de Uranium", + "block.antarchy.titanium_block": "Bloc de Titane", + "block.antarchy.raw_uranium_block": "Bloc de Uranium brut", + "block.antarchy.raw_titanium_block": "Bloc de Titane brut", + "block.antarchy.cut_uranium": "Uranium taillé", + "block.antarchy.cut_titanium": "Titane taillé", + "block.antarchy.cut_uranium_slab": "Dalle de Uranium taillé", + "block.antarchy.cut_titanium_slab": "Dalle de Titane taillé", + "block.antarchy.cut_uranium_stairs": "Escaliers de Uranium taillé", + "block.antarchy.cut_titanium_stairs": "Escaliers de Titane taillé", + "block.antarchy.chiseled_uranium": "Uranium ciselé", + "block.antarchy.chiseled_titanium": "Titane ciselé", + "block.antarchy.uranium_bulb": "Ampoule de Uranium", + "block.antarchy.titanium_bulb": "Ampoule de Titane", + "block.antarchy.uranium_door": "Porte de Uranium", + "block.antarchy.titanium_door": "Porte de Titane", + "block.antarchy.uranium_trapdoor": "Trappe de Uranium", + "block.antarchy.titanium_trapdoor": "Trappe de Titane", + "block.antarchy.uranium_bars": "Barreaux de Uranium", + "block.antarchy.titanium_bars": "Barreaux de Titane", + "tooltip.antarchy.signal_saving_bulb": "S’active et se désactive. Son niveau de lumière correspond à la puissance du signal mémorisé.", + "block.antarchy.bile": "Bile", + "block.antarchy.ichor": "Ichor", + "block.antarchy.antiwater": "Antieau", + "block.antarchy.lumen": "Lumen", + "block.antarchy.lumen_froglight": "Froglampe de Lumen", + "block.antarchy.roseate_froglight": "Froglampe rosé", + "block.antarchy.star_coral": "Corail étoilé", + "block.antarchy.star_coral_fan": "Gorgone de corail étoilé", + "block.antarchy.star_coral_block": "Bloc de corail étoilé", + "block.antarchy.dead_star_coral": "Corail étoilé mort", + "block.antarchy.dead_star_coral_fan": "Gorgone de corail étoilé morte", + "block.antarchy.dead_star_coral_block": "Bloc de corail étoilé mort", + "entity.antarchy.apple_cow": "Vache-pomme", + "entity.antarchy.golden_apple_cow": "Vache à pomme dorée", + "entity.antarchy.enchanted_golden_apple_cow": "Vache à pomme dorée enchantée", + "entity.antarchy.easter_bunny": "Lapin de Pâques", + "entity.antarchy.glimmer": "Glimmer", + "entity.antarchy.ouranwood_deer": "Cerf d’Ouranwood", + "entity.antarchy.elka": "Elka", + "entity.antarchy.dorrie": "Dorrie", + "entity.antarchy.flying_squirrel": "Écureuil volant", + "entity.antarchy.caterpillar": "Chenille", + "entity.antarchy.butterfly": "Papillon", + "entity.antarchy.brutalfly": "Brutalfly", + "entity.antarchy.red_ant": "Fourmi rouge", + "entity.antarchy.brown_ant": "Fourmi brune", + "entity.antarchy.rainbow_ant": "Fourmi arc-en-ciel", + "entity.antarchy.diamond_minecart": "Le wagonnet de diamant", + "entity.antarchy.dr_trayaurus": "Dr. Trayaurus", + "entity.antarchy.cloud_shark": "Requin des nuages", + "entity.antarchy.kraken": "Le Kraken", + "entity.antarchy.missile_squid": "Calmar-missile", + "entity.antarchy.octopus_bomb": "Bombe-pieuvre", + "entity.antarchy.nightmare": "Cauchemar", + "entity.antarchy.bed_bug": "Punaise de lit", + "entity.antarchy.wasp": "Guêpe", + "entity.antarchy.bomber": "Bombardier", + "entity.antarchy.moleworm": "Moleworm", + "entity.antarchy.molevore": "Molevore", + "entity.antarchy.mantis": "Mante religieuse", + "entity.antarchy.alpha_mantis": "Mante alpha", + "entity.antarchy.triffid": "Triffid", + "entity.antarchy.toreterror": "Toreterror", + "entity.antarchy.water_bomb": "Bombe à eau", + "subtitles.antarchy.mantis_ambient": "Mante religieuse cliquette", + "subtitles.antarchy.mantis_hurt": "Mante religieuse crisse", + "subtitles.antarchy.mantis_attack": "Mante religieuse claque", + "subtitles.antarchy.mantis_fly_loop": "Mante religieuse fait vrombir ses ailes", + "item.antarchy.big_bertha": "Grosse Bertha", + "item.antarchy.wasp_nest": "Nid de Guêpe", + "item.antarchy.stink_bug": "Punaise puante", + "item.antarchy.wasp_spawn_egg": "Œuf d’apparition de Guêpe", + "item.antarchy.bomber_spawn_egg": "Œuf d’apparition de Bombardier", + "item.antarchy.big_bertha_blade": "Lame de Grosse Bertha", + "item.antarchy.big_bertha_handle": "Manche de Grosse Bertha", + "item.antarchy.big_bertha_hilt": "Garde de Grosse Bertha", + "item.antarchy.battle_axe": "Hache de guerre", + "item.antarchy.attitude_adjuster": "Ajusteur d’attitude", + "tooltip.antarchy.attitude_adjuster.grounded": "Projette les cibles au sol vers le haut et écrase au sol celles qui sont dans les airs.", + "tooltip.antarchy.attitude_adjuster.slam": "Faites un clic droit dans les airs pour vous écraser au sol.", + "item.antarchy.cloud_shark_fin": "Aileron de Requin des nuages", + "item.antarchy.cloud_shark_fin_soup": "Soupe de Aileron de Requin des nuages", + "tooltip.antarchy.cloud_shark_fin_soup": "Accorde Force et Chute lente.", + "tooltip.antarchy.critter_cage.empty": "Clic droit pour lancer", + "tooltip.antarchy.critter_cage.contains": "Contient : %s", + "tooltip.antarchy.critter_cage.release": "Clic droit pour libérer", + "tooltip.antarchy.critter_cage.place": "Maj + clic droit pour placer", + "item.antarchy.kraken_tooth": "Dent de Kraken", + "item.antarchy.kraken_tentacle": "Tentacule du Kraken", + "item.antarchy.krakens_grasp": "Étreinte du Kraken", + "entity.antarchy.tentacle": "Tentacule", + "item.antarchy.basilisk_fang": "Croc de Basilic", + "item.antarchy.basilisk_dagger": "Dague de Basilic", + "item.antarchy.blood_crystal_block": "Bloc de Cristal de sang", + "item.antarchy.small_blood_crystal_bud": "Bourgeon de Cristal de sang petit", + "item.antarchy.medium_blood_crystal_bud": "Bourgeon de Cristal de sang moyen", + "item.antarchy.large_blood_crystal_bud": "Bourgeon de Cristal de sang grand", + "item.antarchy.blood_crystal_cluster": "Amas de Cristal de sang", + "item.antarchy.dream_sand": "Sable de Rêve", + "item.antarchy.dream_sandstone": "Grès onirique", + "item.antarchy.chiseled_dream_sandstone": "Grès onirique ciselé", + "item.antarchy.cut_dream_sandstone": "Grès onirique taillé", + "item.antarchy.smooth_dream_sandstone": "Grès onirique lisse", + "item.antarchy.dream_sandstone_stairs": "Escalier en grès onirique", + "item.antarchy.dream_sandstone_slab": "Dalle en grès onirique", + "item.antarchy.dream_sandstone_wall": "Muret en grès onirique", + "item.antarchy.smooth_dream_sandstone_stairs": "Escalier en grès onirique lisse", + "item.antarchy.smooth_dream_sandstone_slab": "Dalle en grès onirique lisse", + "item.antarchy.cut_dream_sandstone_slab": "Dalle en grès onirique taillé", + "item.antarchy.dream_torch": "Torche de Rêve", + "item.antarchy.dream_lantern": "Lanterne de Rêve", + "item.antarchy.dream_campfire": "Feu de camp de Rêve", + "item.antarchy.giant_lily_pad": "Nénuphar géant", + "item.antarchy.seashell": "Coquillage", + "item.antarchy.nightmare_scale": "Écaille de Cauchemar", + "item.antarchy.nightmare_helmet": "Casque de Cauchemar", + "item.antarchy.nightmare_chestplate": "Plastron de Cauchemar", + "item.antarchy.nightmare_leggings": "Jambières de Cauchemar", + "item.antarchy.nightmare_boots": "Bottes de Cauchemar", + "item.antarchy.nightmare_sword": "Épée de Cauchemar", + "tooltip.antarchy.nightmare_armor_double_damage": "%s%% de chances d’infliger le double de dégâts", + "tooltip.antarchy.nightmare_armor_set_bonus": "Ensemble complet : immunité au Wither et à l’Effroi", + "tooltip.antarchy.nightmare_sword": "Inflige davantage de dégâts à mesure que votre santé diminue.", + "tooltip.antarchy.nightmare_sword_damage": "Inflige %s points de dégâts", + "tooltip.antarchy.primordial_helmet_water_breathing": "Accorde Respiration aquatique au porteur", + "tooltip.antarchy.primordial_armor_knockback_dealt": "Ajoute %s de recul d’attaque par pièce", + "tooltip.antarchy.primordial_armor_set_bonus": "Ensemble complet : les attaques ignorent la résistance au recul des ennemis", + "attribute.antarchy.double_damage_chance": "Chance de dégâts doublés", + "attribute.antarchy.bloodglass_max_hearts": "Maximum de Cœurs de verre-sang", + "item.antarchy.molevore_nose": "Nez de Molevore", + "item.antarchy.moleworm": "Moleworm", + "item.antarchy.triffid_spawn_egg": "Œuf d’apparition de Triffid", + "item.antarchy.infested_rooted_dirt": "Racinée Terre infesté", + "item.antarchy.infested_coarse_dirt": "Stérile Terre infesté", + "item.antarchy.pale_nyxite": "Nyxite pâle", + "item.antarchy.polished_nyxite": "Nyxite poli", + "item.antarchy.chiseled_nyxite": "Nyxite ciselé", + "item.antarchy.nyxite_bricks": "Briques de Nyxite", + "item.antarchy.shellstone": "Shellstone", + "item.antarchy.polished_shellstone": "Shellstone poli", + "item.antarchy.shellstone_bricks": "Briques de Shellstone", + "item.antarchy.chiseled_shellstone": "Shellstone ciselé", + "item.antarchy.mossy_shellstone_bricks": "Briques moussues de Shellstone", + "item.antarchy.mossy_shellstone_brick_stairs": "Escalier en briques moussues de Shellstone", + "item.antarchy.mossy_shellstone_brick_slab": "Dalle en briques moussues de Shellstone", + "item.antarchy.mossy_shellstone_brick_wall": "Muret en briques moussues de Shellstone", + "item.antarchy.cracked_shellstone_bricks": "Briques fissurées de Shellstone", + "item.antarchy.shellstone_stairs": "Escaliers de Shellstone", + "item.antarchy.shellstone_slab": "Dalle de Shellstone", + "item.antarchy.shellstone_wall": "Muret de Shellstone", + "item.antarchy.polished_shellstone_stairs": "Escalier en Shellstone poli", + "item.antarchy.polished_shellstone_slab": "Dalle en Shellstone poli", + "item.antarchy.polished_shellstone_wall": "Muret en Shellstone poli", + "item.antarchy.shellstone_brick_stairs": "Escalier en briques de Shellstone", + "item.antarchy.shellstone_brick_slab": "Dalle en briques de Shellstone", + "item.antarchy.shellstone_brick_wall": "Muret en briques de Shellstone", + "item.antarchy.nyxite_stairs": "Escaliers de Nyxite", + "item.antarchy.nyxite_slab": "Dalle de Nyxite", + "item.antarchy.nyxite_wall": "Muret de Nyxite", + "item.antarchy.polished_nyxite_stairs": "Escaliers de Nyxite poli", + "item.antarchy.polished_nyxite_slab": "Dalle de Nyxite poli", + "item.antarchy.polished_nyxite_wall": "Muret de Nyxite poli", + "item.antarchy.nyxite_brick_stairs": "Escalier en briques de Nyxite", + "item.antarchy.nyxite_brick_slab": "Dalle en briques de Nyxite", + "item.antarchy.nyxite_brick_wall": "Muret en briques de Nyxite", + "item.antarchy.potent_nyxite": "Nyxite puissant", + "item.antarchy.antimetal": "Antimetal", + "item.antarchy.polished_antimetal": "Antimetal poli", + "item.antarchy.antimetal_scaffolding": "Échafaudage de Antimetal", + "item.antarchy.ouranwood_acorn": "Gland de Ouranwood", + "item.antarchy.ouranwood_boat": "Bateau de Ouranwood", + "item.antarchy.ouranwood_chest_boat": "Bateau de Ouranwood avec coffre", + "item.antarchy.raw_venison": "Venaison crue", + "item.antarchy.cooked_venison": "Venaison cuite", + "item.antarchy.peach_sapling": "Pousse de Pêche", + "item.antarchy.peach": "Pêche", + "item.antarchy.peach_pie": "Tarte de Pêche", + "item.antarchy.cornbread": "Pain de maïs", + "item.antarchy.popcorn": "Pop-corn", + "item.antarchy.peach_sign": "Panneau de Pêche", + "item.antarchy.peach_hanging_sign": "Pancarte suspendue en Pêche", + "item.antarchy.peach_boat": "Bateau de Pêche", + "item.antarchy.peach_chest_boat": "Bateau de Pêche avec coffre", + "item.antarchy.orange_milkweed": "Asclépiade orange", + "item.antarchy.pink_milkweed": "Asclépiade rose", + "item.antarchy.camellia": "Camélia", + "item.antarchy.spider_lily": "Lys araignée", + "item.antarchy.hushweed": "Hushweed", + "item.antarchy.umbral_moss_block": "Bloc de Mousse ombrale", + "item.antarchy.umbral_moss_carpet": "Tapis de Mousse ombrale", + "item.antarchy.blush_moss_block": "Bloc de Mousse rosée", + "item.antarchy.blush_moss_carpet": "Tapis de Mousse rosée", + "item.antarchy.mud_pie": "Tarte à la boue", + "item.antarchy.duct_tape": "Ruban adhésif", + "item.antarchy.duct_tape.tooltip": "Placez-le puis faites un clic droit pour réparer les outils", + "item.antarchy.rainbow_sugar": "Sucre arc-en-ciel", + "item.antarchy.uranium_nugget": "Pépite de Uranium", + "item.antarchy.titanium_nugget": "Pépite de Titane", + "item.antarchy.raw_uranium_scrap": "Débris de Uranium brut", + "item.antarchy.raw_titanium_scrap": "Débris de Titane brut", + "item.antarchy.raw_uranium": "Uranium brut", + "item.antarchy.raw_titanium": "Titane brut", + "item.antarchy.uranium_ingot": "Lingot de Uranium", + "item.antarchy.titanium_ingot": "Lingot de Titane", + "item.antarchy.blood_crystal_shard": "Éclat de Cristal de sang", + "item.antarchy.blood_crystal_apple": "Pomme de cristal de sang", + "item.antarchy.blood_crystal_katana": "Katana de Cristal de sang", + "item.antarchy.blood_crystal_helmet": "Casque de Cristal de sang", + "item.antarchy.blood_crystal_chestplate": "Plastron de Cristal de sang", + "item.antarchy.blood_crystal_leggings": "Jambières de Cristal de sang", + "item.antarchy.blood_crystal_boots": "Bottes de Cristal de sang", + "item.antarchy.blood_crystal_armor.tooltip": "Accorde un Cœur de verre-sang qui bloque un coup, se brise, puis se recharge.", + "item.antarchy.blood_crystal_boots.tooltip2": "Annule les dégâts de chute lorsque vous tombez vers le haut sous gravité inversée.", + "item.antarchy.blood_crystal_apple.tooltip": "Accorde Égide de verre-sang, fournissant des Cœurs de verre-sang temporaires qui se rechargent pendant la durée de l’effet.", + "tooltip.antarchy.blood_crystal_katana.launch": "Vous propulse vers l’avant lorsque vous touchez une cible.", + "tooltip.antarchy.blood_crystal_katana.trail": "Laisse une traînée cramoisie derrière vous.", + "item.antarchy.mantis_claw": "Griffe de Mante religieuse", + "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", + "item.antarchy.king_scale": "Écaille de Roi", + "item.antarchy.queen_scale": "Écaille de Reine", + "item.antarchy.jumpy_bug_leg": "Patte de Insecte sauteur", + "item.antarchy.jumpy_boots": "Bottes bondissantes", + "tooltip.antarchy.jumpy_boots": "Accroupissez-vous pour charger, puis sautez pour bondir vers le haut.", + "item.antarchy.brutalfly_wing": "Aile de Brutalfly", + "item.antarchy.brutalfly_elytra": "Élytres de Brutalfly", + "tooltip.antarchy.brutalfly_elytra.flap": "En vol, maintenez %s pour battre des ailes", + "item.antarchy.cornea_ear": "Oreille de Cornea", + "item.antarchy.corn": "Maïs", + "item.antarchy.corn_seeds": "Graines de Maïs", + "item.antarchy.raw_corndog": "Corn-dog cru", + "item.antarchy.cooked_corndog": "Corn-dog cuit", + "item.antarchy.high_fructose_corn_syrup": "Sirop de maïs à haute teneur en fructose", + "jei.antarchy.americanize": "Américaniser", + "item.antarchy.american_name": "%s américain", + "item.antarchy.root_beer": "Racinette", + "item.antarchy.primordial_scute": "Écaille de Primordial", + "item.antarchy.triffid_goo": "Triffid Glu", + "item.antarchy.triffid_goo_block": "Bloc de Triffid Glu", + "tooltip.antarchy.triffid_goo_block": "À grande vitesse, vous rebondissez vers le haut ; sinon, vous vous enfoncez dedans.", + "item.antarchy.cloud_bucket": "Seau de Nuage", + "tooltip.antarchy.cloud_bucket.midair": "Peut être placé dans les airs", + "item.antarchy.lumen_bucket": "Seau de Lumen", + "item.antarchy.scorpion_whip": "Fouet de Scorpion empereur", + "tooltip.antarchy.scorpion_whip.lash": "Fouette les proies à distance et y plante un lien venimeux.", + "tooltip.antarchy.scorpion_whip.reel": "Clic droit pour ramener la proie liée.", + "tooltip.antarchy.scorpion_whip.snap": "Frappez à nouveau la proie liée pour arracher le dard.", + "item.antarchy.fallen_king_crown": "Couronne du Roi déchu", + "tooltip.antarchy.fallen_king_crown.hero": "Accorde Héros du village lorsque vous tuez des créatures hostiles", + "item.antarchy.vortex_eye": "Œil de Vortex", + "item.antarchy.ultimate_helmet": "Casque ultime", + "item.antarchy.ultimate_chestplate": "Plastron ultime", + "item.antarchy.ultimate_leggings": "Jambières ultimes", + "item.antarchy.ultimate_boots": "Bottes ultimes", + "item.antarchy.ultimate_sword": "Épée ultime", + "item.antarchy.ultimate_pickaxe": "Pioche ultime", + "item.antarchy.ultimate_axe": "Hache ultime", + "item.antarchy.ultimate_shovel": "Pelle ultime", + "item.antarchy.ultimate_hoe": "Houe ultime", + "item.antarchy.ultimate_bow": "Arc ultime", + "item.antarchy.ultimate_crossbow": "Arbalète ultime", + "item.antarchy.ultimate_crossbow.capacity": "Charge jusqu’à 16 flèches à la fois", + "item.antarchy.ultimate_crossbow.arrows_remaining": "%1$s %2$s chargées", + "item.antarchy.ultimate_mace": "Masse ultime", + "item.antarchy.moggles": "Moggles", + "itemGroup.antarchy.antarchy": "Antarchy", + "item.antarchy.bile_bucket": "Seau de Bile", + "item.antarchy.ichor_bucket": "Seau de Ichor", + "item.antarchy.antiwater_bucket": "Seau de Antieau", + "item.antarchy.reverie_bottle": "Fiole de Reverie", + "item.antarchy.squidzooka": "Squidzooka", + "item.antarchy.rpo_launcher": "Lanceur P.P.F.", + "item.antarchy.shrink_ray": "Rayon réducteur", + "item.antarchy.growth_ray": "Rayon de croissance", + "tooltip.antarchy.shrink_ray": "Rétrécit définitivement les cibles. Maintenez pour charger.", + "tooltip.antarchy.growth_ray": "Agrandit définitivement les cibles. Maintenez pour charger.", + "tooltip.antarchy.size_ray_milk_reset": "Boire du lait réinitialise cet effet.", + "tooltip.antarchy.reverie_bottle.capture": "Faites un clic droit sur une Reverie avec une fiole en verre pour la capturer.", + "tooltip.antarchy.reverie_bottle.release": "Clic droit pour libérer la Reverie.", + "item.antarchy.gravity_gun": "Canon à gravité", + "item.antarchy.miners_dream": "Rêve du mineur", + "tooltip.antarchy.miners_dream.line1": "Clic droit pour creuser une grotte sinueuse.", + "tooltip.antarchy.miners_dream.line2": "Laisse les blocs précieux intacts.", + "message.antarchy.miners_dream_disabled": "Le Rêve du mineur est désactivé.", + "message.antarchy.miners_dream_busy": "Votre rêve précédent est encore en train de se déployer.", + "item.antarchy.diamond_minecart": "Le wagonnet de diamant", + "item.antarchy.cogwheel_pet": "Familier engrenage", + "item.antarchy.fire_dragon_pet": "Familier dragon de feu", + "item.antarchy.ice_dragon_pet": "Familier dragon de glace", + "item.antarchy.lightning_dragon_pet": "Familier dragon de foudre", + "item.antarchy.gorgon_pet": "Familier de Gorgon", + "item.antarchy.apple_cow_spawn_egg": "Œuf d’apparition de Vache-pomme", + "item.antarchy.red_ant_spawn_egg": "Œuf d’apparition de Fourmi rouge", + "item.antarchy.brown_ant_spawn_egg": "Œuf d’apparition de Fourmi brune", + "item.antarchy.rainbow_ant_spawn_egg": "Œuf d’apparition de Fourmi arc-en-ciel", + "item.antarchy.golden_apple_cow_spawn_egg": "Œuf d’apparition de Vache-pomme doré", + "item.antarchy.enchanted_golden_apple_cow_spawn_egg": "Œuf d’apparition de Vache-pomme doré enchanté", + "item.antarchy.dr_trayaurus_spawn_egg": "Œuf d’apparition de Dr. Trayaurus", + "item.antarchy.easter_bunny_spawn_egg": "Œuf d’apparition de Lapin de Pâques", + "item.antarchy.glimmer_spawn_egg": "Œuf d’apparition de Glimmer", + "item.antarchy.ouranwood_deer_spawn_egg": "Œuf d’apparition de Cerf d’Ouranwood", + "item.antarchy.spirit_apple": "Pomme spirituelle", + "item.antarchy.elka_spawn_egg": "Œuf d’apparition de Elka", + "item.antarchy.glimmer_bottle": "Fiole de Glimmer", + "item.antarchy.glimmer_bottle.contains": "Contient : %s", + "glimmer_variant.antarchy.apple_cow": "Vache-pomme", + "glimmer_variant.antarchy.ouranwood_deer": "Cerf d’Ouranwood", + "glimmer_variant.antarchy.frog": "Grenouille", + "glimmer_variant.antarchy.ant": "Fourmi", + "glimmer_variant.antarchy.elka": "Elka", + "entity.antarchy.glimmer.set_sit": "Glimmer est désormais assis.", + "entity.antarchy.glimmer.set_follow": "Glimmer vous suit désormais.", + "entity.antarchy.glimmer.set_wander": "Glimmer erre désormais librement.", + "entity.antarchy.glimmer.ability.ant": "Votre fourmi vous galvanise contre %s !", + "entity.antarchy.glimmer.ability.apple_cow": "Votre vache-pomme meugle et vous nourrit !", + "entity.antarchy.glimmer.ability.elka": "Votre Elka pousse un cri et brise l’égide !", + "entity.antarchy.glimmer.ability.deer": "Votre cerf d’Ouranwood charge à travers l’ennemi !", + "entity.antarchy.glimmer.ability.frog": "Votre grenouille a dévoré %s !", + "item.antarchy.glimmer_bottle.passive.apple_cow": "Passif : la faim diminue 25 % moins vite", + "item.antarchy.glimmer_bottle.ability.apple_cow": "Capacité : meugle pour accorder un sursaut de Saturation et de Régénération lorsque votre faim est faible", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "Passif : Vitesse I", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "Capacité : traverse les créatures hostiles lorsque vous sprintez vers elles et les projette au loin", + "item.antarchy.glimmer_bottle.passive.frog": "Passif : Sauts améliorés I", + "item.antarchy.glimmer_bottle.ability.frog": "Capacité : dévore une créature hostile proche et devient temporairement plus grande et plus forte", + "item.antarchy.glimmer_bottle.passive.ant": "Passif : portée d’attaque légèrement accrue", + "item.antarchy.glimmer_bottle.ability.ant": "Capacité : toucher un grand ennemi vous accorde brièvement Force II", + "item.antarchy.glimmer_bottle.passive.elka": "Passif : Égide de verre-sang II", + "item.antarchy.glimmer_bottle.ability.elka": "Capacité : pousse un cri et se brise en onde de choc lorsqu’un de vos cœurs d’égide se brise", + "advancements.antarchy.spirant_animal.title": "Animal fourmIDABLE", + "advancements.antarchy.spirant_animal.description": "Apprivoisez un Glimmer fourmi.", + "advancements.antarchy.hoppy_together.title": "Bondir ensemble", + "advancements.antarchy.hoppy_together.description": "Apprivoisez un Glimmer grenouille.", + "advancements.antarchy.deerly_beloved.title": "Cerf-èrement aimé", + "advancements.antarchy.deerly_beloved.description": "Apprivoisez un Glimmer cerf d’Ouranwood.", + "advancements.antarchy.elkcellent_choice.title": "Choix cerf-ait", + "advancements.antarchy.elkcellent_choice.description": "Apprivoisez un Glimmer Elka.", + "advancements.antarchy.apple_of_my_eye.title": "La prunelle de mes yeux", + "advancements.antarchy.apple_of_my_eye.description": "Apprivoisez un Glimmer vache-pomme.", + "item.antarchy.dorrie_spawn_egg": "Œuf d’apparition de Dorrie", + "item.antarchy.flying_squirrel_spawn_egg": "Œuf d’apparition de Écureuil volant", + "item.antarchy.caterpillar_spawn_egg": "Œuf d’apparition de Chenille", + "item.antarchy.butterfly_spawn_egg": "Œuf d’apparition de Papillon", + "item.antarchy.brutalfly_spawn_egg": "Œuf d’apparition de Brutalfly", + "item.antarchy.cloud_shark_spawn_egg": "Œuf d’apparition de Requin des nuages", + "item.antarchy.kraken_spawn_egg": "Euh, non. Ne fais pas ça.", + "item.antarchy.missile_squid_spawn_egg": "Œuf d’apparition de Calmar-missile", + "item.antarchy.octopus_bomb_spawn_egg": "Œuf d’apparition de Bombe-pieuvre", + "item.antarchy.nightmare_spawn_egg": "Œuf d’apparition de Cauchemar", + "item.antarchy.toreterror_spawn_egg": "Œuf d’apparition de Toreterror", + "item.antarchy.water_cannon": "Canon à eau", + "item.antarchy.primordial_helmet": "Casque primordial", + "item.antarchy.primordial_chestplate": "Plastron primordial", + "item.antarchy.primordial_leggings": "Jambières primordiales", + "item.antarchy.primordial_boots": "Bottes primordiales", + "item.antarchy.bed_bug_spawn_egg": "Œuf d’apparition de Punaise de lit", + "item.antarchy.moleworm_spawn_egg": "Œuf d’apparition de Moleworm", + "item.antarchy.molevore_spawn_egg": "Œuf d’apparition de Molevore", + "item.antarchy.reverie_spawn_egg": "Œuf d’apparition de Reverie", + "item.antarchy.mantis_spawn_egg": "Œuf d’apparition de Mante religieuse", + "item.antarchy.alpha_mantis_spawn_egg": "Œuf d’apparition de Mante alpha", + "biome.antarchy.moleworm_caves": "Grottes de Moleworm", + "biome.antarchy.elythia_meadow": "Prairies élythiennes", + "biome.antarchy.butterfly_fields": "Champs aux papillons", + "biome.antarchy.ouranwood_forest": "Ouranwood Forêt", + "biome.antarchy.glimmering_pools": "Bassins scintillants", + "biome.antarchy.peach_forest": "Forêt de pêchers", + "biome.antarchy.fungal_ouranwood_forest": "Ouranwood Forêt fongique", + "biome.antarchy.glowcap_caves": "Grottes lumichapeau", + "message.antarchy.brown_ant_activated": "La fourmi brune est prête à ouvrir sa destination.", + "message.antarchy.brown_ant_needs_reagent": "Cette fourmi brune a besoin d’un réactif avant de pouvoir ouvrir sa destination.", + "message.antarchy.rainbow_ant_activated": "La fourmi arc-en-ciel bourdonne, liée à une nouvelle destination d’Infinity.", + "message.antarchy.rainbow_ant_activated_inherited": "La fourmi arc-en-ciel bourdonne, liée à une destination d’Infinity héritée.", + "message.antarchy.rainbow_ant_activated_inherited_existing": "La fourmi arc-en-ciel se reconnecte à une destination d’Infinity héritée.", + "message.antarchy.rainbow_ant_failed_dimension_create": "Impossible de créer la dimension. Votre configuration d’Infinity contient probablement une erreur. Redémarrez ou reconnectez-vous, puis réessayez.", + "message.antarchy.rainbow_ant_infinity_missing": "Infinity doit être installé pour que les dimensions des fourmis arc-en-ciel fonctionnent.", + "message.antarchy.rainbow_ant_needs_reagent": "Cette fourmi arc-en-ciel a besoin d’un réactif avant de pouvoir ouvrir une dimension.", + "message.antarchy.red_ant_activated": "La fourmi rouge est prête à ouvrir sa destination.", + "message.antarchy.red_ant_needs_reagent": "Cette fourmi rouge a besoin d’un réactif avant de pouvoir ouvrir sa destination.", + "message.antarchy.termite_activated": "La termite est prête à ouvrir sa destination.", + "message.antarchy.termite_needs_reagent": "Cette termite a besoin d’un réactif avant de pouvoir ouvrir sa destination.", + "death.attack.spit_bug_disrespect": "%1$s a été humilié par l’insecte cracheur", + "death.attack.jumpy_bug_jump": "%1$s s’est fait sauter dessus par l’insecte sauteur", + "death.attack.hercules_beetle_obliteration": "%1$s a été anéanti par le scarabée Hercule", + "message.antarchy.big_bertha.mode": "Mode de Grosse Bertha : %s", + "message.antarchy.big_bertha.mode.basilisk": "Basilic", + "message.antarchy.big_bertha.mode.lucid": "Lucid", + "message.antarchy.big_bertha.mode.nightmare": "Cauchemar", + "message.antarchy.big_bertha.mode.kraken": "Kraken", + "message.antarchy.big_bertha.mode.molevore": "Molevore", + "message.antarchy.big_bertha.mode.toreterror": "Toreterror", + "message.antarchy.ultimate_tool.mode_3x3": "Mode minage 3x3 activé", + "message.antarchy.ultimate_tool.mode_default": "Mode minage normal activé", + "advancements.antarchy.hey_listen.title": "Hé, écoute !", + "advancements.antarchy.hey_listen.description": "Une Reverie vous a rejoint.", + "advancements.antarchy.very_hungry_caterpillar.title": "La chenille qui fait des trous", + "advancements.antarchy.very_hungry_caterpillar.description": "Aidez une chenille à grandir.", + "effect.antarchy.dread": "Effroi", + "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.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.", + "effect.antarchy.shrinking": "Rétrécissement", + "effect.antarchy.growth": "Croissance", + "effect.antarchy.bloodglass_ward": "Égide de verre-sang", + "effect.antarchy.bloodglass_ward.description": "Accorde des cœurs qui se brisent et absorbent un coup entier de dégâts. Ils se régénèrent avec le temps.", + "death.attack.triffid_mauling": "%1$s a été déchiqueté par une plante", + "death.attack.triffid_mauling.player": "%1$s a été déchiqueté par une plante", + "death.attack.triffid_swallow": "%1$s a été avalé par un Triffid", + "death.attack.triffid_swallow.player": "%1$s a été avalé par un Triffid", + "potion.antarchy.haste": "Potion de Célérité", + "potion.antarchy.strong_haste": "Potion de Célérité puissante", + "tooltip.antarchy.big_bertha.mode": "Mode : %s", + "tooltip.antarchy.big_bertha.toggle_mode": "Maj + clic droit pour parcourir les modes de boss.", + "tooltip.antarchy.big_bertha.mode.basilisk": "Le clic droit paralyse une cible. Les coups infligent Poison et Lenteur.", + "tooltip.antarchy.big_bertha.mode.lucid": "Les coups inversent les cibles pendant quelques secondes. Vos coups infligent davantage de dégâts lorsque vous êtes inversé.", + "tooltip.antarchy.big_bertha.mode.nightmare": "Les joueurs subissent l’Effroi ; les coups infligent Faiblesse.", + "tooltip.antarchy.big_bertha.mode.kraken": "Les coups projettent les cibles en arrière et appellent la foudre.", + "tooltip.antarchy.big_bertha.mode.molevore": "Clic droit pour tournoyer vers l’avant et forer les blocs de Molevore.", + "tooltip.antarchy.big_bertha.mode.toreterror": "Clic droit pour bondir dans les airs et retomber avec une onde de choc de zone.", + "tooltip.antarchy.ultimate_tools_3x3": "Maj + clic droit pour activer ou désactiver le minage 3x3.", + "tooltip.antarchy.moggles.reveal": "Accorde Vision nocturne et indique les grottes proches.", + "tooltip.antarchy.moggles.underground": "Fonctionne uniquement lorsque vous n’avez pas accès au ciel.", + "tooltip.antarchy.cornea_ear.vision": "Accorde Vision nocturne pendant %s secondes.", + "tooltip.antarchy.mob_coming_soon": "Créature bientôt disponible !", + "tooltip.antarchy.gravity_gun.primary": "Clic gauche : repousse les entités proches ou lance la cible tenue.", + "tooltip.antarchy.gravity_gun.secondary": "Clic droit : attire une entité ou un bloc valide.", + "tooltip.antarchy.gravity_gun.scroll": "Maintenez Ctrl et faites défiler pour rapprocher ou éloigner la cible tenue.", + "tooltip.antarchy.gravity_gun.blacklist": "N’affecte pas les blocs ni les entités sur liste noire.", + "tooltip.antarchy.antimetal_inversion": "Inverse les entités directement en dessous", + "tooltip.antarchy.diamond_minecart.forward": "Sera implémenté plus tard.", + "tooltip.antarchy.diamond_minecart.rails": " ", + "tooltip.antarchy.rainbow_sugar": "Active les dimensions des fourmis arc-en-ciel. Mangez-le dans l’une d’elles pour rentrer chez vous.", + "advancements.antarchy.visit_elythia.title": "InterdimFOURMIsionnel", + "advancements.antarchy.visit_elythia.description": "Utilisez une fourmi brune pour atteindre Elythia.", + "advancements.antarchy.visit_thoraxis.title": "Gestion de la fourmi-colère", + "advancements.antarchy.visit_thoraxis.description": "Utilisez une fourmi rouge pour atteindre Thoraxis.", + "advancements.antarchy.fallen_kingdom_castle.title": "Autrefois, je régnais sur le monde...", + "advancements.antarchy.fallen_kingdom_castle.description": "Découvrez le Château du Royaume déchu.", + "advancements.antarchy.fallen_king_crown.title": "Les chunks se chargeaient sur mon ordre...", + "advancements.antarchy.fallen_king_crown.description": "Obtenez la Couronne du Roi déchu.", + "advancements.antarchy.the_lab.title": "Bonjour tout le monde, Dan à l’appareil !", + "advancements.antarchy.the_lab.description": "Découvrez le laboratoire du Dr Trayaurus.", + "advancements.antarchy.sweater_dreams.title": "Rêves en pull", + "advancements.antarchy.sweater_dreams.description": "Vainquez le Cauchemar.", + "advancements.antarchy.stone_cold.title": "Froid comme la pierre", + "advancements.antarchy.stone_cold.description": "Vainquez un basilic.", + "advancements.antarchy.moley_poley.title": "Taupe en boule", + "advancements.antarchy.moley_poley.description": "Vainquez un Molevore.", + "advancements.antarchy.lucid_dreams.title": "Rêves lucides", + "advancements.antarchy.lucid_dreams.description": "Vainquez un Lucid.", + "advancements.antarchy.davy_jones_locker.title": "Le coffre de Davy Jones", + "advancements.antarchy.davy_jones_locker.description": "Vainquez le Kraken.", + "advancements.antarchy.shark_weak.title": "Quand les requins voleront", + "advancements.antarchy.shark_weak.description": "Vainquez un requin des nuages.", + "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "Que les punaises de lit ne te piquent pas", + "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "Vainquez une punaise de lit.", + "advancements.antarchy.soups_up.title": "La soupe est prête", + "advancements.antarchy.soups_up.description": "Mangez de la soupe d’aileron de requin des nuages.", + "advancements.antarchy.in_the_upside_down.title": "Dans le Monde à l’envers", + "advancements.antarchy.in_the_upside_down.description": "Soyez inversé pour la première fois.", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "Qui l’a senti l’a fait", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "Devenez puant pour la première fois.", + "advancements.antarchy.ultimate_armor.title": "Protection ultime", + "advancements.antarchy.ultimate_armor.description": "Réunissez l’ensemble complet de l’armure ultime.", + "advancements.antarchy.ultimate_bow.title": "Rhapsodie arc-hémienne", + "advancements.antarchy.ultimate_bow.description": "Obtenez un arc ultime.", + "advancements.antarchy.brutalfly.title": "Vole comme un Brutalfly, pique comme une abeille", + "advancements.antarchy.brutalfly.description": "Obtenez des élytres de Brutalfly.", + "advancements.antarchy.now_watch_me_whip.title": "Maintenant, regarde-moi fouetter", + "advancements.antarchy.now_watch_me_whip.description": "Maintenant, regarde-moi faire le nae nae", + "advancements.antarchy.kill_molevore.title": "Taupe en boule", + "advancements.antarchy.kill_molevore.description": "Tuez un Molevore.", + "advancements.antarchy.water_cannon_craft.title": "Plus c’est mouillé, mieux c’est !", + "advancements.antarchy.water_cannon_craft.description": "Obtenez un canon à eau.", + "advancements.antarchy.kill_toreterror.title": "Plutôt Tore-visée terrible !", + "advancements.antarchy.kill_toreterror.description": "Vainquez le Toreterror.", + "advancements.antarchy.challenge_games.title": "Jeux du défi !", + "advancements.antarchy.challenge_games.description": "Entrez dans l’arène en ruines.", + "advancements.antarchy.bugged_out.title": "Complètement insecté", + "advancements.antarchy.bugged_out.description": "Vainquez la mante alpha.", + "death.attack.bed_bug_bite": "%1$s a été mordu par les punaises de lit", + "death.attack.bed_bug_bite.player": "%1$s a été mordu par les punaises de lit en combattant %2$s", + "message.antarchy.dread_too_scared_to_sleep": "Vous avez trop peur pour dormir.", + "death.attack.kraken_mauling": "%1$s a été entraîné sous l’eau par le Kraken", + "death.attack.kraken_mauling.player": "%1$s a été entraîné sous l’eau par le Kraken en combattant %2$s", + "death.attack.kraken_lightning": "%1$s a été foudroyé par la tempête du Kraken", + "death.attack.kraken_lightning.player": "%1$s a été foudroyé par la tempête du Kraken en combattant %2$s", + "death.attack.rpo_launcher_blast": "%1$s a été mis K.-O. par un P.P.F.", + "death.attack.rpo_launcher_blast.player": "%1$s a été mis K.-O. par un P.P.F. en combattant %2$s", + "death.attack.nightmare_mauling": "%1$s a été dévoré par le Cauchemar", + "death.attack.nightmare_mauling.player": "%1$s a été dévoré par le Cauchemar en combattant %2$s", + "death.attack.basilisk_bite": "%1$s a été avalé par un basilic", + "death.attack.basilisk_bite.player": "%1$s a été avalé par un basilic en combattant %2$s", + "death.attack.emperor_scorpion_sting": "%1$s a été piqué par le scorpion empereur", + "death.attack.emperor_scorpion_sting.player": "%1$s a été piqué par le scorpion empereur en combattant %2$s", + "death.attack.cornea_stalk_prick": "%1$s a été piqué à mort par une tige de Cornea", + "death.attack.toreterror_spin": "%1$s a été toupillé à mort par Toreterror", + "death.attack.toreterror_spin.player": "%1$s a été toupillé à mort par Toreterror", + "death.attack.toreterror_jump": "%1$s a été écrasé à mort par Toreterror", + "death.attack.toreterror_jump.player": "%1$s a été écrasé à mort par Toreterror", + "death.attack.water_soaked": "%1$s a été trempé à mort par %2$s", + "death.attack.water_soaked.player": "%1$s a été trempé à mort par %2$s", + "entity.antarchy.lucid": "Lucid", + "item.antarchy.lucid_spawn_egg": "Œuf d’apparition de Lucid", + "item.antarchy.lucid_eye": "Œil de Lucid", + "entity.antarchy.scorpion": "Scorpion", + "item.antarchy.scorpion_spawn_egg": "Œuf d’apparition de Scorpion", + "entity.antarchy.basilisk": "Basilic", + "item.antarchy.basilisk_spawn_egg": "Œuf d’apparition de Basilic", + "entity.antarchy.emperor_scorpion": "Scorpion empereur", + "item.antarchy.emperor_scorpion_spawn_egg": "Œuf d’apparition de Scorpion empereur", + "item.antarchy.emperor_scorpion_stinger": "Dard de scorpion empereur", + "item.antarchy.lucid_pearl": "Perle de Lucid", + "tooltip.antarchy.lucid_pearl": "Lance un projectile à gravité inversée.", + "tooltip.antarchy.lucid_pearl.detail": "Vous téléporte à son point d’impact et applique Inversé.", + "subtitles.antarchy.squidzooka_fire": "Squidzooka tire", + "subtitles.antarchy.shrink_ray": "Rayon réducteur tire", + "subtitles.antarchy.growth_ray": "Rayon de croissance tire", + "subtitles.antarchy.size_ray_charge": "Rayon de taille se charge", + "subtitles.antarchy.ant_ambient": "Fourmis stridulent", + "subtitles.antarchy.ant_idle": "Fourmis se font entendre", + "subtitles.antarchy.ant_hurt": "Fourmis sont blessées", + "subtitles.antarchy.ant_bite": "Fourmis mordent", + "subtitles.antarchy.ant_gather": "Fourmis récoltent", + "subtitles.antarchy.ant_nest": "Nid de fourmis bruisse", + "subtitles.antarchy.cloud_shark_bite": "Requin des nuages mord", + "subtitles.antarchy.cloud_shark_idle": "Requin des nuages se fait entendre", + "subtitles.antarchy.cloud_shark_hurt": "Requin des nuages est blessé", + "subtitles.antarchy.cloud_shark_death": "Requin des nuages meurt", + "subtitles.antarchy.cloud_shark_fly": "Requin des nuages vole", + "subtitles.antarchy.caterpillar_idle": "Chenille se fait entendre", + "subtitles.antarchy.caterpillar_hurt": "Chenille est blessé", + "subtitles.antarchy.caterpillar_crawl": "Chenille rampe", + "subtitles.antarchy.butterfly_hurt": "Papillon est blessé", + "subtitles.antarchy.brutalfly_idle": "Brutalfly se fait entendre", + "subtitles.antarchy.brutalfly_death": "Brutalfly meurt", + "subtitles.antarchy.thoraxis_nightmare_wastes_ambient": "Terres désolées du Cauchemar bourdonne", + "subtitles.antarchy.thoraxis_nightmare_wastes_additions": "Terres désolées du Cauchemar s’agite", + "subtitles.antarchy.thoraxis_nightmare_wastes_mood": "Terres désolées du Cauchemar murmure", + "subtitles.antarchy.thoraxis_dream_dunes_ambient": "Dunes oniriques chuchotent", + "subtitles.antarchy.thoraxis_dream_dunes_additions": "Dunes oniriques bruissent", + "subtitles.antarchy.thoraxis_dream_dunes_mood": "Dunes oniriques soupirent", + "subtitles.antarchy.thoraxis_lucid_pools_ambient": "Bassins lucides bourdonnent", + "subtitles.antarchy.thoraxis_lucid_pools_additions": "Bassins lucides maudissent", + "subtitles.antarchy.thoraxis_lucid_pools_mood": "Bassins lucides murmurent", + "subtitles.antarchy.lucid_ambient": "Lucid bourdonne", + "subtitles.antarchy.lucid_flying": "Lucid volette", + "subtitles.antarchy.lucid_attack": "Lucid attaque", + "subtitles.antarchy.lucid_bolt": "Lucid tire un projectile", + "subtitles.antarchy.lucid_hurt": "Lucid est blessé", + "subtitles.antarchy.lucid_death": "Lucid meurt", + "subtitles.antarchy.reverie_idle": "Reverie dérive", + "subtitles.antarchy.reverie_hurt": "Reverie est blessé", + "subtitles.antarchy.reverie_worry": "Reverie s’inquiète", + "subtitles.antarchy.reverie_save": "Reverie vous sauve", + "subtitles.antarchy.reverie_join_player": "Reverie vous rejoint", + "subtitles.antarchy.reverie_alert": "Reverie vous alerte", + "subtitles.antarchy.flying_squirrel_idle": "Écureuil volant pépie", + "subtitles.antarchy.flying_squirrel_beg": "Écureuil volant réclame à manger", + "subtitles.antarchy.flying_squirrel_nut": "Écureuil volant mange", + "subtitles.antarchy.flying_squirrel_glide_loop": "Écureuil volant plane", + "subtitles.antarchy.flying_squirrel_hurt": "Écureuil volant est blessé", + "subtitles.antarchy.flying_squirrel_death": "Écureuil volant meurt", + "subtitles.antarchy.nightmare_idle": "Cauchemar grogne", + "subtitles.antarchy.nightmare_hurt": "Cauchemar est blessé", + "subtitles.antarchy.nightmare_roar": "Cauchemar rugir", + "subtitles.antarchy.nightmare_death": "Cauchemar meurt", + "subtitles.antarchy.nightmare_bite": "Cauchemar mord", + "subtitles.antarchy.nightmare_flap": "Cauchemar bat des ailes", + "subtitles.antarchy.triffid_attack": "Triffid attaque", + "subtitles.antarchy.triffid_grab": "Triffid agrippe", + "subtitles.antarchy.triffid_hurt": "Triffid est blessé", + "subtitles.antarchy.triffid_death": "Triffid meurt", + "subtitles.antarchy.triffid_hiss": "Triffid siffle", + "subtitles.antarchy.triffid_growl": "Triffid gronde", + "subtitles.antarchy.gravity_gun_pickup": "Canon à gravité ramasse", + "subtitles.antarchy.gravity_gun_drop": "Canon à gravité relâche", + "subtitles.antarchy.gravity_gun_hold_loop": "Canon à gravité bourdonne", + "subtitles.antarchy.gravity_gun_launch": "Canon à gravité projette", + "subtitles.antarchy.gravity_gun_dryfire": "Canon à gravité tire à vide", + "subtitles.antarchy.bed_bug_ambient": "Punaise de lit pépie", + "subtitles.antarchy.bed_bug_hurt": "Punaise de lit est blessé", + "subtitles.antarchy.bed_bug_attack": "Punaise de lit mord", + "subtitles.antarchy.wasp_idle": "Guêpe bourdonne", + "subtitles.antarchy.wasp_hurt": "Guêpe est blessé", + "subtitles.antarchy.wasp_attack": "Guêpe pique", + "subtitles.antarchy.wasp_death": "Guêpe meurt", + "subtitles.antarchy.scorpion_ambient": "Scorpion cliquette", + "subtitles.antarchy.scorpion_hurt": "Scorpion est blessé", + "subtitles.antarchy.scorpion_attack": "Scorpion attaque", + "subtitles.antarchy.emperor_scorpion_ambient": "Scorpion empereur cliquette", + "subtitles.antarchy.emperor_scorpion_hurt": "Scorpion empereur est blessé", + "subtitles.antarchy.emperor_scorpion_attack": "Scorpion empereur attaque", + "subtitles.antarchy.emperor_scorpion_roar": "Scorpion empereur rugir", + "subtitles.antarchy.moleworm_ambient": "Moleworm bruisse", + "subtitles.antarchy.moleworm_hurt": "Moleworm est blessé", + "subtitles.antarchy.moleworm_attack": "Moleworm attaque", + "subtitles.antarchy.moleworm_dig": "Moleworm creuse", + "subtitles.antarchy.molevore_ambient": "Molevore gronde", + "subtitles.antarchy.molevore_hurt": "Molevore est blessé", + "subtitles.antarchy.molevore_attack": "Molevore attaque", + "subtitles.antarchy.molevore_dig": "Molevore creuse", + "subtitles.antarchy.duct_tape_use": "Ruban adhésif se déchire", + "subtitles.antarchy.potent_nyxite_hypnotic_gas": "Nyxite puissant siffle", + "subtitles.antarchy.potent_nyxite_geyser_eruption": "Nyxite puissant entre en éruption", + "subtitles.antarchy.potent_nyxite_geyser_continuous": "Nyxite puissant le geyser rugit", + "subtitles.antarchy.missile_squid_ambient": "Calmar-missile bourdonne", + "subtitles.antarchy.missile_squid_hurt": "Calmar-missile est blessé", + "subtitles.antarchy.missile_squid_death": "Calmar-missile meurt", + "subtitles.antarchy.missile_squid_attack": "Calmar-missile attaque", + "subtitles.antarchy.kraken_flying_loop": "Kraken plane", + "subtitles.antarchy.kraken_flying_sideways_loop": "Kraken tourne en cercle", + "subtitles.antarchy.kraken_attack": "Kraken frappe", + "subtitles.antarchy.kraken_spin": "Kraken tourne", + "subtitles.antarchy.kraken_roar": "Kraken rugir", + "subtitles.antarchy.kraken_summon": "Kraken émerge", + "subtitles.antarchy.kraken_hurt": "Kraken est blessé", + "subtitles.antarchy.kraken_death": "Kraken meurt", + "subtitles.antarchy.basilisk_idle_loop": "Basilic se fait entendre", + "subtitles.antarchy.basilisk_slither_loop": "Basilic ondule", + "subtitles.antarchy.basilisk_bite": "Basilic mord", + "subtitles.antarchy.basilisk_hiss": "Basilic siffle", + "subtitles.antarchy.basilisk_hurt": "Basilic est blessé", + "subtitles.antarchy.basilisk_death": "Basilic meurt", + "subtitles.antarchy.bomber_walk": "Bombardier marche", + "subtitles.antarchy.bomber_knock": "Bombardier est frappé", + "subtitles.antarchy.bomber_explode": "Bombardier la mèche siffle", + "subtitles.antarchy.toreterror_idle": "Toreterror se fait entendre", + "subtitles.antarchy.toreterror_hurt": "Toreterror est blessé", + "subtitles.antarchy.toreterror_death": "Toreterror meurt", + "subtitles.antarchy.toreterror_bomber_fire": "Toreterror lance des bombardiers", + "subtitles.antarchy.toreterror_spin": "Toreterror tourne", + "subtitles.antarchy.toreterror_ricochet": "Toreterror ricoche", + "subtitles.antarchy.water_cannon_fire": "Canon à eau tire", + "subtitles.antarchy.toreterror_jump_up": "Toreterror saute", + "subtitles.antarchy.toreterror_jump_land": "Toreterror atterrit", + "subtitles.antarchy.stinky_fly": "Mouches puantes bourdonnent", + "item.minecraft.potion.effect.inversion": "Potion de Inversion", + "item.minecraft.potion.effect.long_inversion": "Potion de Inversion", + "item.minecraft.splash_potion.effect.inversion": "Potion jetable de Inversion", + "item.minecraft.splash_potion.effect.long_inversion": "Potion jetable de Inversion", + "item.minecraft.lingering_potion.effect.inversion": "Potion persistante de Inversion", + "item.minecraft.lingering_potion.effect.long_inversion": "Potion persistante de Inversion", + "item.minecraft.tipped_arrow.effect.inversion": "Flèche de Inversion", + "item.minecraft.tipped_arrow.effect.long_inversion": "Flèche de Inversion", + "item.minecraft.potion.effect.paralysis": "Potion de Paralysie", + "item.minecraft.potion.effect.long_paralysis": "Potion de Paralysie", + "item.minecraft.splash_potion.effect.paralysis": "Potion jetable de Paralysie", + "item.minecraft.splash_potion.effect.long_paralysis": "Potion jetable de Paralysie", + "item.minecraft.lingering_potion.effect.paralysis": "Potion persistante de Paralysie", + "item.minecraft.lingering_potion.effect.long_paralysis": "Potion persistante de Paralysie", + "item.minecraft.tipped_arrow.effect.paralysis": "Flèche de Paralysie", + "item.minecraft.tipped_arrow.effect.long_paralysis": "Flèche de Paralysie", + "item.minecraft.potion.effect.shrinking": "Potion de Rétrécissement", + "item.minecraft.potion.effect.strong_shrinking": "Potion de Rétrécissement II", + "item.minecraft.potion.effect.extreme_shrinking": "Potion de Rétrécissement III", + "item.minecraft.splash_potion.effect.shrinking": "Potion jetable de Rétrécissement", + "item.minecraft.splash_potion.effect.strong_shrinking": "Potion jetable de Rétrécissement II", + "item.minecraft.splash_potion.effect.extreme_shrinking": "Potion jetable de Rétrécissement III", + "item.minecraft.lingering_potion.effect.shrinking": "Potion persistante de Rétrécissement", + "item.minecraft.lingering_potion.effect.strong_shrinking": "Potion persistante de Rétrécissement II", + "item.minecraft.lingering_potion.effect.extreme_shrinking": "Potion persistante de Rétrécissement III", + "item.minecraft.tipped_arrow.effect.shrinking": "Flèche de Rétrécissement", + "item.minecraft.tipped_arrow.effect.strong_shrinking": "Flèche de Rétrécissement II", + "item.minecraft.tipped_arrow.effect.extreme_shrinking": "Flèche de Rétrécissement III", + "item.minecraft.potion.effect.growing": "Potion de Croissance", + "item.minecraft.potion.effect.strong_growing": "Potion de Croissance II", + "item.minecraft.potion.effect.extreme_growing": "Potion de Croissance III", + "item.minecraft.splash_potion.effect.growing": "Potion jetable de Croissance", + "item.minecraft.splash_potion.effect.strong_growing": "Potion jetable de Croissance II", + "item.minecraft.splash_potion.effect.extreme_growing": "Potion jetable de Croissance III", + "item.minecraft.lingering_potion.effect.growing": "Potion persistante de Croissance", + "item.minecraft.lingering_potion.effect.strong_growing": "Potion persistante de Croissance II", + "item.minecraft.lingering_potion.effect.extreme_growing": "Potion persistante de Croissance III", + "item.minecraft.tipped_arrow.effect.growing": "Flèche de Croissance", + "item.minecraft.tipped_arrow.effect.strong_growing": "Flèche de Croissance II", + "item.minecraft.tipped_arrow.effect.extreme_growing": "Flèche de Croissance III", + "item.minecraft.potion.effect.dread": "Potion de Effroi", + "item.minecraft.potion.effect.long_dread": "Potion de Effroi", + "item.minecraft.splash_potion.effect.dread": "Potion jetable de Effroi", + "item.minecraft.splash_potion.effect.long_dread": "Potion jetable de Effroi", + "item.minecraft.lingering_potion.effect.dread": "Potion persistante de Effroi", + "item.minecraft.lingering_potion.effect.long_dread": "Potion persistante de Effroi", + "item.minecraft.tipped_arrow.effect.dread": "Flèche de Effroi", + "item.minecraft.tipped_arrow.effect.long_dread": "Flèche de Effroi", + "item.minecraft.potion.effect.stinky": "Potion de Puanteur", + "item.minecraft.potion.effect.long_stinky": "Potion de Puanteur", + "item.minecraft.splash_potion.effect.stinky": "Potion jetable de Puanteur", + "item.minecraft.splash_potion.effect.long_stinky": "Potion jetable de Puanteur", + "item.minecraft.lingering_potion.effect.stinky": "Potion persistante de Puanteur", + "item.minecraft.lingering_potion.effect.long_stinky": "Potion persistante de Puanteur", + "item.minecraft.tipped_arrow.effect.stinky": "Flèche de Puanteur", + "item.minecraft.tipped_arrow.effect.long_stinky": "Flèche de Puanteur", + "item.minecraft.potion.effect.haste": "Potion de Célérité", + "item.minecraft.potion.effect.strong_haste": "Potion de Célérité II", + "item.minecraft.splash_potion.effect.haste": "Potion jetable de Célérité", + "item.minecraft.splash_potion.effect.strong_haste": "Potion jetable de Célérité II", + "item.minecraft.lingering_potion.effect.haste": "Potion persistante de Célérité", + "item.minecraft.lingering_potion.effect.strong_haste": "Potion persistante de Célérité II", + "item.minecraft.tipped_arrow.effect.haste": "Flèche de Célérité", + "item.minecraft.tipped_arrow.effect.strong_haste": "Flèche de Célérité II", + "advancements.antarchy.cancel_out.title": "1 - 1 = ?", + "advancements.antarchy.cancel_out.description": "Ayez Croissance et Rétrécissement actifs en même temps.", + "entity.antarchy.cheep": "Cheep", + "item.antarchy.cheep": "Cheep", + "item.antarchy.cheep_spawn_egg": "Œuf d’apparition de Cheep", + "entity.antarchy.reverie": "Reverie", + "biome.antarchy.thoraxis": "Thoraxis", + "biome.antarchy.nightmare_wastes": "Terres désolées du Cauchemar", + "biome.antarchy.umbral_hills": "Collines ombrales", + "biome.antarchy.lucid_pools": "Bassins lucides", + "biome.antarchy.dream_dunes": "Dunes oniriques", + "block.antarchy.wild_corn": "Maïs sauvage", + "trim_material.antarchy.blood_crystal": "Cristal de sang", + "trim_material.antarchy.nightmare_scale": "Écaille de Cauchemar", + "trim_material.antarchy.uranium": "Uranium", + "trim_material.antarchy.titanium": "Titane", + "advancements.antarchy.duct_tape.title": "J’ai scié ce bateau en deux !", + "advancements.antarchy.duct_tape.description": "et je l’ai réparé grâce au ruban adhésif !", + "key.categories.antarchy": "Antarchy", + "key.antarchy.brutalfly_flap": "Élytres de Brutalfly : Battre des ailes", + "advancements.antarchy.shrink_ray_craft.title": "Chérie, j’ai rétréci les créatures", + "advancements.antarchy.shrink_ray_craft.description": "Fabriquez un rayon réducteur.", + "advancements.antarchy.growth_ray_craft.title": "Voir grand ou rentrer chez soi", + "advancements.antarchy.growth_ray_craft.description": "Fabriquez un rayon de croissance.", + "advancements.antarchy.squidzooka_craft.title": "Encre et destruction", + "advancements.antarchy.squidzooka_craft.description": "Fabriquez un Squidzooka.", + "advancements.antarchy.rocket_powered_octopus.title": "Poulpe propulsé par fusée", + "advancements.antarchy.rocket_powered_octopus.description": "Fabriquez un lanceur P.P.F.", + "advancements.antarchy.gravity_gun_craft.title": "Artiste de la drague", + "advancements.antarchy.gravity_gun_craft.description": "Fabriquez un canon à gravité.", + "block.antarchy.cavaryn_portal": "Portail de Cavaryn", + "block.antarchy.termite_nest": "Nid de Termite", + "block.antarchy.chitin_spike": "Pointe de Chitine", + "block.antarchy.chitin_block": "Bloc de Chitine", + "block.antarchy.myrmite": "Myrmite", + "block.antarchy.broodstone": "Broodstone", + "block.antarchy.amber_moss_block": "Bloc de mousse ambrée", + "block.antarchy.amber_moss_carpet": "Tapis de mousse ambrée", + "block.antarchy.amber_lichen": "Lichen ambré", + "block.antarchy.bile_vein": "Veine de bile", + "block.antarchy.creepvine": "Liane rampante", + "block.antarchy.creeping_horror_egg": "Œuf de Horreur rampante", + "block.antarchy.lurking_terror_egg": "Œuf de Terreur tapie", + "entity.antarchy.termite": "Termite", + "entity.antarchy.jumpy_bug": "Insecte sauteur", + "entity.antarchy.spit_bug": "Insecte cracheur", + "entity.antarchy.stink_bug": "Punaise puante", + "entity.antarchy.rolly_polly": "Cloporte", + "entity.antarchy.creeping_horror": "Horreur rampante", + "entity.antarchy.lurking_terror": "Terreur tapie", + "entity.antarchy.hercules_beetle": "Scarabée Hercule", + "item.antarchy.jumpy_bug_spawn_egg": "Œuf d’apparition de Insecte sauteur", + "item.antarchy.spit_bug_spawn_egg": "Œuf d’apparition de Insecte cracheur", + "item.antarchy.stink_bug_spawn_egg": "Œuf d’apparition de Punaise puante", + "item.antarchy.termite_spawn_egg": "Œuf d’apparition de Termite", + "item.antarchy.rolly_polly_spawn_egg": "Œuf d’apparition de Cloporte", + "item.antarchy.creeping_horror_spawn_egg": "Œuf d’apparition de Horreur rampante", + "item.antarchy.lurking_terror_spawn_egg": "Œuf d’apparition de Terreur tapie", + "item.antarchy.hercules_beetle_spawn_egg": "Œuf d’apparition de Scarabée Hercule", + "item.antarchy.chitin": "Chitine", + "block.antarchy.polished_broodstone": "Broodstone poli", + "block.antarchy.chiseled_broodstone": "Broodstone ciselé", + "block.antarchy.broodstone_bricks": "Briques de Broodstone", + "block.antarchy.broodstone_stairs": "Escaliers de Broodstone", + "block.antarchy.broodstone_slab": "Dalle de Broodstone", + "block.antarchy.broodstone_wall": "Muret de Broodstone", + "block.antarchy.polished_broodstone_stairs": "Escaliers de Broodstone poli", + "block.antarchy.polished_broodstone_slab": "Dalle de Broodstone poli", + "block.antarchy.polished_broodstone_wall": "Muret de Broodstone poli", + "block.antarchy.broodstone_brick_stairs": "Escalier en briques de Broodstone", + "block.antarchy.broodstone_brick_slab": "Dalle en briques de Broodstone", + "block.antarchy.broodstone_brick_wall": "Muret en briques de Broodstone", + "block.antarchy.myrmite_coal_ore": "Minerai de charbon de Myrmite", + "block.antarchy.broodstone_uranium_ore": "Minerai de Broodstone Uranium", + "block.antarchy.broodstone_titanium_ore": "Minerai de Broodstone Titane", + "item.antarchy.raw_bug_meat": "Viande d’insecte crue", + "item.antarchy.cooked_bug_meat": "Viande d’insecte cuite", + "item.antarchy.hercules_horn": "Corne d’Hercule", + "block.antarchy.hanging_creeproots": "Racines rampantes suspendues", + "block.antarchy.glowcap_mushroom": "Champignon lumichapeau", + "block.antarchy.potted_glowcap_mushroom": "Champignon lumichapeau en pot", + "block.antarchy.glowcap_mushroom_block": "Bloc de champignon lumichapeau", + "block.antarchy.molting_vines": "Lianes de mue", + "item.antarchy.broodfruit": "Fruit de couvée", + "block.antarchy.jumpy_bug_egg": "Œuf de Insecte sauteur", + "subtitles.antarchy.creeping_horror_growl": "Horreur rampante gronde", + "subtitles.antarchy.creeping_horror_hurt": "Horreur rampante est blessé", + "subtitles.antarchy.creeping_horror_bite": "Horreur rampante mord", + "subtitles.antarchy.lurking_terror_snarl": "Terreur tapie grogne", + "subtitles.antarchy.lurking_terror_hurt": "Terreur tapie est blessé", + "subtitles.antarchy.lurking_terror_bite": "Terreur tapie mord", + "subtitles.antarchy.lurking_terror_fly_loop": "Terreur tapie vole", + "subtitles.antarchy.stink_bug_fart": "Punaise puante pète", + "subtitles.antarchy.stink_bug_idle": "Punaise puante se fait entendre", + "subtitles.antarchy.rolly_polly_idle": "Cloporte se fait entendre", + "subtitles.antarchy.rolly_polly_wheel_mode": "Le cloporte s'enroule", + "subtitles.antarchy.rolly_polly_normal_mode": "Le cloporte se déroule", + "subtitles.antarchy.rolly_polly_roll": "Le cloporte roule", + "subtitles.antarchy.hercules_beetle_idle": "Scarabée Hercule se fait entendre", + "subtitles.antarchy.hercules_beetle_hurt": "Scarabée Hercule est blessé", + "subtitles.antarchy.hercules_beetle_attack": "Scarabée Hercule attaque", + "subtitles.antarchy.hercules_beetle_cry": "Scarabée Hercule rugir", + "subtitles.antarchy.hercules_beetle_charge_start": "Scarabée Hercule charge une attaque", + "subtitles.antarchy.hercules_beetle_knocked_down": "Scarabée Hercule est renversé", + "subtitles.antarchy.jerry_idle": "Jerry bavarde", + "subtitles.antarchy.jerry_hurt": "Jerry souffre", + "subtitles.antarchy.jerry_death": "Jerry meurt", + "subtitles.antarchy.jerry_attack": "Jerry attaque", + "subtitles.antarchy.jumpy_bug_idle": "Insecte sauteur se fait entendre", + "subtitles.antarchy.spit_bug_idle": "Insecte cracheur se fait entendre", + "subtitles.antarchy.jumpy_bug_hurt": "Insecte sauteur est blessé", + "subtitles.antarchy.jumpy_bug_jump": "Insecte sauteur saute", + "subtitles.antarchy.spit_bug_hurt": "Insecte cracheur est blessé", + "subtitles.antarchy.spit_bug_spit": "Insecte cracheur crache", + "subtitles.antarchy.brutalfly_spit": "Brutalfly crache", + "advancements.antarchy.bug_apetit.title": "Bon appétit d’insecte", + "advancements.antarchy.bug_apetit.description": "Mangez de la viande d’insecte cuite.", + "advancements.antarchy.behavioral_correction.title": "Correction comportementale", + "advancements.antarchy.behavioral_correction.description": "Obtenez un Ajusteur d’attitude.", + "advancements.antarchy.beetle_buddies.title": "Copains scarabées", + "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." +} 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 new file mode 100644 index 00000000..c9d3e61a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/it_it.json @@ -0,0 +1,962 @@ +{ + "block.antarchy.duplicator_log": "Tronco di Duplicatore", + "block.antarchy.ouranwood_log": "Tronco di Ouranwood", + "block.antarchy.ouranwood_wood": "Legno di Ouranwood", + "block.antarchy.mossy_ouranwood_log": "Tronco di Ouranwood muschioso", + "block.antarchy.mossy_ouranwood_wood": "Legno di Ouranwood muschioso", + "block.antarchy.stripped_ouranwood_log": "Tronco di Ouranwood scortecciato", + "block.antarchy.stripped_ouranwood_wood": "Legno di Ouranwood scortecciato", + "block.antarchy.ouranwood_planks": "Assi di Ouranwood", + "block.antarchy.ouranwood_stairs": "Scale di Ouranwood", + "block.antarchy.ouranwood_slab": "Lastra di Ouranwood", + "block.antarchy.ouranwood_fence": "Staccionata di Ouranwood", + "block.antarchy.ouranwood_fence_gate": "Cancelletto di Ouranwood", + "block.antarchy.ouranwood_door": "Porta di Ouranwood", + "block.antarchy.ouranwood_trapdoor": "Botola di Ouranwood", + "block.antarchy.ouranwood_pressure_plate": "Pedana a pressione di Ouranwood", + "block.antarchy.ouranwood_button": "Pulsante di Ouranwood", + "block.antarchy.ouranwood_leaves": "Foglie di Ouranwood", + "block.antarchy.ouranwood_acorn": "Ghianda di Ouranwood", + "block.antarchy.ouranwood_sign": "Cartello di Ouranwood", + "block.antarchy.ouranwood_hanging_sign": "Cartello sospeso di Ouranwood", + "block.antarchy.peach_log": "Tronco di Pesca", + "block.antarchy.peach_wood": "Legno di Pesca", + "block.antarchy.stripped_peach_log": "Tronco di Pesca scortecciato", + "block.antarchy.stripped_peach_wood": "Legno di Pesca scortecciato", + "block.antarchy.peach_planks": "Assi di Pesca", + "block.antarchy.peach_stairs": "Scale di Pesca", + "block.antarchy.peach_slab": "Lastra di Pesca", + "block.antarchy.peach_fence": "Staccionata di Pesca", + "block.antarchy.peach_fence_gate": "Cancelletto di pesco", + "block.antarchy.peach_door": "Porta di Pesca", + "block.antarchy.peach_trapdoor": "Botola di Pesca", + "block.antarchy.peach_pressure_plate": "Pedana a pressione di Pesca", + "block.antarchy.peach_button": "Pulsante di Pesca", + "block.antarchy.peach_leaves": "Foglie di Pesca", + "block.antarchy.hanging_peach": "Pesca sospeso", + "block.antarchy.peach_sapling": "Arboscello di Pesca", + "block.antarchy.peach_sign": "Cartello di Pesca", + "block.antarchy.peach_hanging_sign": "Cartello sospeso di Pesca", + "block.antarchy.orange_milkweed": "Asclepiade arancione", + "block.antarchy.pink_milkweed": "Asclepiade rosa", + "block.antarchy.camellia": "Camelia", + "block.antarchy.spider_lily": "Giglio ragno", + "block.antarchy.lotus": "Loto", + "item.antarchy.lotus": "Loto", + "item.antarchy.critter_cage": "Gabbia per creature", + "block.antarchy.giant_lily_pad": "Ninfea gigante", + "block.antarchy.seashell": "Conchiglia", + "block.antarchy.critter_cage_block": "Gabbia per creature", + "block.antarchy.hushweed": "Hushweed", + "block.antarchy.umbral_moss_block": "Blocco di Muschio umbratile", + "block.antarchy.umbral_moss_carpet": "Tappeto di Muschio umbratile", + "block.antarchy.blush_moss_block": "Blocco di Muschio rosato", + "block.antarchy.blush_moss_carpet": "Tappeto di Muschio rosato", + "block.antarchy.duplicator_sapling": "Arboscello di Duplicatore", + "block.antarchy.duct_tape": "Nastro americano", + "block.antarchy.infested_rooted_dirt": "Terra con radici infestato", + "block.antarchy.infested_coarse_dirt": "Terra brulla infestato", + "block.antarchy.nyxite": "Nyxite", + "block.antarchy.polished_nyxite": "Nyxite levigato", + "block.antarchy.chiseled_nyxite": "Nyxite cesellato", + "block.antarchy.nyxite_bricks": "Mattoni di Nyxite", + "block.antarchy.shellstone": "Shellstone", + "block.antarchy.polished_shellstone": "Shellstone levigato", + "block.antarchy.shellstone_bricks": "Mattoni di Shellstone", + "block.antarchy.chiseled_shellstone": "Shellstone cesellato", + "block.antarchy.mossy_shellstone_bricks": "Mattoni di Shellstone muschioso", + "block.antarchy.mossy_shellstone_brick_stairs": "Scale di mattoni muschiosi di Shellstone", + "block.antarchy.mossy_shellstone_brick_slab": "Lastra di mattoni muschiosi di Shellstone", + "block.antarchy.mossy_shellstone_brick_wall": "Muretto di mattoni muschiosi di Shellstone", + "block.antarchy.cracked_shellstone_bricks": "Mattoni di Shellstone crepato", + "block.antarchy.shellstone_stairs": "Scale di Shellstone", + "block.antarchy.shellstone_slab": "Lastra di Shellstone", + "block.antarchy.shellstone_wall": "Muretto di Shellstone", + "block.antarchy.polished_shellstone_stairs": "Scale di Shellstone levigato", + "block.antarchy.polished_shellstone_slab": "Lastra di Shellstone levigato", + "block.antarchy.polished_shellstone_wall": "Muretto di Shellstone levigato", + "block.antarchy.shellstone_brick_stairs": "Scale di mattoni di Shellstone", + "block.antarchy.shellstone_brick_slab": "Lastra di mattoni di Shellstone", + "block.antarchy.shellstone_brick_wall": "Muretto di mattoni di Shellstone", + "block.antarchy.nyxite_stairs": "Scale di Nyxite", + "block.antarchy.nyxite_slab": "Lastra di Nyxite", + "block.antarchy.nyxite_wall": "Muretto di Nyxite", + "block.antarchy.polished_nyxite_stairs": "Scale di Nyxite levigato", + "block.antarchy.polished_nyxite_slab": "Lastra di Nyxite levigato", + "block.antarchy.polished_nyxite_wall": "Muretto di Nyxite levigato", + "block.antarchy.nyxite_brick_stairs": "Scale di mattoni di Nyxite", + "block.antarchy.nyxite_brick_slab": "Lastra di mattoni di Nyxite", + "block.antarchy.nyxite_brick_wall": "Muretto di mattoni di Nyxite", + "block.antarchy.pale_nyxite": "Nyxite pallido", + "block.antarchy.nyxite_spike": "Spuntone di Nyxite", + "block.antarchy.potent_nyxite": "Nyxite potente", + "block.antarchy.triffid_goo_block": "Blocco di Melma di Triffid", + "block.antarchy.elythia_portal": "Portale di Elythia", + "block.antarchy.cloud_block": "Blocco di Nuvola", + "block.antarchy.thoraxis_portal": "Portale di Thoraxis", + "block.antarchy.antimetal": "Antimetal", + "block.antarchy.polished_antimetal": "Antimetal levigato", + "block.antarchy.antimetal_scaffolding": "Impalcatura di Antimetal", + "block.antarchy.cornea_stalk": "Stelo di Cornea", + "block.antarchy.corn_crop": "Coltura di Mais", + "block.antarchy.dream_torch": "Torcia di Sogno", + "block.antarchy.dream_wall_torch": "Torcia da parete di Sogno", + "block.antarchy.dream_lantern": "Lanterna di Sogno", + "block.antarchy.dream_campfire": "Falò di Sogno", + "block.antarchy.dream_fire": "Fuoco di Sogno", + "block.antarchy.dream_fire_ceiling": "Fuoco di Sogno", + "block.antarchy.budding_blood_crystal": "Cristallo di sangue gemmante", + "block.antarchy.blood_crystal_block": "Blocco di Cristallo di sangue", + "block.antarchy.small_blood_crystal_bud": "Gemma di Cristallo di sangue piccolo", + "block.antarchy.medium_blood_crystal_bud": "Gemma di Cristallo di sangue medio", + "block.antarchy.large_blood_crystal_bud": "Gemma di Cristallo di sangue grande", + "block.antarchy.blood_crystal_cluster": "Grappolo di Cristallo di sangue", + "block.antarchy.dream_sand": "Sabbia di Sogno", + "block.antarchy.dream_sandstone": "Arenaria di Sogno", + "block.antarchy.chiseled_dream_sandstone": "Arenaria di Sogno cesellato", + "block.antarchy.cut_dream_sandstone": "Arenaria di Sogno tagliato", + "block.antarchy.smooth_dream_sandstone": "Arenaria di Sogno liscio", + "block.antarchy.dream_sandstone_stairs": "Scale di arenaria dei sogni", + "block.antarchy.dream_sandstone_slab": "Lastra di arenaria dei sogni", + "block.antarchy.dream_sandstone_wall": "Muretto di arenaria dei sogni", + "block.antarchy.smooth_dream_sandstone_stairs": "Scale di arenaria liscia dei sogni", + "block.antarchy.smooth_dream_sandstone_slab": "Lastra di arenaria liscia dei sogni", + "block.antarchy.cut_dream_sandstone_slab": "Lastra di arenaria tagliata dei sogni", + "block.antarchy.bed_bug_egg": "Uovo di Cimice dei letti", + "block.antarchy.wasp_nest": "Nido di Vespa", + "block.antarchy.red_ant_nest": "Nido di Formica rossa", + "block.antarchy.brown_ant_nest": "Nido di Formica marrone", + "block.antarchy.rainbow_ant_nest": "Nido di Formica arcobaleno", + "block.antarchy.uranium_ore": "Minerale di Uranio", + "block.antarchy.deepslate_uranium_ore": "Minerale di Uranio ardesia profonda", + "block.antarchy.titanium_ore": "Minerale di Titanio", + "block.antarchy.deepslate_titanium_ore": "Minerale di Titanio ardesia profonda", + "block.antarchy.uranium_block": "Blocco di uranio", + "block.antarchy.titanium_block": "Blocco di titanio", + "block.antarchy.raw_uranium_block": "Blocco di uranio grezzo", + "block.antarchy.raw_titanium_block": "Blocco di titanio grezzo", + "block.antarchy.cut_uranium": "Uranio tagliato", + "block.antarchy.cut_titanium": "Titanio tagliato", + "block.antarchy.cut_uranium_slab": "Lastra di Uranio tagliato", + "block.antarchy.cut_titanium_slab": "Lastra di Titanio tagliato", + "block.antarchy.cut_uranium_stairs": "Scale di Uranio tagliato", + "block.antarchy.cut_titanium_stairs": "Scale di Titanio tagliato", + "block.antarchy.chiseled_uranium": "Uranio cesellato", + "block.antarchy.chiseled_titanium": "Titanio cesellato", + "block.antarchy.uranium_bulb": "Lampada di Uranio", + "block.antarchy.titanium_bulb": "Lampada di Titanio", + "block.antarchy.uranium_door": "Porta di Uranio", + "block.antarchy.titanium_door": "Porta di Titanio", + "block.antarchy.uranium_trapdoor": "Botola di Uranio", + "block.antarchy.titanium_trapdoor": "Botola di Titanio", + "block.antarchy.uranium_bars": "Sbarre di Uranio", + "block.antarchy.titanium_bars": "Sbarre di Titanio", + "tooltip.antarchy.signal_saving_bulb": "Si accende e si spegne. Il livello di luce corrisponde alla potenza del segnale memorizzato.", + "block.antarchy.bile": "Bile", + "block.antarchy.ichor": "Icore", + "block.antarchy.antiwater": "Antiacqua", + "block.antarchy.lumen": "Lumen", + "block.antarchy.lumen_froglight": "Ranalume di Lumen", + "block.antarchy.roseate_froglight": "Ranalume rosato", + "block.antarchy.star_coral": "Corallo di Stella", + "block.antarchy.star_coral_fan": "Gorgonia stella", + "block.antarchy.star_coral_block": "Blocco di corallo stella", + "block.antarchy.dead_star_coral": "Corallo di Stella morto", + "block.antarchy.dead_star_coral_fan": "Gorgonia stella morta", + "block.antarchy.dead_star_coral_block": "Blocco di corallo stella morto", + "entity.antarchy.apple_cow": "Mucca mela", + "entity.antarchy.golden_apple_cow": "Mucca mela d’oro", + "entity.antarchy.enchanted_golden_apple_cow": "Mucca mela d’oro incantata", + "entity.antarchy.easter_bunny": "Coniglio pasquale", + "entity.antarchy.glimmer": "Glimmer", + "entity.antarchy.ouranwood_deer": "Cervo di Ouranwood", + "entity.antarchy.elka": "Elka", + "entity.antarchy.dorrie": "Dorrie", + "entity.antarchy.flying_squirrel": "Scoiattolo volante", + "entity.antarchy.caterpillar": "Bruco", + "entity.antarchy.butterfly": "Farfalla", + "entity.antarchy.brutalfly": "Brutalfly", + "entity.antarchy.red_ant": "Formica rossa", + "entity.antarchy.brown_ant": "Formica marrone", + "entity.antarchy.rainbow_ant": "Formica arcobaleno", + "entity.antarchy.diamond_minecart": "Il carrello di diamante", + "entity.antarchy.dr_trayaurus": "Dott. Trayaurus", + "entity.antarchy.cloud_shark": "Squalo delle nuvole", + "entity.antarchy.kraken": "Il Kraken", + "entity.antarchy.missile_squid": "Calamaro missile", + "entity.antarchy.octopus_bomb": "Bomba polpo", + "entity.antarchy.nightmare": "Incubo", + "entity.antarchy.bed_bug": "Cimice dei letti", + "entity.antarchy.wasp": "Vespa", + "entity.antarchy.bomber": "Bombardiere", + "entity.antarchy.moleworm": "Moleworm", + "entity.antarchy.molevore": "Molevore", + "entity.antarchy.mantis": "Mantide", + "entity.antarchy.alpha_mantis": "Mantide alfa", + "entity.antarchy.triffid": "Triffid", + "entity.antarchy.toreterror": "Toreterror", + "entity.antarchy.water_bomb": "Bomba d’acqua", + "subtitles.antarchy.mantis_ambient": "La mantide scatta", + "subtitles.antarchy.mantis_hurt": "La mantide strilla", + "subtitles.antarchy.mantis_attack": "La mantide scatta le mandibole", + "subtitles.antarchy.mantis_fly_loop": "La mantide ronza con le ali", + "item.antarchy.big_bertha": "Big Bertha", + "item.antarchy.wasp_nest": "Nido di Vespa", + "item.antarchy.stink_bug": "Cimice puzzolente", + "item.antarchy.wasp_spawn_egg": "Uovo generatore di Vespa", + "item.antarchy.bomber_spawn_egg": "Uovo generatore di Bombardiere", + "item.antarchy.big_bertha_blade": "Lama di Big Bertha", + "item.antarchy.big_bertha_handle": "Manico di Big Bertha", + "item.antarchy.big_bertha_hilt": "Elsa di Big Bertha", + "item.antarchy.battle_axe": "Ascia da battaglia", + "item.antarchy.attitude_adjuster": "Correttore d’atteggiamento", + "tooltip.antarchy.attitude_adjuster.grounded": "Scaglia in aria i bersagli a terra e schianta al suolo quelli in volo.", + "tooltip.antarchy.attitude_adjuster.slam": "Fai clic destro in aria per schiantarti al suolo.", + "item.antarchy.cloud_shark_fin": "Pinna di squalo delle nuvole", + "item.antarchy.cloud_shark_fin_soup": "Zuppa di pinna di squalo delle nuvole", + "tooltip.antarchy.cloud_shark_fin_soup": "Conferisce Forza e Caduta lenta.", + "tooltip.antarchy.critter_cage.empty": "Fai clic destro per lanciare", + "tooltip.antarchy.critter_cage.contains": "Contiene: %s", + "tooltip.antarchy.critter_cage.release": "Fai clic destro per liberare", + "tooltip.antarchy.critter_cage.place": "Maiusc + clic destro per posizionare", + "item.antarchy.kraken_tooth": "Dente di Kraken", + "item.antarchy.kraken_tentacle": "Tentacolo di Kraken", + "item.antarchy.krakens_grasp": "Morsa del Kraken", + "entity.antarchy.tentacle": "Tentacolo", + "item.antarchy.basilisk_fang": "Zanna di basilisco", + "item.antarchy.basilisk_dagger": "Pugnale di Basilisco", + "item.antarchy.blood_crystal_block": "Blocco di Cristallo di sangue", + "item.antarchy.small_blood_crystal_bud": "Gemma di Cristallo di sangue piccolo", + "item.antarchy.medium_blood_crystal_bud": "Gemma di Cristallo di sangue medio", + "item.antarchy.large_blood_crystal_bud": "Gemma di Cristallo di sangue grande", + "item.antarchy.blood_crystal_cluster": "Grappolo di Cristallo di sangue", + "item.antarchy.dream_sand": "Sabbia di Sogno", + "item.antarchy.dream_sandstone": "Arenaria di Sogno", + "item.antarchy.chiseled_dream_sandstone": "Arenaria di Sogno cesellato", + "item.antarchy.cut_dream_sandstone": "Arenaria di Sogno tagliato", + "item.antarchy.smooth_dream_sandstone": "Arenaria di Sogno liscio", + "item.antarchy.dream_sandstone_stairs": "Scale di arenaria dei sogni", + "item.antarchy.dream_sandstone_slab": "Lastra di arenaria dei sogni", + "item.antarchy.dream_sandstone_wall": "Muretto di arenaria dei sogni", + "item.antarchy.smooth_dream_sandstone_stairs": "Scale di arenaria liscia dei sogni", + "item.antarchy.smooth_dream_sandstone_slab": "Lastra di arenaria liscia dei sogni", + "item.antarchy.cut_dream_sandstone_slab": "Lastra di arenaria tagliata dei sogni", + "item.antarchy.dream_torch": "Torcia di Sogno", + "item.antarchy.dream_lantern": "Lanterna di Sogno", + "item.antarchy.dream_campfire": "Falò di Sogno", + "item.antarchy.giant_lily_pad": "Ninfea gigante", + "item.antarchy.seashell": "Conchiglia", + "item.antarchy.nightmare_scale": "Scaglia dell’Incubo", + "item.antarchy.nightmare_helmet": "Elmo di Incubo", + "item.antarchy.nightmare_chestplate": "Corazza di Incubo", + "item.antarchy.nightmare_leggings": "Gambali di Incubo", + "item.antarchy.nightmare_boots": "Stivali di Incubo", + "item.antarchy.nightmare_sword": "Spada di Incubo", + "tooltip.antarchy.nightmare_armor_double_damage": "Probabilità del %s%% di infliggere danni doppi", + "tooltip.antarchy.nightmare_armor_set_bonus": "Set completo: immunità ad Avvizzimento e Terrore", + "tooltip.antarchy.nightmare_sword": "Infligge più danni al diminuire della tua salute.", + "tooltip.antarchy.nightmare_sword_damage": "Infligge %s danni", + "tooltip.antarchy.primordial_helmet_water_breathing": "Conferisce Respirazione al portatore", + "tooltip.antarchy.primordial_armor_knockback_dealt": "Aggiunge %s di contraccolpo d’attacco per pezzo", + "tooltip.antarchy.primordial_armor_set_bonus": "Set completo: gli attacchi ignorano la resistenza al contraccolpo dei nemici", + "attribute.antarchy.double_damage_chance": "Probabilità di danno doppio", + "attribute.antarchy.bloodglass_max_hearts": "Cuori di vetrosangue massimi", + "item.antarchy.molevore_nose": "Naso di Molevore", + "item.antarchy.moleworm": "Moleworm", + "item.antarchy.triffid_spawn_egg": "Uovo generatore di Triffid", + "item.antarchy.infested_rooted_dirt": "Terra con radici infestato", + "item.antarchy.infested_coarse_dirt": "Terra brulla infestato", + "item.antarchy.pale_nyxite": "Nyxite pallido", + "item.antarchy.polished_nyxite": "Nyxite levigato", + "item.antarchy.chiseled_nyxite": "Nyxite cesellato", + "item.antarchy.nyxite_bricks": "Mattoni di Nyxite", + "item.antarchy.shellstone": "Shellstone", + "item.antarchy.polished_shellstone": "Shellstone levigato", + "item.antarchy.shellstone_bricks": "Mattoni di Shellstone", + "item.antarchy.chiseled_shellstone": "Shellstone cesellato", + "item.antarchy.mossy_shellstone_bricks": "Mattoni di Shellstone muschioso", + "item.antarchy.mossy_shellstone_brick_stairs": "Scale di mattoni muschiosi di Shellstone", + "item.antarchy.mossy_shellstone_brick_slab": "Lastra di mattoni muschiosi di Shellstone", + "item.antarchy.mossy_shellstone_brick_wall": "Muretto di mattoni muschiosi di Shellstone", + "item.antarchy.cracked_shellstone_bricks": "Mattoni di Shellstone crepato", + "item.antarchy.shellstone_stairs": "Scale di Shellstone", + "item.antarchy.shellstone_slab": "Lastra di Shellstone", + "item.antarchy.shellstone_wall": "Muretto di Shellstone", + "item.antarchy.polished_shellstone_stairs": "Scale di Shellstone levigato", + "item.antarchy.polished_shellstone_slab": "Lastra di Shellstone levigato", + "item.antarchy.polished_shellstone_wall": "Muretto di Shellstone levigato", + "item.antarchy.shellstone_brick_stairs": "Scale di mattoni di Shellstone", + "item.antarchy.shellstone_brick_slab": "Lastra di mattoni di Shellstone", + "item.antarchy.shellstone_brick_wall": "Muretto di mattoni di Shellstone", + "item.antarchy.nyxite_stairs": "Scale di Nyxite", + "item.antarchy.nyxite_slab": "Lastra di Nyxite", + "item.antarchy.nyxite_wall": "Muretto di Nyxite", + "item.antarchy.polished_nyxite_stairs": "Scale di Nyxite levigato", + "item.antarchy.polished_nyxite_slab": "Lastra di Nyxite levigato", + "item.antarchy.polished_nyxite_wall": "Muretto di Nyxite levigato", + "item.antarchy.nyxite_brick_stairs": "Scale di mattoni di Nyxite", + "item.antarchy.nyxite_brick_slab": "Lastra di mattoni di Nyxite", + "item.antarchy.nyxite_brick_wall": "Muretto di mattoni di Nyxite", + "item.antarchy.potent_nyxite": "Nyxite potente", + "item.antarchy.antimetal": "Antimetal", + "item.antarchy.polished_antimetal": "Antimetal levigato", + "item.antarchy.antimetal_scaffolding": "Impalcatura di Antimetal", + "item.antarchy.ouranwood_acorn": "Ghianda di Ouranwood", + "item.antarchy.ouranwood_boat": "Barca di Ouranwood", + "item.antarchy.ouranwood_chest_boat": "Barca con baule di Ouranwood", + "item.antarchy.raw_venison": "Carne di cervo cruda", + "item.antarchy.cooked_venison": "Carne di cervo cotta", + "item.antarchy.peach_sapling": "Arboscello di Pesca", + "item.antarchy.peach": "Pesca", + "item.antarchy.peach_pie": "Torta di Pesca", + "item.antarchy.cornbread": "Pane di mais", + "item.antarchy.popcorn": "Popcorn", + "item.antarchy.peach_sign": "Cartello di Pesca", + "item.antarchy.peach_hanging_sign": "Cartello sospeso di Pesca", + "item.antarchy.peach_boat": "Barca di Pesca", + "item.antarchy.peach_chest_boat": "Barca con baule di Pesca", + "item.antarchy.orange_milkweed": "Asclepiade arancione", + "item.antarchy.pink_milkweed": "Asclepiade rosa", + "item.antarchy.camellia": "Camelia", + "item.antarchy.spider_lily": "Giglio ragno", + "item.antarchy.hushweed": "Hushweed", + "item.antarchy.umbral_moss_block": "Blocco di Muschio umbratile", + "item.antarchy.umbral_moss_carpet": "Tappeto di Muschio umbratile", + "item.antarchy.blush_moss_block": "Blocco di Muschio rosato", + "item.antarchy.blush_moss_carpet": "Tappeto di Muschio rosato", + "item.antarchy.mud_pie": "Torta di fango", + "item.antarchy.duct_tape": "Nastro americano", + "item.antarchy.duct_tape.tooltip": "Posizionalo e fai clic destro per riparare gli strumenti", + "item.antarchy.rainbow_sugar": "Zucchero arcobaleno", + "item.antarchy.uranium_nugget": "Pepita di Uranio", + "item.antarchy.titanium_nugget": "Pepita di Titanio", + "item.antarchy.raw_uranium_scrap": "Frammento di Uranio crudo", + "item.antarchy.raw_titanium_scrap": "Frammento di Titanio crudo", + "item.antarchy.raw_uranium": "Uranio crudo", + "item.antarchy.raw_titanium": "Titanio crudo", + "item.antarchy.uranium_ingot": "Lingotto di Uranio", + "item.antarchy.titanium_ingot": "Lingotto di Titanio", + "item.antarchy.blood_crystal_shard": "Scheggia di Cristallo di sangue", + "item.antarchy.blood_crystal_apple": "Mela di cristallo di sangue", + "item.antarchy.blood_crystal_katana": "Katana di Cristallo di sangue", + "item.antarchy.blood_crystal_helmet": "Elmo di Cristallo di sangue", + "item.antarchy.blood_crystal_chestplate": "Corazza di Cristallo di sangue", + "item.antarchy.blood_crystal_leggings": "Gambali di Cristallo di sangue", + "item.antarchy.blood_crystal_boots": "Stivali di Cristallo di sangue", + "item.antarchy.blood_crystal_armor.tooltip": "Conferisce un Cuore di vetrosangue che blocca un colpo, si infrange e poi si ricarica.", + "item.antarchy.blood_crystal_boots.tooltip2": "Annulla i danni da caduta quando cadi verso l’alto con la gravità invertita.", + "item.antarchy.blood_crystal_apple.tooltip": "Conferisce Protezione di vetrosangue, fornendo Cuori di vetrosangue temporanei che si ricaricano finché dura l’effetto.", + "tooltip.antarchy.blood_crystal_katana.launch": "Ti scaglia in avanti quando colpisci.", + "tooltip.antarchy.blood_crystal_katana.trail": "Lascia una scia cremisi dietro di te.", + "item.antarchy.mantis_claw": "Artiglio di Mantide", + "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", + "item.antarchy.king_scale": "Scaglia di Re", + "item.antarchy.queen_scale": "Scaglia di Regina", + "item.antarchy.jumpy_bug_leg": "Zampa di Insetto saltatore", + "item.antarchy.jumpy_boots": "Stivali saltatori", + "tooltip.antarchy.jumpy_boots": "Accovacciati per caricare, poi salta per balzare verso l’alto.", + "item.antarchy.brutalfly_wing": "Ala di Brutalfly", + "item.antarchy.brutalfly_elytra": "Elitre di Brutalfly", + "tooltip.antarchy.brutalfly_elytra.flap": "Durante il volo, tieni premuto %s per battere le ali", + "item.antarchy.cornea_ear": "Orecchio di Cornea", + "item.antarchy.corn": "Mais", + "item.antarchy.corn_seeds": "Semi di Mais", + "item.antarchy.raw_corndog": "Corn dog crudo", + "item.antarchy.cooked_corndog": "Corn dog cotto", + "item.antarchy.high_fructose_corn_syrup": "Sciroppo di mais ad alto contenuto di fruttosio", + "jei.antarchy.americanize": "Americanizza", + "item.antarchy.american_name": "%s americano", + "item.antarchy.root_beer": "Birra di radice", + "item.antarchy.primordial_scute": "Scuto di Primordiale", + "item.antarchy.triffid_goo": "Melma di Triffid", + "item.antarchy.triffid_goo_block": "Blocco di Melma di Triffid", + "tooltip.antarchy.triffid_goo_block": "Ad alta velocità rimbalzi verso l’alto; altrimenti ci sprofondi attraverso.", + "item.antarchy.cloud_bucket": "Secchio di Nuvola", + "tooltip.antarchy.cloud_bucket.midair": "Può essere posizionato a mezz’aria", + "item.antarchy.lumen_bucket": "Secchio di Lumen", + "item.antarchy.scorpion_whip": "Frusta di Scorpione imperatore", + "tooltip.antarchy.scorpion_whip.lash": "Colpisce la preda da lontano e vi conficca un legame velenoso.", + "tooltip.antarchy.scorpion_whip.reel": "Fai clic destro per attirare la preda legata.", + "tooltip.antarchy.scorpion_whip.snap": "Colpisci di nuovo la preda legata per strappare via il pungiglione.", + "item.antarchy.fallen_king_crown": "Corona del Re Caduto", + "tooltip.antarchy.fallen_king_crown.hero": "Conferisce Eroe del villaggio quando uccidi creature ostili", + "item.antarchy.vortex_eye": "Occhio di Vortice", + "item.antarchy.ultimate_helmet": "Elmo di Supremo", + "item.antarchy.ultimate_chestplate": "Corazza di Supremo", + "item.antarchy.ultimate_leggings": "Gambali di Supremo", + "item.antarchy.ultimate_boots": "Stivali di Supremo", + "item.antarchy.ultimate_sword": "Spada di Supremo", + "item.antarchy.ultimate_pickaxe": "Piccone supremo", + "item.antarchy.ultimate_axe": "Ascia di Supremo", + "item.antarchy.ultimate_shovel": "Pala di Supremo", + "item.antarchy.ultimate_hoe": "Zappa di Supremo", + "item.antarchy.ultimate_bow": "Arco di Supremo", + "item.antarchy.ultimate_crossbow": "Balestra di Supremo", + "item.antarchy.ultimate_crossbow.capacity": "Carica fino a 16 frecce contemporaneamente", + "item.antarchy.ultimate_crossbow.arrows_remaining": "%1$s %2$s caricate", + "item.antarchy.ultimate_mace": "Mazza di Supremo", + "item.antarchy.moggles": "Moggles", + "itemGroup.antarchy.antarchy": "Antarchy", + "item.antarchy.bile_bucket": "Secchio di Bile", + "item.antarchy.ichor_bucket": "Secchio di Icore", + "item.antarchy.antiwater_bucket": "Secchio di Antiacqua", + "item.antarchy.reverie_bottle": "Bottiglia di Reverie", + "item.antarchy.squidzooka": "Squidzooka", + "item.antarchy.rpo_launcher": "Lanciatore P.P.R.", + "item.antarchy.shrink_ray": "Raggio restringente", + "item.antarchy.growth_ray": "Raggio di crescita", + "tooltip.antarchy.shrink_ray": "Rimpicciolisce permanentemente i bersagli. Tieni premuto per caricare.", + "tooltip.antarchy.growth_ray": "Ingrandisce permanentemente i bersagli. Tieni premuto per caricare.", + "tooltip.antarchy.size_ray_milk_reset": "Bere il latte annulla questo effetto.", + "tooltip.antarchy.reverie_bottle.capture": "Fai clic destro su una Reverie con una bottiglia di vetro per catturarla.", + "tooltip.antarchy.reverie_bottle.release": "Fai clic destro per liberare la Reverie.", + "item.antarchy.gravity_gun": "Cannone gravitazionale", + "item.antarchy.miners_dream": "Sogno del minatore", + "tooltip.antarchy.miners_dream.line1": "Fai clic destro per scavare una grotta tortuosa.", + "tooltip.antarchy.miners_dream.line2": "Lascia intatti i blocchi preziosi.", + "message.antarchy.miners_dream_disabled": "Il Sogno del minatore è disattivato.", + "message.antarchy.miners_dream_busy": "Il tuo sogno precedente si sta ancora dispiegando.", + "item.antarchy.diamond_minecart": "Il carrello di diamante", + "item.antarchy.cogwheel_pet": "Famiglio ingranaggio", + "item.antarchy.fire_dragon_pet": "Famiglio drago di fuoco", + "item.antarchy.ice_dragon_pet": "Famiglio drago di ghiaccio", + "item.antarchy.lightning_dragon_pet": "Famiglio drago del fulmine", + "item.antarchy.gorgon_pet": "Famiglio di Gorgone", + "item.antarchy.apple_cow_spawn_egg": "Uovo generatore di Mucca mela", + "item.antarchy.red_ant_spawn_egg": "Uovo generatore di Formica rossa", + "item.antarchy.brown_ant_spawn_egg": "Uovo generatore di Formica marrone", + "item.antarchy.rainbow_ant_spawn_egg": "Uovo generatore di Formica arcobaleno", + "item.antarchy.golden_apple_cow_spawn_egg": "Uovo generatore di Mucca mela dorato", + "item.antarchy.enchanted_golden_apple_cow_spawn_egg": "Uovo generatore di Mucca mela dorato incantato", + "item.antarchy.dr_trayaurus_spawn_egg": "Uovo generatore di Dott. Trayaurus", + "item.antarchy.easter_bunny_spawn_egg": "Uovo generatore di Coniglio pasquale", + "item.antarchy.glimmer_spawn_egg": "Uovo generatore di Glimmer", + "item.antarchy.ouranwood_deer_spawn_egg": "Uovo generatore di Cervo di Ouranwood", + "item.antarchy.spirit_apple": "Mela spirituale", + "item.antarchy.elka_spawn_egg": "Uovo generatore di Elka", + "item.antarchy.glimmer_bottle": "Bottiglia di Glimmer", + "item.antarchy.glimmer_bottle.contains": "Contiene: %s", + "glimmer_variant.antarchy.apple_cow": "Mucca mela", + "glimmer_variant.antarchy.ouranwood_deer": "Cervo di Ouranwood", + "glimmer_variant.antarchy.frog": "Rana", + "glimmer_variant.antarchy.ant": "Formica", + "glimmer_variant.antarchy.elka": "Elka", + "entity.antarchy.glimmer.set_sit": "Glimmer ora resta seduto.", + "entity.antarchy.glimmer.set_follow": "Glimmer ora ti segue.", + "entity.antarchy.glimmer.set_wander": "Glimmer ora vaga liberamente.", + "entity.antarchy.glimmer.ability.ant": "La tua Formica ti incita contro %s!", + "entity.antarchy.glimmer.ability.apple_cow": "La tua Mucca mela muggisce e ti nutre!", + "entity.antarchy.glimmer.ability.elka": "La tua Elka grida e frantuma la protezione!", + "entity.antarchy.glimmer.ability.deer": "Il tuo Cervo di Ouranwood travolge il nemico!", + "entity.antarchy.glimmer.ability.frog": "La tua Rana ha divorato %s!", + "item.antarchy.glimmer_bottle.passive.apple_cow": "Passiva: la fame cala il 25% più lentamente", + "item.antarchy.glimmer_bottle.ability.apple_cow": "Abilità: muggisce, fornendo Saturazione e Rigenerazione quando hai poco cibo", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "Passiva: Velocità I", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "Abilità: travolge le creature ostili quando corri verso di loro, facendole volare", + "item.antarchy.glimmer_bottle.passive.frog": "Passiva: Salto amplificato I", + "item.antarchy.glimmer_bottle.ability.frog": "Abilità: divora una creatura ostile vicina, diventando temporaneamente più grande e forte", + "item.antarchy.glimmer_bottle.passive.ant": "Passiva: portata d’attacco leggermente maggiore", + "item.antarchy.glimmer_bottle.ability.ant": "Abilità: colpire un grande nemico conferisce brevemente Forza II", + "item.antarchy.glimmer_bottle.passive.elka": "Passiva: Protezione di vetrosangue II", + "item.antarchy.glimmer_bottle.ability.elka": "Abilità: grida e si frantuma in un’onda d’urto quando si spezza uno dei tuoi cuori protettivi", + "advancements.antarchy.spirant_animal.title": "Animale SpirFORMICA", + "advancements.antarchy.spirant_animal.description": "Addomestica un Glimmer Formica", + "advancements.antarchy.hoppy_together.title": "Saltellando insieme", + "advancements.antarchy.hoppy_together.description": "Addomestica un Glimmer Rana", + "advancements.antarchy.deerly_beloved.title": "Cervamente amato", + "advancements.antarchy.deerly_beloved.description": "Addomestica un Glimmer Cervo di Ouranwood", + "advancements.antarchy.elkcellent_choice.title": "Scelta CERVellente", + "advancements.antarchy.elkcellent_choice.description": "Addomestica un Glimmer Elka", + "advancements.antarchy.apple_of_my_eye.title": "La pupilla dei miei occhi", + "advancements.antarchy.apple_of_my_eye.description": "Addomestica un Glimmer Mucca mela", + "item.antarchy.dorrie_spawn_egg": "Uovo generatore di Dorrie", + "item.antarchy.flying_squirrel_spawn_egg": "Uovo generatore di Scoiattolo volante", + "item.antarchy.caterpillar_spawn_egg": "Uovo generatore di Bruco", + "item.antarchy.butterfly_spawn_egg": "Uovo generatore di Farfalla", + "item.antarchy.brutalfly_spawn_egg": "Uovo generatore di Brutalfly", + "item.antarchy.cloud_shark_spawn_egg": "Uovo generatore di Squalo delle nuvole", + "item.antarchy.kraken_spawn_egg": "Ehm, no. Non farlo.", + "item.antarchy.missile_squid_spawn_egg": "Uovo generatore di Calamaro missile", + "item.antarchy.octopus_bomb_spawn_egg": "Uovo generatore di Bomba polpo", + "item.antarchy.nightmare_spawn_egg": "Uovo generatore di Incubo", + "item.antarchy.toreterror_spawn_egg": "Uovo generatore di Toreterror", + "item.antarchy.water_cannon": "Cannone ad acqua", + "item.antarchy.primordial_helmet": "Elmo di Primordiale", + "item.antarchy.primordial_chestplate": "Corazza di Primordiale", + "item.antarchy.primordial_leggings": "Gambali di Primordiale", + "item.antarchy.primordial_boots": "Stivali di Primordiale", + "item.antarchy.bed_bug_spawn_egg": "Uovo generatore di Cimice dei letti", + "item.antarchy.moleworm_spawn_egg": "Uovo generatore di Moleworm", + "item.antarchy.molevore_spawn_egg": "Uovo generatore di Molevore", + "item.antarchy.reverie_spawn_egg": "Uovo generatore di Reverie", + "item.antarchy.mantis_spawn_egg": "Uovo generatore di Mantide", + "item.antarchy.alpha_mantis_spawn_egg": "Uovo generatore di Mantide alfa", + "biome.antarchy.moleworm_caves": "Grotte dei Moleworm", + "biome.antarchy.elythia_meadow": "Prati elythiani", + "biome.antarchy.butterfly_fields": "Campi delle farfalle", + "biome.antarchy.ouranwood_forest": "Foresta di Ouranwood", + "biome.antarchy.glimmering_pools": "Pozze scintillanti", + "biome.antarchy.peach_forest": "Foresta di peschi", + "biome.antarchy.fungal_ouranwood_forest": "Foresta fungina di Ouranwood", + "biome.antarchy.glowcap_caves": "Grotte dei Glowcap", + "message.antarchy.brown_ant_activated": "La formica marrone è pronta ad aprire la sua destinazione.", + "message.antarchy.brown_ant_needs_reagent": "Questa formica marrone ha bisogno di un reagente prima di poter aprire la destinazione.", + "message.antarchy.rainbow_ant_activated": "La formica arcobaleno vibra verso una nuova destinazione di Infinity.", + "message.antarchy.rainbow_ant_activated_inherited": "La formica arcobaleno vibra verso una destinazione di Infinity ereditata.", + "message.antarchy.rainbow_ant_activated_inherited_existing": "La formica arcobaleno si riconnette a una destinazione di Infinity ereditata.", + "message.antarchy.rainbow_ant_failed_dimension_create": "Impossibile creare la dimensione. Probabilmente c’è un problema nella configurazione di Infinity. Riavvia o rientra e riprova.", + "message.antarchy.rainbow_ant_infinity_missing": "Infinity deve essere installato affinché le dimensioni delle formiche arcobaleno funzionino.", + "message.antarchy.rainbow_ant_needs_reagent": "Questa formica arcobaleno ha bisogno di un reagente prima di poter aprire una dimensione.", + "message.antarchy.red_ant_activated": "La formica rossa è pronta ad aprire la sua destinazione.", + "message.antarchy.red_ant_needs_reagent": "Questa formica rossa ha bisogno di un reagente prima di poter aprire la destinazione.", + "message.antarchy.termite_activated": "La termite è pronta ad aprire la sua destinazione.", + "message.antarchy.termite_needs_reagent": "Questa termite ha bisogno di un reagente prima di poter aprire la destinazione.", + "death.attack.spit_bug_disrespect": "%1$s è stato umiliato dall’Insetto sputatore", + "death.attack.jumpy_bug_jump": "%1$s è stato assalito dall’Insetto saltatore", + "death.attack.hercules_beetle_obliteration": "%1$s è stato annientato dallo Scarabeo Ercole", + "message.antarchy.big_bertha.mode": "Modalità Big Bertha: %s", + "message.antarchy.big_bertha.mode.basilisk": "Basilisco", + "message.antarchy.big_bertha.mode.lucid": "Lucid", + "message.antarchy.big_bertha.mode.nightmare": "Incubo", + "message.antarchy.big_bertha.mode.kraken": "Kraken", + "message.antarchy.big_bertha.mode.molevore": "Molevore", + "message.antarchy.big_bertha.mode.toreterror": "Toreterror", + "message.antarchy.ultimate_tool.mode_3x3": "Scavo 3×3 attivato", + "message.antarchy.ultimate_tool.mode_default": "Scavo normale attivato", + "advancements.antarchy.hey_listen.title": "Ehi, ascolta!", + "advancements.antarchy.hey_listen.description": "Una Reverie si è unita a te.", + "advancements.antarchy.very_hungry_caterpillar.title": "Il bruco molto affamato", + "advancements.antarchy.very_hungry_caterpillar.description": "Aiuta un bruco a crescere.", + "effect.antarchy.dread": "Terrore", + "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.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.", + "effect.antarchy.shrinking": "Restringimento", + "effect.antarchy.growth": "Crescita", + "effect.antarchy.bloodglass_ward": "Protezione di vetrosangue", + "effect.antarchy.bloodglass_ward.description": "Conferisce cuori che si frantumano assorbendo un colpo intero di danno. Si rigenerano col tempo.", + "death.attack.triffid_mauling": "%1$s è stato sbranato a morte da una pianta", + "death.attack.triffid_mauling.player": "%1$s è stato sbranato a morte da una pianta", + "death.attack.triffid_swallow": "%1$s è stato inghiottito da un Triffid", + "death.attack.triffid_swallow.player": "%1$s è stato inghiottito da un Triffid", + "potion.antarchy.haste": "Pozione di Rapidità", + "potion.antarchy.strong_haste": "Pozione forte di Rapidità", + "tooltip.antarchy.big_bertha.mode": "Modalità: %s", + "tooltip.antarchy.big_bertha.toggle_mode": "Maiusc + clic destro per cambiare modalità boss.", + "tooltip.antarchy.big_bertha.mode.basilisk": "Il clic destro paralizza un bersaglio. I colpi infliggono veleno e lentezza.", + "tooltip.antarchy.big_bertha.mode.lucid": "I colpi invertono i bersagli per alcuni secondi e infliggono più danni mentre sei invertito.", + "tooltip.antarchy.big_bertha.mode.nightmare": "I giocatori subiscono Terrore; i colpi infliggono Debolezza.", + "tooltip.antarchy.big_bertha.mode.kraken": "I colpi respingono violentemente i bersagli e richiamano fulmini.", + "tooltip.antarchy.big_bertha.mode.molevore": "Fai clic destro per ruotare in avanti e perforare i blocchi di Molevore.", + "tooltip.antarchy.big_bertha.mode.toreterror": "Fai clic destro per balzare in aria e schiantarti con un’onda d’urto ad area.", + "tooltip.antarchy.ultimate_tools_3x3": "Maiusc + clic destro per attivare o disattivare lo scavo 3×3.", + "tooltip.antarchy.moggles.reveal": "Fornisce Visione notturna e indica le grotte vicine.", + "tooltip.antarchy.moggles.underground": "Funziona solo quando non puoi vedere il cielo.", + "tooltip.antarchy.cornea_ear.vision": "Conferisce Visione notturna per %s secondi.", + "tooltip.antarchy.mob_coming_soon": "Creatura in arrivo!", + "tooltip.antarchy.gravity_gun.primary": "Clic sinistro: respinge le entità vicine o scaglia il bersaglio trattenuto.", + "tooltip.antarchy.gravity_gun.secondary": "Clic destro: attira un’entità o un blocco valido.", + "tooltip.antarchy.gravity_gun.scroll": "Tieni premuto Ctrl e scorri per avvicinare o allontanare il bersaglio trattenuto.", + "tooltip.antarchy.gravity_gun.blacklist": "Non influenza i blocchi o le entità nella lista nera.", + "tooltip.antarchy.antimetal_inversion": "Inverte le entità direttamente sotto di esso", + "tooltip.antarchy.diamond_minecart.forward": "Verrà implementato in seguito.", + "tooltip.antarchy.diamond_minecart.rails": " ", + "tooltip.antarchy.rainbow_sugar": "Attiva le dimensioni delle Formiche arcobaleno. Mangialo al loro interno per tornare a casa.", + "advancements.antarchy.visit_elythia.title": "InterdimenFORMICAsionale", + "advancements.antarchy.visit_elythia.description": "Usa una formica marrone per raggiungere Elythia.", + "advancements.antarchy.visit_thoraxis.title": "Gestione della formic-ira", + "advancements.antarchy.visit_thoraxis.description": "Usa una formica rossa per raggiungere Thoraxis.", + "advancements.antarchy.fallen_kingdom_castle.title": "Un tempo governavo il mondo...", + "advancements.antarchy.fallen_kingdom_castle.description": "Scopri il Castello del Regno Caduto.", + "advancements.antarchy.fallen_king_crown.title": "I chunk si caricavano al mio comando...", + "advancements.antarchy.fallen_king_crown.description": "Ottieni la Corona del Re Caduto.", + "advancements.antarchy.the_lab.title": "Ciao a tutti, qui Dan!", + "advancements.antarchy.the_lab.description": "Scopri il laboratorio del Dott. Trayaurus.", + "advancements.antarchy.sweater_dreams.title": "Sogni in maglione", + "advancements.antarchy.sweater_dreams.description": "Sconfiggi l’Incubo.", + "advancements.antarchy.stone_cold.title": "Freddo come la pietra", + "advancements.antarchy.stone_cold.description": "Sconfiggi un Basilisco.", + "advancements.antarchy.moley_poley.title": "Talpa rotolante", + "advancements.antarchy.moley_poley.description": "Sconfiggi un Molevore.", + "advancements.antarchy.lucid_dreams.title": "Sogni lucidi", + "advancements.antarchy.lucid_dreams.description": "Sconfiggi un Lucid.", + "advancements.antarchy.davy_jones_locker.title": "Lo scrigno di Davy Jones", + "advancements.antarchy.davy_jones_locker.description": "Sconfiggi il Kraken.", + "advancements.antarchy.shark_weak.title": "Quando gli squali voleranno", + "advancements.antarchy.shark_weak.description": "Sconfiggi uno Squalo delle nuvole.", + "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "Non farti mordere dalle cimici", + "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "Sconfiggi una Cimice dei letti.", + "advancements.antarchy.soups_up.title": "La zuppa è pronta", + "advancements.antarchy.soups_up.description": "Mangia una Zuppa di pinna di squalo delle nuvole.", + "advancements.antarchy.in_the_upside_down.title": "Nel Sottosopra", + "advancements.antarchy.in_the_upside_down.description": "Vieni invertito per la prima volta.", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "Chi l’ha annusata l’ha fatta", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "Diventa Puzzolente per la prima volta.", + "advancements.antarchy.ultimate_armor.title": "Protezione suprema", + "advancements.antarchy.ultimate_armor.description": "Raccogli il set completo dell’Armatura suprema.", + "advancements.antarchy.ultimate_bow.title": "Arcohemian Rhapsody", + "advancements.antarchy.ultimate_bow.description": "Ottieni un Arco supremo.", + "advancements.antarchy.brutalfly.title": "Vola come una Brutalfly, pungi come un’ape", + "advancements.antarchy.brutalfly.description": "Ottieni un’Elitre di Brutalfly.", + "advancements.antarchy.now_watch_me_whip.title": "Ora guardami frustare", + "advancements.antarchy.now_watch_me_whip.description": "Ora guardami fare il nae nae", + "advancements.antarchy.kill_molevore.title": "Talpa rotolante", + "advancements.antarchy.kill_molevore.description": "Uccidi un Molevore.", + "advancements.antarchy.water_cannon_craft.title": "Più bagnato è meglio!", + "advancements.antarchy.water_cannon_craft.description": "Ottieni un Cannone ad acqua.", + "advancements.antarchy.kill_toreterror.title": "Più che altro Tore-mira terribile!", + "advancements.antarchy.kill_toreterror.description": "Sconfiggi il Toreterror.", + "advancements.antarchy.challenge_games.title": "Giochi della sfida!", + "advancements.antarchy.challenge_games.description": "Entra nell’Arena in rovina.", + "advancements.antarchy.bugged_out.title": "Fuori di insetto", + "advancements.antarchy.bugged_out.description": "Sconfiggi la Mantide alfa.", + "death.attack.bed_bug_bite": "%1$s è stato morso dalle cimici dei letti", + "death.attack.bed_bug_bite.player": "%1$s è stato morso dalle cimici dei letti mentre combatteva contro %2$s", + "message.antarchy.dread_too_scared_to_sleep": "Hai troppa paura per dormire.", + "death.attack.kraken_mauling": "%1$s è stato trascinato negli abissi dal Kraken", + "death.attack.kraken_mauling.player": "%1$s è stato trascinato negli abissi dal Kraken mentre combatteva contro %2$s", + "death.attack.kraken_lightning": "%1$s è stato abbattuto dalla tempesta del Kraken", + "death.attack.kraken_lightning.player": "%1$s è stato abbattuto dalla tempesta del Kraken mentre combatteva contro %2$s", + "death.attack.rpo_launcher_blast": "%1$s è stato messo al tappeto da un P.P.R.", + "death.attack.rpo_launcher_blast.player": "%1$s è stato messo al tappeto da un P.P.R. mentre combatteva contro %2$s", + "death.attack.nightmare_mauling": "%1$s è stato divorato dall’Incubo", + "death.attack.nightmare_mauling.player": "%1$s è stato divorato dall’Incubo mentre combatteva contro %2$s", + "death.attack.basilisk_bite": "%1$s è stato inghiottito da un Basilisco", + "death.attack.basilisk_bite.player": "%1$s è stato inghiottito da un Basilisco mentre combatteva contro %2$s", + "death.attack.emperor_scorpion_sting": "%1$s è stato punto dallo Scorpione imperatore", + "death.attack.emperor_scorpion_sting.player": "%1$s è stato punto dallo Scorpione imperatore mentre combatteva contro %2$s", + "death.attack.cornea_stalk_prick": "%1$s è stato trafitto a morte da uno Stelo di Cornea", + "death.attack.toreterror_spin": "%1$s è stato fatto girare a morte da Toreterror", + "death.attack.toreterror_spin.player": "%1$s è stato fatto girare a morte da Toreterror", + "death.attack.toreterror_jump": "%1$s è stato schiacciato a morte da Toreterror", + "death.attack.toreterror_jump.player": "%1$s è stato schiacciato a morte da Toreterror", + "death.attack.water_soaked": "%1$s è stato inzuppato a morte da %2$s", + "death.attack.water_soaked.player": "%1$s è stato inzuppato a morte da %2$s", + "entity.antarchy.lucid": "Lucid", + "item.antarchy.lucid_spawn_egg": "Uovo generatore di Lucid", + "item.antarchy.lucid_eye": "Occhio di Lucid", + "entity.antarchy.scorpion": "Scorpione", + "item.antarchy.scorpion_spawn_egg": "Uovo generatore di Scorpione", + "entity.antarchy.basilisk": "Basilisco", + "item.antarchy.basilisk_spawn_egg": "Uovo generatore di Basilisco", + "entity.antarchy.emperor_scorpion": "Scorpione imperatore", + "item.antarchy.emperor_scorpion_spawn_egg": "Uovo generatore di Scorpione imperatore", + "item.antarchy.emperor_scorpion_stinger": "Pungiglione di scorpione imperatore", + "item.antarchy.lucid_pearl": "Perla di Lucid", + "tooltip.antarchy.lucid_pearl": "Lancia un proiettile a gravità invertita.", + "tooltip.antarchy.lucid_pearl.detail": "Ti teletrasporta nel punto d’impatto e applica Inversione.", + "subtitles.antarchy.squidzooka_fire": "La Squidzooka spara", + "subtitles.antarchy.shrink_ray": "Il raggio restringente spara", + "subtitles.antarchy.growth_ray": "Il raggio di crescita spara", + "subtitles.antarchy.size_ray_charge": "Il raggio dimensionale si carica", + "subtitles.antarchy.ant_ambient": "Le formiche cinguettano", + "subtitles.antarchy.ant_idle": "Le formiche emette un verso", + "subtitles.antarchy.ant_hurt": "Le formiche si ferisce", + "subtitles.antarchy.ant_bite": "Le formiche mordono", + "subtitles.antarchy.ant_gather": "Le formiche raccolgono", + "subtitles.antarchy.ant_nest": "Il formicaio fruscia", + "subtitles.antarchy.cloud_shark_bite": "Lo squalo delle nuvole morde", + "subtitles.antarchy.cloud_shark_idle": "Lo squalo delle nuvole emette un verso", + "subtitles.antarchy.cloud_shark_hurt": "Lo squalo delle nuvole si ferisce", + "subtitles.antarchy.cloud_shark_death": "Lo squalo delle nuvole muore", + "subtitles.antarchy.cloud_shark_fly": "Lo squalo delle nuvole vola", + "subtitles.antarchy.caterpillar_idle": "Il bruco emette un verso", + "subtitles.antarchy.caterpillar_hurt": "Il bruco si ferisce", + "subtitles.antarchy.caterpillar_crawl": "Il bruco striscia", + "subtitles.antarchy.butterfly_hurt": "La farfalla si ferisce", + "subtitles.antarchy.brutalfly_idle": "La Brutalfly emette un verso", + "subtitles.antarchy.brutalfly_death": "La Brutalfly muore", + "subtitles.antarchy.thoraxis_nightmare_wastes_ambient": "Le Distese dell’Incubo ronza", + "subtitles.antarchy.thoraxis_nightmare_wastes_additions": "Le Distese dell’Incubo si agita", + "subtitles.antarchy.thoraxis_nightmare_wastes_mood": "Le Distese dell’Incubo mormora", + "subtitles.antarchy.thoraxis_dream_dunes_ambient": "Le Dune dei sogni sussurrano", + "subtitles.antarchy.thoraxis_dream_dunes_additions": "Le Dune dei sogni frusciano", + "subtitles.antarchy.thoraxis_dream_dunes_mood": "Le Dune dei sogni sospirano", + "subtitles.antarchy.thoraxis_lucid_pools_ambient": "Le Pozze di Lucid ronzano", + "subtitles.antarchy.thoraxis_lucid_pools_additions": "Le Pozze di Lucid imprecano", + "subtitles.antarchy.thoraxis_lucid_pools_mood": "Le Pozze di Lucid mormorano", + "subtitles.antarchy.lucid_ambient": "Lucid ronza", + "subtitles.antarchy.lucid_flying": "Lucid svolazza", + "subtitles.antarchy.lucid_attack": "Lucid attacca", + "subtitles.antarchy.lucid_bolt": "Lucid spara un dardo", + "subtitles.antarchy.lucid_hurt": "Lucid si ferisce", + "subtitles.antarchy.lucid_death": "Lucid muore", + "subtitles.antarchy.reverie_idle": "Reverie fluttua", + "subtitles.antarchy.reverie_hurt": "Reverie si ferisce", + "subtitles.antarchy.reverie_worry": "Reverie si preoccupa", + "subtitles.antarchy.reverie_save": "Reverie ti salva", + "subtitles.antarchy.reverie_join_player": "Reverie si unisce a te", + "subtitles.antarchy.reverie_alert": "Reverie ti avverte", + "subtitles.antarchy.flying_squirrel_idle": "Lo scoiattolo volante cinguetta", + "subtitles.antarchy.flying_squirrel_beg": "Lo scoiattolo volante chiede cibo", + "subtitles.antarchy.flying_squirrel_nut": "Lo scoiattolo volante mangia", + "subtitles.antarchy.flying_squirrel_glide_loop": "Lo scoiattolo volante plana", + "subtitles.antarchy.flying_squirrel_hurt": "Lo scoiattolo volante si ferisce", + "subtitles.antarchy.flying_squirrel_death": "Lo scoiattolo volante muore", + "subtitles.antarchy.nightmare_idle": "L’Incubo ringhia", + "subtitles.antarchy.nightmare_hurt": "L’Incubo si ferisce", + "subtitles.antarchy.nightmare_roar": "L’Incubo ruggisce", + "subtitles.antarchy.nightmare_death": "L’Incubo muore", + "subtitles.antarchy.nightmare_bite": "L’Incubo morde", + "subtitles.antarchy.nightmare_flap": "L’Incubo batte le ali", + "subtitles.antarchy.triffid_attack": "Il Triffid attacca", + "subtitles.antarchy.triffid_grab": "Il Triffid afferra", + "subtitles.antarchy.triffid_hurt": "Il Triffid si ferisce", + "subtitles.antarchy.triffid_death": "Il Triffid muore", + "subtitles.antarchy.triffid_hiss": "Il Triffid sibila", + "subtitles.antarchy.triffid_growl": "Il Triffid ringhia", + "subtitles.antarchy.gravity_gun_pickup": "Il cannone gravitazionale solleva", + "subtitles.antarchy.gravity_gun_drop": "Il cannone gravitazionale lascia cadere", + "subtitles.antarchy.gravity_gun_hold_loop": "Il cannone gravitazionale ronza", + "subtitles.antarchy.gravity_gun_launch": "Il cannone gravitazionale lancia", + "subtitles.antarchy.gravity_gun_dryfire": "Il cannone gravitazionale scatta a vuoto", + "subtitles.antarchy.bed_bug_ambient": "La cimice dei letti cinguetta", + "subtitles.antarchy.bed_bug_hurt": "La cimice dei letti si ferisce", + "subtitles.antarchy.bed_bug_attack": "La cimice dei letti morde", + "subtitles.antarchy.wasp_idle": "La vespa ronza", + "subtitles.antarchy.wasp_hurt": "La vespa si ferisce", + "subtitles.antarchy.wasp_attack": "La vespa punge", + "subtitles.antarchy.wasp_death": "La vespa muore", + "subtitles.antarchy.scorpion_ambient": "Lo scorpione sferraglia", + "subtitles.antarchy.scorpion_hurt": "Lo scorpione si ferisce", + "subtitles.antarchy.scorpion_attack": "Lo scorpione attacca", + "subtitles.antarchy.emperor_scorpion_ambient": "Lo scorpione imperatore sferraglia", + "subtitles.antarchy.emperor_scorpion_hurt": "Lo scorpione imperatore si ferisce", + "subtitles.antarchy.emperor_scorpion_attack": "Lo scorpione imperatore attacca", + "subtitles.antarchy.emperor_scorpion_roar": "Lo scorpione imperatore ruggisce", + "subtitles.antarchy.moleworm_ambient": "Il Moleworm fruscia", + "subtitles.antarchy.moleworm_hurt": "Il Moleworm si ferisce", + "subtitles.antarchy.moleworm_attack": "Il Moleworm attacca", + "subtitles.antarchy.moleworm_dig": "Il Moleworm scava", + "subtitles.antarchy.molevore_ambient": "Il Molevore romba", + "subtitles.antarchy.molevore_hurt": "Il Molevore si ferisce", + "subtitles.antarchy.molevore_attack": "Il Molevore attacca", + "subtitles.antarchy.molevore_dig": "Il Molevore scava", + "subtitles.antarchy.duct_tape_use": "Il nastro americano si strappa", + "subtitles.antarchy.potent_nyxite_hypnotic_gas": "La Nyxite potente sibila", + "subtitles.antarchy.potent_nyxite_geyser_eruption": "La Nyxite potente erutta", + "subtitles.antarchy.potent_nyxite_geyser_continuous": "Il geyser di Nyxite potente ruggisce", + "subtitles.antarchy.missile_squid_ambient": "Il calamaro missile ronza", + "subtitles.antarchy.missile_squid_hurt": "Il calamaro missile si ferisce", + "subtitles.antarchy.missile_squid_death": "Il calamaro missile muore", + "subtitles.antarchy.missile_squid_attack": "Il calamaro missile attacca", + "subtitles.antarchy.kraken_flying_loop": "Il Kraken plana", + "subtitles.antarchy.kraken_flying_sideways_loop": "Il Kraken gira in cerchio", + "subtitles.antarchy.kraken_attack": "Il Kraken colpisce", + "subtitles.antarchy.kraken_spin": "Il Kraken ruota", + "subtitles.antarchy.kraken_roar": "Il Kraken ruggisce", + "subtitles.antarchy.kraken_summon": "Il Kraken emerge", + "subtitles.antarchy.kraken_hurt": "Il Kraken si ferisce", + "subtitles.antarchy.kraken_death": "Il Kraken muore", + "subtitles.antarchy.basilisk_idle_loop": "Il basilisco emette un verso", + "subtitles.antarchy.basilisk_slither_loop": "Il basilisco striscia", + "subtitles.antarchy.basilisk_bite": "Il basilisco morde", + "subtitles.antarchy.basilisk_hiss": "Il basilisco sibila", + "subtitles.antarchy.basilisk_hurt": "Il basilisco si ferisce", + "subtitles.antarchy.basilisk_death": "Il basilisco muore", + "subtitles.antarchy.bomber_walk": "Il bombardiere cammina", + "subtitles.antarchy.bomber_knock": "Il bombardiere viene colpito", + "subtitles.antarchy.bomber_explode": "La miccia del bombardiere sibila", + "subtitles.antarchy.toreterror_idle": "Toreterror emette un verso", + "subtitles.antarchy.toreterror_hurt": "Toreterror si ferisce", + "subtitles.antarchy.toreterror_death": "Toreterror muore", + "subtitles.antarchy.toreterror_bomber_fire": "Toreterror lancia bombardieri", + "subtitles.antarchy.toreterror_spin": "Toreterror ruota", + "subtitles.antarchy.toreterror_ricochet": "Toreterror rimbalza", + "subtitles.antarchy.water_cannon_fire": "Il cannone ad acqua spara", + "subtitles.antarchy.toreterror_jump_up": "Toreterror salta", + "subtitles.antarchy.toreterror_jump_land": "Toreterror atterra", + "subtitles.antarchy.stinky_fly": "Le mosche puzzolenti ronzano", + "item.minecraft.potion.effect.inversion": "Pozione di Inversione", + "item.minecraft.potion.effect.long_inversion": "Pozione di Inversione", + "item.minecraft.splash_potion.effect.inversion": "Pozione da lancio di Inversione", + "item.minecraft.splash_potion.effect.long_inversion": "Pozione da lancio di Inversione", + "item.minecraft.lingering_potion.effect.inversion": "Pozione persistente di Inversione", + "item.minecraft.lingering_potion.effect.long_inversion": "Pozione persistente di Inversione", + "item.minecraft.tipped_arrow.effect.inversion": "Freccia di Inversione", + "item.minecraft.tipped_arrow.effect.long_inversion": "Freccia di Inversione", + "item.minecraft.potion.effect.paralysis": "Pozione di Paralisi", + "item.minecraft.potion.effect.long_paralysis": "Pozione di Paralisi", + "item.minecraft.splash_potion.effect.paralysis": "Pozione da lancio di Paralisi", + "item.minecraft.splash_potion.effect.long_paralysis": "Pozione da lancio di Paralisi", + "item.minecraft.lingering_potion.effect.paralysis": "Pozione persistente di Paralisi", + "item.minecraft.lingering_potion.effect.long_paralysis": "Pozione persistente di Paralisi", + "item.minecraft.tipped_arrow.effect.paralysis": "Freccia di Paralisi", + "item.minecraft.tipped_arrow.effect.long_paralysis": "Freccia di Paralisi", + "item.minecraft.potion.effect.shrinking": "Pozione di Restringimento", + "item.minecraft.potion.effect.strong_shrinking": "Pozione di Restringimento II", + "item.minecraft.potion.effect.extreme_shrinking": "Pozione di Restringimento III", + "item.minecraft.splash_potion.effect.shrinking": "Pozione da lancio di Restringimento", + "item.minecraft.splash_potion.effect.strong_shrinking": "Pozione da lancio di Restringimento II", + "item.minecraft.splash_potion.effect.extreme_shrinking": "Pozione da lancio di Restringimento III", + "item.minecraft.lingering_potion.effect.shrinking": "Pozione persistente di Restringimento", + "item.minecraft.lingering_potion.effect.strong_shrinking": "Pozione persistente di Restringimento II", + "item.minecraft.lingering_potion.effect.extreme_shrinking": "Pozione persistente di Restringimento III", + "item.minecraft.tipped_arrow.effect.shrinking": "Freccia di Restringimento", + "item.minecraft.tipped_arrow.effect.strong_shrinking": "Freccia di Restringimento II", + "item.minecraft.tipped_arrow.effect.extreme_shrinking": "Freccia di Restringimento III", + "item.minecraft.potion.effect.growing": "Pozione di Crescita", + "item.minecraft.potion.effect.strong_growing": "Pozione di Crescita II", + "item.minecraft.potion.effect.extreme_growing": "Pozione di Crescita III", + "item.minecraft.splash_potion.effect.growing": "Pozione da lancio di Crescita", + "item.minecraft.splash_potion.effect.strong_growing": "Pozione da lancio di Crescita II", + "item.minecraft.splash_potion.effect.extreme_growing": "Pozione da lancio di Crescita III", + "item.minecraft.lingering_potion.effect.growing": "Pozione persistente di Crescita", + "item.minecraft.lingering_potion.effect.strong_growing": "Pozione persistente di Crescita II", + "item.minecraft.lingering_potion.effect.extreme_growing": "Pozione persistente di Crescita III", + "item.minecraft.tipped_arrow.effect.growing": "Freccia di Crescita", + "item.minecraft.tipped_arrow.effect.strong_growing": "Freccia di Crescita II", + "item.minecraft.tipped_arrow.effect.extreme_growing": "Freccia di Crescita III", + "item.minecraft.potion.effect.dread": "Pozione di Terrore", + "item.minecraft.potion.effect.long_dread": "Pozione di Terrore", + "item.minecraft.splash_potion.effect.dread": "Pozione da lancio di Terrore", + "item.minecraft.splash_potion.effect.long_dread": "Pozione da lancio di Terrore", + "item.minecraft.lingering_potion.effect.dread": "Pozione persistente di Terrore", + "item.minecraft.lingering_potion.effect.long_dread": "Pozione persistente di Terrore", + "item.minecraft.tipped_arrow.effect.dread": "Freccia di Terrore", + "item.minecraft.tipped_arrow.effect.long_dread": "Freccia di Terrore", + "item.minecraft.potion.effect.stinky": "Pozione di Puzza", + "item.minecraft.potion.effect.long_stinky": "Pozione di Puzza", + "item.minecraft.splash_potion.effect.stinky": "Pozione da lancio di Puzza", + "item.minecraft.splash_potion.effect.long_stinky": "Pozione da lancio di Puzza", + "item.minecraft.lingering_potion.effect.stinky": "Pozione persistente di Puzza", + "item.minecraft.lingering_potion.effect.long_stinky": "Pozione persistente di Puzza", + "item.minecraft.tipped_arrow.effect.stinky": "Freccia di Puzza", + "item.minecraft.tipped_arrow.effect.long_stinky": "Freccia di Puzza", + "item.minecraft.potion.effect.haste": "Pozione di Rapidità", + "item.minecraft.potion.effect.strong_haste": "Pozione di Rapidità II", + "item.minecraft.splash_potion.effect.haste": "Pozione da lancio di Rapidità", + "item.minecraft.splash_potion.effect.strong_haste": "Pozione da lancio di Rapidità II", + "item.minecraft.lingering_potion.effect.haste": "Pozione persistente di Rapidità", + "item.minecraft.lingering_potion.effect.strong_haste": "Pozione persistente di Rapidità II", + "item.minecraft.tipped_arrow.effect.haste": "Freccia di Rapidità", + "item.minecraft.tipped_arrow.effect.strong_haste": "Freccia di Rapidità II", + "advancements.antarchy.cancel_out.title": "1 - 1 = ?", + "advancements.antarchy.cancel_out.description": "Mantieni Crescita e Restringimento attivi contemporaneamente.", + "entity.antarchy.cheep": "Cheep", + "item.antarchy.cheep": "Cheep", + "item.antarchy.cheep_spawn_egg": "Uovo generatore di Cheep", + "entity.antarchy.reverie": "Reverie", + "biome.antarchy.thoraxis": "Thoraxis", + "biome.antarchy.nightmare_wastes": "Distese dell’Incubo", + "biome.antarchy.umbral_hills": "Colline ombrose", + "biome.antarchy.lucid_pools": "Pozze di Lucid", + "biome.antarchy.dream_dunes": "Dune dei sogni", + "block.antarchy.wild_corn": "Mais selvatico", + "trim_material.antarchy.blood_crystal": "Cristallo di sangue", + "trim_material.antarchy.nightmare_scale": "Scaglia dell’Incubo", + "trim_material.antarchy.uranium": "Uranio", + "trim_material.antarchy.titanium": "Titanio", + "advancements.antarchy.duct_tape.title": "Ho segato questa barca a metà!", + "advancements.antarchy.duct_tape.description": "e l’ho riparata con il potere del nastro americano!", + "key.categories.antarchy": "Antarchy", + "key.antarchy.brutalfly_flap": "Elitre di Brutalfly: battito d’ali", + "advancements.antarchy.shrink_ray_craft.title": "Tesoro, ho ristretto le creature", + "advancements.antarchy.shrink_ray_craft.description": "Fabbrica un Raggio restringente.", + "advancements.antarchy.growth_ray_craft.title": "O fai le cose in grande o torni a casa", + "advancements.antarchy.growth_ray_craft.description": "Fabbrica un Raggio di crescita.", + "advancements.antarchy.squidzooka_craft.title": "Inchiostra e distruggi", + "advancements.antarchy.squidzooka_craft.description": "Fabbrica una Squidzooka.", + "advancements.antarchy.rocket_powered_octopus.title": "Polpo a propulsione a razzo", + "advancements.antarchy.rocket_powered_octopus.description": "Fabbrica un lanciatore P.P.R.", + "advancements.antarchy.gravity_gun_craft.title": "Artista del rimorchio", + "advancements.antarchy.gravity_gun_craft.description": "Fabbrica un Cannone gravitazionale.", + "block.antarchy.cavaryn_portal": "Portale per Cavaryn", + "block.antarchy.termite_nest": "Nido di Termite", + "block.antarchy.chitin_spike": "Spuntone di Chitin", + "block.antarchy.chitin_block": "Blocco di Chitin", + "block.antarchy.myrmite": "Myrmite", + "block.antarchy.broodstone": "Broodstone", + "block.antarchy.amber_moss_block": "Blocco di muschio ambrato", + "block.antarchy.amber_moss_carpet": "Tappeto di muschio ambrato", + "block.antarchy.amber_lichen": "Lichene ambrato", + "block.antarchy.bile_vein": "Vena di bile", + "block.antarchy.creepvine": "Creepvine", + "block.antarchy.creeping_horror_egg": "Uovo di Orrore strisciante", + "block.antarchy.lurking_terror_egg": "Uovo di Terrore in agguato", + "entity.antarchy.termite": "Termite", + "entity.antarchy.jumpy_bug": "Insetto saltatore", + "entity.antarchy.spit_bug": "Insetto sputatore", + "entity.antarchy.stink_bug": "Cimice puzzolente", + "entity.antarchy.rolly_polly": "Porcellino di terra", + "entity.antarchy.creeping_horror": "Orrore strisciante", + "entity.antarchy.lurking_terror": "Terrore in agguato", + "entity.antarchy.hercules_beetle": "Scarabeo Ercole", + "item.antarchy.jumpy_bug_spawn_egg": "Uovo generatore di Insetto saltatore", + "item.antarchy.spit_bug_spawn_egg": "Uovo generatore di Insetto sputatore", + "item.antarchy.stink_bug_spawn_egg": "Uovo generatore di Cimice puzzolente", + "item.antarchy.termite_spawn_egg": "Uovo generatore di Termite", + "item.antarchy.rolly_polly_spawn_egg": "Uovo generatore di Porcellino di terra", + "item.antarchy.creeping_horror_spawn_egg": "Uovo generatore di Orrore strisciante", + "item.antarchy.lurking_terror_spawn_egg": "Uovo generatore di Terrore in agguato", + "item.antarchy.hercules_beetle_spawn_egg": "Uovo generatore di Scarabeo Ercole", + "item.antarchy.chitin": "Chitin", + "block.antarchy.polished_broodstone": "Broodstone levigato", + "block.antarchy.chiseled_broodstone": "Broodstone cesellato", + "block.antarchy.broodstone_bricks": "Mattoni di Broodstone", + "block.antarchy.broodstone_stairs": "Scale di Broodstone", + "block.antarchy.broodstone_slab": "Lastra di Broodstone", + "block.antarchy.broodstone_wall": "Muretto di Broodstone", + "block.antarchy.polished_broodstone_stairs": "Scale di Broodstone levigato", + "block.antarchy.polished_broodstone_slab": "Lastra di Broodstone levigato", + "block.antarchy.polished_broodstone_wall": "Muretto di Broodstone levigato", + "block.antarchy.broodstone_brick_stairs": "Scale di mattoni di Broodstone", + "block.antarchy.broodstone_brick_slab": "Lastra di mattoni di Broodstone", + "block.antarchy.broodstone_brick_wall": "Muretto di mattoni di Broodstone", + "block.antarchy.myrmite_coal_ore": "Minerale di carbone di Myrmite", + "block.antarchy.broodstone_uranium_ore": "Minerale di uranio di Broodstone", + "block.antarchy.broodstone_titanium_ore": "Minerale di titanio di Broodstone", + "item.antarchy.raw_bug_meat": "Carne d’insetto cruda", + "item.antarchy.cooked_bug_meat": "Carne d’insetto cotta", + "item.antarchy.hercules_horn": "Corno di Ercole", + "block.antarchy.hanging_creeproots": "Creeproots pendenti", + "block.antarchy.glowcap_mushroom": "Fungo Glowcap", + "block.antarchy.potted_glowcap_mushroom": "Fungo Glowcap in vaso", + "block.antarchy.glowcap_mushroom_block": "Blocco di fungo Glowcap", + "block.antarchy.molting_vines": "Rampicanti della muta", + "item.antarchy.broodfruit": "Broodfruit", + "block.antarchy.jumpy_bug_egg": "Uovo di Insetto saltatore", + "subtitles.antarchy.creeping_horror_growl": "L’orrore strisciante ringhia", + "subtitles.antarchy.creeping_horror_hurt": "L’orrore strisciante si ferisce", + "subtitles.antarchy.creeping_horror_bite": "L’orrore strisciante morde", + "subtitles.antarchy.lurking_terror_snarl": "Il terrore in agguato ringhia", + "subtitles.antarchy.lurking_terror_hurt": "Il terrore in agguato si ferisce", + "subtitles.antarchy.lurking_terror_bite": "Il terrore in agguato morde", + "subtitles.antarchy.lurking_terror_fly_loop": "Il terrore in agguato vola", + "subtitles.antarchy.stink_bug_fart": "La cimice puzzolente scoreggia", + "subtitles.antarchy.stink_bug_idle": "La cimice puzzolente emette un verso", + "subtitles.antarchy.rolly_polly_idle": "Il porcellino di terra emette un verso", + "subtitles.antarchy.rolly_polly_wheel_mode": "Il porcellino di terra si arrotola", + "subtitles.antarchy.rolly_polly_normal_mode": "Il porcellino di terra si srotola", + "subtitles.antarchy.rolly_polly_roll": "Il porcellino di terra rotola", + "subtitles.antarchy.hercules_beetle_idle": "Lo scarabeo Ercole emette un verso", + "subtitles.antarchy.hercules_beetle_hurt": "Lo scarabeo Ercole si ferisce", + "subtitles.antarchy.hercules_beetle_attack": "Lo scarabeo Ercole attacca", + "subtitles.antarchy.hercules_beetle_cry": "Lo scarabeo Ercole ruggisce", + "subtitles.antarchy.hercules_beetle_charge_start": "Lo scarabeo Ercole si carica", + "subtitles.antarchy.hercules_beetle_knocked_down": "Lo scarabeo Ercole viene abbattuto", + "subtitles.antarchy.jerry_idle": "Jerry chiacchiera", + "subtitles.antarchy.jerry_hurt": "Jerry soffre", + "subtitles.antarchy.jerry_death": "Jerry muore", + "subtitles.antarchy.jerry_attack": "Jerry attacca", + "subtitles.antarchy.jumpy_bug_idle": "L’insetto saltatore emette un verso", + "subtitles.antarchy.spit_bug_idle": "L’insetto sputatore emette un verso", + "subtitles.antarchy.jumpy_bug_hurt": "L’insetto saltatore si ferisce", + "subtitles.antarchy.jumpy_bug_jump": "L’insetto saltatore salta", + "subtitles.antarchy.spit_bug_hurt": "L’insetto sputatore si ferisce", + "subtitles.antarchy.spit_bug_spit": "L’insetto sputatore sputa", + "subtitles.antarchy.brutalfly_spit": "La Brutalfly sputa", + "advancements.antarchy.bug_apetit.title": "Insetto appetito", + "advancements.antarchy.bug_apetit.description": "Mangia Carne d’insetto cotta.", + "advancements.antarchy.behavioral_correction.title": "Correzione comportamentale", + "advancements.antarchy.behavioral_correction.description": "Ottieni un Correttore d’atteggiamento.", + "advancements.antarchy.beetle_buddies.title": "Amici scarabei", + "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." +} 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 new file mode 100644 index 00000000..0367c4c7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/ja_jp.json @@ -0,0 +1,962 @@ +{ + "block.antarchy.duplicator_log": "複製の原木", + "block.antarchy.ouranwood_log": "オーランウッドの原木", + "block.antarchy.ouranwood_wood": "オーランウッドの木", + "block.antarchy.mossy_ouranwood_log": "苔むしたオーランウッドの原木", + "block.antarchy.mossy_ouranwood_wood": "苔むしたオーランウッドの木", + "block.antarchy.stripped_ouranwood_log": "樹皮を剥いだオーランウッドの原木", + "block.antarchy.stripped_ouranwood_wood": "樹皮を剥いだオーランウッドの木", + "block.antarchy.ouranwood_planks": "オーランウッドの板材", + "block.antarchy.ouranwood_stairs": "オーランウッドの階段", + "block.antarchy.ouranwood_slab": "オーランウッドのハーフブロック", + "block.antarchy.ouranwood_fence": "オーランウッドのフェンス", + "block.antarchy.ouranwood_fence_gate": "オーランウッドのフェンスゲート", + "block.antarchy.ouranwood_door": "オーランウッドのドア", + "block.antarchy.ouranwood_trapdoor": "オーランウッドのトラップドア", + "block.antarchy.ouranwood_pressure_plate": "オーランウッドの感圧板", + "block.antarchy.ouranwood_button": "オーランウッドのボタン", + "block.antarchy.ouranwood_leaves": "オーランウッドの葉", + "block.antarchy.ouranwood_acorn": "オーランウッドのドングリ", + "block.antarchy.ouranwood_sign": "オーランウッドの看板", + "block.antarchy.ouranwood_hanging_sign": "オーランウッドの吊り看板", + "block.antarchy.peach_log": "モモの原木", + "block.antarchy.peach_wood": "モモの木", + "block.antarchy.stripped_peach_log": "樹皮を剥いだモモの原木", + "block.antarchy.stripped_peach_wood": "樹皮を剥いだモモの木", + "block.antarchy.peach_planks": "モモの板材", + "block.antarchy.peach_stairs": "モモの階段", + "block.antarchy.peach_slab": "モモのハーフブロック", + "block.antarchy.peach_fence": "モモのフェンス", + "block.antarchy.peach_fence_gate": "モモのフェンスゲート", + "block.antarchy.peach_door": "モモのドア", + "block.antarchy.peach_trapdoor": "モモのトラップドア", + "block.antarchy.peach_pressure_plate": "モモの感圧板", + "block.antarchy.peach_button": "モモのボタン", + "block.antarchy.peach_leaves": "モモの葉", + "block.antarchy.hanging_peach": "垂れ下がるモモ", + "block.antarchy.peach_sapling": "モモの苗木", + "block.antarchy.peach_sign": "モモの看板", + "block.antarchy.peach_hanging_sign": "モモの吊り看板", + "block.antarchy.orange_milkweed": "オレンジ色のトウワタ", + "block.antarchy.pink_milkweed": "桃色のトウワタ", + "block.antarchy.camellia": "ツバキ", + "block.antarchy.spider_lily": "ヒガンバナ", + "block.antarchy.lotus": "ハス", + "item.antarchy.lotus": "ハス", + "item.antarchy.critter_cage": "小動物ケージ", + "block.antarchy.giant_lily_pad": "巨大なハスの葉", + "block.antarchy.seashell": "貝殻", + "block.antarchy.critter_cage_block": "小動物ケージ", + "block.antarchy.hushweed": "ハッシュウィード", + "block.antarchy.umbral_moss_block": "アンブラルの苔のブロック", + "block.antarchy.umbral_moss_carpet": "アンブラルの苔のカーペット", + "block.antarchy.blush_moss_block": "ブラッシュモスのブロック", + "block.antarchy.blush_moss_carpet": "ブラッシュモスのカーペット", + "block.antarchy.duplicator_sapling": "複製の苗木", + "block.antarchy.duct_tape": "ダクトテープ", + "block.antarchy.infested_rooted_dirt": "虫食いの根付いた 土", + "block.antarchy.infested_coarse_dirt": "虫食いの粗い 土", + "block.antarchy.nyxite": "ニクサイト", + "block.antarchy.polished_nyxite": "磨かれたニクサイト", + "block.antarchy.chiseled_nyxite": "模様入りのニクサイト", + "block.antarchy.nyxite_bricks": "ニクサイトレンガ", + "block.antarchy.shellstone": "シェルストーン", + "block.antarchy.polished_shellstone": "磨かれたシェルストーン", + "block.antarchy.shellstone_bricks": "シェルストーンレンガ", + "block.antarchy.chiseled_shellstone": "模様入りのシェルストーン", + "block.antarchy.mossy_shellstone_bricks": "苔むしたシェルストーンレンガ", + "block.antarchy.mossy_shellstone_brick_stairs": "苔むしたシェルストーンレンガの階段", + "block.antarchy.mossy_shellstone_brick_slab": "苔むしたシェルストーンレンガのハーフブロック", + "block.antarchy.mossy_shellstone_brick_wall": "苔むしたシェルストーンレンガの塀", + "block.antarchy.cracked_shellstone_bricks": "ひび割れたシェルストーンレンガ", + "block.antarchy.shellstone_stairs": "シェルストーンの階段", + "block.antarchy.shellstone_slab": "シェルストーンのハーフブロック", + "block.antarchy.shellstone_wall": "シェルストーンの塀", + "block.antarchy.polished_shellstone_stairs": "磨かれたシェルストーンの階段", + "block.antarchy.polished_shellstone_slab": "磨かれたシェルストーンのハーフブロック", + "block.antarchy.polished_shellstone_wall": "磨かれたシェルストーンの塀", + "block.antarchy.shellstone_brick_stairs": "シェルストーンレンガの階段", + "block.antarchy.shellstone_brick_slab": "シェルストーンレンガのハーフブロック", + "block.antarchy.shellstone_brick_wall": "シェルストーンレンガの塀", + "block.antarchy.nyxite_stairs": "ニクサイトの階段", + "block.antarchy.nyxite_slab": "ニクサイトのハーフブロック", + "block.antarchy.nyxite_wall": "ニクサイトの塀", + "block.antarchy.polished_nyxite_stairs": "磨かれたニクサイトの階段", + "block.antarchy.polished_nyxite_slab": "磨かれたニクサイトのハーフブロック", + "block.antarchy.polished_nyxite_wall": "磨かれたニクサイトの塀", + "block.antarchy.nyxite_brick_stairs": "ニクサイトレンガの階段", + "block.antarchy.nyxite_brick_slab": "ニクサイトレンガのハーフブロック", + "block.antarchy.nyxite_brick_wall": "ニクサイトレンガの塀", + "block.antarchy.pale_nyxite": "淡いニクサイト", + "block.antarchy.nyxite_spike": "ニクサイトのトゲ", + "block.antarchy.potent_nyxite": "強力なニクサイト", + "block.antarchy.triffid_goo_block": "トリフィド 粘液のブロック", + "block.antarchy.elythia_portal": "エリーティアのポータル", + "block.antarchy.cloud_block": "雲のブロック", + "block.antarchy.thoraxis_portal": "ソーアクシスのポータル", + "block.antarchy.antimetal": "アンチメタル", + "block.antarchy.polished_antimetal": "磨かれたアンチメタル", + "block.antarchy.antimetal_scaffolding": "アンチメタルの足場", + "block.antarchy.cornea_stalk": "コーニアの茎", + "block.antarchy.corn_crop": "トウモロコシの作物", + "block.antarchy.dream_torch": "夢の松明", + "block.antarchy.dream_wall_torch": "夢の壁付き松明", + "block.antarchy.dream_lantern": "夢のランタン", + "block.antarchy.dream_campfire": "夢の焚き火", + "block.antarchy.dream_fire": "夢の炎", + "block.antarchy.dream_fire_ceiling": "夢の炎", + "block.antarchy.budding_blood_crystal": "芽生えた血の結晶", + "block.antarchy.blood_crystal_block": "血の結晶のブロック", + "block.antarchy.small_blood_crystal_bud": "小さな血の結晶の芽", + "block.antarchy.medium_blood_crystal_bud": "中くらいの血の結晶の芽", + "block.antarchy.large_blood_crystal_bud": "大きな血の結晶の芽", + "block.antarchy.blood_crystal_cluster": "血の結晶の塊", + "block.antarchy.dream_sand": "夢の砂", + "block.antarchy.dream_sandstone": "夢の砂岩", + "block.antarchy.chiseled_dream_sandstone": "模様入りの夢の砂岩", + "block.antarchy.cut_dream_sandstone": "研がれた夢の砂岩", + "block.antarchy.smooth_dream_sandstone": "滑らかな夢の砂岩", + "block.antarchy.dream_sandstone_stairs": "夢の砂岩の階段", + "block.antarchy.dream_sandstone_slab": "夢の砂岩のハーフブロック", + "block.antarchy.dream_sandstone_wall": "夢の砂岩の塀", + "block.antarchy.smooth_dream_sandstone_stairs": "滑らかな夢の砂岩の階段", + "block.antarchy.smooth_dream_sandstone_slab": "滑らかな夢の砂岩のハーフブロック", + "block.antarchy.cut_dream_sandstone_slab": "研がれた夢の砂岩のハーフブロック", + "block.antarchy.bed_bug_egg": "トコジラミの卵", + "block.antarchy.wasp_nest": "ハチの巣", + "block.antarchy.red_ant_nest": "赤アリの巣", + "block.antarchy.brown_ant_nest": "茶色のアリの巣", + "block.antarchy.rainbow_ant_nest": "虹色のアリの巣", + "block.antarchy.uranium_ore": "ウランの鉱石", + "block.antarchy.deepslate_uranium_ore": "深層岩のウランの鉱石", + "block.antarchy.titanium_ore": "チタンの鉱石", + "block.antarchy.deepslate_titanium_ore": "深層岩のチタンの鉱石", + "block.antarchy.uranium_block": "ウランブロック", + "block.antarchy.titanium_block": "チタンブロック", + "block.antarchy.raw_uranium_block": "未加工のウランブロック", + "block.antarchy.raw_titanium_block": "未加工のチタンブロック", + "block.antarchy.cut_uranium": "研がれたウラン", + "block.antarchy.cut_titanium": "研がれたチタン", + "block.antarchy.cut_uranium_slab": "研がれたウランのハーフブロック", + "block.antarchy.cut_titanium_slab": "研がれたチタンのハーフブロック", + "block.antarchy.cut_uranium_stairs": "研がれたウランの階段", + "block.antarchy.cut_titanium_stairs": "研がれたチタンの階段", + "block.antarchy.chiseled_uranium": "模様入りのウラン", + "block.antarchy.chiseled_titanium": "模様入りのチタン", + "block.antarchy.uranium_bulb": "ウランの電球", + "block.antarchy.titanium_bulb": "チタンの電球", + "block.antarchy.uranium_door": "ウランのドア", + "block.antarchy.titanium_door": "チタンのドア", + "block.antarchy.uranium_trapdoor": "ウランのトラップドア", + "block.antarchy.titanium_trapdoor": "チタンのトラップドア", + "block.antarchy.uranium_bars": "ウランの格子", + "block.antarchy.titanium_bars": "チタンの格子", + "tooltip.antarchy.signal_saving_bulb": "オンとオフを切り替えます。明るさは保存されている信号強度と同じです。", + "block.antarchy.bile": "胆汁", + "block.antarchy.ichor": "イコル", + "block.antarchy.antiwater": "反水", + "block.antarchy.lumen": "ルーメン", + "block.antarchy.lumen_froglight": "ルーメンフロッグライト", + "block.antarchy.roseate_froglight": "バラ色のフロッグライト", + "block.antarchy.star_coral": "星サンゴ", + "block.antarchy.star_coral_fan": "星サンゴのウチワ", + "block.antarchy.star_coral_block": "星サンゴブロック", + "block.antarchy.dead_star_coral": "死んだ星サンゴ", + "block.antarchy.dead_star_coral_fan": "死んだ星サンゴのウチワ", + "block.antarchy.dead_star_coral_block": "死んだ星サンゴブロック", + "entity.antarchy.apple_cow": "リンゴ牛", + "entity.antarchy.golden_apple_cow": "金のリンゴ牛", + "entity.antarchy.enchanted_golden_apple_cow": "エンチャントされた金のリンゴ牛", + "entity.antarchy.easter_bunny": "イースターバニー", + "entity.antarchy.glimmer": "グリマー", + "entity.antarchy.ouranwood_deer": "オーランウッドのシカ", + "entity.antarchy.elka": "エルカ", + "entity.antarchy.dorrie": "ドーリー", + "entity.antarchy.flying_squirrel": "モモンガ", + "entity.antarchy.caterpillar": "イモムシ", + "entity.antarchy.butterfly": "チョウ", + "entity.antarchy.brutalfly": "ブルータルフライ", + "entity.antarchy.red_ant": "赤アリ", + "entity.antarchy.brown_ant": "茶色のアリ", + "entity.antarchy.rainbow_ant": "虹色のアリ", + "entity.antarchy.diamond_minecart": "ダイヤモンドのトロッコ", + "entity.antarchy.dr_trayaurus": "トレイオーラス博士", + "entity.antarchy.cloud_shark": "雲ザメ", + "entity.antarchy.kraken": "クラーケン", + "entity.antarchy.missile_squid": "ミサイルイカ", + "entity.antarchy.octopus_bomb": "タコ爆弾", + "entity.antarchy.nightmare": "ナイトメア", + "entity.antarchy.bed_bug": "トコジラミ", + "entity.antarchy.wasp": "ハチ", + "entity.antarchy.bomber": "ボマー", + "entity.antarchy.moleworm": "モールワーム", + "entity.antarchy.molevore": "モールヴォア", + "entity.antarchy.mantis": "カマキリ", + "entity.antarchy.alpha_mantis": "アルファカマキリ", + "entity.antarchy.triffid": "トリフィド", + "entity.antarchy.toreterror": "トアテラー", + "entity.antarchy.water_bomb": "水爆弾", + "subtitles.antarchy.mantis_ambient": "カマキリがカチカチ鳴く", + "subtitles.antarchy.mantis_hurt": "カマキリが甲高く鳴く", + "subtitles.antarchy.mantis_attack": "カマキリが噛み鳴らす", + "subtitles.antarchy.mantis_fly_loop": "カマキリの羽音が響く", + "item.antarchy.big_bertha": "ビッグ・バーサ", + "item.antarchy.wasp_nest": "ハチの巣", + "item.antarchy.stink_bug": "カメムシ", + "item.antarchy.wasp_spawn_egg": "ハチのスポーンエッグ", + "item.antarchy.bomber_spawn_egg": "ボマーのスポーンエッグ", + "item.antarchy.big_bertha_blade": "ビッグ・バーサの刃", + "item.antarchy.big_bertha_handle": "ビッグ・バーサの柄", + "item.antarchy.big_bertha_hilt": "ビッグ・バーサの鍔", + "item.antarchy.battle_axe": "戦斧", + "item.antarchy.attitude_adjuster": "態度調整ハンマー", + "tooltip.antarchy.attitude_adjuster.grounded": "地上の対象を上空へ吹き飛ばし、空中の対象を地面へ叩きつけます。", + "tooltip.antarchy.attitude_adjuster.slam": "空中で右クリックすると地面へ急降下します。", + "item.antarchy.cloud_shark_fin": "雲ザメのヒレ", + "item.antarchy.cloud_shark_fin_soup": "雲ザメのヒレのスープ", + "tooltip.antarchy.cloud_shark_fin_soup": "攻撃力上昇と低速落下を付与します。", + "tooltip.antarchy.critter_cage.empty": "右クリックで投げる", + "tooltip.antarchy.critter_cage.contains": "中身:%s", + "tooltip.antarchy.critter_cage.release": "右クリックで解放", + "tooltip.antarchy.critter_cage.place": "シフトキー+右クリックで設置", + "item.antarchy.kraken_tooth": "クラーケンの歯", + "item.antarchy.kraken_tentacle": "クラーケンの触手", + "item.antarchy.krakens_grasp": "クラーケンの握撃", + "entity.antarchy.tentacle": "触手", + "item.antarchy.basilisk_fang": "バジリスクの牙", + "item.antarchy.basilisk_dagger": "バジリスクの短剣", + "item.antarchy.blood_crystal_block": "血の結晶のブロック", + "item.antarchy.small_blood_crystal_bud": "小さな血の結晶の芽", + "item.antarchy.medium_blood_crystal_bud": "中くらいの血の結晶の芽", + "item.antarchy.large_blood_crystal_bud": "大きな血の結晶の芽", + "item.antarchy.blood_crystal_cluster": "血の結晶の塊", + "item.antarchy.dream_sand": "夢の砂", + "item.antarchy.dream_sandstone": "夢の砂岩", + "item.antarchy.chiseled_dream_sandstone": "模様入りの夢の砂岩", + "item.antarchy.cut_dream_sandstone": "研がれた夢の砂岩", + "item.antarchy.smooth_dream_sandstone": "滑らかな夢の砂岩", + "item.antarchy.dream_sandstone_stairs": "夢の砂岩の階段", + "item.antarchy.dream_sandstone_slab": "夢の砂岩のハーフブロック", + "item.antarchy.dream_sandstone_wall": "夢の砂岩の塀", + "item.antarchy.smooth_dream_sandstone_stairs": "滑らかな夢の砂岩の階段", + "item.antarchy.smooth_dream_sandstone_slab": "滑らかな夢の砂岩のハーフブロック", + "item.antarchy.cut_dream_sandstone_slab": "研がれた夢の砂岩のハーフブロック", + "item.antarchy.dream_torch": "夢の松明", + "item.antarchy.dream_lantern": "夢のランタン", + "item.antarchy.dream_campfire": "夢の焚き火", + "item.antarchy.giant_lily_pad": "巨大なハスの葉", + "item.antarchy.seashell": "貝殻", + "item.antarchy.nightmare_scale": "ナイトメアの鱗", + "item.antarchy.nightmare_helmet": "ナイトメアのヘルメット", + "item.antarchy.nightmare_chestplate": "ナイトメアのチェストプレート", + "item.antarchy.nightmare_leggings": "ナイトメアのレギンス", + "item.antarchy.nightmare_boots": "ナイトメアのブーツ", + "item.antarchy.nightmare_sword": "ナイトメアの剣", + "tooltip.antarchy.nightmare_armor_double_damage": "%s%%の確率でダメージが2倍になります", + "tooltip.antarchy.nightmare_armor_set_bonus": "フルセット:ウィザーと恐怖を無効化", + "tooltip.antarchy.nightmare_sword": "体力が減るほど与えるダメージが増えます。", + "tooltip.antarchy.nightmare_sword_damage": "%sダメージを与えます", + "tooltip.antarchy.primordial_helmet_water_breathing": "着用者に水中呼吸を付与します", + "tooltip.antarchy.primordial_armor_knockback_dealt": "1部位につき攻撃ノックバックが%s増加します", + "tooltip.antarchy.primordial_armor_set_bonus": "フルセット:攻撃が敵のノックバック耐性を無視します", + "attribute.antarchy.double_damage_chance": "ダメージ2倍の確率", + "attribute.antarchy.bloodglass_max_hearts": "血晶のハート上限", + "item.antarchy.molevore_nose": "モールヴォアの鼻", + "item.antarchy.moleworm": "モールワーム", + "item.antarchy.triffid_spawn_egg": "トリフィドのスポーンエッグ", + "item.antarchy.infested_rooted_dirt": "虫食いの根付いた 土", + "item.antarchy.infested_coarse_dirt": "虫食いの粗い 土", + "item.antarchy.pale_nyxite": "淡いニクサイト", + "item.antarchy.polished_nyxite": "磨かれたニクサイト", + "item.antarchy.chiseled_nyxite": "模様入りのニクサイト", + "item.antarchy.nyxite_bricks": "ニクサイトレンガ", + "item.antarchy.shellstone": "シェルストーン", + "item.antarchy.polished_shellstone": "磨かれたシェルストーン", + "item.antarchy.shellstone_bricks": "シェルストーンレンガ", + "item.antarchy.chiseled_shellstone": "模様入りのシェルストーン", + "item.antarchy.mossy_shellstone_bricks": "苔むしたシェルストーンレンガ", + "item.antarchy.mossy_shellstone_brick_stairs": "苔むしたシェルストーンレンガの階段", + "item.antarchy.mossy_shellstone_brick_slab": "苔むしたシェルストーンレンガのハーフブロック", + "item.antarchy.mossy_shellstone_brick_wall": "苔むしたシェルストーンレンガの塀", + "item.antarchy.cracked_shellstone_bricks": "ひび割れたシェルストーンレンガ", + "item.antarchy.shellstone_stairs": "シェルストーンの階段", + "item.antarchy.shellstone_slab": "シェルストーンのハーフブロック", + "item.antarchy.shellstone_wall": "シェルストーンの塀", + "item.antarchy.polished_shellstone_stairs": "磨かれたシェルストーンの階段", + "item.antarchy.polished_shellstone_slab": "磨かれたシェルストーンのハーフブロック", + "item.antarchy.polished_shellstone_wall": "磨かれたシェルストーンの塀", + "item.antarchy.shellstone_brick_stairs": "シェルストーンレンガの階段", + "item.antarchy.shellstone_brick_slab": "シェルストーンレンガのハーフブロック", + "item.antarchy.shellstone_brick_wall": "シェルストーンレンガの塀", + "item.antarchy.nyxite_stairs": "ニクサイトの階段", + "item.antarchy.nyxite_slab": "ニクサイトのハーフブロック", + "item.antarchy.nyxite_wall": "ニクサイトの塀", + "item.antarchy.polished_nyxite_stairs": "磨かれたニクサイトの階段", + "item.antarchy.polished_nyxite_slab": "磨かれたニクサイトのハーフブロック", + "item.antarchy.polished_nyxite_wall": "磨かれたニクサイトの塀", + "item.antarchy.nyxite_brick_stairs": "ニクサイトレンガの階段", + "item.antarchy.nyxite_brick_slab": "ニクサイトレンガのハーフブロック", + "item.antarchy.nyxite_brick_wall": "ニクサイトレンガの塀", + "item.antarchy.potent_nyxite": "強力なニクサイト", + "item.antarchy.antimetal": "アンチメタル", + "item.antarchy.polished_antimetal": "磨かれたアンチメタル", + "item.antarchy.antimetal_scaffolding": "アンチメタルの足場", + "item.antarchy.ouranwood_acorn": "オーランウッドのドングリ", + "item.antarchy.ouranwood_boat": "オーランウッドのボート", + "item.antarchy.ouranwood_chest_boat": "オーランウッドのチェスト付きボート", + "item.antarchy.raw_venison": "生の鹿肉", + "item.antarchy.cooked_venison": "焼いた鹿肉", + "item.antarchy.peach_sapling": "モモの苗木", + "item.antarchy.peach": "モモ", + "item.antarchy.peach_pie": "モモのパイ", + "item.antarchy.cornbread": "コーンブレッド", + "item.antarchy.popcorn": "ポップコーン", + "item.antarchy.peach_sign": "モモの看板", + "item.antarchy.peach_hanging_sign": "モモの吊り看板", + "item.antarchy.peach_boat": "モモのボート", + "item.antarchy.peach_chest_boat": "モモのチェスト付きボート", + "item.antarchy.orange_milkweed": "オレンジ色のトウワタ", + "item.antarchy.pink_milkweed": "桃色のトウワタ", + "item.antarchy.camellia": "ツバキ", + "item.antarchy.spider_lily": "ヒガンバナ", + "item.antarchy.hushweed": "ハッシュウィード", + "item.antarchy.umbral_moss_block": "アンブラルの苔のブロック", + "item.antarchy.umbral_moss_carpet": "アンブラルの苔のカーペット", + "item.antarchy.blush_moss_block": "ブラッシュモスのブロック", + "item.antarchy.blush_moss_carpet": "ブラッシュモスのカーペット", + "item.antarchy.mud_pie": "泥パイ", + "item.antarchy.duct_tape": "ダクトテープ", + "item.antarchy.duct_tape.tooltip": "設置して右クリックすると道具を修理できます", + "item.antarchy.rainbow_sugar": "虹色の砂糖", + "item.antarchy.uranium_nugget": "ウランの塊", + "item.antarchy.titanium_nugget": "チタンの塊", + "item.antarchy.raw_uranium_scrap": "未加工のウランのくず", + "item.antarchy.raw_titanium_scrap": "未加工のチタンのくず", + "item.antarchy.raw_uranium": "未加工のウラン", + "item.antarchy.raw_titanium": "未加工のチタン", + "item.antarchy.uranium_ingot": "ウランのインゴット", + "item.antarchy.titanium_ingot": "チタンのインゴット", + "item.antarchy.blood_crystal_shard": "血の結晶の欠片", + "item.antarchy.blood_crystal_apple": "血の結晶のリンゴ", + "item.antarchy.blood_crystal_katana": "血の結晶の刀", + "item.antarchy.blood_crystal_helmet": "血の結晶のヘルメット", + "item.antarchy.blood_crystal_chestplate": "血の結晶のチェストプレート", + "item.antarchy.blood_crystal_leggings": "血の結晶のレギンス", + "item.antarchy.blood_crystal_boots": "血の結晶のブーツ", + "item.antarchy.blood_crystal_armor.tooltip": "攻撃を1回防ぐ血晶のハートを付与します。防ぐと砕け、その後再充填されます。", + "item.antarchy.blood_crystal_boots.tooltip2": "重力反転中に上方向へ落下した際の落下ダメージを無効化します。", + "item.antarchy.blood_crystal_apple.tooltip": "血晶の守護を付与し、効果中に再充填される一時的な血晶のハートを得ます。", + "tooltip.antarchy.blood_crystal_katana.launch": "攻撃命中時に前方へ突進します。", + "tooltip.antarchy.blood_crystal_katana.trail": "背後に深紅の軌跡を残します。", + "item.antarchy.mantis_claw": "カマキリの爪", + "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", + "item.antarchy.king_scale": "王の鱗", + "item.antarchy.queen_scale": "女王の鱗", + "item.antarchy.jumpy_bug_leg": "ジャンピーバグの脚", + "item.antarchy.jumpy_boots": "ジャンプブーツ", + "tooltip.antarchy.jumpy_boots": "スニークで溜めてからジャンプすると高く跳び上がります。", + "item.antarchy.brutalfly_wing": "ブルータルフライの翼", + "item.antarchy.brutalfly_elytra": "ブルータルフライのエリトラ", + "tooltip.antarchy.brutalfly_elytra.flap": "飛行中に%sを長押しして羽ばたきます", + "item.antarchy.cornea_ear": "コーニアの耳", + "item.antarchy.corn": "トウモロコシ", + "item.antarchy.corn_seeds": "トウモロコシの種", + "item.antarchy.raw_corndog": "生のアメリカンドッグ", + "item.antarchy.cooked_corndog": "焼いたアメリカンドッグ", + "item.antarchy.high_fructose_corn_syrup": "高果糖コーンシロップ", + "jei.antarchy.americanize": "アメリカ化", + "item.antarchy.american_name": "アメリカン%s", + "item.antarchy.root_beer": "ルートビア", + "item.antarchy.primordial_scute": "原初のの甲板", + "item.antarchy.triffid_goo": "トリフィド 粘液", + "item.antarchy.triffid_goo_block": "トリフィド 粘液のブロック", + "tooltip.antarchy.triffid_goo_block": "高速で触れると上へ跳ね返り、それ以外では沈み込みます。", + "item.antarchy.cloud_bucket": "雲のバケツ", + "tooltip.antarchy.cloud_bucket.midair": "空中に設置できます", + "item.antarchy.lumen_bucket": "ルーメンのバケツ", + "item.antarchy.scorpion_whip": "ダイオウサソリの鞭", + "tooltip.antarchy.scorpion_whip.lash": "遠くの獲物を打ち、毒のつながりを突き刺します。", + "tooltip.antarchy.scorpion_whip.reel": "右クリックでつながれた獲物を引き寄せます。", + "tooltip.antarchy.scorpion_whip.snap": "つながれた獲物をもう一度左クリックすると針を引き抜きます。", + "item.antarchy.fallen_king_crown": "亡き王の王冠", + "tooltip.antarchy.fallen_king_crown.hero": "敵対モブを倒すと村の英雄を付与します", + "item.antarchy.vortex_eye": "渦の目", + "item.antarchy.ultimate_helmet": "究極のヘルメット", + "item.antarchy.ultimate_chestplate": "究極のチェストプレート", + "item.antarchy.ultimate_leggings": "究極のレギンス", + "item.antarchy.ultimate_boots": "究極のブーツ", + "item.antarchy.ultimate_sword": "究極の剣", + "item.antarchy.ultimate_pickaxe": "究極のツルハシ", + "item.antarchy.ultimate_axe": "究極の斧", + "item.antarchy.ultimate_shovel": "究極のシャベル", + "item.antarchy.ultimate_hoe": "究極のクワ", + "item.antarchy.ultimate_bow": "究極の弓", + "item.antarchy.ultimate_crossbow": "究極のクロスボウ", + "item.antarchy.ultimate_crossbow.capacity": "最大16本の矢を一度に装填します", + "item.antarchy.ultimate_crossbow.arrows_remaining": "%1$s本の%2$sを装填済み", + "item.antarchy.ultimate_mace": "究極のメイス", + "item.antarchy.moggles": "モグルズ", + "itemGroup.antarchy.antarchy": "アンターキー", + "item.antarchy.bile_bucket": "胆汁のバケツ", + "item.antarchy.ichor_bucket": "イコルのバケツ", + "item.antarchy.antiwater_bucket": "反水のバケツ", + "item.antarchy.reverie_bottle": "レヴェリーの瓶", + "item.antarchy.squidzooka": "スクイッズーカ", + "item.antarchy.rpo_launcher": "ロ・推・タランチャー", + "item.antarchy.shrink_ray": "縮小光線銃", + "item.antarchy.growth_ray": "成長光線銃", + "tooltip.antarchy.shrink_ray": "対象を永久に縮小します。長押しでチャージします。", + "tooltip.antarchy.growth_ray": "対象を永久に巨大化します。長押しでチャージします。", + "tooltip.antarchy.size_ray_milk_reset": "牛乳を飲むとこの効果はリセットされます。", + "tooltip.antarchy.reverie_bottle.capture": "ガラス瓶を持ってレヴェリーを右クリックすると収納できます。", + "tooltip.antarchy.reverie_bottle.release": "右クリックでレヴェリーを解放します。", + "item.antarchy.gravity_gun": "重力銃", + "item.antarchy.miners_dream": "採掘者の夢", + "tooltip.antarchy.miners_dream.line1": "右クリックで曲がりくねった洞窟を掘ります。", + "tooltip.antarchy.miners_dream.line2": "貴重なブロックはそのまま残します。", + "message.antarchy.miners_dream_disabled": "採掘者の夢は無効になっています。", + "message.antarchy.miners_dream_busy": "前の夢はまだ展開中です。", + "item.antarchy.diamond_minecart": "ダイヤモンドのトロッコ", + "item.antarchy.cogwheel_pet": "歯車ペット", + "item.antarchy.fire_dragon_pet": "ファイアドラゴンのペット", + "item.antarchy.ice_dragon_pet": "アイスドラゴンのペット", + "item.antarchy.lightning_dragon_pet": "ライトニングドラゴンのペット", + "item.antarchy.gorgon_pet": "ゴーゴンのペット", + "item.antarchy.apple_cow_spawn_egg": "リンゴ牛のスポーンエッグ", + "item.antarchy.red_ant_spawn_egg": "赤アリのスポーンエッグ", + "item.antarchy.brown_ant_spawn_egg": "茶色のアリのスポーンエッグ", + "item.antarchy.rainbow_ant_spawn_egg": "虹色のアリのスポーンエッグ", + "item.antarchy.golden_apple_cow_spawn_egg": "金のリンゴ牛のスポーンエッグ", + "item.antarchy.enchanted_golden_apple_cow_spawn_egg": "エンチャントされた金のリンゴ牛のスポーンエッグ", + "item.antarchy.dr_trayaurus_spawn_egg": "トレイオーラス博士のスポーンエッグ", + "item.antarchy.easter_bunny_spawn_egg": "イースターバニーのスポーンエッグ", + "item.antarchy.glimmer_spawn_egg": "グリマーのスポーンエッグ", + "item.antarchy.ouranwood_deer_spawn_egg": "オーランウッドのシカのスポーンエッグ", + "item.antarchy.spirit_apple": "精霊のリンゴ", + "item.antarchy.elka_spawn_egg": "エルカのスポーンエッグ", + "item.antarchy.glimmer_bottle": "グリマーの瓶", + "item.antarchy.glimmer_bottle.contains": "中身:%s", + "glimmer_variant.antarchy.apple_cow": "リンゴ牛", + "glimmer_variant.antarchy.ouranwood_deer": "オーランウッドのシカ", + "glimmer_variant.antarchy.frog": "カエル", + "glimmer_variant.antarchy.ant": "アリ", + "glimmer_variant.antarchy.elka": "エルカ", + "entity.antarchy.glimmer.set_sit": "グリマーをお座りにしました。", + "entity.antarchy.glimmer.set_follow": "グリマーを追従にしました。", + "entity.antarchy.glimmer.set_wander": "グリマーを徘徊にしました。", + "entity.antarchy.glimmer.ability.ant": "あなたのアリが%sへの闘志をかき立てた!", + "entity.antarchy.glimmer.ability.apple_cow": "リンゴ牛が鳴いてあなたを満たした!", + "entity.antarchy.glimmer.ability.elka": "エルカが叫び、守護を砕いた!", + "entity.antarchy.glimmer.ability.deer": "オーランウッドのシカが敵を突き抜けた!", + "entity.antarchy.glimmer.ability.frog": "あなたのカエルが%sを丸呑みにした!", + "item.antarchy.glimmer_bottle.passive.apple_cow": "パッシブ:満腹度の減少が25%遅くなる", + "item.antarchy.glimmer_bottle.ability.apple_cow": "能力:満腹度が低いときに鳴き、満腹度回復と再生を一時的に付与", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "パッシブ:移動速度上昇 Ⅰ", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "能力:敵対モブへダッシュすると突進し、吹き飛ばす", + "item.antarchy.glimmer_bottle.passive.frog": "パッシブ:跳躍力上昇 Ⅰ", + "item.antarchy.glimmer_bottle.ability.frog": "能力:近くの敵対モブを飲み込み、しばらく大きく強くなる", + "item.antarchy.glimmer_bottle.passive.ant": "パッシブ:攻撃範囲が少し広がる", + "item.antarchy.glimmer_bottle.ability.ant": "能力:大型の敵に攻撃を当てると一時的に攻撃力上昇 Ⅱを得る", + "item.antarchy.glimmer_bottle.passive.elka": "パッシブ:血晶の守護 Ⅱ", + "item.antarchy.glimmer_bottle.ability.elka": "能力:守護のハートが1つ砕けると叫び、衝撃波となって砕け散る", + "advancements.antarchy.spirant_animal.title": "アリがたい相棒", + "advancements.antarchy.spirant_animal.description": "アリのグリマーを手懐ける。", + "advancements.antarchy.hoppy_together.title": "一緒にぴょんぴょん", + "advancements.antarchy.hoppy_together.description": "カエルのグリマーを手懐ける。", + "advancements.antarchy.deerly_beloved.title": "シカと愛しき仲間", + "advancements.antarchy.deerly_beloved.description": "オーランウッドのシカのグリマーを手懐ける。", + "advancements.antarchy.elkcellent_choice.title": "エルカれた選択", + "advancements.antarchy.elkcellent_choice.description": "エルカのグリマーを手懐ける。", + "advancements.antarchy.apple_of_my_eye.title": "目に入れても痛くないリンゴ", + "advancements.antarchy.apple_of_my_eye.description": "リンゴ牛のグリマーを手懐ける。", + "item.antarchy.dorrie_spawn_egg": "ドーリーのスポーンエッグ", + "item.antarchy.flying_squirrel_spawn_egg": "モモンガのスポーンエッグ", + "item.antarchy.caterpillar_spawn_egg": "イモムシのスポーンエッグ", + "item.antarchy.butterfly_spawn_egg": "チョウのスポーンエッグ", + "item.antarchy.brutalfly_spawn_egg": "ブルータルフライのスポーンエッグ", + "item.antarchy.cloud_shark_spawn_egg": "雲ザメのスポーンエッグ", + "item.antarchy.kraken_spawn_egg": "いや、やめて。", + "item.antarchy.missile_squid_spawn_egg": "ミサイルイカのスポーンエッグ", + "item.antarchy.octopus_bomb_spawn_egg": "タコ爆弾のスポーンエッグ", + "item.antarchy.nightmare_spawn_egg": "ナイトメアのスポーンエッグ", + "item.antarchy.toreterror_spawn_egg": "トアテラーのスポーンエッグ", + "item.antarchy.water_cannon": "ウォーターキャノン", + "item.antarchy.primordial_helmet": "原初のヘルメット", + "item.antarchy.primordial_chestplate": "原初のチェストプレート", + "item.antarchy.primordial_leggings": "原初のレギンス", + "item.antarchy.primordial_boots": "原初のブーツ", + "item.antarchy.bed_bug_spawn_egg": "トコジラミのスポーンエッグ", + "item.antarchy.moleworm_spawn_egg": "モールワームのスポーンエッグ", + "item.antarchy.molevore_spawn_egg": "モールヴォアのスポーンエッグ", + "item.antarchy.reverie_spawn_egg": "レヴェリーのスポーンエッグ", + "item.antarchy.mantis_spawn_egg": "カマキリのスポーンエッグ", + "item.antarchy.alpha_mantis_spawn_egg": "アルファカマキリのスポーンエッグ", + "biome.antarchy.moleworm_caves": "モールワームの洞窟", + "biome.antarchy.elythia_meadow": "エリーティアの草原", + "biome.antarchy.butterfly_fields": "蝶の野原", + "biome.antarchy.ouranwood_forest": "オーランウッド 森", + "biome.antarchy.glimmering_pools": "きらめく池", + "biome.antarchy.peach_forest": "モモの森", + "biome.antarchy.fungal_ouranwood_forest": "菌類のオーランウッド 森", + "biome.antarchy.glowcap_caves": "グロウキャップ洞窟", + "message.antarchy.brown_ant_activated": "茶色のアリは行き先を開く準備ができています。", + "message.antarchy.brown_ant_needs_reagent": "この茶色のアリが行き先を開くには試薬が必要です。", + "message.antarchy.rainbow_ant_activated": "虹色のアリが新しいインフィニティの行き先を宿して羽音を立てます。", + "message.antarchy.rainbow_ant_activated_inherited": "虹色のアリが受け継いだインフィニティの行き先を宿して羽音を立てます。", + "message.antarchy.rainbow_ant_activated_inherited_existing": "虹色のアリが受け継いだインフィニティの行き先へ再接続します。", + "message.antarchy.rainbow_ant_failed_dimension_create": "ディメンションの作成に失敗しました。インフィニティの設定に問題がある可能性があります。再起動または再ログインして、もう一度お試しください。", + "message.antarchy.rainbow_ant_infinity_missing": "虹色のアリのディメンションを使用するにはインフィニティが必要です。", + "message.antarchy.rainbow_ant_needs_reagent": "この虹色のアリがディメンションを開くには試薬が必要です。", + "message.antarchy.red_ant_activated": "赤アリは行き先を開く準備ができています。", + "message.antarchy.red_ant_needs_reagent": "この赤アリが行き先を開くには試薬が必要です。", + "message.antarchy.termite_activated": "シロアリは行き先を開く準備ができています。", + "message.antarchy.termite_needs_reagent": "このシロアリが行き先を開くには試薬が必要です。", + "death.attack.spit_bug_disrespect": "%1$sはスピットバグに無礼を働かれた", + "death.attack.jumpy_bug_jump": "%1$sはジャンピーバグに飛びかかられた", + "death.attack.hercules_beetle_obliteration": "%1$sはヘラクレスオオカブトに消し飛ばされた", + "message.antarchy.big_bertha.mode": "ビッグ・バーサのモード:%s", + "message.antarchy.big_bertha.mode.basilisk": "バジリスク", + "message.antarchy.big_bertha.mode.lucid": "ルーシッド", + "message.antarchy.big_bertha.mode.nightmare": "ナイトメア", + "message.antarchy.big_bertha.mode.kraken": "クラーケン", + "message.antarchy.big_bertha.mode.molevore": "モールヴォア", + "message.antarchy.big_bertha.mode.toreterror": "トアテラー", + "message.antarchy.ultimate_tool.mode_3x3": "3×3採掘に切り替えました", + "message.antarchy.ultimate_tool.mode_default": "通常採掘に切り替えました", + "advancements.antarchy.hey_listen.title": "ねえ、聞いて!", + "advancements.antarchy.hey_listen.description": "レヴェリーが仲間になりました。", + "advancements.antarchy.very_hungry_caterpillar.title": "はらぺこあおむし", + "advancements.antarchy.very_hungry_caterpillar.description": "イモムシの成長を手伝う。", + "effect.antarchy.dread": "恐怖", + "effect.antarchy.dread.description": "視覚と聴覚の幻覚を引き起こします。", + "effect.antarchy.paralyzed": "麻痺", + "effect.antarchy.paralyzed.description": "対象が動けなくなります。", + "effect.antarchy.inverted": "重力反転", + "effect.antarchy.inverted.description": "対象の重力を反転させます。", + "effect.antarchy.stinky": "悪臭", + "effect.antarchy.stinky.description": "友好的および中立のMobを遠ざけ、節足動物を引き寄せます。", + "effect.antarchy.gooped.description": "移動速度と攻撃速度を低下させます。", + "effect.antarchy.shrinking": "縮小", + "effect.antarchy.growth": "成長", + "effect.antarchy.bloodglass_ward": "血晶の守護", + "effect.antarchy.bloodglass_ward.description": "砕けるハートを与え、1回分のダメージを丸ごと吸収します。時間経過で再生します。", + "death.attack.triffid_mauling": "%1$sは植物に噛み殺された", + "death.attack.triffid_mauling.player": "%1$sは植物に噛み殺された", + "death.attack.triffid_swallow": "%1$sはトリフィドに飲み込まれた", + "death.attack.triffid_swallow.player": "%1$sはトリフィドに飲み込まれた", + "potion.antarchy.haste": "採掘速度上昇のポーション", + "potion.antarchy.strong_haste": "採掘速度上昇 Ⅱのポーション", + "tooltip.antarchy.big_bertha.mode": "モード:%s", + "tooltip.antarchy.big_bertha.toggle_mode": "シフトキー+右クリックでボスモードを切り替えます。", + "tooltip.antarchy.big_bertha.mode.basilisk": "右クリックで対象を麻痺させます。攻撃は毒と移動速度低下を付与します。", + "tooltip.antarchy.big_bertha.mode.lucid": "攻撃した対象の重力を数秒間反転させます。自分の重力が反転中は攻撃力が上がります。", + "tooltip.antarchy.big_bertha.mode.nightmare": "プレイヤーは恐怖を受け、攻撃は弱体化を付与します。", + "tooltip.antarchy.big_bertha.mode.kraken": "攻撃で対象を叩き戻し、雷を呼びます。", + "tooltip.antarchy.big_bertha.mode.molevore": "右クリックで回転しながら前進し、モールヴォアブロックを掘り抜きます。", + "tooltip.antarchy.big_bertha.mode.toreterror": "右クリックで空中へ飛び上がり、範囲衝撃波とともに落下します。", + "tooltip.antarchy.ultimate_tools_3x3": "シフトキー+右クリックで3×3採掘を切り替えます。", + "tooltip.antarchy.moggles.reveal": "暗視を付与し、近くの洞窟を示します。", + "tooltip.antarchy.moggles.underground": "空が見えない場所でのみ機能します。", + "tooltip.antarchy.cornea_ear.vision": "%s秒間暗視を付与します。", + "tooltip.antarchy.mob_coming_soon": "モブは近日追加予定!", + "tooltip.antarchy.gravity_gun.primary": "左クリック:近くのエンティティを吹き飛ばすか、保持中の対象を投げます。", + "tooltip.antarchy.gravity_gun.secondary": "右クリック:エンティティまたは有効なブロックを引き寄せます。", + "tooltip.antarchy.gravity_gun.scroll": "コントロールキーを押しながらスクロールして、保持中の対象との距離を調整します。", + "tooltip.antarchy.gravity_gun.blacklist": "ブラックリスト内のブロックやエンティティには効果がありません。", + "tooltip.antarchy.antimetal_inversion": "真下のエンティティの重力を反転します", + "tooltip.antarchy.diamond_minecart.forward": "後日実装予定です。", + "tooltip.antarchy.diamond_minecart.rails": " ", + "tooltip.antarchy.rainbow_sugar": "虹色のアリのディメンションを有効化します。その中で食べると帰還できます。", + "advancements.antarchy.visit_elythia.title": "異次元アリ旅行", + "advancements.antarchy.visit_elythia.description": "茶色のアリを使ってエリーティアへ到達する。", + "advancements.antarchy.visit_thoraxis.title": "アリ怒り管理", + "advancements.antarchy.visit_thoraxis.description": "赤アリを使ってソーアクシスへ到達する。", + "advancements.antarchy.fallen_kingdom_castle.title": "かつて世界を支配していた…", + "advancements.antarchy.fallen_kingdom_castle.description": "滅びた王国の城を発見する。", + "advancements.antarchy.fallen_king_crown.title": "命じればチャンクが読み込まれた…", + "advancements.antarchy.fallen_king_crown.description": "亡き王の王冠を入手する。", + "advancements.antarchy.the_lab.title": "皆さんこんにちは、ダンです!", + "advancements.antarchy.the_lab.description": "トレイオーラス博士の研究所を発見する。", + "advancements.antarchy.sweater_dreams.title": "セーターの夢", + "advancements.antarchy.sweater_dreams.description": "ナイトメアを倒す。", + "advancements.antarchy.stone_cold.title": "ストーンコールド", + "advancements.antarchy.stone_cold.description": "バジリスクを倒す。", + "advancements.antarchy.moley_poley.title": "モーリー・ポーリー", + "advancements.antarchy.moley_poley.description": "モールヴォアを倒す。", + "advancements.antarchy.lucid_dreams.title": "明晰夢", + "advancements.antarchy.lucid_dreams.description": "ルーシッドを倒す。", + "advancements.antarchy.davy_jones_locker.title": "デイヴィ・ジョーンズの墓場", + "advancements.antarchy.davy_jones_locker.description": "クラーケンを倒す。", + "advancements.antarchy.shark_weak.title": "サメが空を飛ぶとき", + "advancements.antarchy.shark_weak.description": "雲ザメを倒す。", + "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "トコジラミに噛まれないで", + "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "トコジラミを倒す。", + "advancements.antarchy.soups_up.title": "スープ完成", + "advancements.antarchy.soups_up.description": "雲ザメのヒレスープを食べる。", + "advancements.antarchy.in_the_upside_down.title": "裏側の世界", + "advancements.antarchy.in_the_upside_down.description": "初めて重力が反転する。", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "臭いと言った人が犯人", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "初めて悪臭状態になる。", + "advancements.antarchy.ultimate_armor.title": "究極の防護", + "advancements.antarchy.ultimate_armor.description": "究極の防具一式を集める。", + "advancements.antarchy.ultimate_bow.title": "ボウヘミアン・ラプソディ", + "advancements.antarchy.ultimate_bow.description": "究極の弓を入手する。", + "advancements.antarchy.brutalfly.title": "ブルータルフライのように舞い、ハチのように刺す", + "advancements.antarchy.brutalfly.description": "ブルータルフライのエリトラを入手する。", + "advancements.antarchy.now_watch_me_whip.title": "さあ、鞭さばきを見よ", + "advancements.antarchy.now_watch_me_whip.description": "今度はネイネイを見て", + "advancements.antarchy.kill_molevore.title": "モーリー・ポーリー", + "advancements.antarchy.kill_molevore.description": "モールヴォアを倒す。", + "advancements.antarchy.water_cannon_craft.title": "濡れているほうがいい!", + "advancements.antarchy.water_cannon_craft.description": "ウォーターキャノンを入手する。", + "advancements.antarchy.kill_toreterror.title": "トアテラーというより狙いがテラー!", + "advancements.antarchy.kill_toreterror.description": "トアテラーを倒す。", + "advancements.antarchy.challenge_games.title": "チャレンジゲーム!", + "advancements.antarchy.challenge_games.description": "廃墟の闘技場に入る。", + "advancements.antarchy.bugged_out.title": "バグった!", + "advancements.antarchy.bugged_out.description": "アルファカマキリを倒す。", + "death.attack.bed_bug_bite": "%1$sはトコジラミに噛まれた", + "death.attack.bed_bug_bite.player": "%1$sは%2$sとの戦闘中にトコジラミに噛まれた", + "message.antarchy.dread_too_scared_to_sleep": "怖くて眠れません。", + "death.attack.kraken_mauling": "%1$sはクラーケンに水中へ引きずり込まれた", + "death.attack.kraken_mauling.player": "%1$sは%2$sとの戦闘中にクラーケンに水中へ引きずり込まれた", + "death.attack.kraken_lightning": "%1$sはクラーケンの嵐に打ち倒された", + "death.attack.kraken_lightning.player": "%1$sは%2$sとの戦闘中にクラーケンの嵐に打ち倒された", + "death.attack.rpo_launcher_blast": "%1$sはロ・推・タにノックアウトされた", + "death.attack.rpo_launcher_blast.player": "%1$sは%2$sとの戦闘中にロ・推・タにノックアウトされた", + "death.attack.nightmare_mauling": "%1$sはナイトメアに貪り食われた", + "death.attack.nightmare_mauling.player": "%1$sは%2$sとの戦闘中にナイトメアに貪り食われた", + "death.attack.basilisk_bite": "%1$sはバジリスクに飲み込まれた", + "death.attack.basilisk_bite.player": "%1$sは%2$sとの戦闘中にバジリスクに飲み込まれた", + "death.attack.emperor_scorpion_sting": "%1$sはダイオウサソリに刺された", + "death.attack.emperor_scorpion_sting.player": "%1$sは%2$sとの戦闘中にダイオウサソリに刺された", + "death.attack.cornea_stalk_prick": "%1$sはコーニアの茎に刺されて死んだ", + "death.attack.toreterror_spin": "%1$sはトアテラーの回転攻撃で倒された", + "death.attack.toreterror_spin.player": "%1$sはトアテラーの回転攻撃で倒された", + "death.attack.toreterror_jump": "%1$sはトアテラーに叩き潰された", + "death.attack.toreterror_jump.player": "%1$sはトアテラーに叩き潰された", + "death.attack.water_soaked": "%1$sは%2$sにびしょ濡れにされて倒れた", + "death.attack.water_soaked.player": "%1$sは%2$sにびしょ濡れにされて倒れた", + "entity.antarchy.lucid": "ルーシッド", + "item.antarchy.lucid_spawn_egg": "ルーシッドのスポーンエッグ", + "item.antarchy.lucid_eye": "ルーシッドの目", + "entity.antarchy.scorpion": "サソリ", + "item.antarchy.scorpion_spawn_egg": "サソリのスポーンエッグ", + "entity.antarchy.basilisk": "バジリスク", + "item.antarchy.basilisk_spawn_egg": "バジリスクのスポーンエッグ", + "entity.antarchy.emperor_scorpion": "ダイオウサソリ", + "item.antarchy.emperor_scorpion_spawn_egg": "ダイオウサソリのスポーンエッグ", + "item.antarchy.emperor_scorpion_stinger": "ダイオウサソリの針", + "item.antarchy.lucid_pearl": "ルーシッドの真珠", + "tooltip.antarchy.lucid_pearl": "重力が反転した投射物を投げます。", + "tooltip.antarchy.lucid_pearl.detail": "着弾地点へテレポートし、重力反転を付与します。", + "subtitles.antarchy.squidzooka_fire": "スクイッズーカを発射する", + "subtitles.antarchy.shrink_ray": "縮小光線銃を発射する", + "subtitles.antarchy.growth_ray": "成長光線銃を発射する", + "subtitles.antarchy.size_ray_charge": "サイズ光線銃がチャージする", + "subtitles.antarchy.ant_ambient": "アリがさえずる", + "subtitles.antarchy.ant_idle": "アリが鳴く", + "subtitles.antarchy.ant_hurt": "アリが傷つく", + "subtitles.antarchy.ant_bite": "アリが噛む", + "subtitles.antarchy.ant_gather": "アリが集める", + "subtitles.antarchy.ant_nest": "アリの巣がざわめく", + "subtitles.antarchy.cloud_shark_bite": "雲ザメが噛む", + "subtitles.antarchy.cloud_shark_idle": "雲ザメが鳴く", + "subtitles.antarchy.cloud_shark_hurt": "雲ザメが傷つく", + "subtitles.antarchy.cloud_shark_death": "雲ザメが倒れる", + "subtitles.antarchy.cloud_shark_fly": "雲ザメが飛ぶ", + "subtitles.antarchy.caterpillar_idle": "イモムシが鳴く", + "subtitles.antarchy.caterpillar_hurt": "イモムシが傷つく", + "subtitles.antarchy.caterpillar_crawl": "イモムシが這う", + "subtitles.antarchy.butterfly_hurt": "チョウが傷つく", + "subtitles.antarchy.brutalfly_idle": "ブルータルフライが鳴く", + "subtitles.antarchy.brutalfly_death": "ブルータルフライが倒れる", + "subtitles.antarchy.thoraxis_nightmare_wastes_ambient": "ナイトメアの荒野が低く唸る", + "subtitles.antarchy.thoraxis_nightmare_wastes_additions": "ナイトメアの荒野がざわめく", + "subtitles.antarchy.thoraxis_nightmare_wastes_mood": "ナイトメアの荒野がささやく", + "subtitles.antarchy.thoraxis_dream_dunes_ambient": "夢の砂丘がささやく", + "subtitles.antarchy.thoraxis_dream_dunes_additions": "夢の砂丘がざわめく", + "subtitles.antarchy.thoraxis_dream_dunes_mood": "夢の砂丘がため息をつく", + "subtitles.antarchy.thoraxis_lucid_pools_ambient": "ルーシッドの池が低く唸る", + "subtitles.antarchy.thoraxis_lucid_pools_additions": "ルーシッドの池が呪いの音を立てる", + "subtitles.antarchy.thoraxis_lucid_pools_mood": "ルーシッドの池がささやく", + "subtitles.antarchy.lucid_ambient": "ルーシッドが低く唸る", + "subtitles.antarchy.lucid_flying": "ルーシッドが羽ばたく", + "subtitles.antarchy.lucid_attack": "ルーシッドが攻撃する", + "subtitles.antarchy.lucid_bolt": "ルーシッドが弾を発射する", + "subtitles.antarchy.lucid_hurt": "ルーシッドが傷つく", + "subtitles.antarchy.lucid_death": "ルーシッドが倒れる", + "subtitles.antarchy.reverie_idle": "レヴェリーが漂う", + "subtitles.antarchy.reverie_hurt": "レヴェリーが傷つく", + "subtitles.antarchy.reverie_worry": "レヴェリーが心配する", + "subtitles.antarchy.reverie_save": "レヴェリーがあなたを救う", + "subtitles.antarchy.reverie_join_player": "レヴェリーが仲間になる", + "subtitles.antarchy.reverie_alert": "レヴェリーが警告する", + "subtitles.antarchy.flying_squirrel_idle": "モモンガがさえずる", + "subtitles.antarchy.flying_squirrel_beg": "モモンガが餌をねだる", + "subtitles.antarchy.flying_squirrel_nut": "モモンガが食べる", + "subtitles.antarchy.flying_squirrel_glide_loop": "モモンガが滑空する", + "subtitles.antarchy.flying_squirrel_hurt": "モモンガが傷つく", + "subtitles.antarchy.flying_squirrel_death": "モモンガが倒れる", + "subtitles.antarchy.nightmare_idle": "ナイトメアが唸る", + "subtitles.antarchy.nightmare_hurt": "ナイトメアが傷つく", + "subtitles.antarchy.nightmare_roar": "ナイトメアが咆哮する", + "subtitles.antarchy.nightmare_death": "ナイトメアが倒れる", + "subtitles.antarchy.nightmare_bite": "ナイトメアが噛む", + "subtitles.antarchy.nightmare_flap": "ナイトメアが羽ばたく", + "subtitles.antarchy.triffid_attack": "トリフィドが攻撃する", + "subtitles.antarchy.triffid_grab": "トリフィドが掴む", + "subtitles.antarchy.triffid_hurt": "トリフィドが傷つく", + "subtitles.antarchy.triffid_death": "トリフィドが倒れる", + "subtitles.antarchy.triffid_hiss": "トリフィドがシューッと鳴る", + "subtitles.antarchy.triffid_growl": "トリフィドが唸る", + "subtitles.antarchy.gravity_gun_pickup": "重力銃が持ち上げる", + "subtitles.antarchy.gravity_gun_drop": "重力銃が放す", + "subtitles.antarchy.gravity_gun_hold_loop": "重力銃が低く唸る", + "subtitles.antarchy.gravity_gun_launch": "重力銃が発射する", + "subtitles.antarchy.gravity_gun_dryfire": "重力銃が空撃ちする", + "subtitles.antarchy.bed_bug_ambient": "トコジラミがさえずる", + "subtitles.antarchy.bed_bug_hurt": "トコジラミが傷つく", + "subtitles.antarchy.bed_bug_attack": "トコジラミが噛む", + "subtitles.antarchy.wasp_idle": "ハチがブンブン鳴る", + "subtitles.antarchy.wasp_hurt": "ハチが傷つく", + "subtitles.antarchy.wasp_attack": "ハチが刺す", + "subtitles.antarchy.wasp_death": "ハチが倒れる", + "subtitles.antarchy.scorpion_ambient": "サソリがガラガラ鳴る", + "subtitles.antarchy.scorpion_hurt": "サソリが傷つく", + "subtitles.antarchy.scorpion_attack": "サソリが攻撃する", + "subtitles.antarchy.emperor_scorpion_ambient": "ダイオウサソリがガラガラ鳴る", + "subtitles.antarchy.emperor_scorpion_hurt": "ダイオウサソリが傷つく", + "subtitles.antarchy.emperor_scorpion_attack": "ダイオウサソリが攻撃する", + "subtitles.antarchy.emperor_scorpion_roar": "ダイオウサソリが咆哮する", + "subtitles.antarchy.moleworm_ambient": "モールワームがざわめく", + "subtitles.antarchy.moleworm_hurt": "モールワームが傷つく", + "subtitles.antarchy.moleworm_attack": "モールワームが攻撃する", + "subtitles.antarchy.moleworm_dig": "モールワームが掘る", + "subtitles.antarchy.molevore_ambient": "モールヴォアが轟く", + "subtitles.antarchy.molevore_hurt": "モールヴォアが傷つく", + "subtitles.antarchy.molevore_attack": "モールヴォアが攻撃する", + "subtitles.antarchy.molevore_dig": "モールヴォアが掘る", + "subtitles.antarchy.duct_tape_use": "ダクトテープが裂ける", + "subtitles.antarchy.potent_nyxite_hypnotic_gas": "強力なニクサイトがシューッと鳴る", + "subtitles.antarchy.potent_nyxite_geyser_eruption": "強力なニクサイトが噴出する", + "subtitles.antarchy.potent_nyxite_geyser_continuous": "強力なニクサイトの間欠泉が轟く", + "subtitles.antarchy.missile_squid_ambient": "ミサイルイカが低く唸る", + "subtitles.antarchy.missile_squid_hurt": "ミサイルイカが傷つく", + "subtitles.antarchy.missile_squid_death": "ミサイルイカが倒れる", + "subtitles.antarchy.missile_squid_attack": "ミサイルイカが攻撃する", + "subtitles.antarchy.kraken_flying_loop": "クラーケンが滑空する", + "subtitles.antarchy.kraken_flying_sideways_loop": "クラーケンが旋回する", + "subtitles.antarchy.kraken_attack": "クラーケンが攻撃する", + "subtitles.antarchy.kraken_spin": "クラーケンが回転する", + "subtitles.antarchy.kraken_roar": "クラーケンが咆哮する", + "subtitles.antarchy.kraken_summon": "クラーケンが現れる", + "subtitles.antarchy.kraken_hurt": "クラーケンが傷つく", + "subtitles.antarchy.kraken_death": "クラーケンが倒れる", + "subtitles.antarchy.basilisk_idle_loop": "バジリスクが鳴く", + "subtitles.antarchy.basilisk_slither_loop": "バジリスクが這う", + "subtitles.antarchy.basilisk_bite": "バジリスクが噛む", + "subtitles.antarchy.basilisk_hiss": "バジリスクがシューッと鳴る", + "subtitles.antarchy.basilisk_hurt": "バジリスクが傷つく", + "subtitles.antarchy.basilisk_death": "バジリスクが倒れる", + "subtitles.antarchy.bomber_walk": "ボマーが歩く", + "subtitles.antarchy.bomber_knock": "ボマーが攻撃を受ける", + "subtitles.antarchy.bomber_explode": "ボマーの導火線がシューッと鳴る", + "subtitles.antarchy.toreterror_idle": "トアテラーが鳴く", + "subtitles.antarchy.toreterror_hurt": "トアテラーが傷つく", + "subtitles.antarchy.toreterror_death": "トアテラーが倒れる", + "subtitles.antarchy.toreterror_bomber_fire": "トアテラーがボマーを発射する", + "subtitles.antarchy.toreterror_spin": "トアテラーが回転する", + "subtitles.antarchy.toreterror_ricochet": "トアテラーが跳ね返る", + "subtitles.antarchy.water_cannon_fire": "ウォーターキャノンを発射する", + "subtitles.antarchy.toreterror_jump_up": "トアテラーが跳ぶ", + "subtitles.antarchy.toreterror_jump_land": "トアテラーが着地する", + "subtitles.antarchy.stinky_fly": "臭いハエがブンブン鳴る", + "item.minecraft.potion.effect.inversion": "重力反転のポーション", + "item.minecraft.potion.effect.long_inversion": "重力反転のポーション", + "item.minecraft.splash_potion.effect.inversion": "重力反転のスプラッシュポーション", + "item.minecraft.splash_potion.effect.long_inversion": "重力反転のスプラッシュポーション", + "item.minecraft.lingering_potion.effect.inversion": "重力反転の残留ポーション", + "item.minecraft.lingering_potion.effect.long_inversion": "重力反転の残留ポーション", + "item.minecraft.tipped_arrow.effect.inversion": "重力反転の矢", + "item.minecraft.tipped_arrow.effect.long_inversion": "重力反転の矢", + "item.minecraft.potion.effect.paralysis": "麻痺のポーション", + "item.minecraft.potion.effect.long_paralysis": "麻痺のポーション", + "item.minecraft.splash_potion.effect.paralysis": "麻痺のスプラッシュポーション", + "item.minecraft.splash_potion.effect.long_paralysis": "麻痺のスプラッシュポーション", + "item.minecraft.lingering_potion.effect.paralysis": "麻痺の残留ポーション", + "item.minecraft.lingering_potion.effect.long_paralysis": "麻痺の残留ポーション", + "item.minecraft.tipped_arrow.effect.paralysis": "麻痺の矢", + "item.minecraft.tipped_arrow.effect.long_paralysis": "麻痺の矢", + "item.minecraft.potion.effect.shrinking": "縮小のポーション", + "item.minecraft.potion.effect.strong_shrinking": "縮小のポーション Ⅱ", + "item.minecraft.potion.effect.extreme_shrinking": "縮小のポーション Ⅲ", + "item.minecraft.splash_potion.effect.shrinking": "縮小のスプラッシュポーション", + "item.minecraft.splash_potion.effect.strong_shrinking": "縮小のスプラッシュポーション Ⅱ", + "item.minecraft.splash_potion.effect.extreme_shrinking": "縮小のスプラッシュポーション Ⅲ", + "item.minecraft.lingering_potion.effect.shrinking": "縮小の残留ポーション", + "item.minecraft.lingering_potion.effect.strong_shrinking": "縮小の残留ポーション Ⅱ", + "item.minecraft.lingering_potion.effect.extreme_shrinking": "縮小の残留ポーション Ⅲ", + "item.minecraft.tipped_arrow.effect.shrinking": "縮小の矢", + "item.minecraft.tipped_arrow.effect.strong_shrinking": "縮小の矢 Ⅱ", + "item.minecraft.tipped_arrow.effect.extreme_shrinking": "縮小の矢 Ⅲ", + "item.minecraft.potion.effect.growing": "成長のポーション", + "item.minecraft.potion.effect.strong_growing": "成長のポーション Ⅱ", + "item.minecraft.potion.effect.extreme_growing": "成長のポーション Ⅲ", + "item.minecraft.splash_potion.effect.growing": "成長のスプラッシュポーション", + "item.minecraft.splash_potion.effect.strong_growing": "成長のスプラッシュポーション Ⅱ", + "item.minecraft.splash_potion.effect.extreme_growing": "成長のスプラッシュポーション Ⅲ", + "item.minecraft.lingering_potion.effect.growing": "成長の残留ポーション", + "item.minecraft.lingering_potion.effect.strong_growing": "成長の残留ポーション Ⅱ", + "item.minecraft.lingering_potion.effect.extreme_growing": "成長の残留ポーション Ⅲ", + "item.minecraft.tipped_arrow.effect.growing": "成長の矢", + "item.minecraft.tipped_arrow.effect.strong_growing": "成長の矢 Ⅱ", + "item.minecraft.tipped_arrow.effect.extreme_growing": "成長の矢 Ⅲ", + "item.minecraft.potion.effect.dread": "恐怖のポーション", + "item.minecraft.potion.effect.long_dread": "恐怖のポーション", + "item.minecraft.splash_potion.effect.dread": "恐怖のスプラッシュポーション", + "item.minecraft.splash_potion.effect.long_dread": "恐怖のスプラッシュポーション", + "item.minecraft.lingering_potion.effect.dread": "恐怖の残留ポーション", + "item.minecraft.lingering_potion.effect.long_dread": "恐怖の残留ポーション", + "item.minecraft.tipped_arrow.effect.dread": "恐怖の矢", + "item.minecraft.tipped_arrow.effect.long_dread": "恐怖の矢", + "item.minecraft.potion.effect.stinky": "悪臭のポーション", + "item.minecraft.potion.effect.long_stinky": "悪臭のポーション", + "item.minecraft.splash_potion.effect.stinky": "悪臭のスプラッシュポーション", + "item.minecraft.splash_potion.effect.long_stinky": "悪臭のスプラッシュポーション", + "item.minecraft.lingering_potion.effect.stinky": "悪臭の残留ポーション", + "item.minecraft.lingering_potion.effect.long_stinky": "悪臭の残留ポーション", + "item.minecraft.tipped_arrow.effect.stinky": "悪臭の矢", + "item.minecraft.tipped_arrow.effect.long_stinky": "悪臭の矢", + "item.minecraft.potion.effect.haste": "採掘速度上昇のポーション", + "item.minecraft.potion.effect.strong_haste": "採掘速度上昇のポーション Ⅱ", + "item.minecraft.splash_potion.effect.haste": "採掘速度上昇のスプラッシュポーション", + "item.minecraft.splash_potion.effect.strong_haste": "採掘速度上昇のスプラッシュポーション Ⅱ", + "item.minecraft.lingering_potion.effect.haste": "採掘速度上昇の残留ポーション", + "item.minecraft.lingering_potion.effect.strong_haste": "採掘速度上昇の残留ポーション Ⅱ", + "item.minecraft.tipped_arrow.effect.haste": "採掘速度上昇の矢", + "item.minecraft.tipped_arrow.effect.strong_haste": "採掘速度上昇の矢 Ⅱ", + "advancements.antarchy.cancel_out.title": "1 - 1 = ?", + "advancements.antarchy.cancel_out.description": "成長と縮小を同時に発動する。", + "entity.antarchy.cheep": "チープ", + "item.antarchy.cheep": "チープ", + "item.antarchy.cheep_spawn_egg": "チープのスポーンエッグ", + "entity.antarchy.reverie": "レヴェリー", + "biome.antarchy.thoraxis": "ソーアクシス", + "biome.antarchy.nightmare_wastes": "ナイトメアの荒野", + "biome.antarchy.umbral_hills": "アンブラルの丘", + "biome.antarchy.lucid_pools": "ルーシッドの池", + "biome.antarchy.dream_dunes": "夢の砂丘", + "block.antarchy.wild_corn": "野生のトウモロコシ", + "trim_material.antarchy.blood_crystal": "血の結晶", + "trim_material.antarchy.nightmare_scale": "ナイトメアの鱗", + "trim_material.antarchy.uranium": "ウラン", + "trim_material.antarchy.titanium": "チタン", + "advancements.antarchy.duct_tape.title": "このボートを真っ二つに切った!", + "advancements.antarchy.duct_tape.description": "そしてダクトテープの力で直した!", + "key.categories.antarchy": "アンターキー", + "key.antarchy.brutalfly_flap": "ブルータルフライのエリトラ:羽ばたく", + "advancements.antarchy.shrink_ray_craft.title": "ミクロキッズ:モブを縮めちゃった", + "advancements.antarchy.shrink_ray_craft.description": "縮小光線銃をクラフトする。", + "advancements.antarchy.growth_ray_craft.title": "大きくなるか、帰るか", + "advancements.antarchy.growth_ray_craft.description": "成長光線銃をクラフトする。", + "advancements.antarchy.squidzooka_craft.title": "墨と破壊", + "advancements.antarchy.squidzooka_craft.description": "スクイッズーカをクラフトする。", + "advancements.antarchy.rocket_powered_octopus.title": "ロケット推進タコ", + "advancements.antarchy.rocket_powered_octopus.description": "ロ・推・タランチャーをクラフトする。", + "advancements.antarchy.gravity_gun_craft.title": "持ち上げ上手", + "advancements.antarchy.gravity_gun_craft.description": "重力銃をクラフトする。", + "block.antarchy.cavaryn_portal": "カヴァリンのポータル", + "block.antarchy.termite_nest": "シロアリの巣", + "block.antarchy.chitin_spike": "キチンのトゲ", + "block.antarchy.chitin_block": "キチンのブロック", + "block.antarchy.myrmite": "ミルマイト", + "block.antarchy.broodstone": "ブルードストーン", + "block.antarchy.amber_moss_block": "琥珀色の苔ブロック", + "block.antarchy.amber_moss_carpet": "琥珀色の苔のカーペット", + "block.antarchy.amber_lichen": "琥珀色の地衣類", + "block.antarchy.bile_vein": "胆汁脈", + "block.antarchy.creepvine": "クリープヴァイン", + "block.antarchy.creeping_horror_egg": "這い寄る恐怖の卵", + "block.antarchy.lurking_terror_egg": "潜む恐怖の卵", + "entity.antarchy.termite": "シロアリ", + "entity.antarchy.jumpy_bug": "ジャンピーバグ", + "entity.antarchy.spit_bug": "スピットバグ", + "entity.antarchy.stink_bug": "カメムシ", + "entity.antarchy.rolly_polly": "ダンゴムシ", + "entity.antarchy.creeping_horror": "這い寄る恐怖", + "entity.antarchy.lurking_terror": "潜む恐怖", + "entity.antarchy.hercules_beetle": "ヘラクレスオオカブト", + "item.antarchy.jumpy_bug_spawn_egg": "ジャンピーバグのスポーンエッグ", + "item.antarchy.spit_bug_spawn_egg": "スピットバグのスポーンエッグ", + "item.antarchy.stink_bug_spawn_egg": "カメムシのスポーンエッグ", + "item.antarchy.termite_spawn_egg": "シロアリのスポーンエッグ", + "item.antarchy.rolly_polly_spawn_egg": "ダンゴムシのスポーンエッグ", + "item.antarchy.creeping_horror_spawn_egg": "這い寄る恐怖のスポーンエッグ", + "item.antarchy.lurking_terror_spawn_egg": "潜む恐怖のスポーンエッグ", + "item.antarchy.hercules_beetle_spawn_egg": "ヘラクレスオオカブトのスポーンエッグ", + "item.antarchy.chitin": "キチン", + "block.antarchy.polished_broodstone": "磨かれたブルードストーン", + "block.antarchy.chiseled_broodstone": "模様入りのブルードストーン", + "block.antarchy.broodstone_bricks": "ブルードストーンレンガ", + "block.antarchy.broodstone_stairs": "ブルードストーンの階段", + "block.antarchy.broodstone_slab": "ブルードストーンのハーフブロック", + "block.antarchy.broodstone_wall": "ブルードストーンの塀", + "block.antarchy.polished_broodstone_stairs": "磨かれたブルードストーンの階段", + "block.antarchy.polished_broodstone_slab": "磨かれたブルードストーンのハーフブロック", + "block.antarchy.polished_broodstone_wall": "磨かれたブルードストーンの塀", + "block.antarchy.broodstone_brick_stairs": "ブルードストーンレンガの階段", + "block.antarchy.broodstone_brick_slab": "ブルードストーンレンガのハーフブロック", + "block.antarchy.broodstone_brick_wall": "ブルードストーンレンガの塀", + "block.antarchy.myrmite_coal_ore": "ミルマイト 石炭鉱石", + "block.antarchy.broodstone_uranium_ore": "ブルードストーン ウランの鉱石", + "block.antarchy.broodstone_titanium_ore": "ブルードストーン チタンの鉱石", + "item.antarchy.raw_bug_meat": "生の虫肉", + "item.antarchy.cooked_bug_meat": "焼いた虫肉", + "item.antarchy.hercules_horn": "ヘラクレスの角", + "block.antarchy.hanging_creeproots": "垂れ下がるクリープルート", + "block.antarchy.glowcap_mushroom": "グロウキャップキノコ", + "block.antarchy.potted_glowcap_mushroom": "植木鉢に入ったグロウキャップキノコ", + "block.antarchy.glowcap_mushroom_block": "グロウキャップキノコブロック", + "block.antarchy.molting_vines": "脱皮のツタ", + "item.antarchy.broodfruit": "ブルードフルーツ", + "block.antarchy.jumpy_bug_egg": "ジャンピーバグの卵", + "subtitles.antarchy.creeping_horror_growl": "這い寄る恐怖が唸る", + "subtitles.antarchy.creeping_horror_hurt": "這い寄る恐怖が傷つく", + "subtitles.antarchy.creeping_horror_bite": "這い寄る恐怖が噛む", + "subtitles.antarchy.lurking_terror_snarl": "潜む恐怖が唸る", + "subtitles.antarchy.lurking_terror_hurt": "潜む恐怖が傷つく", + "subtitles.antarchy.lurking_terror_bite": "潜む恐怖が噛む", + "subtitles.antarchy.lurking_terror_fly_loop": "潜む恐怖が飛ぶ", + "subtitles.antarchy.stink_bug_fart": "カメムシが屁をする", + "subtitles.antarchy.stink_bug_idle": "カメムシが鳴く", + "subtitles.antarchy.rolly_polly_idle": "ダンゴムシが鳴く", + "subtitles.antarchy.rolly_polly_wheel_mode": "ダンゴムシが丸まる", + "subtitles.antarchy.rolly_polly_normal_mode": "ダンゴムシが伸びる", + "subtitles.antarchy.rolly_polly_roll": "ダンゴムシが転がる", + "subtitles.antarchy.hercules_beetle_idle": "ヘラクレスオオカブトが鳴く", + "subtitles.antarchy.hercules_beetle_hurt": "ヘラクレスオオカブトが傷つく", + "subtitles.antarchy.hercules_beetle_attack": "ヘラクレスオオカブトが攻撃する", + "subtitles.antarchy.hercules_beetle_cry": "ヘラクレスオオカブトが咆哮する", + "subtitles.antarchy.hercules_beetle_charge_start": "ヘラクレスオオカブトが攻撃を溜める", + "subtitles.antarchy.hercules_beetle_knocked_down": "ヘラクレスオオカブトが転倒する", + "subtitles.antarchy.jerry_idle": "ジェリーが鳴く", + "subtitles.antarchy.jerry_hurt": "ジェリーが傷つく", + "subtitles.antarchy.jerry_death": "ジェリーが死ぬ", + "subtitles.antarchy.jerry_attack": "ジェリーが攻撃する", + "subtitles.antarchy.jumpy_bug_idle": "ジャンピーバグが鳴く", + "subtitles.antarchy.spit_bug_idle": "スピットバグが鳴く", + "subtitles.antarchy.jumpy_bug_hurt": "ジャンピーバグが傷つく", + "subtitles.antarchy.jumpy_bug_jump": "ジャンピーバグが跳ぶ", + "subtitles.antarchy.spit_bug_hurt": "スピットバグが傷つく", + "subtitles.antarchy.spit_bug_spit": "スピットバグが吐き出す", + "subtitles.antarchy.brutalfly_spit": "ブルータルフライが吐き出す", + "advancements.antarchy.bug_apetit.title": "虫ボナペティ", + "advancements.antarchy.bug_apetit.description": "焼いた虫肉を食べる。", + "advancements.antarchy.behavioral_correction.title": "行動矯正", + "advancements.antarchy.behavioral_correction.description": "態度調整ハンマーを入手する。", + "advancements.antarchy.beetle_buddies.title": "カブトムシ仲間", + "advancements.antarchy.beetle_buddies.description": "ヘラクレスオオカブトを手懐ける。", + "advancements.antarchy.herculean_task.title": "ヘラクレス級の難題", + "advancements.antarchy.herculean_task.description": "ヘラクレスオオカブトを討伐する。" +} 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 new file mode 100644 index 00000000..9b72989d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/ko_kr.json @@ -0,0 +1,962 @@ +{ + "block.antarchy.duplicator_log": "복제기 원목", + "block.antarchy.ouranwood_log": "오란우드 원목", + "block.antarchy.ouranwood_wood": "오란우드 목재", + "block.antarchy.mossy_ouranwood_log": "이끼 낀 오란우드 원목", + "block.antarchy.mossy_ouranwood_wood": "이끼 낀 오란우드 목재", + "block.antarchy.stripped_ouranwood_log": "껍질 벗긴 오란우드 원목", + "block.antarchy.stripped_ouranwood_wood": "껍질 벗긴 오란우드 목재", + "block.antarchy.ouranwood_planks": "오란우드 판자", + "block.antarchy.ouranwood_stairs": "오란우드 계단", + "block.antarchy.ouranwood_slab": "오란우드 반 블록", + "block.antarchy.ouranwood_fence": "오란우드 울타리", + "block.antarchy.ouranwood_fence_gate": "오란우드 울타리 문", + "block.antarchy.ouranwood_door": "오란우드 문", + "block.antarchy.ouranwood_trapdoor": "오란우드 다락문", + "block.antarchy.ouranwood_pressure_plate": "오란우드 감압판", + "block.antarchy.ouranwood_button": "오란우드 버튼", + "block.antarchy.ouranwood_leaves": "오란우드 잎", + "block.antarchy.ouranwood_acorn": "오란우드 도토리", + "block.antarchy.ouranwood_sign": "오란우드 표지판", + "block.antarchy.ouranwood_hanging_sign": "오란우드 매다는 표지판", + "block.antarchy.peach_log": "복숭아 원목", + "block.antarchy.peach_wood": "복숭아 목재", + "block.antarchy.stripped_peach_log": "껍질 벗긴 복숭아 원목", + "block.antarchy.stripped_peach_wood": "껍질 벗긴 복숭아 목재", + "block.antarchy.peach_planks": "복숭아 판자", + "block.antarchy.peach_stairs": "복숭아 계단", + "block.antarchy.peach_slab": "복숭아 반 블록", + "block.antarchy.peach_fence": "복숭아 울타리", + "block.antarchy.peach_fence_gate": "복숭아나무 울타리 문", + "block.antarchy.peach_door": "복숭아 문", + "block.antarchy.peach_trapdoor": "복숭아 다락문", + "block.antarchy.peach_pressure_plate": "복숭아 감압판", + "block.antarchy.peach_button": "복숭아 버튼", + "block.antarchy.peach_leaves": "복숭아 잎", + "block.antarchy.hanging_peach": "매달린 복숭아", + "block.antarchy.peach_sapling": "복숭아 묘목", + "block.antarchy.peach_sign": "복숭아 표지판", + "block.antarchy.peach_hanging_sign": "복숭아 매다는 표지판", + "block.antarchy.orange_milkweed": "주황색 박주가리", + "block.antarchy.pink_milkweed": "분홍색 박주가리", + "block.antarchy.camellia": "동백꽃", + "block.antarchy.spider_lily": "석산", + "block.antarchy.lotus": "연꽃", + "item.antarchy.lotus": "연꽃", + "item.antarchy.critter_cage": "동물 우리", + "block.antarchy.giant_lily_pad": "거대 수련잎", + "block.antarchy.seashell": "조개껍데기", + "block.antarchy.critter_cage_block": "동물 우리", + "block.antarchy.hushweed": "허시위드", + "block.antarchy.umbral_moss_block": "그늘 이끼 블록", + "block.antarchy.umbral_moss_carpet": "그늘 이끼 양탄자", + "block.antarchy.blush_moss_block": "분홍 이끼 블록", + "block.antarchy.blush_moss_carpet": "분홍 이끼 양탄자", + "block.antarchy.duplicator_sapling": "복제기 묘목", + "block.antarchy.duct_tape": "덕트 테이프", + "block.antarchy.infested_rooted_dirt": "감염된 뿌리내린 흙", + "block.antarchy.infested_coarse_dirt": "감염된 거친 흙", + "block.antarchy.nyxite": "닉사이트", + "block.antarchy.polished_nyxite": "윤나는 닉사이트", + "block.antarchy.chiseled_nyxite": "조각된 닉사이트", + "block.antarchy.nyxite_bricks": "닉사이트 벽돌", + "block.antarchy.shellstone": "셸스톤", + "block.antarchy.polished_shellstone": "윤나는 셸스톤", + "block.antarchy.shellstone_bricks": "셸스톤 벽돌", + "block.antarchy.chiseled_shellstone": "조각된 셸스톤", + "block.antarchy.mossy_shellstone_bricks": "이끼 낀 셸스톤 벽돌", + "block.antarchy.mossy_shellstone_brick_stairs": "이끼 낀 셸스톤 벽돌 계단", + "block.antarchy.mossy_shellstone_brick_slab": "이끼 낀 셸스톤 벽돌 반 블록", + "block.antarchy.mossy_shellstone_brick_wall": "이끼 낀 셸스톤 벽돌 담장", + "block.antarchy.cracked_shellstone_bricks": "금 간 셸스톤 벽돌", + "block.antarchy.shellstone_stairs": "셸스톤 계단", + "block.antarchy.shellstone_slab": "셸스톤 반 블록", + "block.antarchy.shellstone_wall": "셸스톤 담장", + "block.antarchy.polished_shellstone_stairs": "윤나는 셸스톤 계단", + "block.antarchy.polished_shellstone_slab": "윤나는 셸스톤 반 블록", + "block.antarchy.polished_shellstone_wall": "윤나는 셸스톤 담장", + "block.antarchy.shellstone_brick_stairs": "셸스톤 벽돌 계단", + "block.antarchy.shellstone_brick_slab": "셸스톤 벽돌 반 블록", + "block.antarchy.shellstone_brick_wall": "셸스톤 벽돌 담장", + "block.antarchy.nyxite_stairs": "닉사이트 계단", + "block.antarchy.nyxite_slab": "닉사이트 반 블록", + "block.antarchy.nyxite_wall": "닉사이트 담장", + "block.antarchy.polished_nyxite_stairs": "윤나는 닉사이트 계단", + "block.antarchy.polished_nyxite_slab": "윤나는 닉사이트 반 블록", + "block.antarchy.polished_nyxite_wall": "윤나는 닉사이트 담장", + "block.antarchy.nyxite_brick_stairs": "닉사이트 벽돌 계단", + "block.antarchy.nyxite_brick_slab": "닉사이트 벽돌 반 블록", + "block.antarchy.nyxite_brick_wall": "닉사이트 벽돌 담장", + "block.antarchy.pale_nyxite": "창백한 닉사이트", + "block.antarchy.nyxite_spike": "닉사이트 가시", + "block.antarchy.potent_nyxite": "강력한 닉사이트", + "block.antarchy.triffid_goo_block": "트리피드 점액 블록", + "block.antarchy.elythia_portal": "엘리티아 차원문", + "block.antarchy.cloud_block": "구름 블록", + "block.antarchy.thoraxis_portal": "토랙시스 차원문", + "block.antarchy.antimetal": "안티메탈", + "block.antarchy.polished_antimetal": "윤나는 안티메탈", + "block.antarchy.antimetal_scaffolding": "안티메탈 비계", + "block.antarchy.cornea_stalk": "코니아 줄기", + "block.antarchy.corn_crop": "옥수수 작물", + "block.antarchy.dream_torch": "꿈 횃불", + "block.antarchy.dream_wall_torch": "꿈 벽 횃불", + "block.antarchy.dream_lantern": "꿈 랜턴", + "block.antarchy.dream_campfire": "꿈 모닥불", + "block.antarchy.dream_fire": "꿈 불", + "block.antarchy.dream_fire_ceiling": "꿈 불", + "block.antarchy.budding_blood_crystal": "싹트는 혈수정", + "block.antarchy.blood_crystal_block": "혈수정 블록", + "block.antarchy.small_blood_crystal_bud": "작은 혈수정 눈", + "block.antarchy.medium_blood_crystal_bud": "중간 혈수정 눈", + "block.antarchy.large_blood_crystal_bud": "큰 혈수정 눈", + "block.antarchy.blood_crystal_cluster": "혈수정 군집", + "block.antarchy.dream_sand": "꿈 모래", + "block.antarchy.dream_sandstone": "꿈 사암", + "block.antarchy.chiseled_dream_sandstone": "조각된 꿈 사암", + "block.antarchy.cut_dream_sandstone": "깎인 꿈 사암", + "block.antarchy.smooth_dream_sandstone": "매끄러운 꿈 사암", + "block.antarchy.dream_sandstone_stairs": "꿈 사암 계단", + "block.antarchy.dream_sandstone_slab": "꿈 사암 반 블록", + "block.antarchy.dream_sandstone_wall": "꿈 사암 담장", + "block.antarchy.smooth_dream_sandstone_stairs": "매끄러운 꿈 사암 계단", + "block.antarchy.smooth_dream_sandstone_slab": "매끄러운 꿈 사암 반 블록", + "block.antarchy.cut_dream_sandstone_slab": "깎인 꿈 사암 반 블록", + "block.antarchy.bed_bug_egg": "빈대 알", + "block.antarchy.wasp_nest": "말벌 둥지", + "block.antarchy.red_ant_nest": "붉은 개미 둥지", + "block.antarchy.brown_ant_nest": "갈색 개미 둥지", + "block.antarchy.rainbow_ant_nest": "무지개 개미 둥지", + "block.antarchy.uranium_ore": "우라늄 광석", + "block.antarchy.deepslate_uranium_ore": "심층암 우라늄 광석", + "block.antarchy.titanium_ore": "티타늄 광석", + "block.antarchy.deepslate_titanium_ore": "심층암 티타늄 광석", + "block.antarchy.uranium_block": "우라늄 블록", + "block.antarchy.titanium_block": "티타늄 블록", + "block.antarchy.raw_uranium_block": "원시 우라늄 블록", + "block.antarchy.raw_titanium_block": "원시 티타늄 블록", + "block.antarchy.cut_uranium": "깎인 우라늄", + "block.antarchy.cut_titanium": "깎인 티타늄", + "block.antarchy.cut_uranium_slab": "깎인 우라늄 반 블록", + "block.antarchy.cut_titanium_slab": "깎인 티타늄 반 블록", + "block.antarchy.cut_uranium_stairs": "깎인 우라늄 계단", + "block.antarchy.cut_titanium_stairs": "깎인 티타늄 계단", + "block.antarchy.chiseled_uranium": "조각된 우라늄", + "block.antarchy.chiseled_titanium": "조각된 티타늄", + "block.antarchy.uranium_bulb": "우라늄 전구", + "block.antarchy.titanium_bulb": "티타늄 전구", + "block.antarchy.uranium_door": "우라늄 문", + "block.antarchy.titanium_door": "티타늄 문", + "block.antarchy.uranium_trapdoor": "우라늄 다락문", + "block.antarchy.titanium_trapdoor": "티타늄 다락문", + "block.antarchy.uranium_bars": "우라늄 창살", + "block.antarchy.titanium_bars": "티타늄 창살", + "tooltip.antarchy.signal_saving_bulb": "켜고 끌 수 있습니다. 밝기는 저장된 신호 세기와 같습니다.", + "block.antarchy.bile": "담즙", + "block.antarchy.ichor": "이코르", + "block.antarchy.antiwater": "역수", + "block.antarchy.lumen": "루멘", + "block.antarchy.lumen_froglight": "루멘 개구리불", + "block.antarchy.roseate_froglight": "장밋빛 개구리불", + "block.antarchy.star_coral": "별 산호", + "block.antarchy.star_coral_fan": "별 부채산호", + "block.antarchy.star_coral_block": "별 산호 블록", + "block.antarchy.dead_star_coral": "죽은 별 산호", + "block.antarchy.dead_star_coral_fan": "죽은 별 부채산호", + "block.antarchy.dead_star_coral_block": "죽은 별 산호 블록", + "entity.antarchy.apple_cow": "사과 소", + "entity.antarchy.golden_apple_cow": "황금 사과 소", + "entity.antarchy.enchanted_golden_apple_cow": "마법이 부여된 황금 사과 소", + "entity.antarchy.easter_bunny": "부활절 토끼", + "entity.antarchy.glimmer": "글리머", + "entity.antarchy.ouranwood_deer": "오란우드 사슴", + "entity.antarchy.elka": "엘카", + "entity.antarchy.dorrie": "도리", + "entity.antarchy.flying_squirrel": "날다람쥐", + "entity.antarchy.caterpillar": "애벌레", + "entity.antarchy.butterfly": "나비", + "entity.antarchy.brutalfly": "브루털플라이", + "entity.antarchy.red_ant": "붉은 개미", + "entity.antarchy.brown_ant": "갈색 개미", + "entity.antarchy.rainbow_ant": "무지개 개미", + "entity.antarchy.diamond_minecart": "다이아몬드 광산 수레", + "entity.antarchy.dr_trayaurus": "트레이오러스 박사", + "entity.antarchy.cloud_shark": "구름 상어", + "entity.antarchy.kraken": "크라켄", + "entity.antarchy.missile_squid": "미사일 오징어", + "entity.antarchy.octopus_bomb": "문어 폭탄", + "entity.antarchy.nightmare": "악몽", + "entity.antarchy.bed_bug": "빈대", + "entity.antarchy.wasp": "말벌", + "entity.antarchy.bomber": "폭격충", + "entity.antarchy.moleworm": "몰웜", + "entity.antarchy.molevore": "몰보어", + "entity.antarchy.mantis": "사마귀", + "entity.antarchy.alpha_mantis": "알파 사마귀", + "entity.antarchy.triffid": "트리피드", + "entity.antarchy.toreterror": "토어테러", + "entity.antarchy.water_bomb": "물 폭탄", + "subtitles.antarchy.mantis_ambient": "사마귀 딸깍거립니다", + "subtitles.antarchy.mantis_hurt": "사마귀 날카롭게 웁니다", + "subtitles.antarchy.mantis_attack": "사마귀 턱을 딱딱거립니다", + "subtitles.antarchy.mantis_fly_loop": "사마귀 날개가 윙윙거립니다", + "item.antarchy.big_bertha": "빅 버사", + "item.antarchy.wasp_nest": "말벌 둥지", + "item.antarchy.stink_bug": "노린재", + "item.antarchy.wasp_spawn_egg": "말벌 생성 알", + "item.antarchy.bomber_spawn_egg": "폭격충 생성 알", + "item.antarchy.big_bertha_blade": "빅 버사 칼날", + "item.antarchy.big_bertha_handle": "빅 버사 손잡이", + "item.antarchy.big_bertha_hilt": "빅 버사 칼자루", + "item.antarchy.battle_axe": "전투 도끼", + "item.antarchy.attitude_adjuster": "태도 교정기", + "tooltip.antarchy.attitude_adjuster.grounded": "지상의 대상을 위로 날리고, 공중의 대상을 땅으로 내리꽂습니다.", + "tooltip.antarchy.attitude_adjuster.slam": "공중에서 우클릭하면 지면 강타를 합니다.", + "item.antarchy.cloud_shark_fin": "구름 상어 지느러미", + "item.antarchy.cloud_shark_fin_soup": "구름 상어 지느러미 수프", + "tooltip.antarchy.cloud_shark_fin_soup": "힘과 느린 낙하를 부여합니다.", + "tooltip.antarchy.critter_cage.empty": "우클릭하여 던지기", + "tooltip.antarchy.critter_cage.contains": "들어 있음: %s", + "tooltip.antarchy.critter_cage.release": "우클릭하여 풀어주기", + "tooltip.antarchy.critter_cage.place": "웅크리기 + 우클릭으로 설치", + "item.antarchy.kraken_tooth": "크라켄 이빨", + "item.antarchy.kraken_tentacle": "크라켄 촉수", + "item.antarchy.krakens_grasp": "크라켄의 손아귀", + "entity.antarchy.tentacle": "촉수", + "item.antarchy.basilisk_fang": "바실리스크 송곳니", + "item.antarchy.basilisk_dagger": "바실리스크 단검", + "item.antarchy.blood_crystal_block": "혈수정 블록", + "item.antarchy.small_blood_crystal_bud": "작은 혈수정 눈", + "item.antarchy.medium_blood_crystal_bud": "중간 혈수정 눈", + "item.antarchy.large_blood_crystal_bud": "큰 혈수정 눈", + "item.antarchy.blood_crystal_cluster": "혈수정 군집", + "item.antarchy.dream_sand": "꿈 모래", + "item.antarchy.dream_sandstone": "꿈 사암", + "item.antarchy.chiseled_dream_sandstone": "조각된 꿈 사암", + "item.antarchy.cut_dream_sandstone": "깎인 꿈 사암", + "item.antarchy.smooth_dream_sandstone": "매끄러운 꿈 사암", + "item.antarchy.dream_sandstone_stairs": "꿈 사암 계단", + "item.antarchy.dream_sandstone_slab": "꿈 사암 반 블록", + "item.antarchy.dream_sandstone_wall": "꿈 사암 담장", + "item.antarchy.smooth_dream_sandstone_stairs": "매끄러운 꿈 사암 계단", + "item.antarchy.smooth_dream_sandstone_slab": "매끄러운 꿈 사암 반 블록", + "item.antarchy.cut_dream_sandstone_slab": "깎인 꿈 사암 반 블록", + "item.antarchy.dream_torch": "꿈 횃불", + "item.antarchy.dream_lantern": "꿈 랜턴", + "item.antarchy.dream_campfire": "꿈 모닥불", + "item.antarchy.giant_lily_pad": "거대 수련잎", + "item.antarchy.seashell": "조개껍데기", + "item.antarchy.nightmare_scale": "악몽 비늘", + "item.antarchy.nightmare_helmet": "악몽 투구", + "item.antarchy.nightmare_chestplate": "악몽 흉갑", + "item.antarchy.nightmare_leggings": "악몽 레깅스", + "item.antarchy.nightmare_boots": "악몽 부츠", + "item.antarchy.nightmare_sword": "악몽 검", + "tooltip.antarchy.nightmare_armor_double_damage": "%s%% 확률로 두 배의 피해를 줍니다", + "tooltip.antarchy.nightmare_armor_set_bonus": "세트 효과: 위더와 공포 면역", + "tooltip.antarchy.nightmare_sword": "체력이 낮을수록 더 많은 피해를 줍니다.", + "tooltip.antarchy.nightmare_sword_damage": "%s의 피해를 줍니다", + "tooltip.antarchy.primordial_helmet_water_breathing": "착용자에게 수중 호흡을 부여합니다", + "tooltip.antarchy.primordial_armor_knockback_dealt": "부위당 공격 밀치기가 %s 증가합니다", + "tooltip.antarchy.primordial_armor_set_bonus": "세트 효과: 공격이 적의 밀치기 저항을 무시합니다", + "attribute.antarchy.double_damage_chance": "두 배 피해 확률", + "attribute.antarchy.bloodglass_max_hearts": "최대 혈유리 심장", + "item.antarchy.molevore_nose": "몰보어 코", + "item.antarchy.moleworm": "몰웜", + "item.antarchy.triffid_spawn_egg": "트리피드 생성 알", + "item.antarchy.infested_rooted_dirt": "감염된 뿌리내린 흙", + "item.antarchy.infested_coarse_dirt": "감염된 거친 흙", + "item.antarchy.pale_nyxite": "창백한 닉사이트", + "item.antarchy.polished_nyxite": "윤나는 닉사이트", + "item.antarchy.chiseled_nyxite": "조각된 닉사이트", + "item.antarchy.nyxite_bricks": "닉사이트 벽돌", + "item.antarchy.shellstone": "셸스톤", + "item.antarchy.polished_shellstone": "윤나는 셸스톤", + "item.antarchy.shellstone_bricks": "셸스톤 벽돌", + "item.antarchy.chiseled_shellstone": "조각된 셸스톤", + "item.antarchy.mossy_shellstone_bricks": "이끼 낀 셸스톤 벽돌", + "item.antarchy.mossy_shellstone_brick_stairs": "이끼 낀 셸스톤 벽돌 계단", + "item.antarchy.mossy_shellstone_brick_slab": "이끼 낀 셸스톤 벽돌 반 블록", + "item.antarchy.mossy_shellstone_brick_wall": "이끼 낀 셸스톤 벽돌 담장", + "item.antarchy.cracked_shellstone_bricks": "금 간 셸스톤 벽돌", + "item.antarchy.shellstone_stairs": "셸스톤 계단", + "item.antarchy.shellstone_slab": "셸스톤 반 블록", + "item.antarchy.shellstone_wall": "셸스톤 담장", + "item.antarchy.polished_shellstone_stairs": "윤나는 셸스톤 계단", + "item.antarchy.polished_shellstone_slab": "윤나는 셸스톤 반 블록", + "item.antarchy.polished_shellstone_wall": "윤나는 셸스톤 담장", + "item.antarchy.shellstone_brick_stairs": "셸스톤 벽돌 계단", + "item.antarchy.shellstone_brick_slab": "셸스톤 벽돌 반 블록", + "item.antarchy.shellstone_brick_wall": "셸스톤 벽돌 담장", + "item.antarchy.nyxite_stairs": "닉사이트 계단", + "item.antarchy.nyxite_slab": "닉사이트 반 블록", + "item.antarchy.nyxite_wall": "닉사이트 담장", + "item.antarchy.polished_nyxite_stairs": "윤나는 닉사이트 계단", + "item.antarchy.polished_nyxite_slab": "윤나는 닉사이트 반 블록", + "item.antarchy.polished_nyxite_wall": "윤나는 닉사이트 담장", + "item.antarchy.nyxite_brick_stairs": "닉사이트 벽돌 계단", + "item.antarchy.nyxite_brick_slab": "닉사이트 벽돌 반 블록", + "item.antarchy.nyxite_brick_wall": "닉사이트 벽돌 담장", + "item.antarchy.potent_nyxite": "강력한 닉사이트", + "item.antarchy.antimetal": "안티메탈", + "item.antarchy.polished_antimetal": "윤나는 안티메탈", + "item.antarchy.antimetal_scaffolding": "안티메탈 비계", + "item.antarchy.ouranwood_acorn": "오란우드 도토리", + "item.antarchy.ouranwood_boat": "오란우드 보트", + "item.antarchy.ouranwood_chest_boat": "오란우드 상자 보트", + "item.antarchy.raw_venison": "익히지 않은 사슴고기", + "item.antarchy.cooked_venison": "익힌 사슴고기", + "item.antarchy.peach_sapling": "복숭아 묘목", + "item.antarchy.peach": "복숭아", + "item.antarchy.peach_pie": "복숭아 파이", + "item.antarchy.cornbread": "옥수수빵", + "item.antarchy.popcorn": "팝콘", + "item.antarchy.peach_sign": "복숭아 표지판", + "item.antarchy.peach_hanging_sign": "복숭아 매다는 표지판", + "item.antarchy.peach_boat": "복숭아 보트", + "item.antarchy.peach_chest_boat": "복숭아 상자 보트", + "item.antarchy.orange_milkweed": "주황색 박주가리", + "item.antarchy.pink_milkweed": "분홍색 박주가리", + "item.antarchy.camellia": "동백꽃", + "item.antarchy.spider_lily": "석산", + "item.antarchy.hushweed": "허시위드", + "item.antarchy.umbral_moss_block": "그늘 이끼 블록", + "item.antarchy.umbral_moss_carpet": "그늘 이끼 양탄자", + "item.antarchy.blush_moss_block": "분홍 이끼 블록", + "item.antarchy.blush_moss_carpet": "분홍 이끼 양탄자", + "item.antarchy.mud_pie": "진흙 파이", + "item.antarchy.duct_tape": "덕트 테이프", + "item.antarchy.duct_tape.tooltip": "설치한 뒤 우클릭하여 도구를 수리합니다", + "item.antarchy.rainbow_sugar": "무지개 설탕", + "item.antarchy.uranium_nugget": "우라늄 조각", + "item.antarchy.titanium_nugget": "티타늄 조각", + "item.antarchy.raw_uranium_scrap": "익히지 않은 우라늄 파편", + "item.antarchy.raw_titanium_scrap": "익히지 않은 티타늄 파편", + "item.antarchy.raw_uranium": "익히지 않은 우라늄", + "item.antarchy.raw_titanium": "익히지 않은 티타늄", + "item.antarchy.uranium_ingot": "우라늄 주괴", + "item.antarchy.titanium_ingot": "티타늄 주괴", + "item.antarchy.blood_crystal_shard": "혈수정 조각", + "item.antarchy.blood_crystal_apple": "혈수정 사과", + "item.antarchy.blood_crystal_katana": "혈수정 카타나", + "item.antarchy.blood_crystal_helmet": "혈수정 투구", + "item.antarchy.blood_crystal_chestplate": "혈수정 흉갑", + "item.antarchy.blood_crystal_leggings": "혈수정 레깅스", + "item.antarchy.blood_crystal_boots": "혈수정 부츠", + "item.antarchy.blood_crystal_armor.tooltip": "한 번의 공격을 막고 깨진 뒤 다시 충전되는 혈유리 심장을 부여합니다.", + "item.antarchy.blood_crystal_boots.tooltip2": "중력이 반전되어 위로 떨어질 때 낙하 피해를 무효화합니다.", + "item.antarchy.blood_crystal_apple.tooltip": "혈유리 수호를 부여하여 효과가 지속되는 동안 재충전되는 임시 혈유리 심장을 제공합니다.", + "tooltip.antarchy.blood_crystal_katana.launch": "명중 시 앞으로 돌진합니다.", + "tooltip.antarchy.blood_crystal_katana.trail": "뒤에 진홍빛 흔적을 남깁니다.", + "item.antarchy.mantis_claw": "사마귀 발톱", + "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", + "item.antarchy.king_scale": "왕 비늘", + "item.antarchy.queen_scale": "여왕 비늘", + "item.antarchy.jumpy_bug_leg": "점피 벌레 다리", + "item.antarchy.jumpy_boots": "점피 부츠", + "tooltip.antarchy.jumpy_boots": "웅크려 충전한 뒤 점프하면 위로 튀어 오릅니다.", + "item.antarchy.brutalfly_wing": "브루털플라이 날개", + "item.antarchy.brutalfly_elytra": "브루털플라이 겉날개", + "tooltip.antarchy.brutalfly_elytra.flap": "비행 중 %s을 길게 눌러 날갯짓합니다", + "item.antarchy.cornea_ear": "코니아의 귀", + "item.antarchy.corn": "옥수수", + "item.antarchy.corn_seeds": "옥수수 씨앗", + "item.antarchy.raw_corndog": "익히지 않은 콘도그", + "item.antarchy.cooked_corndog": "익힌 콘도그", + "item.antarchy.high_fructose_corn_syrup": "고과당 옥수수 시럽", + "jei.antarchy.americanize": "미국식으로 만들기", + "item.antarchy.american_name": "미국식 %s", + "item.antarchy.root_beer": "루트 비어", + "item.antarchy.primordial_scute": "태고의 등딱지 조각", + "item.antarchy.triffid_goo": "트리피드 점액", + "item.antarchy.triffid_goo_block": "트리피드 점액 블록", + "tooltip.antarchy.triffid_goo_block": "빠르게 부딪히면 튀어 오르고, 아니면 안으로 가라앉습니다.", + "item.antarchy.cloud_bucket": "구름 양동이", + "tooltip.antarchy.cloud_bucket.midair": "공중에 설치할 수 있습니다", + "item.antarchy.lumen_bucket": "루멘 양동이", + "item.antarchy.scorpion_whip": "황제전갈 채찍", + "tooltip.antarchy.scorpion_whip.lash": "멀리서 먹잇감을 후려쳐 독성 연결줄을 박습니다.", + "tooltip.antarchy.scorpion_whip.reel": "우클릭하여 연결된 먹잇감을 끌어당깁니다.", + "tooltip.antarchy.scorpion_whip.snap": "연결된 먹잇감을 다시 좌클릭하여 독침을 뽑습니다.", + "item.antarchy.fallen_king_crown": "몰락한 왕의 왕관", + "tooltip.antarchy.fallen_king_crown.hero": "적대적 생물을 처치하면 마을의 영웅을 부여합니다", + "item.antarchy.vortex_eye": "소용돌이 눈", + "item.antarchy.ultimate_helmet": "궁극 투구", + "item.antarchy.ultimate_chestplate": "궁극 흉갑", + "item.antarchy.ultimate_leggings": "궁극 레깅스", + "item.antarchy.ultimate_boots": "궁극 부츠", + "item.antarchy.ultimate_sword": "궁극 검", + "item.antarchy.ultimate_pickaxe": "궁극의 곡괭이", + "item.antarchy.ultimate_axe": "궁극 도끼", + "item.antarchy.ultimate_shovel": "궁극 삽", + "item.antarchy.ultimate_hoe": "궁극 괭이", + "item.antarchy.ultimate_bow": "궁극 활", + "item.antarchy.ultimate_crossbow": "궁극 쇠뇌", + "item.antarchy.ultimate_crossbow.capacity": "한 번에 화살을 최대 16발 장전합니다", + "item.antarchy.ultimate_crossbow.arrows_remaining": "%1$s %2$s 장전됨", + "item.antarchy.ultimate_mace": "궁극 철퇴", + "item.antarchy.moggles": "모글스", + "itemGroup.antarchy.antarchy": "앤타키", + "item.antarchy.bile_bucket": "담즙 양동이", + "item.antarchy.ichor_bucket": "이코르 양동이", + "item.antarchy.antiwater_bucket": "역수 양동이", + "item.antarchy.reverie_bottle": "레버리가 든 병", + "item.antarchy.squidzooka": "스퀴드주카", + "item.antarchy.rpo_launcher": "로·추·문 발사기", + "item.antarchy.shrink_ray": "축소 광선총", + "item.antarchy.growth_ray": "성장 광선총", + "tooltip.antarchy.shrink_ray": "대상을 영구적으로 축소합니다. 길게 눌러 충전합니다.", + "tooltip.antarchy.growth_ray": "대상을 영구적으로 성장시킵니다. 길게 눌러 충전합니다.", + "tooltip.antarchy.size_ray_milk_reset": "우유를 마시면 이 효과가 초기화됩니다.", + "tooltip.antarchy.reverie_bottle.capture": "유리병으로 레버리를 우클릭하여 담습니다.", + "tooltip.antarchy.reverie_bottle.release": "우클릭하여 레버리를 풀어줍니다.", + "item.antarchy.gravity_gun": "중력총", + "item.antarchy.miners_dream": "광부의 꿈", + "tooltip.antarchy.miners_dream.line1": "우클릭하여 구불구불한 동굴을 뚫습니다.", + "tooltip.antarchy.miners_dream.line2": "귀중한 블록은 건드리지 않습니다.", + "message.antarchy.miners_dream_disabled": "광부의 꿈이 비활성화되어 있습니다.", + "message.antarchy.miners_dream_busy": "이전 꿈이 아직 펼쳐지고 있습니다.", + "item.antarchy.diamond_minecart": "다이아몬드 광산 수레", + "item.antarchy.cogwheel_pet": "톱니바퀴 펫", + "item.antarchy.fire_dragon_pet": "화염 드래곤 펫", + "item.antarchy.ice_dragon_pet": "얼음 드래곤 펫", + "item.antarchy.lightning_dragon_pet": "번개 드래곤 펫", + "item.antarchy.gorgon_pet": "고르곤 펫", + "item.antarchy.apple_cow_spawn_egg": "사과 소 생성 알", + "item.antarchy.red_ant_spawn_egg": "붉은 개미 생성 알", + "item.antarchy.brown_ant_spawn_egg": "갈색 개미 생성 알", + "item.antarchy.rainbow_ant_spawn_egg": "무지개 개미 생성 알", + "item.antarchy.golden_apple_cow_spawn_egg": "황금 사과 소 생성 알", + "item.antarchy.enchanted_golden_apple_cow_spawn_egg": "마법이 부여된 황금 사과 소 생성 알", + "item.antarchy.dr_trayaurus_spawn_egg": "트레이오러스 박사 생성 알", + "item.antarchy.easter_bunny_spawn_egg": "부활절 토끼 생성 알", + "item.antarchy.glimmer_spawn_egg": "글리머 생성 알", + "item.antarchy.ouranwood_deer_spawn_egg": "오란우드 사슴 생성 알", + "item.antarchy.spirit_apple": "영혼 사과", + "item.antarchy.elka_spawn_egg": "엘카 생성 알", + "item.antarchy.glimmer_bottle": "글리머가 든 병", + "item.antarchy.glimmer_bottle.contains": "들어 있음: %s", + "glimmer_variant.antarchy.apple_cow": "사과 소", + "glimmer_variant.antarchy.ouranwood_deer": "오란우드 사슴", + "glimmer_variant.antarchy.frog": "개구리", + "glimmer_variant.antarchy.ant": "개미", + "glimmer_variant.antarchy.elka": "엘카", + "entity.antarchy.glimmer.set_sit": "글리머가 앉도록 설정되었습니다.", + "entity.antarchy.glimmer.set_follow": "글리머가 따라오도록 설정되었습니다.", + "entity.antarchy.glimmer.set_wander": "글리머가 돌아다니도록 설정되었습니다.", + "entity.antarchy.glimmer.ability.ant": "개미가 %s에 맞설 투지를 북돋았습니다!", + "entity.antarchy.glimmer.ability.apple_cow": "사과 소가 울며 영양을 채워 줍니다!", + "entity.antarchy.glimmer.ability.elka": "엘카가 울부짖어 수호를 깨뜨립니다!", + "entity.antarchy.glimmer.ability.deer": "오란우드 사슴이 적을 뚫고 돌진합니다!", + "entity.antarchy.glimmer.ability.frog": "개구리가 %s을 삼켰습니다!", + "item.antarchy.glimmer_bottle.passive.apple_cow": "지속 효과: 허기가 25% 느리게 감소합니다", + "item.antarchy.glimmer_bottle.ability.apple_cow": "능력: 배고플 때 울음소리로 포화와 재생을 즉시 부여합니다", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "지속 효과: 신속 Ⅰ", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "능력: 적대적 생물을 향해 전력 질주하면 돌진하여 날려 버립니다", + "item.antarchy.glimmer_bottle.passive.frog": "지속 효과: 점프 강화 Ⅰ", + "item.antarchy.glimmer_bottle.ability.frog": "능력: 근처 적대적 생물을 삼키고 잠시 더 크고 강해집니다", + "item.antarchy.glimmer_bottle.passive.ant": "지속 효과: 공격 사거리가 약간 늘어납니다", + "item.antarchy.glimmer_bottle.ability.ant": "능력: 큰 적을 공격하면 잠시 힘 Ⅱ를 얻습니다", + "item.antarchy.glimmer_bottle.passive.elka": "지속 효과: 혈유리 수호 Ⅱ", + "item.antarchy.glimmer_bottle.ability.elka": "능력: 수호 심장이 깨지면 울부짖으며 충격파로 산산이 흩어집니다", + "advancements.antarchy.spirant_animal.title": "개미의 정령", + "advancements.antarchy.spirant_animal.description": "개미 글리머를 길들이세요", + "advancements.antarchy.hoppy_together.title": "함께 깡충깡충", + "advancements.antarchy.hoppy_together.description": "개구리 글리머를 길들이세요", + "advancements.antarchy.deerly_beloved.title": "사슴하는 사이", + "advancements.antarchy.deerly_beloved.description": "오란우드 사슴 글리머를 길들이세요", + "advancements.antarchy.elkcellent_choice.title": "엘카다운 선택", + "advancements.antarchy.elkcellent_choice.description": "엘카 글리머를 길들이세요", + "advancements.antarchy.apple_of_my_eye.title": "눈에 넣어도 안 아픈 사과", + "advancements.antarchy.apple_of_my_eye.description": "사과 소 글리머를 길들이세요", + "item.antarchy.dorrie_spawn_egg": "도리 생성 알", + "item.antarchy.flying_squirrel_spawn_egg": "날다람쥐 생성 알", + "item.antarchy.caterpillar_spawn_egg": "애벌레 생성 알", + "item.antarchy.butterfly_spawn_egg": "나비 생성 알", + "item.antarchy.brutalfly_spawn_egg": "브루털플라이 생성 알", + "item.antarchy.cloud_shark_spawn_egg": "구름 상어 생성 알", + "item.antarchy.kraken_spawn_egg": "어, 안 돼. 하지 마.", + "item.antarchy.missile_squid_spawn_egg": "미사일 오징어 생성 알", + "item.antarchy.octopus_bomb_spawn_egg": "문어 폭탄 생성 알", + "item.antarchy.nightmare_spawn_egg": "악몽 생성 알", + "item.antarchy.toreterror_spawn_egg": "토어테러 생성 알", + "item.antarchy.water_cannon": "물대포", + "item.antarchy.primordial_helmet": "태고의 투구", + "item.antarchy.primordial_chestplate": "태고의 흉갑", + "item.antarchy.primordial_leggings": "태고의 레깅스", + "item.antarchy.primordial_boots": "태고의 부츠", + "item.antarchy.bed_bug_spawn_egg": "빈대 생성 알", + "item.antarchy.moleworm_spawn_egg": "몰웜 생성 알", + "item.antarchy.molevore_spawn_egg": "몰보어 생성 알", + "item.antarchy.reverie_spawn_egg": "레버리 생성 알", + "item.antarchy.mantis_spawn_egg": "사마귀 생성 알", + "item.antarchy.alpha_mantis_spawn_egg": "알파 사마귀 생성 알", + "biome.antarchy.moleworm_caves": "몰웜 동굴", + "biome.antarchy.elythia_meadow": "엘리티아 초원", + "biome.antarchy.butterfly_fields": "나비 들판", + "biome.antarchy.ouranwood_forest": "오란우드 숲", + "biome.antarchy.glimmering_pools": "반짝이는 웅덩이", + "biome.antarchy.peach_forest": "복숭아 숲", + "biome.antarchy.fungal_ouranwood_forest": "균류 오란우드 숲", + "biome.antarchy.glowcap_caves": "글로우캡 동굴", + "message.antarchy.brown_ant_activated": "갈색 개미가 목적지를 열 준비가 되었습니다.", + "message.antarchy.brown_ant_needs_reagent": "이 갈색 개미가 목적지를 열려면 시약이 필요합니다.", + "message.antarchy.rainbow_ant_activated": "무지개 개미가 새로운 인피니티 목적지와 공명합니다.", + "message.antarchy.rainbow_ant_activated_inherited": "무지개 개미가 물려받은 인피니티 목적지와 공명합니다.", + "message.antarchy.rainbow_ant_activated_inherited_existing": "무지개 개미가 물려받은 인피니티 목적지에 다시 연결됩니다.", + "message.antarchy.rainbow_ant_failed_dimension_create": "차원을 만들지 못했습니다. 인피니티 설정에 문제가 있을 가능성이 큽니다. 재시작하거나 다시 접속한 뒤 시도하세요.", + "message.antarchy.rainbow_ant_infinity_missing": "무지개 개미 차원을 사용하려면 인피니티가 설치되어 있어야 합니다.", + "message.antarchy.rainbow_ant_needs_reagent": "이 무지개 개미가 차원을 열려면 시약이 필요합니다.", + "message.antarchy.red_ant_activated": "붉은 개미가 목적지를 열 준비가 되었습니다.", + "message.antarchy.red_ant_needs_reagent": "이 붉은 개미가 목적지를 열려면 시약이 필요합니다.", + "message.antarchy.termite_activated": "흰개미가 목적지를 열 준비가 되었습니다.", + "message.antarchy.termite_needs_reagent": "이 흰개미가 목적지를 열려면 시약이 필요합니다.", + "death.attack.spit_bug_disrespect": "%1$s이(가) 스핏 벌레에게 무시당했습니다", + "death.attack.jumpy_bug_jump": "%1$s이(가) 점피 벌레에게 덮쳐졌습니다", + "death.attack.hercules_beetle_obliteration": "%1$s이(가) 헤라클레스장수풍뎅이에게 소멸당했습니다", + "message.antarchy.big_bertha.mode": "빅 버사 모드: %s", + "message.antarchy.big_bertha.mode.basilisk": "바실리스크", + "message.antarchy.big_bertha.mode.lucid": "루시드", + "message.antarchy.big_bertha.mode.nightmare": "악몽", + "message.antarchy.big_bertha.mode.kraken": "크라켄", + "message.antarchy.big_bertha.mode.molevore": "몰보어", + "message.antarchy.big_bertha.mode.toreterror": "토어테러", + "message.antarchy.ultimate_tool.mode_3x3": "3×3 채굴로 전환했습니다", + "message.antarchy.ultimate_tool.mode_default": "기본 채굴로 전환했습니다", + "advancements.antarchy.hey_listen.title": "이봐, 들어 봐!", + "advancements.antarchy.hey_listen.description": "레버리가 합류했습니다.", + "advancements.antarchy.very_hungry_caterpillar.title": "배고픈 애벌레", + "advancements.antarchy.very_hungry_caterpillar.description": "애벌레가 자라도록 도와주세요.", + "effect.antarchy.dread": "공포", + "effect.antarchy.dread.description": "시각 및 청각 환각을 일으킵니다.", + "effect.antarchy.paralyzed": "마비", + "effect.antarchy.paralyzed.description": "대상이 움직이지 못하게 합니다.", + "effect.antarchy.inverted": "반전", + "effect.antarchy.inverted.description": "대상의 중력을 반전시킵니다.", + "effect.antarchy.stinky": "악취", + "effect.antarchy.stinky.description": "수동적 및 중립적 몹을 쫓아내고 절지동물을 끌어들입니다.", + "effect.antarchy.gooped.description": "이동 속도와 공격 속도를 늦춥니다.", + "effect.antarchy.shrinking": "축소", + "effect.antarchy.growth": "성장", + "effect.antarchy.bloodglass_ward": "혈유리 수호", + "effect.antarchy.bloodglass_ward.description": "산산이 부서지는 하트를 부여해 피해 한 번을 통째로 흡수합니다. 시간이 지나면 다시 재생됩니다.", + "death.attack.triffid_mauling": "%1$s이(가) 식물에게 물어뜯겨 죽었습니다", + "death.attack.triffid_mauling.player": "%1$s이(가) 식물에게 물어뜯겨 죽었습니다", + "death.attack.triffid_swallow": "%1$s이(가) 트리피드에게 삼켜졌습니다", + "death.attack.triffid_swallow.player": "%1$s이(가) 트리피드에게 삼켜졌습니다", + "potion.antarchy.haste": "성급함의 물약", + "potion.antarchy.strong_haste": "강한 성급함의 물약", + "tooltip.antarchy.big_bertha.mode": "모드: %s", + "tooltip.antarchy.big_bertha.toggle_mode": "웅크린 채 우클릭하여 보스 모드를 전환합니다.", + "tooltip.antarchy.big_bertha.mode.basilisk": "우클릭으로 대상을 마비시킵니다. 공격 시 독과 둔화를 부여합니다.", + "tooltip.antarchy.big_bertha.mode.lucid": "공격 시 대상을 잠시 반전시킵니다. 자신이 반전된 동안 더 큰 피해를 줍니다.", + "tooltip.antarchy.big_bertha.mode.nightmare": "플레이어는 공포에 시달리고, 공격 시 나약함을 부여합니다.", + "tooltip.antarchy.big_bertha.mode.kraken": "공격 시 대상을 내리꽂고 번개를 부릅니다.", + "tooltip.antarchy.big_bertha.mode.molevore": "우클릭하여 회전하며 전진하고 몰보어 블록을 뚫습니다.", + "tooltip.antarchy.big_bertha.mode.toreterror": "우클릭하여 공중으로 솟은 뒤 광역 충격파와 함께 추락합니다.", + "tooltip.antarchy.ultimate_tools_3x3": "웅크린 채 우클릭하여 3×3 채굴을 전환합니다.", + "tooltip.antarchy.moggles.reveal": "야간 투시를 부여하고 근처 동굴을 가리킵니다.", + "tooltip.antarchy.moggles.underground": "하늘이 보이지 않을 때만 작동합니다.", + "tooltip.antarchy.cornea_ear.vision": "%s초 동안 야간 투시를 부여합니다.", + "tooltip.antarchy.mob_coming_soon": "생물은 곧 추가됩니다!", + "tooltip.antarchy.gravity_gun.primary": "좌클릭: 주변 개체를 날리거나 붙잡은 대상을 던집니다.", + "tooltip.antarchy.gravity_gun.secondary": "우클릭: 개체나 유효한 블록을 끌어당깁니다.", + "tooltip.antarchy.gravity_gun.scroll": "제어 키를 누른 채 스크롤하여 붙잡은 대상을 가까이하거나 멀리합니다.", + "tooltip.antarchy.gravity_gun.blacklist": "차단 목록에 있는 블록이나 개체에는 영향을 주지 않습니다.", + "tooltip.antarchy.antimetal_inversion": "바로 아래의 개체를 반전시킵니다", + "tooltip.antarchy.diamond_minecart.forward": "나중에 구현될 예정입니다.", + "tooltip.antarchy.diamond_minecart.rails": " ", + "tooltip.antarchy.rainbow_sugar": "무지개 개미 차원을 활성화합니다. 그 차원에서 먹으면 집으로 돌아옵니다.", + "advancements.antarchy.visit_elythia.title": "차원개미 이동", + "advancements.antarchy.visit_elythia.description": "갈색 개미를 이용해 엘리티아에 도달하세요.", + "advancements.antarchy.visit_thoraxis.title": "개미 분노 관리", + "advancements.antarchy.visit_thoraxis.description": "붉은 개미를 이용해 토랙시스에 도달하세요.", + "advancements.antarchy.fallen_kingdom_castle.title": "한때는 세상을 지배했지…", + "advancements.antarchy.fallen_kingdom_castle.description": "몰락한 왕국의 성을 발견하세요.", + "advancements.antarchy.fallen_king_crown.title": "내가 명하면 청크가 불러와졌지…", + "advancements.antarchy.fallen_king_crown.description": "몰락한 왕의 왕관을 획득하세요.", + "advancements.antarchy.the_lab.title": "여러분 안녕하세요, 댄입니다!", + "advancements.antarchy.the_lab.description": "트레이오러스 박사의 연구소를 발견하세요.", + "advancements.antarchy.sweater_dreams.title": "스웨터의 꿈", + "advancements.antarchy.sweater_dreams.description": "악몽을 처치하세요.", + "advancements.antarchy.stone_cold.title": "돌처럼 차갑게", + "advancements.antarchy.stone_cold.description": "바실리스크를 처치하세요.", + "advancements.antarchy.moley_poley.title": "두더지 데굴데굴", + "advancements.antarchy.moley_poley.description": "몰보어를 처치하세요.", + "advancements.antarchy.lucid_dreams.title": "자각몽", + "advancements.antarchy.lucid_dreams.description": "루시드를 처치하세요.", + "advancements.antarchy.davy_jones_locker.title": "데이비 존스의 함", + "advancements.antarchy.davy_jones_locker.description": "크라켄을 처치하세요.", + "advancements.antarchy.shark_weak.title": "상어가 날 때", + "advancements.antarchy.shark_weak.description": "구름 상어를 처치하세요.", + "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "빈대에게 물리지 마세요", + "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "빈대를 처치하세요.", + "advancements.antarchy.soups_up.title": "수프 준비 완료", + "advancements.antarchy.soups_up.description": "구름 상어 지느러미 수프를 먹으세요.", + "advancements.antarchy.in_the_upside_down.title": "뒤집힌 세계에서", + "advancements.antarchy.in_the_upside_down.description": "처음으로 반전되세요.", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "냄새 맡은 사람이 범인", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "처음으로 악취 상태가 되세요.", + "advancements.antarchy.ultimate_armor.title": "궁극의 보호", + "advancements.antarchy.ultimate_armor.description": "궁극 방어구 세트를 모두 모으세요.", + "advancements.antarchy.ultimate_bow.title": "활헤미안 랩소디", + "advancements.antarchy.ultimate_bow.description": "궁극의 활을 획득하세요.", + "advancements.antarchy.brutalfly.title": "브루털플라이처럼 날고 벌처럼 쏘세요", + "advancements.antarchy.brutalfly.description": "브루털플라이 겉날개를 획득하세요.", + "advancements.antarchy.now_watch_me_whip.title": "이제 내 채찍질을 봐", + "advancements.antarchy.now_watch_me_whip.description": "이제 내 네이네이를 봐", + "advancements.antarchy.kill_molevore.title": "두더지 데굴데굴", + "advancements.antarchy.kill_molevore.description": "몰보어를 처치하세요.", + "advancements.antarchy.water_cannon_craft.title": "더 젖을수록 좋아!", + "advancements.antarchy.water_cannon_craft.description": "물대포를 획득하세요.", + "advancements.antarchy.kill_toreterror.title": "토어-끔찍한 조준 실력!", + "advancements.antarchy.kill_toreterror.description": "토어테러를 처치하세요.", + "advancements.antarchy.challenge_games.title": "도전 게임!", + "advancements.antarchy.challenge_games.description": "폐허가 된 투기장에 입장하세요.", + "advancements.antarchy.bugged_out.title": "벌레투성이", + "advancements.antarchy.bugged_out.description": "알파 사마귀를 처치하세요.", + "death.attack.bed_bug_bite": "%1$s이(가) 빈대에게 물렸습니다", + "death.attack.bed_bug_bite.player": "%1$s이(가) %2$s와(과) 싸우다 빈대에게 물렸습니다", + "message.antarchy.dread_too_scared_to_sleep": "너무 무서워서 잠들 수 없습니다.", + "death.attack.kraken_mauling": "%1$s이(가) 크라켄에게 물속으로 끌려갔습니다", + "death.attack.kraken_mauling.player": "%1$s이(가) %2$s와(과) 싸우다 크라켄에게 물속으로 끌려갔습니다", + "death.attack.kraken_lightning": "%1$s이(가) 크라켄의 폭풍에 쓰러졌습니다", + "death.attack.kraken_lightning.player": "%1$s이(가) %2$s와(과) 싸우다 크라켄의 폭풍에 쓰러졌습니다", + "death.attack.rpo_launcher_blast": "%1$s이(가) 로·추·문에게 녹아웃당했습니다", + "death.attack.rpo_launcher_blast.player": "%1$s이(가) %2$s와(과) 싸우다 로·추·문에게 녹아웃당했습니다", + "death.attack.nightmare_mauling": "%1$s이(가) 악몽에게 잡아먹혔습니다", + "death.attack.nightmare_mauling.player": "%1$s이(가) %2$s와(과) 싸우다 악몽에게 잡아먹혔습니다", + "death.attack.basilisk_bite": "%1$s이(가) 바실리스크에게 삼켜졌습니다", + "death.attack.basilisk_bite.player": "%1$s이(가) %2$s와(과) 싸우다 바실리스크에게 삼켜졌습니다", + "death.attack.emperor_scorpion_sting": "%1$s이(가) 황제전갈에게 쏘였습니다", + "death.attack.emperor_scorpion_sting.player": "%1$s이(가) %2$s와(과) 싸우다 황제전갈에게 쏘였습니다", + "death.attack.cornea_stalk_prick": "%1$s이(가) 코니아 줄기에 찔려 죽었습니다", + "death.attack.toreterror_spin": "%1$s이(가) 토어테러의 회전에 휘말려 죽었습니다", + "death.attack.toreterror_spin.player": "%1$s이(가) 토어테러의 회전에 휘말려 죽었습니다", + "death.attack.toreterror_jump": "%1$s이(가) 토어테러에게 짓눌려 죽었습니다", + "death.attack.toreterror_jump.player": "%1$s이(가) 토어테러에게 짓눌려 죽었습니다", + "death.attack.water_soaked": "%1$s이(가) %2$s에게 흠뻑 젖어 죽었습니다", + "death.attack.water_soaked.player": "%1$s이(가) %2$s에게 흠뻑 젖어 죽었습니다", + "entity.antarchy.lucid": "루시드", + "item.antarchy.lucid_spawn_egg": "루시드 생성 알", + "item.antarchy.lucid_eye": "루시드 눈", + "entity.antarchy.scorpion": "전갈", + "item.antarchy.scorpion_spawn_egg": "전갈 생성 알", + "entity.antarchy.basilisk": "바실리스크", + "item.antarchy.basilisk_spawn_egg": "바실리스크 생성 알", + "entity.antarchy.emperor_scorpion": "황제전갈", + "item.antarchy.emperor_scorpion_spawn_egg": "황제전갈 생성 알", + "item.antarchy.emperor_scorpion_stinger": "황제전갈 독침", + "item.antarchy.lucid_pearl": "루시드 진주", + "tooltip.antarchy.lucid_pearl": "중력이 반전된 투사체를 던집니다.", + "tooltip.antarchy.lucid_pearl.detail": "착지 지점으로 순간이동시키고 반전을 부여합니다.", + "subtitles.antarchy.squidzooka_fire": "스퀴드주카 발사됩니다", + "subtitles.antarchy.shrink_ray": "축소 광선총 발사됩니다", + "subtitles.antarchy.growth_ray": "성장 광선총 발사됩니다", + "subtitles.antarchy.size_ray_charge": "크기 광선총 충전됩니다", + "subtitles.antarchy.ant_ambient": "개미 짹짹거립니다", + "subtitles.antarchy.ant_idle": "개미 소리를 냅니다", + "subtitles.antarchy.ant_hurt": "개미 다칩니다", + "subtitles.antarchy.ant_bite": "개미 뭅니다", + "subtitles.antarchy.ant_gather": "개미 모읍니다", + "subtitles.antarchy.ant_nest": "개미 둥지가 바스락거립니다", + "subtitles.antarchy.cloud_shark_bite": "구름 상어 뭅니다", + "subtitles.antarchy.cloud_shark_idle": "구름 상어 소리를 냅니다", + "subtitles.antarchy.cloud_shark_hurt": "구름 상어 다칩니다", + "subtitles.antarchy.cloud_shark_death": "구름 상어 죽습니다", + "subtitles.antarchy.cloud_shark_fly": "구름 상어 납니다", + "subtitles.antarchy.caterpillar_idle": "애벌레 소리를 냅니다", + "subtitles.antarchy.caterpillar_hurt": "애벌레 다칩니다", + "subtitles.antarchy.caterpillar_crawl": "애벌레 기어갑니다", + "subtitles.antarchy.butterfly_hurt": "나비 다칩니다", + "subtitles.antarchy.brutalfly_idle": "브루털플라이 소리를 냅니다", + "subtitles.antarchy.brutalfly_death": "브루털플라이 죽습니다", + "subtitles.antarchy.thoraxis_nightmare_wastes_ambient": "악몽 황무지 웅웅거립니다", + "subtitles.antarchy.thoraxis_nightmare_wastes_additions": "악몽 황무지 꿈틀거립니다", + "subtitles.antarchy.thoraxis_nightmare_wastes_mood": "악몽 황무지 웅얼거립니다", + "subtitles.antarchy.thoraxis_dream_dunes_ambient": "꿈의 사구 속삭입니다", + "subtitles.antarchy.thoraxis_dream_dunes_additions": "꿈의 사구 바스락거립니다", + "subtitles.antarchy.thoraxis_dream_dunes_mood": "꿈의 사구 한숨 쉽니다", + "subtitles.antarchy.thoraxis_lucid_pools_ambient": "루시드 웅덩이가 웅웅거립니다", + "subtitles.antarchy.thoraxis_lucid_pools_additions": "루시드 웅덩이 저주를 내뱉습니다", + "subtitles.antarchy.thoraxis_lucid_pools_mood": "루시드 웅덩이 중얼거립니다", + "subtitles.antarchy.lucid_ambient": "루시드 웅웅거립니다", + "subtitles.antarchy.lucid_flying": "루시드 팔랑거립니다", + "subtitles.antarchy.lucid_attack": "루시드 공격합니다", + "subtitles.antarchy.lucid_bolt": "루시드 탄환을 발사합니다", + "subtitles.antarchy.lucid_hurt": "루시드 다칩니다", + "subtitles.antarchy.lucid_death": "루시드 죽습니다", + "subtitles.antarchy.reverie_idle": "레버리 떠다닙니다", + "subtitles.antarchy.reverie_hurt": "레버리 다칩니다", + "subtitles.antarchy.reverie_worry": "레버리 걱정합니다", + "subtitles.antarchy.reverie_save": "레버리 당신을 구합니다", + "subtitles.antarchy.reverie_join_player": "레버리 당신과 함께합니다", + "subtitles.antarchy.reverie_alert": "레버리 당신에게 경고합니다", + "subtitles.antarchy.flying_squirrel_idle": "날다람쥐 짹짹거립니다", + "subtitles.antarchy.flying_squirrel_beg": "날다람쥐 먹이를 달라고 조릅니다", + "subtitles.antarchy.flying_squirrel_nut": "날다람쥐 먹습니다", + "subtitles.antarchy.flying_squirrel_glide_loop": "날다람쥐 활공합니다", + "subtitles.antarchy.flying_squirrel_hurt": "날다람쥐 다칩니다", + "subtitles.antarchy.flying_squirrel_death": "날다람쥐 죽습니다", + "subtitles.antarchy.nightmare_idle": "악몽 으르렁거립니다", + "subtitles.antarchy.nightmare_hurt": "악몽 다칩니다", + "subtitles.antarchy.nightmare_roar": "악몽 포효합니다", + "subtitles.antarchy.nightmare_death": "악몽 죽습니다", + "subtitles.antarchy.nightmare_bite": "악몽 뭅니다", + "subtitles.antarchy.nightmare_flap": "악몽 날갯짓합니다", + "subtitles.antarchy.triffid_attack": "트리피드 공격합니다", + "subtitles.antarchy.triffid_grab": "트리피드 붙잡습니다", + "subtitles.antarchy.triffid_hurt": "트리피드 다칩니다", + "subtitles.antarchy.triffid_death": "트리피드 죽습니다", + "subtitles.antarchy.triffid_hiss": "트리피드 쉬익거립니다", + "subtitles.antarchy.triffid_growl": "트리피드 그르렁거립니다", + "subtitles.antarchy.gravity_gun_pickup": "중력총 들어 올립니다", + "subtitles.antarchy.gravity_gun_drop": "중력총 내려놓습니다", + "subtitles.antarchy.gravity_gun_hold_loop": "중력총 웅웅거립니다", + "subtitles.antarchy.gravity_gun_launch": "중력총 발사합니다", + "subtitles.antarchy.gravity_gun_dryfire": "중력총 헛발사됩니다", + "subtitles.antarchy.bed_bug_ambient": "빈대 짹짹거립니다", + "subtitles.antarchy.bed_bug_hurt": "빈대 다칩니다", + "subtitles.antarchy.bed_bug_attack": "빈대 뭅니다", + "subtitles.antarchy.wasp_idle": "말벌이 윙윙거립니다", + "subtitles.antarchy.wasp_hurt": "말벌 다칩니다", + "subtitles.antarchy.wasp_attack": "말벌 쏩니다", + "subtitles.antarchy.wasp_death": "말벌 죽습니다", + "subtitles.antarchy.scorpion_ambient": "전갈 달그락거립니다", + "subtitles.antarchy.scorpion_hurt": "전갈 다칩니다", + "subtitles.antarchy.scorpion_attack": "전갈 공격합니다", + "subtitles.antarchy.emperor_scorpion_ambient": "황제전갈 달그락거립니다", + "subtitles.antarchy.emperor_scorpion_hurt": "황제전갈 다칩니다", + "subtitles.antarchy.emperor_scorpion_attack": "황제전갈 공격합니다", + "subtitles.antarchy.emperor_scorpion_roar": "황제전갈 포효합니다", + "subtitles.antarchy.moleworm_ambient": "몰웜이 바스락거립니다", + "subtitles.antarchy.moleworm_hurt": "몰웜 다칩니다", + "subtitles.antarchy.moleworm_attack": "몰웜 공격합니다", + "subtitles.antarchy.moleworm_dig": "몰웜 땅을 팝니다", + "subtitles.antarchy.molevore_ambient": "몰보어 우르릉거립니다", + "subtitles.antarchy.molevore_hurt": "몰보어 다칩니다", + "subtitles.antarchy.molevore_attack": "몰보어 공격합니다", + "subtitles.antarchy.molevore_dig": "몰보어 땅을 팝니다", + "subtitles.antarchy.duct_tape_use": "덕트 테이프가 찢어집니다", + "subtitles.antarchy.potent_nyxite_hypnotic_gas": "강력한 닉사이트가 쉬익거립니다", + "subtitles.antarchy.potent_nyxite_geyser_eruption": "강력한 닉사이트가 분출합니다", + "subtitles.antarchy.potent_nyxite_geyser_continuous": "강력한 닉사이트 간헐천이 포효합니다", + "subtitles.antarchy.missile_squid_ambient": "미사일 오징어 웅웅거립니다", + "subtitles.antarchy.missile_squid_hurt": "미사일 오징어 다칩니다", + "subtitles.antarchy.missile_squid_death": "미사일 오징어 죽습니다", + "subtitles.antarchy.missile_squid_attack": "미사일 오징어 공격합니다", + "subtitles.antarchy.kraken_flying_loop": "크라켄 활공합니다", + "subtitles.antarchy.kraken_flying_sideways_loop": "크라켄이 맴돕니다", + "subtitles.antarchy.kraken_attack": "크라켄이 내리칩니다", + "subtitles.antarchy.kraken_spin": "크라켄이 회전합니다", + "subtitles.antarchy.kraken_roar": "크라켄 포효합니다", + "subtitles.antarchy.kraken_summon": "크라켄이 나타납니다", + "subtitles.antarchy.kraken_hurt": "크라켄 다칩니다", + "subtitles.antarchy.kraken_death": "크라켄 죽습니다", + "subtitles.antarchy.basilisk_idle_loop": "바실리스크 소리를 냅니다", + "subtitles.antarchy.basilisk_slither_loop": "바실리스크가 미끄러집니다", + "subtitles.antarchy.basilisk_bite": "바실리스크 뭅니다", + "subtitles.antarchy.basilisk_hiss": "바실리스크 쉬익거립니다", + "subtitles.antarchy.basilisk_hurt": "바실리스크 다칩니다", + "subtitles.antarchy.basilisk_death": "바실리스크 죽습니다", + "subtitles.antarchy.bomber_walk": "폭격충이 걷습니다", + "subtitles.antarchy.bomber_knock": "폭격충이 맞습니다", + "subtitles.antarchy.bomber_explode": "폭격충의 도화선이 쉬익거립니다", + "subtitles.antarchy.toreterror_idle": "토어테러 소리를 냅니다", + "subtitles.antarchy.toreterror_hurt": "토어테러 다칩니다", + "subtitles.antarchy.toreterror_death": "토어테러 죽습니다", + "subtitles.antarchy.toreterror_bomber_fire": "토어테러가 폭격충을 발사합니다", + "subtitles.antarchy.toreterror_spin": "토어테러가 회전합니다", + "subtitles.antarchy.toreterror_ricochet": "토어테러가 튕겨 나갑니다", + "subtitles.antarchy.water_cannon_fire": "물대포가 발사됩니다", + "subtitles.antarchy.toreterror_jump_up": "토어테러 뜁니다", + "subtitles.antarchy.toreterror_jump_land": "토어테러가 착지합니다", + "subtitles.antarchy.stinky_fly": "악취 파리가 윙윙거립니다", + "item.minecraft.potion.effect.inversion": "반전 물약", + "item.minecraft.potion.effect.long_inversion": "반전 물약", + "item.minecraft.splash_potion.effect.inversion": "반전 투척용 물약", + "item.minecraft.splash_potion.effect.long_inversion": "반전 투척용 물약", + "item.minecraft.lingering_potion.effect.inversion": "반전 잔류형 물약", + "item.minecraft.lingering_potion.effect.long_inversion": "반전 잔류형 물약", + "item.minecraft.tipped_arrow.effect.inversion": "반전 화살", + "item.minecraft.tipped_arrow.effect.long_inversion": "반전 화살", + "item.minecraft.potion.effect.paralysis": "마비 물약", + "item.minecraft.potion.effect.long_paralysis": "마비 물약", + "item.minecraft.splash_potion.effect.paralysis": "마비 투척용 물약", + "item.minecraft.splash_potion.effect.long_paralysis": "마비 투척용 물약", + "item.minecraft.lingering_potion.effect.paralysis": "마비 잔류형 물약", + "item.minecraft.lingering_potion.effect.long_paralysis": "마비 잔류형 물약", + "item.minecraft.tipped_arrow.effect.paralysis": "마비 화살", + "item.minecraft.tipped_arrow.effect.long_paralysis": "마비 화살", + "item.minecraft.potion.effect.shrinking": "축소 물약", + "item.minecraft.potion.effect.strong_shrinking": "축소 Ⅱ 물약", + "item.minecraft.potion.effect.extreme_shrinking": "축소 Ⅲ 물약", + "item.minecraft.splash_potion.effect.shrinking": "축소 투척용 물약", + "item.minecraft.splash_potion.effect.strong_shrinking": "축소 Ⅱ 투척용 물약", + "item.minecraft.splash_potion.effect.extreme_shrinking": "축소 Ⅲ 투척용 물약", + "item.minecraft.lingering_potion.effect.shrinking": "축소 잔류형 물약", + "item.minecraft.lingering_potion.effect.strong_shrinking": "축소 Ⅱ 잔류형 물약", + "item.minecraft.lingering_potion.effect.extreme_shrinking": "축소 Ⅲ 잔류형 물약", + "item.minecraft.tipped_arrow.effect.shrinking": "축소 화살", + "item.minecraft.tipped_arrow.effect.strong_shrinking": "축소 Ⅱ 화살", + "item.minecraft.tipped_arrow.effect.extreme_shrinking": "축소 Ⅲ 화살", + "item.minecraft.potion.effect.growing": "성장 물약", + "item.minecraft.potion.effect.strong_growing": "성장 Ⅱ 물약", + "item.minecraft.potion.effect.extreme_growing": "성장 Ⅲ 물약", + "item.minecraft.splash_potion.effect.growing": "성장 투척용 물약", + "item.minecraft.splash_potion.effect.strong_growing": "성장 Ⅱ 투척용 물약", + "item.minecraft.splash_potion.effect.extreme_growing": "성장 Ⅲ 투척용 물약", + "item.minecraft.lingering_potion.effect.growing": "성장 잔류형 물약", + "item.minecraft.lingering_potion.effect.strong_growing": "성장 Ⅱ 잔류형 물약", + "item.minecraft.lingering_potion.effect.extreme_growing": "성장 Ⅲ 잔류형 물약", + "item.minecraft.tipped_arrow.effect.growing": "성장 화살", + "item.minecraft.tipped_arrow.effect.strong_growing": "성장 Ⅱ 화살", + "item.minecraft.tipped_arrow.effect.extreme_growing": "성장 Ⅲ 화살", + "item.minecraft.potion.effect.dread": "공포 물약", + "item.minecraft.potion.effect.long_dread": "공포 물약", + "item.minecraft.splash_potion.effect.dread": "공포 투척용 물약", + "item.minecraft.splash_potion.effect.long_dread": "공포 투척용 물약", + "item.minecraft.lingering_potion.effect.dread": "공포 잔류형 물약", + "item.minecraft.lingering_potion.effect.long_dread": "공포 잔류형 물약", + "item.minecraft.tipped_arrow.effect.dread": "공포 화살", + "item.minecraft.tipped_arrow.effect.long_dread": "공포 화살", + "item.minecraft.potion.effect.stinky": "악취 물약", + "item.minecraft.potion.effect.long_stinky": "악취 물약", + "item.minecraft.splash_potion.effect.stinky": "악취 투척용 물약", + "item.minecraft.splash_potion.effect.long_stinky": "악취 투척용 물약", + "item.minecraft.lingering_potion.effect.stinky": "악취 잔류형 물약", + "item.minecraft.lingering_potion.effect.long_stinky": "악취 잔류형 물약", + "item.minecraft.tipped_arrow.effect.stinky": "악취 화살", + "item.minecraft.tipped_arrow.effect.long_stinky": "악취 화살", + "item.minecraft.potion.effect.haste": "성급함 물약", + "item.minecraft.potion.effect.strong_haste": "성급함 Ⅱ 물약", + "item.minecraft.splash_potion.effect.haste": "성급함 투척용 물약", + "item.minecraft.splash_potion.effect.strong_haste": "성급함 Ⅱ 투척용 물약", + "item.minecraft.lingering_potion.effect.haste": "성급함 잔류형 물약", + "item.minecraft.lingering_potion.effect.strong_haste": "성급함 Ⅱ 잔류형 물약", + "item.minecraft.tipped_arrow.effect.haste": "성급함 화살", + "item.minecraft.tipped_arrow.effect.strong_haste": "성급함 Ⅱ 화살", + "advancements.antarchy.cancel_out.title": "1 - 1 = ?", + "advancements.antarchy.cancel_out.description": "성장과 축소 효과를 동시에 받으세요.", + "entity.antarchy.cheep": "칩", + "item.antarchy.cheep": "칩", + "item.antarchy.cheep_spawn_egg": "칩 생성 알", + "entity.antarchy.reverie": "레버리", + "biome.antarchy.thoraxis": "토랙시스", + "biome.antarchy.nightmare_wastes": "악몽 황무지", + "biome.antarchy.umbral_hills": "그늘진 언덕", + "biome.antarchy.lucid_pools": "루시드 웅덩이", + "biome.antarchy.dream_dunes": "꿈의 사구", + "block.antarchy.wild_corn": "야생 옥수수", + "trim_material.antarchy.blood_crystal": "혈수정", + "trim_material.antarchy.nightmare_scale": "악몽 비늘", + "trim_material.antarchy.uranium": "우라늄", + "trim_material.antarchy.titanium": "티타늄", + "advancements.antarchy.duct_tape.title": "이 보트를 반으로 톱질했어!", + "advancements.antarchy.duct_tape.description": "그리고 덕트 테이프의 힘으로 고쳤지!", + "key.categories.antarchy": "앤타키", + "key.antarchy.brutalfly_flap": "브루털플라이 겉날개: 날갯짓", + "advancements.antarchy.shrink_ray_craft.title": "애들아, 내가 몹을 줄였어", + "advancements.antarchy.shrink_ray_craft.description": "축소 광선총을 제작하세요.", + "advancements.antarchy.growth_ray_craft.title": "크게 가거나 집에 가거나", + "advancements.antarchy.growth_ray_craft.description": "성장 광선총을 제작하세요.", + "advancements.antarchy.squidzooka_craft.title": "먹물과 파괴", + "advancements.antarchy.squidzooka_craft.description": "스퀴드주카를 제작하세요.", + "advancements.antarchy.rocket_powered_octopus.title": "로켓 추진 문어", + "advancements.antarchy.rocket_powered_octopus.description": "로·추·문 발사기를 제작하세요.", + "advancements.antarchy.gravity_gun_craft.title": "들어 올리기 선수", + "advancements.antarchy.gravity_gun_craft.description": "중력총을 제작하세요.", + "block.antarchy.cavaryn_portal": "카바린 차원문", + "block.antarchy.termite_nest": "흰개미 둥지", + "block.antarchy.chitin_spike": "치텐 가시", + "block.antarchy.chitin_block": "치텐 블록", + "block.antarchy.myrmite": "미르마이트", + "block.antarchy.broodstone": "브루드스톤", + "block.antarchy.amber_moss_block": "호박색 이끼 블록", + "block.antarchy.amber_moss_carpet": "호박색 이끼 양탄자", + "block.antarchy.amber_lichen": "호박색 지의류", + "block.antarchy.bile_vein": "담즙 광맥", + "block.antarchy.creepvine": "크리프바인", + "block.antarchy.creeping_horror_egg": "기어오는 공포 알", + "block.antarchy.lurking_terror_egg": "도사린 공포 알", + "entity.antarchy.termite": "흰개미", + "entity.antarchy.jumpy_bug": "점피 벌레", + "entity.antarchy.spit_bug": "스핏 벌레", + "entity.antarchy.stink_bug": "노린재", + "entity.antarchy.rolly_polly": "공벌레", + "entity.antarchy.creeping_horror": "기어오는 공포", + "entity.antarchy.lurking_terror": "도사린 공포", + "entity.antarchy.hercules_beetle": "헤라클레스장수풍뎅이", + "item.antarchy.jumpy_bug_spawn_egg": "점피 벌레 생성 알", + "item.antarchy.spit_bug_spawn_egg": "스핏 벌레 생성 알", + "item.antarchy.stink_bug_spawn_egg": "노린재 생성 알", + "item.antarchy.termite_spawn_egg": "흰개미 생성 알", + "item.antarchy.rolly_polly_spawn_egg": "공벌레 생성 알", + "item.antarchy.creeping_horror_spawn_egg": "기어오는 공포 생성 알", + "item.antarchy.lurking_terror_spawn_egg": "도사린 공포 생성 알", + "item.antarchy.hercules_beetle_spawn_egg": "헤라클레스장수풍뎅이 생성 알", + "item.antarchy.chitin": "치텐", + "block.antarchy.polished_broodstone": "윤나는 브루드스톤", + "block.antarchy.chiseled_broodstone": "조각된 브루드스톤", + "block.antarchy.broodstone_bricks": "브루드스톤 벽돌", + "block.antarchy.broodstone_stairs": "브루드스톤 계단", + "block.antarchy.broodstone_slab": "브루드스톤 반 블록", + "block.antarchy.broodstone_wall": "브루드스톤 담장", + "block.antarchy.polished_broodstone_stairs": "윤나는 브루드스톤 계단", + "block.antarchy.polished_broodstone_slab": "윤나는 브루드스톤 반 블록", + "block.antarchy.polished_broodstone_wall": "윤나는 브루드스톤 담장", + "block.antarchy.broodstone_brick_stairs": "브루드스톤 벽돌 계단", + "block.antarchy.broodstone_brick_slab": "브루드스톤 벽돌 반 블록", + "block.antarchy.broodstone_brick_wall": "브루드스톤 벽돌 담장", + "block.antarchy.myrmite_coal_ore": "미르마이트 석탄 광석", + "block.antarchy.broodstone_uranium_ore": "브루드스톤 우라늄 광석", + "block.antarchy.broodstone_titanium_ore": "브루드스톤 티타늄 광석", + "item.antarchy.raw_bug_meat": "익히지 않은 벌레 고기", + "item.antarchy.cooked_bug_meat": "익힌 벌레 고기", + "item.antarchy.hercules_horn": "헤라클레스 뿔", + "block.antarchy.hanging_creeproots": "매달린 크리프루츠", + "block.antarchy.glowcap_mushroom": "글로우캡 버섯", + "block.antarchy.potted_glowcap_mushroom": "화분에 심은 글로우캡 버섯", + "block.antarchy.glowcap_mushroom_block": "글로우캡 버섯 블록", + "block.antarchy.molting_vines": "탈피 덩굴", + "item.antarchy.broodfruit": "브루드프루트", + "block.antarchy.jumpy_bug_egg": "점피 벌레 알", + "subtitles.antarchy.creeping_horror_growl": "기어오는 공포 그르렁거립니다", + "subtitles.antarchy.creeping_horror_hurt": "기어오는 공포 다칩니다", + "subtitles.antarchy.creeping_horror_bite": "기어오는 공포 뭅니다", + "subtitles.antarchy.lurking_terror_snarl": "도사린 공포 으르렁거립니다", + "subtitles.antarchy.lurking_terror_hurt": "도사린 공포 다칩니다", + "subtitles.antarchy.lurking_terror_bite": "도사린 공포 뭅니다", + "subtitles.antarchy.lurking_terror_fly_loop": "도사린 공포 납니다", + "subtitles.antarchy.stink_bug_fart": "노린재 방귀를 뀝니다", + "subtitles.antarchy.stink_bug_idle": "노린재 소리를 냅니다", + "subtitles.antarchy.rolly_polly_idle": "공벌레 소리를 냅니다", + "subtitles.antarchy.rolly_polly_wheel_mode": "공벌레가 몸을 맙니다", + "subtitles.antarchy.rolly_polly_normal_mode": "공벌레가 몸을 폅니다", + "subtitles.antarchy.rolly_polly_roll": "공벌레가 구릅니다", + "subtitles.antarchy.hercules_beetle_idle": "헤라클레스장수풍뎅이 소리를 냅니다", + "subtitles.antarchy.hercules_beetle_hurt": "헤라클레스장수풍뎅이 다칩니다", + "subtitles.antarchy.hercules_beetle_attack": "헤라클레스장수풍뎅이 공격합니다", + "subtitles.antarchy.hercules_beetle_cry": "헤라클레스장수풍뎅이 포효합니다", + "subtitles.antarchy.hercules_beetle_charge_start": "헤라클레스장수풍뎅이 힘을 모읍니다", + "subtitles.antarchy.hercules_beetle_knocked_down": "헤라클레스장수풍뎅이 쓰러집니다", + "subtitles.antarchy.jerry_idle": "제리가 재잘거립니다", + "subtitles.antarchy.jerry_hurt": "제리가 다칩니다", + "subtitles.antarchy.jerry_death": "제리가 죽습니다", + "subtitles.antarchy.jerry_attack": "제리가 공격합니다", + "subtitles.antarchy.jumpy_bug_idle": "점피 벌레 소리를 냅니다", + "subtitles.antarchy.spit_bug_idle": "스핏 벌레 소리를 냅니다", + "subtitles.antarchy.jumpy_bug_hurt": "점피 벌레 다칩니다", + "subtitles.antarchy.jumpy_bug_jump": "점피 벌레 뜁니다", + "subtitles.antarchy.spit_bug_hurt": "스핏 벌레 다칩니다", + "subtitles.antarchy.spit_bug_spit": "스핏 벌레 뱉습니다", + "subtitles.antarchy.brutalfly_spit": "브루털플라이 뱉습니다", + "advancements.antarchy.bug_apetit.title": "벌레 쁘띠", + "advancements.antarchy.bug_apetit.description": "익힌 벌레 고기를 먹으세요.", + "advancements.antarchy.behavioral_correction.title": "행동 교정", + "advancements.antarchy.behavioral_correction.description": "태도 교정기를 획득하세요.", + "advancements.antarchy.beetle_buddies.title": "딱정벌레 친구들", + "advancements.antarchy.beetle_buddies.description": "헤라클레스장수풍뎅이를 길들이세요.", + "advancements.antarchy.herculean_task.title": "헤라클레스의 과업", + "advancements.antarchy.herculean_task.description": "헤라클레스장수풍뎅이를 처치하세요." +} 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 new file mode 100644 index 00000000..5cbb150e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/pt_br.json @@ -0,0 +1,962 @@ +{ + "block.antarchy.duplicator_log": "Tronco Duplicador", + "block.antarchy.ouranwood_log": "Tronco de Ouranwood", + "block.antarchy.ouranwood_wood": "Madeira de Ouranwood", + "block.antarchy.mossy_ouranwood_log": "Tronco de Ouranwood musgoso", + "block.antarchy.mossy_ouranwood_wood": "Madeira de Ouranwood musgoso", + "block.antarchy.stripped_ouranwood_log": "Tronco de Ouranwood descascado", + "block.antarchy.stripped_ouranwood_wood": "Madeira de Ouranwood descascado", + "block.antarchy.ouranwood_planks": "Tábuas de Ouranwood", + "block.antarchy.ouranwood_stairs": "Escadas de Ouranwood", + "block.antarchy.ouranwood_slab": "Laje de Ouranwood", + "block.antarchy.ouranwood_fence": "Cerca de Ouranwood", + "block.antarchy.ouranwood_fence_gate": "Portão de Cerca de Ouranwood", + "block.antarchy.ouranwood_door": "Porta de Ouranwood", + "block.antarchy.ouranwood_trapdoor": "Alçapão de Ouranwood", + "block.antarchy.ouranwood_pressure_plate": "Placa de Pressão de Ouranwood", + "block.antarchy.ouranwood_button": "Botão de Ouranwood", + "block.antarchy.ouranwood_leaves": "Folhas de Ouranwood", + "block.antarchy.ouranwood_acorn": "Bolota de Ouranwood", + "block.antarchy.ouranwood_sign": "Placa de Ouranwood", + "block.antarchy.ouranwood_hanging_sign": "Placa Suspensa de Ouranwood", + "block.antarchy.peach_log": "Tronco de Pêssego", + "block.antarchy.peach_wood": "Madeira de Pêssego", + "block.antarchy.stripped_peach_log": "Tronco de Pêssego descascado", + "block.antarchy.stripped_peach_wood": "Madeira de Pêssego descascado", + "block.antarchy.peach_planks": "Tábuas de Pêssego", + "block.antarchy.peach_stairs": "Escadas de Pêssego", + "block.antarchy.peach_slab": "Laje de Pêssego", + "block.antarchy.peach_fence": "Cerca de Pêssego", + "block.antarchy.peach_fence_gate": "Portão de Cerca de Pêssego", + "block.antarchy.peach_door": "Porta de Pêssego", + "block.antarchy.peach_trapdoor": "Alçapão de Pêssego", + "block.antarchy.peach_pressure_plate": "Placa de Pressão de Pêssego", + "block.antarchy.peach_button": "Botão de Pêssego", + "block.antarchy.peach_leaves": "Folhas de Pêssego", + "block.antarchy.hanging_peach": "Pêssego suspenso", + "block.antarchy.peach_sapling": "Muda de Pêssego", + "block.antarchy.peach_sign": "Placa de Pêssego", + "block.antarchy.peach_hanging_sign": "Placa Suspensa de Pêssego", + "block.antarchy.orange_milkweed": "Asclépia laranja", + "block.antarchy.pink_milkweed": "Asclépia rosa", + "block.antarchy.camellia": "Camélia", + "block.antarchy.spider_lily": "Lírio-aranha", + "block.antarchy.lotus": "Lótus", + "item.antarchy.lotus": "Lótus", + "item.antarchy.critter_cage": "Gaiola de Criaturas", + "block.antarchy.giant_lily_pad": "Vitória-régia Gigante", + "block.antarchy.seashell": "Concha", + "block.antarchy.critter_cage_block": "Gaiola de Criaturas", + "block.antarchy.hushweed": "Hushweed", + "block.antarchy.umbral_moss_block": "Bloco de Musgo Umbral", + "block.antarchy.umbral_moss_carpet": "Tapete de Musgo Umbral", + "block.antarchy.blush_moss_block": "Bloco de Musgo Rubor", + "block.antarchy.blush_moss_carpet": "Tapete de Musgo Rubor", + "block.antarchy.duplicator_sapling": "Muda Duplicadora", + "block.antarchy.duct_tape": "Fita Adesiva", + "block.antarchy.infested_rooted_dirt": "Enraizada Terra infestado", + "block.antarchy.infested_coarse_dirt": "Estéril Terra infestado", + "block.antarchy.nyxite": "Nyxite", + "block.antarchy.polished_nyxite": "Nyxite polido", + "block.antarchy.chiseled_nyxite": "Nyxite talhado", + "block.antarchy.nyxite_bricks": "Tijolos de Nyxite", + "block.antarchy.shellstone": "Shellstone", + "block.antarchy.polished_shellstone": "Shellstone Polido", + "block.antarchy.shellstone_bricks": "Tijolos de Shellstone", + "block.antarchy.chiseled_shellstone": "Shellstone Talhado", + "block.antarchy.mossy_shellstone_bricks": "Tijolos Musgosos de Shellstone", + "block.antarchy.mossy_shellstone_brick_stairs": "Escadas de Tijolos Musgosos de Shellstone", + "block.antarchy.mossy_shellstone_brick_slab": "Laje de Tijolos Musgosos de Shellstone", + "block.antarchy.mossy_shellstone_brick_wall": "Muro de Tijolos Musgosos de Shellstone", + "block.antarchy.cracked_shellstone_bricks": "Tijolos Rachados de Shellstone", + "block.antarchy.shellstone_stairs": "Escadas de Shellstone", + "block.antarchy.shellstone_slab": "Laje de Shellstone", + "block.antarchy.shellstone_wall": "Muro de Shellstone", + "block.antarchy.polished_shellstone_stairs": "Escadas de Shellstone Polido", + "block.antarchy.polished_shellstone_slab": "Laje de Shellstone Polido", + "block.antarchy.polished_shellstone_wall": "Muro de Shellstone Polido", + "block.antarchy.shellstone_brick_stairs": "Escadas de Tijolos de Shellstone", + "block.antarchy.shellstone_brick_slab": "Laje de Tijolos de Shellstone", + "block.antarchy.shellstone_brick_wall": "Muro de Tijolos de Shellstone", + "block.antarchy.nyxite_stairs": "Escadas de Nyxite", + "block.antarchy.nyxite_slab": "Laje de Nyxite", + "block.antarchy.nyxite_wall": "Muro de Nyxite", + "block.antarchy.polished_nyxite_stairs": "Escadas de Nyxite polido", + "block.antarchy.polished_nyxite_slab": "Laje de Nyxite polido", + "block.antarchy.polished_nyxite_wall": "Muro de Nyxite polido", + "block.antarchy.nyxite_brick_stairs": "Escadas de Tijolos de Nyxite", + "block.antarchy.nyxite_brick_slab": "Laje de Tijolos de Nyxite", + "block.antarchy.nyxite_brick_wall": "Muro de Tijolos de Nyxite", + "block.antarchy.pale_nyxite": "Nyxite pálido", + "block.antarchy.nyxite_spike": "Espinho de Nyxite", + "block.antarchy.potent_nyxite": "Nyxite potente", + "block.antarchy.triffid_goo_block": "Bloco de Triffid Gosma", + "block.antarchy.elythia_portal": "Portal de Elythia", + "block.antarchy.cloud_block": "Bloco de Nuvem", + "block.antarchy.thoraxis_portal": "Portal de Thoraxis", + "block.antarchy.antimetal": "Antimetal", + "block.antarchy.polished_antimetal": "Antimetal polido", + "block.antarchy.antimetal_scaffolding": "Andaime de Antimetal", + "block.antarchy.cornea_stalk": "Caule de Cornea", + "block.antarchy.corn_crop": "Plantação de Milho", + "block.antarchy.dream_torch": "Tocha de Sonho", + "block.antarchy.dream_wall_torch": "Tocha de Parede dos Sonhos", + "block.antarchy.dream_lantern": "Lanterna de Sonho", + "block.antarchy.dream_campfire": "Fogueira de Sonho", + "block.antarchy.dream_fire": "Fogo de Sonho", + "block.antarchy.dream_fire_ceiling": "Fogo de Sonho", + "block.antarchy.budding_blood_crystal": "Cristal de Sangue brotante", + "block.antarchy.blood_crystal_block": "Bloco de Cristal de Sangue", + "block.antarchy.small_blood_crystal_bud": "Broto de Cristal de Sangue pequeno", + "block.antarchy.medium_blood_crystal_bud": "Broto de Cristal de Sangue médio", + "block.antarchy.large_blood_crystal_bud": "Broto de Cristal de Sangue grande", + "block.antarchy.blood_crystal_cluster": "Aglomerado de Cristal de Sangue", + "block.antarchy.dream_sand": "Areia de Sonho", + "block.antarchy.dream_sandstone": "Arenito dos Sonhos", + "block.antarchy.chiseled_dream_sandstone": "Arenito Talhado dos Sonhos", + "block.antarchy.cut_dream_sandstone": "Arenito Cortado dos Sonhos", + "block.antarchy.smooth_dream_sandstone": "Arenito Liso dos Sonhos", + "block.antarchy.dream_sandstone_stairs": "Escadas de Arenito dos Sonhos", + "block.antarchy.dream_sandstone_slab": "Laje de Arenito dos Sonhos", + "block.antarchy.dream_sandstone_wall": "Muro de Arenito dos Sonhos", + "block.antarchy.smooth_dream_sandstone_stairs": "Escadas de Arenito Liso dos Sonhos", + "block.antarchy.smooth_dream_sandstone_slab": "Laje de Arenito Liso dos Sonhos", + "block.antarchy.cut_dream_sandstone_slab": "Laje de Arenito Cortado dos Sonhos", + "block.antarchy.bed_bug_egg": "Ovo de Percevejo-de-cama", + "block.antarchy.wasp_nest": "Ninho de Vespa", + "block.antarchy.red_ant_nest": "Ninho de Formiga Vermelha", + "block.antarchy.brown_ant_nest": "Ninho de Formiga Marrom", + "block.antarchy.rainbow_ant_nest": "Ninho de Formiga Arco-íris", + "block.antarchy.uranium_ore": "Minério de Urânio", + "block.antarchy.deepslate_uranium_ore": "Minério de Urânio de ardósia", + "block.antarchy.titanium_ore": "Minério de Titânio", + "block.antarchy.deepslate_titanium_ore": "Minério de Titânio de ardósia", + "block.antarchy.uranium_block": "Bloco de Urânio", + "block.antarchy.titanium_block": "Bloco de Titânio", + "block.antarchy.raw_uranium_block": "Bloco de Urânio bruto", + "block.antarchy.raw_titanium_block": "Bloco de Titânio bruto", + "block.antarchy.cut_uranium": "Urânio cortado", + "block.antarchy.cut_titanium": "Titânio cortado", + "block.antarchy.cut_uranium_slab": "Laje de Urânio cortado", + "block.antarchy.cut_titanium_slab": "Laje de Titânio cortado", + "block.antarchy.cut_uranium_stairs": "Escadas de Urânio cortado", + "block.antarchy.cut_titanium_stairs": "Escadas de Titânio cortado", + "block.antarchy.chiseled_uranium": "Urânio talhado", + "block.antarchy.chiseled_titanium": "Titânio talhado", + "block.antarchy.uranium_bulb": "Lâmpada de Urânio", + "block.antarchy.titanium_bulb": "Lâmpada de Titânio", + "block.antarchy.uranium_door": "Porta de Urânio", + "block.antarchy.titanium_door": "Porta de Titânio", + "block.antarchy.uranium_trapdoor": "Alçapão de Urânio", + "block.antarchy.titanium_trapdoor": "Alçapão de Titânio", + "block.antarchy.uranium_bars": "Barras de Urânio", + "block.antarchy.titanium_bars": "Barras de Titânio", + "tooltip.antarchy.signal_saving_bulb": "Liga e desliga. O nível de luz é igual à força do sinal armazenado.", + "block.antarchy.bile": "Bile", + "block.antarchy.ichor": "Ícor", + "block.antarchy.antiwater": "Antiágua", + "block.antarchy.lumen": "Lumen", + "block.antarchy.lumen_froglight": "Luz de Sapo de Lumen", + "block.antarchy.roseate_froglight": "Luz de Sapo rosado", + "block.antarchy.star_coral": "Coral Estrela", + "block.antarchy.star_coral_fan": "Leque de Coral Estelar", + "block.antarchy.star_coral_block": "Bloco de Coral Estelar", + "block.antarchy.dead_star_coral": "Coral Estelar Morto", + "block.antarchy.dead_star_coral_fan": "Leque de Coral Estelar Morto", + "block.antarchy.dead_star_coral_block": "Bloco de Coral Estelar Morto", + "entity.antarchy.apple_cow": "Vaca-Maçã", + "entity.antarchy.golden_apple_cow": "Vaca de Maçã Dourada", + "entity.antarchy.enchanted_golden_apple_cow": "Vaca de Maçã Dourada Encantada", + "entity.antarchy.easter_bunny": "Coelho da Páscoa", + "entity.antarchy.glimmer": "Glimmer", + "entity.antarchy.ouranwood_deer": "Cervo de Ouranwood", + "entity.antarchy.elka": "Elka", + "entity.antarchy.dorrie": "Dorrie", + "entity.antarchy.flying_squirrel": "Esquilo-voador", + "entity.antarchy.caterpillar": "Lagarta", + "entity.antarchy.butterfly": "Borboleta", + "entity.antarchy.brutalfly": "Brutalfly", + "entity.antarchy.red_ant": "Formiga Vermelha", + "entity.antarchy.brown_ant": "Formiga Marrom", + "entity.antarchy.rainbow_ant": "Formiga Arco-íris", + "entity.antarchy.diamond_minecart": "O Carrinho de Diamante", + "entity.antarchy.dr_trayaurus": "Dr. Trayaurus", + "entity.antarchy.cloud_shark": "Tubarão das Nuvens", + "entity.antarchy.kraken": "O Kraken", + "entity.antarchy.missile_squid": "Lula-Míssil", + "entity.antarchy.octopus_bomb": "Bomba-Polvo", + "entity.antarchy.nightmare": "Pesadelo", + "entity.antarchy.bed_bug": "Percevejo-de-cama", + "entity.antarchy.wasp": "Vespa", + "entity.antarchy.bomber": "Bombardeiro", + "entity.antarchy.moleworm": "Moleworm", + "entity.antarchy.molevore": "Molevore", + "entity.antarchy.mantis": "Louva-a-deus", + "entity.antarchy.alpha_mantis": "Louva-a-deus Alfa", + "entity.antarchy.triffid": "Triffid", + "entity.antarchy.toreterror": "Toreterror", + "entity.antarchy.water_bomb": "Bomba d’Água", + "subtitles.antarchy.mantis_ambient": "Louva-a-deus estala", + "subtitles.antarchy.mantis_hurt": "Louva-a-deus guincha", + "subtitles.antarchy.mantis_attack": "Louva-a-deus estalha", + "subtitles.antarchy.mantis_fly_loop": "Louva-a-deus faz as asas zumbirem", + "item.antarchy.big_bertha": "Big Bertha", + "item.antarchy.wasp_nest": "Ninho de Vespa", + "item.antarchy.stink_bug": "Percevejo-fedorento", + "item.antarchy.wasp_spawn_egg": "Ovo Gerador de Vespa", + "item.antarchy.bomber_spawn_egg": "Ovo Gerador de Bombardeiro", + "item.antarchy.big_bertha_blade": "Lâmina da Big Bertha", + "item.antarchy.big_bertha_handle": "Cabo da Big Bertha", + "item.antarchy.big_bertha_hilt": "Guarda da Big Bertha", + "item.antarchy.battle_axe": "Machado de Batalha", + "item.antarchy.attitude_adjuster": "Ajustador de Atitude", + "tooltip.antarchy.attitude_adjuster.grounded": "Arremessa alvos no chão para cima e lança alvos no ar contra o chão.", + "tooltip.antarchy.attitude_adjuster.slam": "Clique com o botão direito no ar para golpear o chão.", + "item.antarchy.cloud_shark_fin": "Barbatana de Tubarão das Nuvens", + "item.antarchy.cloud_shark_fin_soup": "Sopa de Barbatana de Tubarão das Nuvens", + "tooltip.antarchy.cloud_shark_fin_soup": "Concede Força e Queda Lenta.", + "tooltip.antarchy.critter_cage.empty": "Clique com o botão direito para arremessar", + "tooltip.antarchy.critter_cage.contains": "Contém: %s", + "tooltip.antarchy.critter_cage.release": "Clique com o botão direito para soltar", + "tooltip.antarchy.critter_cage.place": "Shift + clique com o botão direito para colocar", + "item.antarchy.kraken_tooth": "Dente de Kraken", + "item.antarchy.kraken_tentacle": "Tentáculo do Kraken", + "item.antarchy.krakens_grasp": "Agarre do Kraken", + "entity.antarchy.tentacle": "Tentáculo", + "item.antarchy.basilisk_fang": "Presa de Basilisco", + "item.antarchy.basilisk_dagger": "Adaga de Basilisco", + "item.antarchy.blood_crystal_block": "Bloco de Cristal de Sangue", + "item.antarchy.small_blood_crystal_bud": "Broto de Cristal de Sangue pequeno", + "item.antarchy.medium_blood_crystal_bud": "Broto de Cristal de Sangue médio", + "item.antarchy.large_blood_crystal_bud": "Broto de Cristal de Sangue grande", + "item.antarchy.blood_crystal_cluster": "Aglomerado de Cristal de Sangue", + "item.antarchy.dream_sand": "Areia de Sonho", + "item.antarchy.dream_sandstone": "Arenito dos Sonhos", + "item.antarchy.chiseled_dream_sandstone": "Arenito Talhado dos Sonhos", + "item.antarchy.cut_dream_sandstone": "Arenito Cortado dos Sonhos", + "item.antarchy.smooth_dream_sandstone": "Arenito Liso dos Sonhos", + "item.antarchy.dream_sandstone_stairs": "Escadas de Arenito dos Sonhos", + "item.antarchy.dream_sandstone_slab": "Laje de Arenito dos Sonhos", + "item.antarchy.dream_sandstone_wall": "Muro de Arenito dos Sonhos", + "item.antarchy.smooth_dream_sandstone_stairs": "Escadas de Arenito Liso dos Sonhos", + "item.antarchy.smooth_dream_sandstone_slab": "Laje de Arenito Liso dos Sonhos", + "item.antarchy.cut_dream_sandstone_slab": "Laje de Arenito Cortado dos Sonhos", + "item.antarchy.dream_torch": "Tocha de Sonho", + "item.antarchy.dream_lantern": "Lanterna de Sonho", + "item.antarchy.dream_campfire": "Fogueira de Sonho", + "item.antarchy.giant_lily_pad": "Vitória-régia Gigante", + "item.antarchy.seashell": "Concha", + "item.antarchy.nightmare_scale": "Escama de Pesadelo", + "item.antarchy.nightmare_helmet": "Capacete de Pesadelo", + "item.antarchy.nightmare_chestplate": "Peitoral de Pesadelo", + "item.antarchy.nightmare_leggings": "Calças de Pesadelo", + "item.antarchy.nightmare_boots": "Botas de Pesadelo", + "item.antarchy.nightmare_sword": "Espada de Pesadelo", + "tooltip.antarchy.nightmare_armor_double_damage": "%s%% de chance de causar dano dobrado", + "tooltip.antarchy.nightmare_armor_set_bonus": "Conjunto Completo: imunidade a Wither e Pavor", + "tooltip.antarchy.nightmare_sword": "Causa mais dano conforme sua vida diminui.", + "tooltip.antarchy.nightmare_sword_damage": "Causa %s de dano", + "tooltip.antarchy.primordial_helmet_water_breathing": "Concede Respiração Aquática ao usuário", + "tooltip.antarchy.primordial_armor_knockback_dealt": "Adiciona %s de repulsão de ataque por peça", + "tooltip.antarchy.primordial_armor_set_bonus": "Conjunto Completo: ataques ignoram a resistência à repulsão inimiga", + "attribute.antarchy.double_damage_chance": "Chance de Dano Dobrado", + "attribute.antarchy.bloodglass_max_hearts": "Máximo de Corações de Vidro de Sangue", + "item.antarchy.molevore_nose": "Nariz de Molevore", + "item.antarchy.moleworm": "Moleworm", + "item.antarchy.triffid_spawn_egg": "Ovo Gerador de Triffid", + "item.antarchy.infested_rooted_dirt": "Enraizada Terra infestado", + "item.antarchy.infested_coarse_dirt": "Estéril Terra infestado", + "item.antarchy.pale_nyxite": "Nyxite pálido", + "item.antarchy.polished_nyxite": "Nyxite polido", + "item.antarchy.chiseled_nyxite": "Nyxite talhado", + "item.antarchy.nyxite_bricks": "Tijolos de Nyxite", + "item.antarchy.shellstone": "Shellstone", + "item.antarchy.polished_shellstone": "Shellstone Polido", + "item.antarchy.shellstone_bricks": "Tijolos de Shellstone", + "item.antarchy.chiseled_shellstone": "Shellstone Talhado", + "item.antarchy.mossy_shellstone_bricks": "Tijolos Musgosos de Shellstone", + "item.antarchy.mossy_shellstone_brick_stairs": "Escadas de Tijolos Musgosos de Shellstone", + "item.antarchy.mossy_shellstone_brick_slab": "Laje de Tijolos Musgosos de Shellstone", + "item.antarchy.mossy_shellstone_brick_wall": "Muro de Tijolos Musgosos de Shellstone", + "item.antarchy.cracked_shellstone_bricks": "Tijolos Rachados de Shellstone", + "item.antarchy.shellstone_stairs": "Escadas de Shellstone", + "item.antarchy.shellstone_slab": "Laje de Shellstone", + "item.antarchy.shellstone_wall": "Muro de Shellstone", + "item.antarchy.polished_shellstone_stairs": "Escadas de Shellstone Polido", + "item.antarchy.polished_shellstone_slab": "Laje de Shellstone Polido", + "item.antarchy.polished_shellstone_wall": "Muro de Shellstone Polido", + "item.antarchy.shellstone_brick_stairs": "Escadas de Tijolos de Shellstone", + "item.antarchy.shellstone_brick_slab": "Laje de Tijolos de Shellstone", + "item.antarchy.shellstone_brick_wall": "Muro de Tijolos de Shellstone", + "item.antarchy.nyxite_stairs": "Escadas de Nyxite", + "item.antarchy.nyxite_slab": "Laje de Nyxite", + "item.antarchy.nyxite_wall": "Muro de Nyxite", + "item.antarchy.polished_nyxite_stairs": "Escadas de Nyxite polido", + "item.antarchy.polished_nyxite_slab": "Laje de Nyxite polido", + "item.antarchy.polished_nyxite_wall": "Muro de Nyxite polido", + "item.antarchy.nyxite_brick_stairs": "Escadas de Tijolos de Nyxite", + "item.antarchy.nyxite_brick_slab": "Laje de Tijolos de Nyxite", + "item.antarchy.nyxite_brick_wall": "Muro de Tijolos de Nyxite", + "item.antarchy.potent_nyxite": "Nyxite potente", + "item.antarchy.antimetal": "Antimetal", + "item.antarchy.polished_antimetal": "Antimetal polido", + "item.antarchy.antimetal_scaffolding": "Andaime de Antimetal", + "item.antarchy.ouranwood_acorn": "Bolota de Ouranwood", + "item.antarchy.ouranwood_boat": "Barco de Ouranwood", + "item.antarchy.ouranwood_chest_boat": "Barco com Baú de Ouranwood", + "item.antarchy.raw_venison": "Carne de Veado Crua", + "item.antarchy.cooked_venison": "Carne de Veado Assada", + "item.antarchy.peach_sapling": "Muda de Pêssego", + "item.antarchy.peach": "Pêssego", + "item.antarchy.peach_pie": "Torta de Pêssego", + "item.antarchy.cornbread": "Pão de Milho", + "item.antarchy.popcorn": "Pipoca", + "item.antarchy.peach_sign": "Placa de Pêssego", + "item.antarchy.peach_hanging_sign": "Placa Suspensa de Pêssego", + "item.antarchy.peach_boat": "Barco de Pêssego", + "item.antarchy.peach_chest_boat": "Barco com Baú de Pêssego", + "item.antarchy.orange_milkweed": "Asclépia laranja", + "item.antarchy.pink_milkweed": "Asclépia rosa", + "item.antarchy.camellia": "Camélia", + "item.antarchy.spider_lily": "Lírio-aranha", + "item.antarchy.hushweed": "Hushweed", + "item.antarchy.umbral_moss_block": "Bloco de Musgo Umbral", + "item.antarchy.umbral_moss_carpet": "Tapete de Musgo Umbral", + "item.antarchy.blush_moss_block": "Bloco de Musgo Rubor", + "item.antarchy.blush_moss_carpet": "Tapete de Musgo Rubor", + "item.antarchy.mud_pie": "Torta de Lama", + "item.antarchy.duct_tape": "Fita Adesiva", + "item.antarchy.duct_tape.tooltip": "Coloque e clique com o botão direito para reparar ferramentas", + "item.antarchy.rainbow_sugar": "Açúcar Arco-íris", + "item.antarchy.uranium_nugget": "Pepita de Urânio", + "item.antarchy.titanium_nugget": "Pepita de Titânio", + "item.antarchy.raw_uranium_scrap": "Sucata de Urânio bruto", + "item.antarchy.raw_titanium_scrap": "Sucata de Titânio bruto", + "item.antarchy.raw_uranium": "Urânio bruto", + "item.antarchy.raw_titanium": "Titânio bruto", + "item.antarchy.uranium_ingot": "Barra de Urânio", + "item.antarchy.titanium_ingot": "Barra de Titânio", + "item.antarchy.blood_crystal_shard": "Fragmento de Cristal de Sangue", + "item.antarchy.blood_crystal_apple": "Maçã de Cristal de Sangue", + "item.antarchy.blood_crystal_katana": "Katana de Cristal de Sangue", + "item.antarchy.blood_crystal_helmet": "Capacete de Cristal de Sangue", + "item.antarchy.blood_crystal_chestplate": "Peitoral de Cristal de Sangue", + "item.antarchy.blood_crystal_leggings": "Calças de Cristal de Sangue", + "item.antarchy.blood_crystal_boots": "Botas de Cristal de Sangue", + "item.antarchy.blood_crystal_armor.tooltip": "Concede um Coração de Vidro de Sangue que bloqueia um golpe, se quebra e depois recarrega.", + "item.antarchy.blood_crystal_boots.tooltip2": "Anula o dano de queda ao cair para cima com a gravidade invertida.", + "item.antarchy.blood_crystal_apple.tooltip": "Concede Guarda de Vidro de Sangue, fornecendo Corações de Vidro de Sangue temporários que recarregam enquanto o efeito durar.", + "tooltip.antarchy.blood_crystal_katana.launch": "Impulsiona você para a frente ao acertar.", + "tooltip.antarchy.blood_crystal_katana.trail": "Deixa um rastro carmesim atrás de você.", + "item.antarchy.mantis_claw": "Garra de Louva-a-deus", + "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", + "item.antarchy.king_scale": "Escama de Rei", + "item.antarchy.queen_scale": "Escama de Rainha", + "item.antarchy.jumpy_bug_leg": "Perna de Inseto Saltador", + "item.antarchy.jumpy_boots": "Botas Saltadoras", + "tooltip.antarchy.jumpy_boots": "Agache-se para carregar e depois pule para saltar para cima.", + "item.antarchy.brutalfly_wing": "Asa de Brutalfly", + "item.antarchy.brutalfly_elytra": "Élitros de Brutalfly", + "tooltip.antarchy.brutalfly_elytra.flap": "Enquanto voa, segure %s para bater as asas", + "item.antarchy.cornea_ear": "Orelha de Cornea", + "item.antarchy.corn": "Milho", + "item.antarchy.corn_seeds": "Sementes de Milho", + "item.antarchy.raw_corndog": "Corn Dog Cru", + "item.antarchy.cooked_corndog": "Corn Dog Assado", + "item.antarchy.high_fructose_corn_syrup": "Xarope de Milho com Alto Teor de Frutose", + "jei.antarchy.americanize": "Americanizar", + "item.antarchy.american_name": "%s Americano", + "item.antarchy.root_beer": "Root Beer", + "item.antarchy.primordial_scute": "Escama de Primordial", + "item.antarchy.triffid_goo": "Triffid Gosma", + "item.antarchy.triffid_goo_block": "Bloco de Triffid Gosma", + "tooltip.antarchy.triffid_goo_block": "Em alta velocidade, você quica para cima; caso contrário, afunda.", + "item.antarchy.cloud_bucket": "Balde de Nuvem", + "tooltip.antarchy.cloud_bucket.midair": "Pode ser colocado no ar", + "item.antarchy.lumen_bucket": "Balde de Lumen", + "item.antarchy.scorpion_whip": "Chicote de Escorpião-imperador", + "tooltip.antarchy.scorpion_whip.lash": "Açoita a presa de longe e crava um vínculo venenoso.", + "tooltip.antarchy.scorpion_whip.reel": "Clique com o botão direito para puxar a presa presa ao vínculo.", + "tooltip.antarchy.scorpion_whip.snap": "Clique com o botão esquerdo novamente na presa presa para arrancar o ferrão.", + "item.antarchy.fallen_king_crown": "Coroa do Rei Caído", + "tooltip.antarchy.fallen_king_crown.hero": "Concede Herói da Vila ao matar criaturas hostis", + "item.antarchy.vortex_eye": "Olho de Vórtice", + "item.antarchy.ultimate_helmet": "Capacete Supremo", + "item.antarchy.ultimate_chestplate": "Peitoral Supremo", + "item.antarchy.ultimate_leggings": "Calças Supremas", + "item.antarchy.ultimate_boots": "Botas Supremas", + "item.antarchy.ultimate_sword": "Espada Suprema", + "item.antarchy.ultimate_pickaxe": "Picareta Suprema", + "item.antarchy.ultimate_axe": "Machado Supremo", + "item.antarchy.ultimate_shovel": "Pá Suprema", + "item.antarchy.ultimate_hoe": "Enxada Suprema", + "item.antarchy.ultimate_bow": "Arco Supremo", + "item.antarchy.ultimate_crossbow": "Besta Suprema", + "item.antarchy.ultimate_crossbow.capacity": "Carrega até 16 flechas de uma vez", + "item.antarchy.ultimate_crossbow.arrows_remaining": "%1$s %2$s carregadas", + "item.antarchy.ultimate_mace": "Maça Suprema", + "item.antarchy.moggles": "Moggles", + "itemGroup.antarchy.antarchy": "Antarchy", + "item.antarchy.bile_bucket": "Balde de Bile", + "item.antarchy.ichor_bucket": "Balde de Ícor", + "item.antarchy.antiwater_bucket": "Balde de Antiágua", + "item.antarchy.reverie_bottle": "Frasco de Reverie", + "item.antarchy.squidzooka": "Squidzooka", + "item.antarchy.rpo_launcher": "Lançador P.M.F.", + "item.antarchy.shrink_ray": "Raio Encolhedor", + "item.antarchy.growth_ray": "Raio de Crescimento", + "tooltip.antarchy.shrink_ray": "Encolhe alvos permanentemente. Segure para carregar.", + "tooltip.antarchy.growth_ray": "Aumenta alvos permanentemente. Segure para carregar.", + "tooltip.antarchy.size_ray_milk_reset": "Beber leite redefine este efeito.", + "tooltip.antarchy.reverie_bottle.capture": "Clique com o botão direito em uma Reverie com um frasco de vidro para guardá-la.", + "tooltip.antarchy.reverie_bottle.release": "Clique com o botão direito para soltar a Reverie.", + "item.antarchy.gravity_gun": "Arma Gravitacional", + "item.antarchy.miners_dream": "Sonho do Minerador", + "tooltip.antarchy.miners_dream.line1": "Clique com o botão direito para escavar uma caverna sinuosa.", + "tooltip.antarchy.miners_dream.line2": "Deixa blocos valiosos intactos.", + "message.antarchy.miners_dream_disabled": "O Sonho do Minerador está desativado.", + "message.antarchy.miners_dream_busy": "Seu sonho anterior ainda está se desenrolando.", + "item.antarchy.diamond_minecart": "O Carrinho de Diamante", + "item.antarchy.cogwheel_pet": "Mascote de Engrenagem", + "item.antarchy.fire_dragon_pet": "Mascote de Dragão de Fogo", + "item.antarchy.ice_dragon_pet": "Mascote de Dragão de Gelo", + "item.antarchy.lightning_dragon_pet": "Mascote de Dragão Elétrico", + "item.antarchy.gorgon_pet": "Mascote de Gorgon", + "item.antarchy.apple_cow_spawn_egg": "Ovo Gerador de Vaca-Maçã", + "item.antarchy.red_ant_spawn_egg": "Ovo Gerador de Formiga Vermelha", + "item.antarchy.brown_ant_spawn_egg": "Ovo Gerador de Formiga Marrom", + "item.antarchy.rainbow_ant_spawn_egg": "Ovo Gerador de Formiga Arco-íris", + "item.antarchy.golden_apple_cow_spawn_egg": "Ovo Gerador de Vaca-Maçã dourado", + "item.antarchy.enchanted_golden_apple_cow_spawn_egg": "Ovo Gerador de Vaca-Maçã dourado encantado", + "item.antarchy.dr_trayaurus_spawn_egg": "Ovo Gerador de Dr. Trayaurus", + "item.antarchy.easter_bunny_spawn_egg": "Ovo Gerador de Coelho da Páscoa", + "item.antarchy.glimmer_spawn_egg": "Ovo Gerador de Glimmer", + "item.antarchy.ouranwood_deer_spawn_egg": "Ovo Gerador de Cervo de Ouranwood", + "item.antarchy.spirit_apple": "Maçã Espiritual", + "item.antarchy.elka_spawn_egg": "Ovo Gerador de Elka", + "item.antarchy.glimmer_bottle": "Frasco de Glimmer", + "item.antarchy.glimmer_bottle.contains": "Contém: %s", + "glimmer_variant.antarchy.apple_cow": "Vaca-Maçã", + "glimmer_variant.antarchy.ouranwood_deer": "Cervo de Ouranwood", + "glimmer_variant.antarchy.frog": "Sapo", + "glimmer_variant.antarchy.ant": "Formiga", + "glimmer_variant.antarchy.elka": "Elka", + "entity.antarchy.glimmer.set_sit": "Glimmer foi colocado para sentar.", + "entity.antarchy.glimmer.set_follow": "Glimmer foi colocado para seguir.", + "entity.antarchy.glimmer.set_wander": "Glimmer foi colocado para vagar.", + "entity.antarchy.glimmer.ability.ant": "Sua formiga incita você contra %s!", + "entity.antarchy.glimmer.ability.apple_cow": "Sua Vaca-Maçã muge e alimenta você!", + "entity.antarchy.glimmer.ability.elka": "Sua Elka grita e estilhaça a guarda!", + "entity.antarchy.glimmer.ability.deer": "Seu Cervo de Ouranwood investe através do inimigo!", + "entity.antarchy.glimmer.ability.frog": "Seu sapo devorou %s!", + "item.antarchy.glimmer_bottle.passive.apple_cow": "Passiva: a fome diminui 25% mais devagar", + "item.antarchy.glimmer_bottle.ability.apple_cow": "Habilidade: muge para conceder uma explosão de Saturação e Regeneração quando sua fome está baixa", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "Passiva: Velocidade I", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "Habilidade: atravessa criaturas hostis ao correr em direção a elas, arremessando-as", + "item.antarchy.glimmer_bottle.passive.frog": "Passiva: Superpulo I", + "item.antarchy.glimmer_bottle.ability.frog": "Habilidade: devora uma criatura hostil próxima, ficando maior e mais forte por um tempo", + "item.antarchy.glimmer_bottle.passive.ant": "Passiva: alcance de ataque levemente maior", + "item.antarchy.glimmer_bottle.ability.ant": "Habilidade: acertar um inimigo grande concede uma explosão de Força II", + "item.antarchy.glimmer_bottle.passive.elka": "Passiva: Guarda de Vidro de Sangue II", + "item.antarchy.glimmer_bottle.ability.elka": "Habilidade: grita e se estilhaça em uma onda de choque quando um de seus corações de guarda se quebra", + "advancements.antarchy.spirant_animal.title": "Espírito de Formiga", + "advancements.antarchy.spirant_animal.description": "Domestique um Glimmer de formiga.", + "advancements.antarchy.hoppy_together.title": "Pulando Juntos", + "advancements.antarchy.hoppy_together.description": "Domestique um Glimmer de sapo.", + "advancements.antarchy.deerly_beloved.title": "Cervo Querido", + "advancements.antarchy.deerly_beloved.description": "Domestique um Glimmer de cervo de Ouranwood.", + "advancements.antarchy.elkcellent_choice.title": "Escolha ELKcelente", + "advancements.antarchy.elkcellent_choice.description": "Domestique um Glimmer de Elka.", + "advancements.antarchy.apple_of_my_eye.title": "A Menina dos Meus Olhos", + "advancements.antarchy.apple_of_my_eye.description": "Domestique um Glimmer de vaca-maçã.", + "item.antarchy.dorrie_spawn_egg": "Ovo Gerador de Dorrie", + "item.antarchy.flying_squirrel_spawn_egg": "Ovo Gerador de Esquilo-voador", + "item.antarchy.caterpillar_spawn_egg": "Ovo Gerador de Lagarta", + "item.antarchy.butterfly_spawn_egg": "Ovo Gerador de Borboleta", + "item.antarchy.brutalfly_spawn_egg": "Ovo Gerador de Brutalfly", + "item.antarchy.cloud_shark_spawn_egg": "Ovo Gerador de Tubarão das Nuvens", + "item.antarchy.kraken_spawn_egg": "Ah, não. Não faça isso.", + "item.antarchy.missile_squid_spawn_egg": "Ovo Gerador de Lula-Míssil", + "item.antarchy.octopus_bomb_spawn_egg": "Ovo Gerador de Bomba-Polvo", + "item.antarchy.nightmare_spawn_egg": "Ovo Gerador de Pesadelo", + "item.antarchy.toreterror_spawn_egg": "Ovo Gerador de Toreterror", + "item.antarchy.water_cannon": "Canhão de Água", + "item.antarchy.primordial_helmet": "Capacete Primordial", + "item.antarchy.primordial_chestplate": "Peitoral Primordial", + "item.antarchy.primordial_leggings": "Calças Primordiais", + "item.antarchy.primordial_boots": "Botas Primordiais", + "item.antarchy.bed_bug_spawn_egg": "Ovo Gerador de Percevejo-de-cama", + "item.antarchy.moleworm_spawn_egg": "Ovo Gerador de Moleworm", + "item.antarchy.molevore_spawn_egg": "Ovo Gerador de Molevore", + "item.antarchy.reverie_spawn_egg": "Ovo Gerador de Reverie", + "item.antarchy.mantis_spawn_egg": "Ovo Gerador de Louva-a-deus", + "item.antarchy.alpha_mantis_spawn_egg": "Ovo Gerador de Louva-a-deus Alfa", + "biome.antarchy.moleworm_caves": "Cavernas de Moleworm", + "biome.antarchy.elythia_meadow": "Prados Elythianos", + "biome.antarchy.butterfly_fields": "Campos de Borboletas", + "biome.antarchy.ouranwood_forest": "Ouranwood Floresta", + "biome.antarchy.glimmering_pools": "Poças Cintilantes", + "biome.antarchy.peach_forest": "Floresta de Pessegueiros", + "biome.antarchy.fungal_ouranwood_forest": "Ouranwood Floresta fúngico", + "biome.antarchy.glowcap_caves": "Cavernas Brilhachapéu", + "message.antarchy.brown_ant_activated": "A formiga marrom está pronta para abrir seu destino.", + "message.antarchy.brown_ant_needs_reagent": "Esta formiga marrom precisa de um reagente antes de abrir seu destino.", + "message.antarchy.rainbow_ant_activated": "A formiga arco-íris vibra com um novo destino do Infinity.", + "message.antarchy.rainbow_ant_activated_inherited": "A formiga arco-íris vibra com um destino herdado do Infinity.", + "message.antarchy.rainbow_ant_activated_inherited_existing": "A formiga arco-íris se reconecta a um destino herdado do Infinity.", + "message.antarchy.rainbow_ant_failed_dimension_create": "Falha ao criar a dimensão. Provavelmente há algo errado na sua configuração do Infinity. Reinicie ou entre novamente e tente de novo.", + "message.antarchy.rainbow_ant_infinity_missing": "O Infinity precisa estar instalado para que as dimensões de formiga arco-íris funcionem.", + "message.antarchy.rainbow_ant_needs_reagent": "Esta formiga arco-íris precisa de um reagente antes de abrir uma dimensão.", + "message.antarchy.red_ant_activated": "A formiga vermelha está pronta para abrir seu destino.", + "message.antarchy.red_ant_needs_reagent": "Esta formiga vermelha precisa de um reagente antes de abrir seu destino.", + "message.antarchy.termite_activated": "O cupim está pronto para abrir seu destino.", + "message.antarchy.termite_needs_reagent": "Este cupim precisa de um reagente antes de abrir seu destino.", + "death.attack.spit_bug_disrespect": "%1$s foi desrespeitado pelo Inseto Cuspidor", + "death.attack.jumpy_bug_jump": "%1$s foi atacado de salto pelo Inseto Saltador", + "death.attack.hercules_beetle_obliteration": "%1$s foi obliterado pelo Besouro-hércules", + "message.antarchy.big_bertha.mode": "Modo da Big Bertha: %s", + "message.antarchy.big_bertha.mode.basilisk": "Basilisco", + "message.antarchy.big_bertha.mode.lucid": "Lucid", + "message.antarchy.big_bertha.mode.nightmare": "Pesadelo", + "message.antarchy.big_bertha.mode.kraken": "Kraken", + "message.antarchy.big_bertha.mode.molevore": "Molevore", + "message.antarchy.big_bertha.mode.toreterror": "Toreterror", + "message.antarchy.ultimate_tool.mode_3x3": "Alternado para Mineração 3x3", + "message.antarchy.ultimate_tool.mode_default": "Alternado para Mineração Padrão", + "advancements.antarchy.hey_listen.title": "Ei, Escute!", + "advancements.antarchy.hey_listen.description": "Uma Reverie se juntou a você.", + "advancements.antarchy.very_hungry_caterpillar.title": "A Lagarta Muito Faminta", + "advancements.antarchy.very_hungry_caterpillar.description": "Ajude uma lagarta a crescer.", + "effect.antarchy.dread": "Pavor", + "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.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.", + "effect.antarchy.shrinking": "Encolhimento", + "effect.antarchy.growth": "Crescimento", + "effect.antarchy.bloodglass_ward": "Guarda de Vidro de Sangue", + "effect.antarchy.bloodglass_ward.description": "Concede corações que se estilhaçam, absorvendo um golpe inteiro de dano. Eles se regeneram com o tempo.", + "death.attack.triffid_mauling": "%1$s foi dilacerado até a morte por uma planta", + "death.attack.triffid_mauling.player": "%1$s foi dilacerado até a morte por uma planta", + "death.attack.triffid_swallow": "%1$s foi engolido por um Triffid", + "death.attack.triffid_swallow.player": "%1$s foi engolido por um Triffid", + "potion.antarchy.haste": "Poção de Pressa", + "potion.antarchy.strong_haste": "Poção Forte de Pressa", + "tooltip.antarchy.big_bertha.mode": "Modo: %s", + "tooltip.antarchy.big_bertha.toggle_mode": "Shift + clique com o botão direito para alternar os modos de chefe.", + "tooltip.antarchy.big_bertha.mode.basilisk": "O clique com o botão direito paralisa um alvo. Golpes causam veneno e lentidão.", + "tooltip.antarchy.big_bertha.mode.lucid": "Golpes invertem alvos por alguns segundos. Você causa mais dano enquanto está invertido.", + "tooltip.antarchy.big_bertha.mode.nightmare": "Jogadores sofrem Pavor; golpes causam Fraqueza.", + "tooltip.antarchy.big_bertha.mode.kraken": "Golpes arremessam alvos para trás e invocam raios.", + "tooltip.antarchy.big_bertha.mode.molevore": "Clique com o botão direito para girar para a frente e perfurar blocos de Molevore.", + "tooltip.antarchy.big_bertha.mode.toreterror": "Clique com o botão direito para se lançar ao ar e cair com uma onda de choque em área.", + "tooltip.antarchy.ultimate_tools_3x3": "Shift + clique com o botão direito para alternar a Mineração 3x3.", + "tooltip.antarchy.moggles.reveal": "Concede Visão Noturna e aponta para cavernas próximas.", + "tooltip.antarchy.moggles.underground": "Funciona apenas quando você não tem acesso ao céu.", + "tooltip.antarchy.cornea_ear.vision": "Concede Visão Noturna por %s segundos.", + "tooltip.antarchy.mob_coming_soon": "Criatura em Breve!", + "tooltip.antarchy.gravity_gun.primary": "Clique esquerdo: repele entidades próximas ou arremessa o alvo segurado.", + "tooltip.antarchy.gravity_gun.secondary": "Clique direito: puxa uma entidade ou um bloco válido.", + "tooltip.antarchy.gravity_gun.scroll": "Segure Ctrl e role para aproximar ou afastar o alvo segurado.", + "tooltip.antarchy.gravity_gun.blacklist": "Não afeta blocos ou entidades da lista de bloqueio.", + "tooltip.antarchy.antimetal_inversion": "Inverte entidades diretamente abaixo", + "tooltip.antarchy.diamond_minecart.forward": "Será implementado depois.", + "tooltip.antarchy.diamond_minecart.rails": " ", + "tooltip.antarchy.rainbow_sugar": "Ativa as Dimensões de Formiga Arco-íris. Coma dentro de uma para voltar para casa.", + "advancements.antarchy.visit_elythia.title": "InterdimenFORMIGAsional", + "advancements.antarchy.visit_elythia.description": "Use uma formiga marrom para chegar a Elythia.", + "advancements.antarchy.visit_thoraxis.title": "Controle de Formig-ra", + "advancements.antarchy.visit_thoraxis.description": "Use uma formiga vermelha para chegar a Thoraxis.", + "advancements.antarchy.fallen_kingdom_castle.title": "Eu Costumava Governar o Mundo...", + "advancements.antarchy.fallen_kingdom_castle.description": "Descubra o Castelo do Reino Caído.", + "advancements.antarchy.fallen_king_crown.title": "Chunks carregavam quando eu ordenava...", + "advancements.antarchy.fallen_king_crown.description": "Obtenha a Coroa do Rei Caído.", + "advancements.antarchy.the_lab.title": "Olá a Todos, Dan Aqui!", + "advancements.antarchy.the_lab.description": "Descubra o laboratório do Dr. Trayaurus.", + "advancements.antarchy.sweater_dreams.title": "Sonhos de Suéter", + "advancements.antarchy.sweater_dreams.description": "Derrote o Pesadelo.", + "advancements.antarchy.stone_cold.title": "Frio como Pedra", + "advancements.antarchy.stone_cold.description": "Derrote um basilisco.", + "advancements.antarchy.moley_poley.title": "Toupeira Redondinha", + "advancements.antarchy.moley_poley.description": "Derrote um Molevore.", + "advancements.antarchy.lucid_dreams.title": "Sonhos Lúcidos", + "advancements.antarchy.lucid_dreams.description": "Derrote um Lucid.", + "advancements.antarchy.davy_jones_locker.title": "Baú de Davy Jones", + "advancements.antarchy.davy_jones_locker.description": "Derrote o Kraken.", + "advancements.antarchy.shark_weak.title": "Quando Tubarões Voarem", + "advancements.antarchy.shark_weak.description": "Derrote um tubarão das nuvens.", + "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "Não Deixe os Percevejos Morderem", + "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "Derrote um percevejo-de-cama.", + "advancements.antarchy.soups_up.title": "Sopa Pronta", + "advancements.antarchy.soups_up.description": "Coma sopa de barbatana de tubarão das nuvens.", + "advancements.antarchy.in_the_upside_down.title": "No Mundo Invertido", + "advancements.antarchy.in_the_upside_down.description": "Fique invertido pela primeira vez.", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "Quem Sentiu, Foi Quem Soltou", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "Fique fedido pela primeira vez.", + "advancements.antarchy.ultimate_armor.title": "Proteção Suprema", + "advancements.antarchy.ultimate_armor.description": "Reúna o conjunto completo da Armadura Suprema.", + "advancements.antarchy.ultimate_bow.title": "Rapsódia do Arco", + "advancements.antarchy.ultimate_bow.description": "Obtenha um arco supremo.", + "advancements.antarchy.brutalfly.title": "Flutue como uma Brutalfly, Pique como uma Abelha", + "advancements.antarchy.brutalfly.description": "Obtenha élitros de Brutalfly.", + "advancements.antarchy.now_watch_me_whip.title": "Agora Me Veja Chicoteando", + "advancements.antarchy.now_watch_me_whip.description": "Agora me veja fazer nae nae", + "advancements.antarchy.kill_molevore.title": "Toupeira Redondinha", + "advancements.antarchy.kill_molevore.description": "Mate um Molevore.", + "advancements.antarchy.water_cannon_craft.title": "Mais Molhado é Melhor!", + "advancements.antarchy.water_cannon_craft.description": "Obtenha um canhão de água.", + "advancements.antarchy.kill_toreterror.title": "Mais Parece Tore-Mira Terrível!", + "advancements.antarchy.kill_toreterror.description": "Derrote o Toreterror.", + "advancements.antarchy.challenge_games.title": "Jogos de Desafio!", + "advancements.antarchy.challenge_games.description": "Entre na Arena em Ruínas.", + "advancements.antarchy.bugged_out.title": "Bugado", + "advancements.antarchy.bugged_out.description": "Derrote o louva-a-deus alfa.", + "death.attack.bed_bug_bite": "%1$s foi mordido pelos percevejos-de-cama", + "death.attack.bed_bug_bite.player": "%1$s foi mordido pelos percevejos-de-cama enquanto lutava contra %2$s", + "message.antarchy.dread_too_scared_to_sleep": "Você está com medo demais para dormir.", + "death.attack.kraken_mauling": "%1$s foi arrastado para as profundezas pelo Kraken", + "death.attack.kraken_mauling.player": "%1$s foi arrastado para as profundezas pelo Kraken enquanto lutava contra %2$s", + "death.attack.kraken_lightning": "%1$s foi fulminado pela tempestade do Kraken", + "death.attack.kraken_lightning.player": "%1$s foi fulminado pela tempestade do Kraken enquanto lutava contra %2$s", + "death.attack.rpo_launcher_blast": "%1$s foi nocauteado por um P.M.F.", + "death.attack.rpo_launcher_blast.player": "%1$s foi nocauteado por um P.M.F. enquanto lutava contra %2$s", + "death.attack.nightmare_mauling": "%1$s foi devorado pelo Pesadelo", + "death.attack.nightmare_mauling.player": "%1$s foi devorado pelo Pesadelo enquanto lutava contra %2$s", + "death.attack.basilisk_bite": "%1$s foi engolido por um Basilisco", + "death.attack.basilisk_bite.player": "%1$s foi engolido por um Basilisco enquanto lutava contra %2$s", + "death.attack.emperor_scorpion_sting": "%1$s foi picado pelo Escorpião-imperador", + "death.attack.emperor_scorpion_sting.player": "%1$s foi picado pelo Escorpião-imperador enquanto lutava contra %2$s", + "death.attack.cornea_stalk_prick": "%1$s foi perfurado até a morte por um Caule de Cornea", + "death.attack.toreterror_spin": "%1$s foi girado até a morte por Toreterror", + "death.attack.toreterror_spin.player": "%1$s foi girado até a morte por Toreterror", + "death.attack.toreterror_jump": "%1$s foi esmagado até a morte por Toreterror", + "death.attack.toreterror_jump.player": "%1$s foi esmagado até a morte por Toreterror", + "death.attack.water_soaked": "%1$s foi encharcado até a morte por %2$s", + "death.attack.water_soaked.player": "%1$s foi encharcado até a morte por %2$s", + "entity.antarchy.lucid": "Lucid", + "item.antarchy.lucid_spawn_egg": "Ovo Gerador de Lucid", + "item.antarchy.lucid_eye": "Olho de Lucid", + "entity.antarchy.scorpion": "Escorpião", + "item.antarchy.scorpion_spawn_egg": "Ovo Gerador de Escorpião", + "entity.antarchy.basilisk": "Basilisco", + "item.antarchy.basilisk_spawn_egg": "Ovo Gerador de Basilisco", + "entity.antarchy.emperor_scorpion": "Escorpião-imperador", + "item.antarchy.emperor_scorpion_spawn_egg": "Ovo Gerador de Escorpião-imperador", + "item.antarchy.emperor_scorpion_stinger": "Ferrão de Escorpião-imperador", + "item.antarchy.lucid_pearl": "Pérola de Lucid", + "tooltip.antarchy.lucid_pearl": "Arremessa um projétil de gravidade invertida.", + "tooltip.antarchy.lucid_pearl.detail": "Teleporta você para onde ele cair e aplica Invertido.", + "subtitles.antarchy.squidzooka_fire": "Squidzooka dispara", + "subtitles.antarchy.shrink_ray": "Raio Encolhedor dispara", + "subtitles.antarchy.growth_ray": "Raio de Crescimento dispara", + "subtitles.antarchy.size_ray_charge": "Raio de Tamanho carrega", + "subtitles.antarchy.ant_ambient": "Formigas chilreiam", + "subtitles.antarchy.ant_idle": "Formigas fazem barulho", + "subtitles.antarchy.ant_hurt": "Formigas se machucam", + "subtitles.antarchy.ant_bite": "Formigas mordem", + "subtitles.antarchy.ant_gather": "Formigas coletam", + "subtitles.antarchy.ant_nest": "Ninho de formigas farfalha", + "subtitles.antarchy.cloud_shark_bite": "Tubarão das Nuvens morde", + "subtitles.antarchy.cloud_shark_idle": "Tubarão das Nuvens faz barulho", + "subtitles.antarchy.cloud_shark_hurt": "Tubarão das Nuvens se machuca", + "subtitles.antarchy.cloud_shark_death": "Tubarão das Nuvens morre", + "subtitles.antarchy.cloud_shark_fly": "Tubarão das Nuvens voa", + "subtitles.antarchy.caterpillar_idle": "Lagarta faz barulho", + "subtitles.antarchy.caterpillar_hurt": "Lagarta se machuca", + "subtitles.antarchy.caterpillar_crawl": "Lagarta rasteja", + "subtitles.antarchy.butterfly_hurt": "Borboleta se machuca", + "subtitles.antarchy.brutalfly_idle": "Brutalfly faz barulho", + "subtitles.antarchy.brutalfly_death": "Brutalfly morre", + "subtitles.antarchy.thoraxis_nightmare_wastes_ambient": "Ermos do Pesadelo zune", + "subtitles.antarchy.thoraxis_nightmare_wastes_additions": "Ermos do Pesadelo se agita", + "subtitles.antarchy.thoraxis_nightmare_wastes_mood": "Ermos do Pesadelo murmura", + "subtitles.antarchy.thoraxis_dream_dunes_ambient": "Dunas dos Sonhos sussurram", + "subtitles.antarchy.thoraxis_dream_dunes_additions": "Dunas dos Sonhos farfalham", + "subtitles.antarchy.thoraxis_dream_dunes_mood": "Dunas dos Sonhos suspiram", + "subtitles.antarchy.thoraxis_lucid_pools_ambient": "Poças Lúcidas zunem", + "subtitles.antarchy.thoraxis_lucid_pools_additions": "Poças Lúcidas amaldiçoam", + "subtitles.antarchy.thoraxis_lucid_pools_mood": "Poças Lúcidas murmuram", + "subtitles.antarchy.lucid_ambient": "Lucid zune", + "subtitles.antarchy.lucid_flying": "Lucid esvoaça", + "subtitles.antarchy.lucid_attack": "Lucid ataca", + "subtitles.antarchy.lucid_bolt": "Lucid dispara um projétil", + "subtitles.antarchy.lucid_hurt": "Lucid se machuca", + "subtitles.antarchy.lucid_death": "Lucid morre", + "subtitles.antarchy.reverie_idle": "Reverie flutua", + "subtitles.antarchy.reverie_hurt": "Reverie se machuca", + "subtitles.antarchy.reverie_worry": "Reverie se preocupa", + "subtitles.antarchy.reverie_save": "Reverie salva você", + "subtitles.antarchy.reverie_join_player": "Reverie se junta a você", + "subtitles.antarchy.reverie_alert": "Reverie alerta você", + "subtitles.antarchy.flying_squirrel_idle": "Esquilo-voador chilreia", + "subtitles.antarchy.flying_squirrel_beg": "Esquilo-voador implora por comida", + "subtitles.antarchy.flying_squirrel_nut": "Esquilo-voador come", + "subtitles.antarchy.flying_squirrel_glide_loop": "Esquilo-voador plana", + "subtitles.antarchy.flying_squirrel_hurt": "Esquilo-voador se machuca", + "subtitles.antarchy.flying_squirrel_death": "Esquilo-voador morre", + "subtitles.antarchy.nightmare_idle": "Pesadelo rosna", + "subtitles.antarchy.nightmare_hurt": "Pesadelo se machuca", + "subtitles.antarchy.nightmare_roar": "Pesadelo ruge", + "subtitles.antarchy.nightmare_death": "Pesadelo morre", + "subtitles.antarchy.nightmare_bite": "Pesadelo morde", + "subtitles.antarchy.nightmare_flap": "Pesadelo bate as asas", + "subtitles.antarchy.triffid_attack": "Triffid ataca", + "subtitles.antarchy.triffid_grab": "Triffid agarra", + "subtitles.antarchy.triffid_hurt": "Triffid se machuca", + "subtitles.antarchy.triffid_death": "Triffid morre", + "subtitles.antarchy.triffid_hiss": "Triffid sibila", + "subtitles.antarchy.triffid_growl": "Triffid rosna", + "subtitles.antarchy.gravity_gun_pickup": "Arma Gravitacional pega", + "subtitles.antarchy.gravity_gun_drop": "Arma Gravitacional solta", + "subtitles.antarchy.gravity_gun_hold_loop": "Arma Gravitacional zune", + "subtitles.antarchy.gravity_gun_launch": "Arma Gravitacional lança", + "subtitles.antarchy.gravity_gun_dryfire": "Arma Gravitacional dispara em seco", + "subtitles.antarchy.bed_bug_ambient": "Percevejo-de-cama chilreia", + "subtitles.antarchy.bed_bug_hurt": "Percevejo-de-cama se machuca", + "subtitles.antarchy.bed_bug_attack": "Percevejo-de-cama morde", + "subtitles.antarchy.wasp_idle": "Vespa zune", + "subtitles.antarchy.wasp_hurt": "Vespa se machuca", + "subtitles.antarchy.wasp_attack": "Vespa ferroa", + "subtitles.antarchy.wasp_death": "Vespa morre", + "subtitles.antarchy.scorpion_ambient": "Escorpião chacoalha", + "subtitles.antarchy.scorpion_hurt": "Escorpião se machuca", + "subtitles.antarchy.scorpion_attack": "Escorpião ataca", + "subtitles.antarchy.emperor_scorpion_ambient": "Escorpião-imperador chacoalha", + "subtitles.antarchy.emperor_scorpion_hurt": "Escorpião-imperador se machuca", + "subtitles.antarchy.emperor_scorpion_attack": "Escorpião-imperador ataca", + "subtitles.antarchy.emperor_scorpion_roar": "Escorpião-imperador ruge", + "subtitles.antarchy.moleworm_ambient": "Moleworm farfalha", + "subtitles.antarchy.moleworm_hurt": "Moleworm se machuca", + "subtitles.antarchy.moleworm_attack": "Moleworm ataca", + "subtitles.antarchy.moleworm_dig": "Moleworm escava", + "subtitles.antarchy.molevore_ambient": "Molevore retumba", + "subtitles.antarchy.molevore_hurt": "Molevore se machuca", + "subtitles.antarchy.molevore_attack": "Molevore ataca", + "subtitles.antarchy.molevore_dig": "Molevore escava", + "subtitles.antarchy.duct_tape_use": "Fita Adesiva rasga", + "subtitles.antarchy.potent_nyxite_hypnotic_gas": "Nyxite potente sibila", + "subtitles.antarchy.potent_nyxite_geyser_eruption": "Nyxite potente entra em erupção", + "subtitles.antarchy.potent_nyxite_geyser_continuous": "Nyxite potente o gêiser ruge", + "subtitles.antarchy.missile_squid_ambient": "Lula-Míssil zune", + "subtitles.antarchy.missile_squid_hurt": "Lula-Míssil se machuca", + "subtitles.antarchy.missile_squid_death": "Lula-Míssil morre", + "subtitles.antarchy.missile_squid_attack": "Lula-Míssil ataca", + "subtitles.antarchy.kraken_flying_loop": "Kraken plana", + "subtitles.antarchy.kraken_flying_sideways_loop": "Kraken circula", + "subtitles.antarchy.kraken_attack": "Kraken golpeia", + "subtitles.antarchy.kraken_spin": "Kraken gira", + "subtitles.antarchy.kraken_roar": "Kraken ruge", + "subtitles.antarchy.kraken_summon": "Kraken emerge", + "subtitles.antarchy.kraken_hurt": "Kraken se machuca", + "subtitles.antarchy.kraken_death": "Kraken morre", + "subtitles.antarchy.basilisk_idle_loop": "Basilisco faz barulho", + "subtitles.antarchy.basilisk_slither_loop": "Basilisco rasteja", + "subtitles.antarchy.basilisk_bite": "Basilisco morde", + "subtitles.antarchy.basilisk_hiss": "Basilisco sibila", + "subtitles.antarchy.basilisk_hurt": "Basilisco se machuca", + "subtitles.antarchy.basilisk_death": "Basilisco morre", + "subtitles.antarchy.bomber_walk": "Bombardeiro anda", + "subtitles.antarchy.bomber_knock": "Bombardeiro é atingido", + "subtitles.antarchy.bomber_explode": "Bombardeiro o pavio sibila", + "subtitles.antarchy.toreterror_idle": "Toreterror faz barulho", + "subtitles.antarchy.toreterror_hurt": "Toreterror se machuca", + "subtitles.antarchy.toreterror_death": "Toreterror morre", + "subtitles.antarchy.toreterror_bomber_fire": "Toreterror lança bombardeiros", + "subtitles.antarchy.toreterror_spin": "Toreterror gira", + "subtitles.antarchy.toreterror_ricochet": "Toreterror ricocheteia", + "subtitles.antarchy.water_cannon_fire": "Canhão de Água dispara", + "subtitles.antarchy.toreterror_jump_up": "Toreterror salta", + "subtitles.antarchy.toreterror_jump_land": "Toreterror pousa", + "subtitles.antarchy.stinky_fly": "Moscas fedidas zumbem", + "item.minecraft.potion.effect.inversion": "Poção de Inversão", + "item.minecraft.potion.effect.long_inversion": "Poção de Inversão", + "item.minecraft.splash_potion.effect.inversion": "Poção Arremessável de Inversão", + "item.minecraft.splash_potion.effect.long_inversion": "Poção Arremessável de Inversão", + "item.minecraft.lingering_potion.effect.inversion": "Poção Prolongada de Inversão", + "item.minecraft.lingering_potion.effect.long_inversion": "Poção Prolongada de Inversão", + "item.minecraft.tipped_arrow.effect.inversion": "Flecha de Inversão", + "item.minecraft.tipped_arrow.effect.long_inversion": "Flecha de Inversão", + "item.minecraft.potion.effect.paralysis": "Poção de Paralisia", + "item.minecraft.potion.effect.long_paralysis": "Poção de Paralisia", + "item.minecraft.splash_potion.effect.paralysis": "Poção Arremessável de Paralisia", + "item.minecraft.splash_potion.effect.long_paralysis": "Poção Arremessável de Paralisia", + "item.minecraft.lingering_potion.effect.paralysis": "Poção Prolongada de Paralisia", + "item.minecraft.lingering_potion.effect.long_paralysis": "Poção Prolongada de Paralisia", + "item.minecraft.tipped_arrow.effect.paralysis": "Flecha de Paralisia", + "item.minecraft.tipped_arrow.effect.long_paralysis": "Flecha de Paralisia", + "item.minecraft.potion.effect.shrinking": "Poção de Encolhimento", + "item.minecraft.potion.effect.strong_shrinking": "Poção de Encolhimento II", + "item.minecraft.potion.effect.extreme_shrinking": "Poção de Encolhimento III", + "item.minecraft.splash_potion.effect.shrinking": "Poção Arremessável de Encolhimento", + "item.minecraft.splash_potion.effect.strong_shrinking": "Poção Arremessável de Encolhimento II", + "item.minecraft.splash_potion.effect.extreme_shrinking": "Poção Arremessável de Encolhimento III", + "item.minecraft.lingering_potion.effect.shrinking": "Poção Prolongada de Encolhimento", + "item.minecraft.lingering_potion.effect.strong_shrinking": "Poção Prolongada de Encolhimento II", + "item.minecraft.lingering_potion.effect.extreme_shrinking": "Poção Prolongada de Encolhimento III", + "item.minecraft.tipped_arrow.effect.shrinking": "Flecha de Encolhimento", + "item.minecraft.tipped_arrow.effect.strong_shrinking": "Flecha de Encolhimento II", + "item.minecraft.tipped_arrow.effect.extreme_shrinking": "Flecha de Encolhimento III", + "item.minecraft.potion.effect.growing": "Poção de Crescimento", + "item.minecraft.potion.effect.strong_growing": "Poção de Crescimento II", + "item.minecraft.potion.effect.extreme_growing": "Poção de Crescimento III", + "item.minecraft.splash_potion.effect.growing": "Poção Arremessável de Crescimento", + "item.minecraft.splash_potion.effect.strong_growing": "Poção Arremessável de Crescimento II", + "item.minecraft.splash_potion.effect.extreme_growing": "Poção Arremessável de Crescimento III", + "item.minecraft.lingering_potion.effect.growing": "Poção Prolongada de Crescimento", + "item.minecraft.lingering_potion.effect.strong_growing": "Poção Prolongada de Crescimento II", + "item.minecraft.lingering_potion.effect.extreme_growing": "Poção Prolongada de Crescimento III", + "item.minecraft.tipped_arrow.effect.growing": "Flecha de Crescimento", + "item.minecraft.tipped_arrow.effect.strong_growing": "Flecha de Crescimento II", + "item.minecraft.tipped_arrow.effect.extreme_growing": "Flecha de Crescimento III", + "item.minecraft.potion.effect.dread": "Poção de Pavor", + "item.minecraft.potion.effect.long_dread": "Poção de Pavor", + "item.minecraft.splash_potion.effect.dread": "Poção Arremessável de Pavor", + "item.minecraft.splash_potion.effect.long_dread": "Poção Arremessável de Pavor", + "item.minecraft.lingering_potion.effect.dread": "Poção Prolongada de Pavor", + "item.minecraft.lingering_potion.effect.long_dread": "Poção Prolongada de Pavor", + "item.minecraft.tipped_arrow.effect.dread": "Flecha de Pavor", + "item.minecraft.tipped_arrow.effect.long_dread": "Flecha de Pavor", + "item.minecraft.potion.effect.stinky": "Poção de Fedor", + "item.minecraft.potion.effect.long_stinky": "Poção de Fedor", + "item.minecraft.splash_potion.effect.stinky": "Poção Arremessável de Fedor", + "item.minecraft.splash_potion.effect.long_stinky": "Poção Arremessável de Fedor", + "item.minecraft.lingering_potion.effect.stinky": "Poção Prolongada de Fedor", + "item.minecraft.lingering_potion.effect.long_stinky": "Poção Prolongada de Fedor", + "item.minecraft.tipped_arrow.effect.stinky": "Flecha de Fedor", + "item.minecraft.tipped_arrow.effect.long_stinky": "Flecha de Fedor", + "item.minecraft.potion.effect.haste": "Poção de Pressa", + "item.minecraft.potion.effect.strong_haste": "Poção de Pressa II", + "item.minecraft.splash_potion.effect.haste": "Poção Arremessável de Pressa", + "item.minecraft.splash_potion.effect.strong_haste": "Poção Arremessável de Pressa II", + "item.minecraft.lingering_potion.effect.haste": "Poção Prolongada de Pressa", + "item.minecraft.lingering_potion.effect.strong_haste": "Poção Prolongada de Pressa II", + "item.minecraft.tipped_arrow.effect.haste": "Flecha de Pressa", + "item.minecraft.tipped_arrow.effect.strong_haste": "Flecha de Pressa II", + "advancements.antarchy.cancel_out.title": "1 - 1 = ?", + "advancements.antarchy.cancel_out.description": "Tenha Crescimento e Encolhimento ativos ao mesmo tempo.", + "entity.antarchy.cheep": "Cheep", + "item.antarchy.cheep": "Cheep", + "item.antarchy.cheep_spawn_egg": "Ovo Gerador de Cheep", + "entity.antarchy.reverie": "Reverie", + "biome.antarchy.thoraxis": "Thoraxis", + "biome.antarchy.nightmare_wastes": "Ermos do Pesadelo", + "biome.antarchy.umbral_hills": "Colinas Umbrais", + "biome.antarchy.lucid_pools": "Poças Lúcidas", + "biome.antarchy.dream_dunes": "Dunas dos Sonhos", + "block.antarchy.wild_corn": "Milho silvestre", + "trim_material.antarchy.blood_crystal": "Cristal de Sangue", + "trim_material.antarchy.nightmare_scale": "Escama de Pesadelo", + "trim_material.antarchy.uranium": "Urânio", + "trim_material.antarchy.titanium": "Titânio", + "advancements.antarchy.duct_tape.title": "Eu Serrei Este Barco ao Meio!", + "advancements.antarchy.duct_tape.description": "e Consertei com o Poder da Fita Adesiva!", + "key.categories.antarchy": "Antarchy", + "key.antarchy.brutalfly_flap": "Élitros de Brutalfly: Bater Asas", + "advancements.antarchy.shrink_ray_craft.title": "Querida, Encolhi as Criaturas", + "advancements.antarchy.shrink_ray_craft.description": "Fabrique um raio encolhedor.", + "advancements.antarchy.growth_ray_craft.title": "Cresça ou Vá para Casa", + "advancements.antarchy.growth_ray_craft.description": "Fabrique um raio de crescimento.", + "advancements.antarchy.squidzooka_craft.title": "Tinta e Destruição", + "advancements.antarchy.squidzooka_craft.description": "Fabrique uma Squidzooka.", + "advancements.antarchy.rocket_powered_octopus.title": "Polvo movido a foguete", + "advancements.antarchy.rocket_powered_octopus.description": "Fabrique um lançador P.M.F.", + "advancements.antarchy.gravity_gun_craft.title": "Artista da Pegada", + "advancements.antarchy.gravity_gun_craft.description": "Fabrique uma arma gravitacional.", + "block.antarchy.cavaryn_portal": "Portal de Cavaryn", + "block.antarchy.termite_nest": "Ninho de Cupim", + "block.antarchy.chitin_spike": "Espinho de Quitina", + "block.antarchy.chitin_block": "Bloco de Quitina", + "block.antarchy.myrmite": "Myrmite", + "block.antarchy.broodstone": "Broodstone", + "block.antarchy.amber_moss_block": "Bloco de Musgo Âmbar", + "block.antarchy.amber_moss_carpet": "Tapete de Musgo Âmbar", + "block.antarchy.amber_lichen": "Líquen Âmbar", + "block.antarchy.bile_vein": "Veio de Bile", + "block.antarchy.creepvine": "Trepadeira Rastejante", + "block.antarchy.creeping_horror_egg": "Ovo de Horror Rastejante", + "block.antarchy.lurking_terror_egg": "Ovo de Terror à Espreita", + "entity.antarchy.termite": "Cupim", + "entity.antarchy.jumpy_bug": "Inseto Saltador", + "entity.antarchy.spit_bug": "Inseto Cuspidor", + "entity.antarchy.stink_bug": "Percevejo-fedorento", + "entity.antarchy.rolly_polly": "Tatuzinho-de-jardim", + "entity.antarchy.creeping_horror": "Horror Rastejante", + "entity.antarchy.lurking_terror": "Terror à Espreita", + "entity.antarchy.hercules_beetle": "Besouro-hércules", + "item.antarchy.jumpy_bug_spawn_egg": "Ovo Gerador de Inseto Saltador", + "item.antarchy.spit_bug_spawn_egg": "Ovo Gerador de Inseto Cuspidor", + "item.antarchy.stink_bug_spawn_egg": "Ovo Gerador de Percevejo-fedorento", + "item.antarchy.termite_spawn_egg": "Ovo Gerador de Cupim", + "item.antarchy.rolly_polly_spawn_egg": "Ovo Gerador de Tatuzinho-de-jardim", + "item.antarchy.creeping_horror_spawn_egg": "Ovo Gerador de Horror Rastejante", + "item.antarchy.lurking_terror_spawn_egg": "Ovo Gerador de Terror à Espreita", + "item.antarchy.hercules_beetle_spawn_egg": "Ovo Gerador de Besouro-hércules", + "item.antarchy.chitin": "Quitina", + "block.antarchy.polished_broodstone": "Broodstone polido", + "block.antarchy.chiseled_broodstone": "Broodstone talhado", + "block.antarchy.broodstone_bricks": "Tijolos de Broodstone", + "block.antarchy.broodstone_stairs": "Escadas de Broodstone", + "block.antarchy.broodstone_slab": "Laje de Broodstone", + "block.antarchy.broodstone_wall": "Muro de Broodstone", + "block.antarchy.polished_broodstone_stairs": "Escadas de Broodstone polido", + "block.antarchy.polished_broodstone_slab": "Laje de Broodstone polido", + "block.antarchy.polished_broodstone_wall": "Muro de Broodstone polido", + "block.antarchy.broodstone_brick_stairs": "Escadas de Tijolos de Broodstone", + "block.antarchy.broodstone_brick_slab": "Laje de Tijolos de Broodstone", + "block.antarchy.broodstone_brick_wall": "Muro de Tijolos de Broodstone", + "block.antarchy.myrmite_coal_ore": "Minério de carvão de Myrmite", + "block.antarchy.broodstone_uranium_ore": "Minério de Broodstone Urânio", + "block.antarchy.broodstone_titanium_ore": "Minério de Broodstone Titânio", + "item.antarchy.raw_bug_meat": "Carne de Inseto Crua", + "item.antarchy.cooked_bug_meat": "Carne de Inseto Assada", + "item.antarchy.hercules_horn": "Chifre de Hércules", + "block.antarchy.hanging_creeproots": "Raízes Rastejantes Suspensas", + "block.antarchy.glowcap_mushroom": "Cogumelo Brilhachapéu", + "block.antarchy.potted_glowcap_mushroom": "Cogumelo Brilhachapéu no Vaso", + "block.antarchy.glowcap_mushroom_block": "Bloco de Cogumelo Brilhachapéu", + "block.antarchy.molting_vines": "Trepadeiras de Muda", + "item.antarchy.broodfruit": "Fruto da Ninhada", + "block.antarchy.jumpy_bug_egg": "Ovo de Inseto Saltador", + "subtitles.antarchy.creeping_horror_growl": "Horror Rastejante rosna", + "subtitles.antarchy.creeping_horror_hurt": "Horror Rastejante se machuca", + "subtitles.antarchy.creeping_horror_bite": "Horror Rastejante morde", + "subtitles.antarchy.lurking_terror_snarl": "Terror à Espreita rosna", + "subtitles.antarchy.lurking_terror_hurt": "Terror à Espreita se machuca", + "subtitles.antarchy.lurking_terror_bite": "Terror à Espreita morde", + "subtitles.antarchy.lurking_terror_fly_loop": "Terror à Espreita voa", + "subtitles.antarchy.stink_bug_fart": "Percevejo-fedorento solta pum", + "subtitles.antarchy.stink_bug_idle": "Percevejo-fedorento faz barulho", + "subtitles.antarchy.rolly_polly_idle": "Tatuzinho-de-jardim faz barulho", + "subtitles.antarchy.rolly_polly_wheel_mode": "Tatuzinho-de-jardim se enrola", + "subtitles.antarchy.rolly_polly_normal_mode": "Tatuzinho-de-jardim se desenrola", + "subtitles.antarchy.rolly_polly_roll": "Tatuzinho-de-jardim rola", + "subtitles.antarchy.hercules_beetle_idle": "Besouro-hércules faz barulho", + "subtitles.antarchy.hercules_beetle_hurt": "Besouro-hércules se machuca", + "subtitles.antarchy.hercules_beetle_attack": "Besouro-hércules ataca", + "subtitles.antarchy.hercules_beetle_cry": "Besouro-hércules ruge", + "subtitles.antarchy.hercules_beetle_charge_start": "Besouro-hércules carrega um ataque", + "subtitles.antarchy.hercules_beetle_knocked_down": "Besouro-hércules é derrubado", + "subtitles.antarchy.jerry_idle": "Jerry tagarela", + "subtitles.antarchy.jerry_hurt": "Jerry se machuca", + "subtitles.antarchy.jerry_death": "Jerry morre", + "subtitles.antarchy.jerry_attack": "Jerry ataca", + "subtitles.antarchy.jumpy_bug_idle": "Inseto Saltador faz barulho", + "subtitles.antarchy.spit_bug_idle": "Inseto Cuspidor faz barulho", + "subtitles.antarchy.jumpy_bug_hurt": "Inseto Saltador se machuca", + "subtitles.antarchy.jumpy_bug_jump": "Inseto Saltador salta", + "subtitles.antarchy.spit_bug_hurt": "Inseto Cuspidor se machuca", + "subtitles.antarchy.spit_bug_spit": "Inseto Cuspidor cospe", + "subtitles.antarchy.brutalfly_spit": "Brutalfly cospe", + "advancements.antarchy.bug_apetit.title": "Bom Apetite de Inseto", + "advancements.antarchy.bug_apetit.description": "Coma carne de inseto assada.", + "advancements.antarchy.behavioral_correction.title": "Correção Comportamental", + "advancements.antarchy.behavioral_correction.description": "Obtenha um Ajustador de Atitude.", + "advancements.antarchy.beetle_buddies.title": "Amigos Besouros", + "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." +} 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 new file mode 100644 index 00000000..06b5d4fe --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/ru_ru.json @@ -0,0 +1,840 @@ +{ + "block.antarchy.duplicator_log": "Бревно-дупликатор", + "block.antarchy.ouranwood_log": "Оурановое бревно", + "block.antarchy.ouranwood_wood": "Оурановое дерево", + "block.antarchy.mossy_ouranwood_log": "Замшелое оурановое бревно", + "block.antarchy.mossy_ouranwood_wood": "Замшелое оурановое дерево", + "block.antarchy.stripped_ouranwood_log": "Обтёсанное оурановое бревно", + "block.antarchy.stripped_ouranwood_wood": "Обтёсанное оурановое дерево", + "block.antarchy.ouranwood_planks": "Оурановые доски", + "block.antarchy.ouranwood_stairs": "Оурановые ступени", + "block.antarchy.ouranwood_slab": "Оурановая плита", + "block.antarchy.ouranwood_fence": "Оурановый забор", + "block.antarchy.ouranwood_fence_gate": "Оурановая калитка", + "block.antarchy.ouranwood_door": "Оурановая дверь", + "block.antarchy.ouranwood_trapdoor": "Оурановый люк", + "block.antarchy.ouranwood_pressure_plate": "Оурановая нажимная плита", + "block.antarchy.ouranwood_button": "Оурановая кнопка", + "block.antarchy.ouranwood_leaves": "Листья оуранового дерева", + "block.antarchy.ouranwood_acorn": "Оурановый жёлудь", + "block.antarchy.ouranwood_sign": "Оурановая табличка", + "block.antarchy.ouranwood_hanging_sign": "Оурановая подвесная табличка", + "block.antarchy.peach_log": "Персиковое бревно", + "block.antarchy.peach_wood": "Персиковое дерево", + "block.antarchy.stripped_peach_log": "Обтёсанное персиковое бревно", + "block.antarchy.stripped_peach_wood": "Обтёсанное персиковое дерево", + "block.antarchy.peach_planks": "Персиковые доски", + "block.antarchy.peach_stairs": "Персиковые ступени", + "block.antarchy.peach_slab": "Персиковая плита", + "block.antarchy.peach_fence": "Персиковый забор", + "block.antarchy.peach_fence_gate": "Персиковая калитка", + "block.antarchy.peach_door": "Персиковая дверь", + "block.antarchy.peach_trapdoor": "Персиковый люк", + "block.antarchy.peach_pressure_plate": "Персиковая нажимная плита", + "block.antarchy.peach_button": "Персиковая кнопка", + "block.antarchy.peach_leaves": "Листья персикового дерева", + "block.antarchy.hanging_peach": "Висячий персик", + "block.antarchy.peach_sapling": "Саженец персикового дерева", + "block.antarchy.peach_sign": "Персиковая табличка", + "block.antarchy.peach_hanging_sign": "Персиковая подвесная табличка", + "block.antarchy.orange_milkweed": "Оранжевый ваточник", + "block.antarchy.pink_milkweed": "Розовый ваточник", + "block.antarchy.camellia": "Камелия", + "block.antarchy.spider_lily": "Паучья лилия", + "block.antarchy.hushweed": "Тишь-трава", + "block.antarchy.umbral_moss_block": "Блок теневого мха", + "block.antarchy.umbral_moss_carpet": "Ковёр из теневого мха", + "block.antarchy.blush_moss_block": "Блок румяного мха", + "block.antarchy.blush_moss_carpet": "Ковёр из румяного мха", + "block.antarchy.duplicator_sapling": "Саженец дупликатора", + "block.antarchy.duct_tape": "Клейкая лента", + "block.antarchy.infested_rooted_dirt": "Заражённая корнями земля", + "block.antarchy.infested_coarse_dirt": "Заражённая каменистая земля", + "block.antarchy.nyxite": "Никсит", + "block.antarchy.polished_nyxite": "Полированный никсит", + "block.antarchy.chiseled_nyxite": "Резной никсит", + "block.antarchy.nyxite_bricks": "Никситовые кирпичи", + "block.antarchy.shellstone": "Ракушечник", + "block.antarchy.polished_shellstone": "Полированный ракушечник", + "block.antarchy.shellstone_bricks": "Кирпичи из ракушечника", + "block.antarchy.chiseled_shellstone": "Резной ракушечник", + "block.antarchy.mossy_shellstone_bricks": "Замшелые кирпичи из ракушечника", + "block.antarchy.mossy_shellstone_brick_stairs": "Ступени из замшелого ракушечника", + "block.antarchy.mossy_shellstone_brick_slab": "Плита из замшелого ракушечника", + "block.antarchy.mossy_shellstone_brick_wall": "Ограда из замшелого ракушечника", + "block.antarchy.cracked_shellstone_bricks": "Потрескавшиеся кирпичи из ракушечника", + "block.antarchy.shellstone_stairs": "Ступени из ракушечника", + "block.antarchy.shellstone_slab": "Плита из ракушечника", + "block.antarchy.shellstone_wall": "Ограда из ракушечника", + "block.antarchy.polished_shellstone_stairs": "Ступени из полированного ракушечника", + "block.antarchy.polished_shellstone_slab": "Плита из полированного ракушечника", + "block.antarchy.polished_shellstone_wall": "Ограда из полированного ракушечника", + "block.antarchy.shellstone_brick_stairs": "Ступени из кирпичей ракушечника", + "block.antarchy.shellstone_brick_slab": "Плита из кирпичей ракушечника", + "block.antarchy.shellstone_brick_wall": "Ограда из кирпичей ракушечника", + "block.antarchy.nyxite_stairs": "Никситовые ступени", + "block.antarchy.nyxite_slab": "Никситовая плита", + "block.antarchy.nyxite_wall": "Никситовая ограда", + "block.antarchy.polished_nyxite_stairs": "Ступени из полированного никсита", + "block.antarchy.polished_nyxite_slab": "Плита из полированного никсита", + "block.antarchy.polished_nyxite_wall": "Ограда из полированного никсита", + "block.antarchy.nyxite_brick_stairs": "Ступени из никситового кирпича", + "block.antarchy.nyxite_brick_slab": "Плита из никситового кирпича", + "block.antarchy.nyxite_brick_wall": "Ограда из никситового кирпича", + "block.antarchy.pale_nyxite": "Бледный никсит", + "block.antarchy.nyxite_spike": "Никситовый шип", + "block.antarchy.potent_nyxite": "Насыщенный никсит", + "block.antarchy.triffid_goo_block": "Блок слизи триффида", + "block.antarchy.elythia_portal": "Портал в Элитию", + "block.antarchy.cloud_block": "Облачный блок", + "block.antarchy.thoraxis_portal": "Портал в Тораксис", + "block.antarchy.antimetal": "Антиметалл", + "block.antarchy.polished_antimetal": "Полированный антиметалл", + "block.antarchy.antimetal_scaffolding": "Антиметаллические подмостки", + "block.antarchy.cornea_stalk": "Глазной стебель", + "block.antarchy.corn_crop": "Посевы кукурузы", + "block.antarchy.dream_torch": "Факел сновидений", + "block.antarchy.dream_wall_torch": "Настенный факел сновидений", + "block.antarchy.dream_lantern": "Фонарь сновидений", + "block.antarchy.dream_campfire": "Костёр сновидений", + "block.antarchy.dream_fire": "Огонь сновидений", + "block.antarchy.dream_fire_ceiling": "Огонь сновидений", + "block.antarchy.budding_blood_crystal": "Цветущий кровавый кристалл", + "block.antarchy.blood_crystal_block": "Блок кровавого кристалла", + "block.antarchy.small_blood_crystal_bud": "Малый бутон кровавого кристалла", + "block.antarchy.medium_blood_crystal_bud": "Средний бутон кровавого кристалла", + "block.antarchy.large_blood_crystal_bud": "Большой бутон кровавого кристалла", + "block.antarchy.blood_crystal_cluster": "Скопление кровавого кристалла", + "block.antarchy.dream_sand": "Песок сновидений", + "block.antarchy.dream_sandstone": "Песчаник сновидений", + "block.antarchy.chiseled_dream_sandstone": "Резной песчаник сновидений", + "block.antarchy.cut_dream_sandstone": "Гладкий песчаник сновидений", + "block.antarchy.smooth_dream_sandstone": "Пиленый песчаник сновидений", + "block.antarchy.dream_sandstone_stairs": "Ступени из песчаника сновидений", + "block.antarchy.dream_sandstone_slab": "Плита из песчаника сновидений", + "block.antarchy.dream_sandstone_wall": "Ограда из песчаника сновидений", + "block.antarchy.smooth_dream_sandstone_stairs": "Ступени из гладкого песчаника сновидений", + "block.antarchy.smooth_dream_sandstone_slab": "Плита из гладкого песчаника сновидений", + "block.antarchy.cut_dream_sandstone_slab": "Плита из пиленого песчаника сновидений", + "block.antarchy.bed_bug_egg": "Яйцо постельного клопа", + "block.antarchy.wasp_nest": "Осиное гнездо", + "block.antarchy.red_ant_nest": "Гнездо красных муравьёв", + "block.antarchy.brown_ant_nest": "Гнездо коричневых муравьёв", + "block.antarchy.rainbow_ant_nest": "Гнездо радужных муравьёв", + "block.antarchy.myrmite_coal_ore": "Myrmite Coal Ore", + "block.antarchy.uranium_ore": "Урановая руда", + "block.antarchy.deepslate_uranium_ore": "Глубинная урановая руда", + "block.antarchy.titanium_ore": "Титановая руда", + "block.antarchy.deepslate_titanium_ore": "Глубинная титановая руда", + "block.antarchy.uranium_block": "Урановый блок", + "block.antarchy.titanium_block": "Титановый блок", + "block.antarchy.raw_uranium_block": "Блок неочищенного урана", + "block.antarchy.raw_titanium_block": "Блок неочищенного титана", + "block.antarchy.cut_uranium": "Огранённый уран", + "block.antarchy.cut_titanium": "Огранённый титан", + "block.antarchy.cut_uranium_slab": "Плита из огранённого урана", + "block.antarchy.cut_titanium_slab": "Плита из огранённого титана", + "block.antarchy.cut_uranium_stairs": "Ступени из огранённого урана", + "block.antarchy.cut_titanium_stairs": "Ступени из огранённого титана", + "block.antarchy.chiseled_uranium": "Резной уран", + "block.antarchy.chiseled_titanium": "Резной титан", + "block.antarchy.uranium_bulb": "Урановая лампа", + "block.antarchy.titanium_bulb": "Титановая лампа", + "block.antarchy.uranium_door": "Урановая дверь", + "block.antarchy.titanium_door": "Титановая дверь", + "block.antarchy.uranium_trapdoor": "Урановый люк", + "block.antarchy.titanium_trapdoor": "Титановый люк", + "block.antarchy.uranium_bars": "Урановые прутья", + "block.antarchy.titanium_bars": "Титановые прутья", + "tooltip.antarchy.signal_saving_bulb": "Включается и выключается. Уровень излучаемого света равен силе сохранённого редстоун-сигнала.", + "block.antarchy.bile": "Желчь", + "block.antarchy.ichor": "Ихор", + "block.antarchy.antiwater": "Антивода", + "block.antarchy.lumen": "Люмен", + "block.antarchy.lumen_froglight": "Люменовый квампост", + "block.antarchy.roseate_froglight": "Розоватый квампост", + "entity.antarchy.apple_cow": "Яблочная корова", + "entity.antarchy.golden_apple_cow": "Золотая яблочная корова", + "entity.antarchy.enchanted_golden_apple_cow": "Зачарованная золотая яблочная корова", + "entity.antarchy.easter_bunny": "Пасхальный кролик", + "entity.antarchy.glimmer": "Блик", + "entity.antarchy.ouranwood_deer": "Оурановый олень", + "entity.antarchy.elka": "Элка", + "entity.antarchy.dorrie": "Дорри", + "entity.antarchy.flying_squirrel": "Белка-летяга", + "entity.antarchy.caterpillar": "Гусеница", + "entity.antarchy.butterfly": "Бабочка", + "entity.antarchy.brutalfly": "Жестококрыл", + "entity.antarchy.red_ant": "Красный муравей", + "entity.antarchy.brown_ant": "Коричневый муравей", + "entity.antarchy.rainbow_ant": "Радужный муравей", + "entity.antarchy.diamond_minecart": "Алмазная вагонетка", + "entity.antarchy.dr_trayaurus": "Доктор Траяурус", + "entity.antarchy.cloud_shark": "Облачная акула", + "entity.antarchy.kraken": "Кракен", + "entity.antarchy.missile_squid": "Кальмар-ракета", + "entity.antarchy.octopus_bomb": "Осьминог-бомба", + "entity.antarchy.nightmare": "Кошмар", + "entity.antarchy.bed_bug": "Постельный клоп", + "entity.antarchy.wasp": "Оса", + "entity.antarchy.bomber": "Бомбардир", + "entity.antarchy.moleworm": "Кроточервь", + "entity.antarchy.molevore": "Кротожор", + "entity.antarchy.mantis": "Богомол", + "entity.antarchy.alpha_mantis": "Альфа-богомол", + "entity.antarchy.triffid": "Триффид", + "entity.antarchy.toreterror": "Тортеррор", + "entity.antarchy.water_bomb": "Водяная бомба", + "subtitles.antarchy.mantis_ambient": "Богомол щёлкает", + "subtitles.antarchy.mantis_hurt": "Богомол визжит", + "subtitles.antarchy.mantis_attack": "Богомол кусает", + "subtitles.antarchy.mantis_fly_loop": "Крылья богомола жужжат", + "item.antarchy.big_bertha": "Большая Берта", + "item.antarchy.wasp_nest": "Осиное гнездо", + "item.antarchy.stink_bug": "Клоп-вонючка", + "item.antarchy.wasp_spawn_egg": "Яйцо призыва осы", + "item.antarchy.bomber_spawn_egg": "Яйцо призыва бомбардира", + "item.antarchy.big_bertha_blade": "Лезвие Большой Берты", + "item.antarchy.big_bertha_handle": "Рукоять Большой Берты", + "item.antarchy.big_bertha_hilt": "Эфес Большой Берты", + "item.antarchy.battle_axe": "Боевой топор", + "item.antarchy.cloud_shark_fin": "Плавник облачной акулы", + "item.antarchy.cloud_shark_fin_soup": "Суп из плавников облачной акулы", + "tooltip.antarchy.cloud_shark_fin_soup": "Даёт Силу и Плавное падение.", + "item.antarchy.kraken_tooth": "Зуб кракена", + "item.antarchy.basilisk_fang": "Клык василиска", + "item.antarchy.basilisk_dagger": "Кинжал василиска", + "item.antarchy.blood_crystal_block": "Блок кровавого кристалла", + "item.antarchy.small_blood_crystal_bud": "Малый бутон кровавого кристалла", + "item.antarchy.medium_blood_crystal_bud": "Средний бутон кровавого кристалла", + "item.antarchy.large_blood_crystal_bud": "Большой бутон кровавого кристалла", + "item.antarchy.blood_crystal_cluster": "Скопление кровавого кристалла", + "item.antarchy.dream_sand": "Песок сновидений", + "item.antarchy.dream_sandstone": "Песчаник сновидений", + "item.antarchy.chiseled_dream_sandstone": "Резной песчаник сновидений", + "item.antarchy.cut_dream_sandstone": "Пиленый песчаник сновидений", + "item.antarchy.smooth_dream_sandstone": "Гладкий песчаник сновидений", + "item.antarchy.dream_sandstone_stairs": "Ступени из песчаника сновидений", + "item.antarchy.dream_sandstone_slab": "Плита из песчаника сновидений", + "item.antarchy.dream_sandstone_wall": "Ограда из песчаника сновидений", + "item.antarchy.smooth_dream_sandstone_stairs": "Ступени из гладкого песчаника сновидений", + "item.antarchy.smooth_dream_sandstone_slab": "Плита из гладкого песчаника сновидений", + "item.antarchy.cut_dream_sandstone_slab": "Плита из пиленого песчаника сновидений", + "item.antarchy.dream_torch": "Факел сновидений", + "item.antarchy.dream_lantern": "Фонарь сновидений", + "item.antarchy.dream_campfire": "Костёр сновидений", + "item.antarchy.nightmare_scale": "Чешуйка кошмара", + "item.antarchy.nightmare_helmet": "Шлем кошмара", + "item.antarchy.nightmare_chestplate": "Нагрудник кошмара", + "item.antarchy.nightmare_leggings": "Поножи кошмара", + "item.antarchy.nightmare_boots": "Ботинки кошмара", + "item.antarchy.nightmare_sword": "Меч кошмара", + "tooltip.antarchy.nightmare_armor_double_damage": "%s%% шанс нанести двойной урон", + "tooltip.antarchy.nightmare_armor_set_bonus": "Полный комплект: Иммунитет к Иссушению и Ужасу", + "tooltip.antarchy.nightmare_sword": "Наносит больше урона по мере снижения вашего здоровья.", + "tooltip.antarchy.nightmare_sword_damage": "Наносит %s урона", + "tooltip.antarchy.primordial_helmet_water_breathing": "Даёт владельцу Подводное дыхание", + "tooltip.antarchy.primordial_armor_knockback_dealt": "Добавляет %s к отбрасыванию при атаке за каждый элемент", + "tooltip.antarchy.primordial_armor_set_bonus": "Полный комплект: Атаки игнорируют сопротивление отбрасыванию у врагов", + "attribute.antarchy.double_damage_chance": "Шанс двойного урона", + "attribute.antarchy.bloodglass_max_hearts": "Макс. сердец кровавого стекла", + "item.antarchy.molevore_nose": "Нос кротожора", + "item.antarchy.moleworm": "Кроточервь", + "item.antarchy.triffid_spawn_egg": "Яйцо призыва триффида", + "item.antarchy.infested_rooted_dirt": "Заражённая корнями земля", + "item.antarchy.infested_coarse_dirt": "Заражённая каменистая земля", + "item.antarchy.pale_nyxite": "Бледный никсит", + "item.antarchy.polished_nyxite": "Полированный никсит", + "item.antarchy.chiseled_nyxite": "Резной никсит", + "item.antarchy.nyxite_bricks": "Никситовые кирпичи", + "item.antarchy.shellstone": "Ракушечник", + "item.antarchy.polished_shellstone": "Полированный ракушечник", + "item.antarchy.shellstone_bricks": "Кирпичи из ракушечника", + "item.antarchy.chiseled_shellstone": "Резной ракушечник", + "item.antarchy.mossy_shellstone_bricks": "Замшелые кирпичи из ракушечника", + "item.antarchy.mossy_shellstone_brick_stairs": "Ступени из замшелого ракушечника", + "item.antarchy.mossy_shellstone_brick_slab": "Плита из замшелого ракушечника", + "item.antarchy.mossy_shellstone_brick_wall": "Ограда из замшелого ракушечника", + "item.antarchy.cracked_shellstone_bricks": "Потрескавшиеся кирпичи из ракушечника", + "item.antarchy.shellstone_stairs": "Ступени из ракушечника", + "item.antarchy.shellstone_slab": "Плита из ракушечника", + "item.antarchy.shellstone_wall": "Ограда из ракушечника", + "item.antarchy.polished_shellstone_stairs": "Ступени из полированного ракушечника", + "item.antarchy.polished_shellstone_slab": "Плита из полированного ракушечника", + "item.antarchy.polished_shellstone_wall": "Ограда из полированного ракушечника", + "item.antarchy.shellstone_brick_stairs": "Ступени из кирпичей ракушечника", + "item.antarchy.shellstone_brick_slab": "Плита из кирпичей ракушечника", + "item.antarchy.shellstone_brick_wall": "Ограда из кирпичей ракушечника", + "item.antarchy.nyxite_stairs": "Никситовые ступени", + "item.antarchy.nyxite_slab": "Никситовая плита", + "item.antarchy.nyxite_wall": "Никситовая ограда", + "item.antarchy.polished_nyxite_stairs": "Ступени из полированного никсита", + "item.antarchy.polished_nyxite_slab": "Плита из полированного никсита", + "item.antarchy.polished_nyxite_wall": "Ограда из полированного никсита", + "item.antarchy.nyxite_brick_stairs": "Ступени из никситового кирпича", + "item.antarchy.nyxite_brick_slab": "Плита из никситового кирпича", + "item.antarchy.nyxite_brick_wall": "Ограда из никситового кирпича", + "item.antarchy.potent_nyxite": "Насыщенный никсит", + "item.antarchy.antimetal": "Антиметалл", + "item.antarchy.polished_antimetal": "Полированный антиметалл", + "item.antarchy.antimetal_scaffolding": "Антиметаллические подмостки", + "item.antarchy.ouranwood_acorn": "Оурановый жёлудь", + "item.antarchy.ouranwood_boat": "Оурановая лодка", + "item.antarchy.ouranwood_chest_boat": "Оурановая лодка с сундуком", + "item.antarchy.raw_venison": "Сырая оленина", + "item.antarchy.cooked_venison": "Жареная оленина", + "item.antarchy.peach_sapling": "Саженец персикового дерева", + "item.antarchy.peach": "Персик", + "item.antarchy.peach_pie": "Персиковый пирог", + "item.antarchy.cornbread": "Кукурузный хлеб", + "item.antarchy.popcorn": "Попкорн", + "item.antarchy.peach_sign": "Персиковая табличка", + "item.antarchy.peach_hanging_sign": "Персиковая подвесная табличка", + "item.antarchy.peach_boat": "Персиковая лодка", + "item.antarchy.peach_chest_boat": "Персиковая лодка с сундуком", + "item.antarchy.orange_milkweed": "Оранжевый ваточник", + "item.antarchy.pink_milkweed": "Розовый ваточник", + "item.antarchy.camellia": "Камелия", + "item.antarchy.spider_lily": "Паучья лилия", + "item.antarchy.hushweed": "Тишь-трава", + "item.antarchy.umbral_moss_block": "Блок теневого мха", + "item.antarchy.umbral_moss_carpet": "Ковёр из теневого мха", + "item.antarchy.blush_moss_block": "Блок румяного мха", + "item.antarchy.blush_moss_carpet": "Ковёр из румяного мха", + "item.antarchy.mud_pie": "Грязевой пирог", + "item.antarchy.duct_tape": "Клейкая лента", + "item.antarchy.duct_tape.tooltip": "Разместите и нажмите ПКМ, чтобы починить инструменты", + "item.antarchy.rainbow_sugar": "Радужный сахар", + "item.antarchy.uranium_nugget": "Кусочек урана", + "item.antarchy.titanium_nugget": "Кусочек титана", + "item.antarchy.raw_uranium_scrap": "Осколок неочищенного урана", + "item.antarchy.raw_titanium_scrap": "Осколок неочищенного титана", + "item.antarchy.raw_uranium": "Неочищенный уран", + "item.antarchy.raw_titanium": "Неочищенный титан", + "item.antarchy.uranium_ingot": "Урановый слиток", + "item.antarchy.titanium_ingot": "Титановый слиток", + "item.antarchy.blood_crystal_shard": "Осколок кровавого кристалла", + "item.antarchy.blood_crystal_apple": "Яблоко кровавого кристалла", + "item.antarchy.blood_crystal_katana": "Катана из кровавого кристалла", + "item.antarchy.blood_crystal_helmet": "Шлем из кровавого кристалла", + "item.antarchy.blood_crystal_chestplate": "Нагрудник из кровавого кристалла", + "item.antarchy.blood_crystal_leggings": "Поножи из кровавого кристалла", + "item.antarchy.blood_crystal_boots": "Ботинки из кровавого кристалла", + "item.antarchy.blood_crystal_armor.tooltip": "Даёт Сердце кровавого стекла, которое блокирует один входящий удар, разбивается, а затем восстанавливается.", + "item.antarchy.blood_crystal_boots.tooltip2": "Отменяет урон от падения при падении вверх во время инверсии гравитации.", + "item.antarchy.blood_crystal_apple.tooltip": "Даёт Защиту кровавого стекла, предоставляя временные Сердца кровавого стекла, которые восстанавливаются, пока длится эффект.", + "tooltip.antarchy.blood_crystal_katana.launch": "Толкает вас вперёд при ударе.", + "tooltip.antarchy.blood_crystal_katana.trail": "Оставляет за вами багровый след.", + "item.antarchy.mantis_claw": "Клешня богомола", + "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", + "item.antarchy.king_scale": "Чешуйка короля", + "item.antarchy.queen_scale": "Чешуйка королевы", + "item.antarchy.jumpy_bug_leg": "Ножка прыгучего жука", + "item.antarchy.jumpy_boots": "Прыгучие ботинки", + "tooltip.antarchy.jumpy_boots": "Зажмите Shift, чтобы зарядить, затем прыгните, чтобы взмыть вверх.", + "item.antarchy.brutalfly_wing": "Крыло жестококрыла", + "item.antarchy.brutalfly_elytra": "Элитры жестококрыла", + "tooltip.antarchy.brutalfly_elytra.flap": "Во время полёта зажмите %s, чтобы махать крыльями", + "item.antarchy.cornea_ear": "Глазной початок", + "item.antarchy.corn": "Кукуруза", + "item.antarchy.corn_seeds": "Семена кукурузы", + "item.antarchy.raw_corndog": "Сырой корндог", + "item.antarchy.cooked_corndog": "Готовый корндог", + "item.antarchy.high_fructose_corn_syrup": "Кукурузный сироп", + "jei.antarchy.americanize": "Американизировать", + "item.antarchy.american_name": "Американский %s", + "item.antarchy.root_beer": "Рутбир", + "item.antarchy.primordial_scute": "Первобытный щиток", + "item.antarchy.triffid_goo": "Слизь триффида", + "item.antarchy.triffid_goo_block": "Блок слизи триффида", + "tooltip.antarchy.triffid_goo_block": "При высокой скорости отталкивает вверх, иначе засасывает.", + "item.antarchy.cloud_bucket": "Ведро облаков", + "tooltip.antarchy.cloud_bucket.midair": "Можно разместить прямо в воздухе", + "item.antarchy.lumen_bucket": "Ведро люмена", + "item.antarchy.scorpion_whip": "Хлыст императорского скорпиона", + "tooltip.antarchy.scorpion_whip.lash": "Атакует жертву издалека и внедряет ядовитую привязь.", + "tooltip.antarchy.scorpion_whip.reel": "Нажмите ПКМ, чтобы притянуть привязанную добычу.", + "tooltip.antarchy.scorpion_whip.snap": "Нажмите ЛКМ по привязанной добыче, чтобы вырвать жало.", + "item.antarchy.fallen_king_crown": "Корона павшего короля", + "tooltip.antarchy.fallen_king_crown.hero": "Даёт эффект «Герой деревни» при убийстве враждебных мобов", + "item.antarchy.vortex_eye": "Око вихря", + "item.antarchy.ultimate_helmet": "Ультимативный шлем", + "item.antarchy.ultimate_chestplate": "Ультимативный нагрудник", + "item.antarchy.ultimate_leggings": "Ультимативные поножи", + "item.antarchy.ultimate_boots": "Ультимативные ботинки", + "item.antarchy.ultimate_sword": "Ультимативный меч", + "item.antarchy.ultimate_pickaxe": "Ультимативная кирка", + "item.antarchy.ultimate_axe": "Ультимативный топор", + "item.antarchy.ultimate_shovel": "Ультимативная лопата", + "item.antarchy.ultimate_hoe": "Ультимативная мотыга", + "item.antarchy.ultimate_bow": "Ультимативный лук", + "item.antarchy.ultimate_crossbow": "Ультимативный арбалет", + "item.antarchy.ultimate_crossbow.capacity": "Заряжает до 16 стрел одновременно", + "item.antarchy.ultimate_crossbow.arrows_remaining": "%1$s %2$s заряжено", + "item.antarchy.ultimate_mace": "Ультимативная булава", + "item.antarchy.moggles": "Могглы", + "itemGroup.antarchy.antarchy": "Antarchy", + "item.antarchy.bile_bucket": "Ведро желчи", + "item.antarchy.ichor_bucket": "Ведро ихора", + "item.antarchy.antiwater_bucket": "Ведро антиводы", + "item.antarchy.reverie_bottle": "Бутылочка с грёзой", + "item.antarchy.squidzooka": "Сквидзука", + "item.antarchy.shrink_ray": "Уменьшитель", + "item.antarchy.growth_ray": "Увеличитель", + "tooltip.antarchy.shrink_ray": "Навсегда уменьшает цель. Зажмите, чтобы зарядить.", + "tooltip.antarchy.growth_ray": "Навсегда увеличивает цель. Зажмите, чтобы зарядить.", + "tooltip.antarchy.size_ray_milk_reset": "Питьё молока сбрасывает этот эффект.", + "tooltip.antarchy.reverie_bottle.capture": "Нажмите ПКМ стеклянной бутылочкой по грёзе, чтобы поймать её.", + "tooltip.antarchy.reverie_bottle.release": "Нажмите ПКМ, чтобы выпустить грёзу.", + "item.antarchy.gravity_gun": "Гравитационная пушка", + "item.antarchy.miners_dream": "Мечта шахтёра", + "tooltip.antarchy.miners_dream.line1": "Нажмите ПКМ, чтобы вырезать извилистую пещеру.", + "tooltip.antarchy.miners_dream.line2": "Оставляет ценные блоки нетронутыми.", + "message.antarchy.miners_dream_disabled": "Мечта шахтёра отключена.", + "message.antarchy.miners_dream_busy": "Ваша предыдущая мечта всё ещё воплощается.", + "item.antarchy.diamond_minecart": "Алмазная вагонетка", + "item.antarchy.cogwheel_pet": "Шестерёнка-питомец", + "item.antarchy.fire_dragon_pet": "Огненный дракон-питомец", + "item.antarchy.ice_dragon_pet": "Ледяной дракон-питомец", + "item.antarchy.lightning_dragon_pet": "Электрический дракон-питомец", + "item.antarchy.gorgon_pet": "Горгона-питомец", + "item.antarchy.apple_cow_spawn_egg": "Яйцо призыва яблочной коровы", + "item.antarchy.red_ant_spawn_egg": "Яйцо призыва красного муравья", + "item.antarchy.brown_ant_spawn_egg": "Яйцо призыва коричневого муравья", + "item.antarchy.rainbow_ant_spawn_egg": "Яйцо призыва радужного муравья", + "item.antarchy.golden_apple_cow_spawn_egg": "Яйцо призыва золотой яблочной коровы", + "item.antarchy.enchanted_golden_apple_cow_spawn_egg": "Яйцо призыва зачарованной золотой яблочной коровы", + "item.antarchy.dr_trayaurus_spawn_egg": "Яйцо призыва доктора Траяуруса", + "item.antarchy.easter_bunny_spawn_egg": "Яйцо призыва пасхального кролика", + "item.antarchy.glimmer_spawn_egg": "Яйцо призыва блика", + "item.antarchy.ouranwood_deer_spawn_egg": "Яйцо призыва оуранового оленя", + "item.antarchy.spirit_apple": "Духовное яблоко", + "item.antarchy.elka_spawn_egg": "Яйцо призыва Элки", + "item.antarchy.glimmer_bottle": "Бутылочка с бликом", + "item.antarchy.glimmer_bottle.contains": "Содержит: %s", + "glimmer_variant.antarchy.apple_cow": "Яблочная корова", + "glimmer_variant.antarchy.ouranwood_deer": "Оурановый олень", + "glimmer_variant.antarchy.frog": "Жаба", + "glimmer_variant.antarchy.ant": "Муравей", + "glimmer_variant.antarchy.elka": "Элка", + "entity.antarchy.glimmer.set_sit": "Блик теперь сидит.", + "entity.antarchy.glimmer.set_follow": "Блик теперь следует за вами.", + "entity.antarchy.glimmer.set_wander": "Блик теперь бродит.", + "entity.antarchy.glimmer.ability.ant": "Ваш муравей натравливает вас на %s!", + "entity.antarchy.glimmer.ability.apple_cow": "Ваша яблочная корова мычит и кормит вас!", + "entity.antarchy.glimmer.ability.elka": "Ваша Элка издаёт крик и разрушает защиту!", + "entity.antarchy.glimmer.ability.deer": "Ваш оурановый олень проносится сквозь врага!", + "entity.antarchy.glimmer.ability.frog": "Ваша жаба проглотила %s!", + "item.antarchy.glimmer_bottle.passive.apple_cow": "Пассивный эффект: Голод тратится на 25% медленнее", + "item.antarchy.glimmer_bottle.ability.apple_cow": "Способность: Мычит и даёт Насыщение и Регенерацию, когда у вас мало еды", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "Пассивный эффект: Скорость I", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "Способность: Прорывается сквозь враждебных мобов, когда вы бежите на них, подкидывая их в воздух", + "item.antarchy.glimmer_bottle.passive.frog": "Пассивный эффект: Прыгучесть I", + "item.antarchy.glimmer_bottle.ability.frog": "Способность: Пожирает ближайшего враждебного моба, становясь больше и сильнее на время", + "item.antarchy.glimmer_bottle.passive.ant": "Пассивный эффект: Слегка увеличенная дальность атаки", + "item.antarchy.glimmer_bottle.ability.ant": "Способность: Удар по крупному врагу даёт вам кратковременную Силу II", + "item.antarchy.glimmer_bottle.passive.elka": "Пассивный эффект: Защита кровавого стекла II", + "item.antarchy.glimmer_bottle.ability.elka": "Способность: Кричит и вызывает ударную волну при разрушении одного из сердец защиты", + "advancements.antarchy.spirant_animal.title": "Муравьиная душа", + "advancements.antarchy.spirant_animal.description": "Приручите муравья-блика", + "advancements.antarchy.hoppy_together.title": "Вместе веселее", + "advancements.antarchy.hoppy_together.description": "Приручите жабу-блика", + "advancements.antarchy.deerly_beloved.title": "Дорогой олень", + "advancements.antarchy.deerly_beloved.description": "Приручите оленя-блика", + "advancements.antarchy.elkcellent_choice.title": "Отличный выбор", + "advancements.antarchy.elkcellent_choice.description": "Приручите Элку-блика", + "advancements.antarchy.apple_of_my_eye.title": "Яблоко от яблони", + "advancements.antarchy.apple_of_my_eye.description": "Приручите корову-блика", + "item.antarchy.dorrie_spawn_egg": "Яйцо призыва Дорри", + "item.antarchy.flying_squirrel_spawn_egg": "Яйцо призыва белки-летяги", + "item.antarchy.caterpillar_spawn_egg": "Яйцо призыва гусеницы", + "item.antarchy.butterfly_spawn_egg": "Яйцо призыва бабочки", + "item.antarchy.brutalfly_spawn_egg": "Яйцо призыва жестококрыла", + "item.antarchy.cloud_shark_spawn_egg": "Яйцо призыва облачной акулы", + "item.antarchy.kraken_spawn_egg": "Ох, нет. Не стоит.", + "item.antarchy.missile_squid_spawn_egg": "Яйцо призыва кальмара-ракеты", + "item.antarchy.octopus_bomb_spawn_egg": "Яйцо призыва осьминога-бомбы", + "item.antarchy.nightmare_spawn_egg": "Яйцо призыва кошмара", + "item.antarchy.toreterror_spawn_egg": "Яйцо призыва тортеррора", + "item.antarchy.water_cannon": "Водяная пушка", + "item.antarchy.primordial_helmet": "Первобытный шлем", + "item.antarchy.primordial_chestplate": "Первобытный нагрудник", + "item.antarchy.primordial_leggings": "Первобытные поножи", + "item.antarchy.primordial_boots": "Первобытные ботинки", + "item.antarchy.bed_bug_spawn_egg": "Яйцо призыва постельного клопа", + "item.antarchy.moleworm_spawn_egg": "Яйцо призыва кроточервя", + "item.antarchy.molevore_spawn_egg": "Яйцо призыва кротожора", + "item.antarchy.reverie_spawn_egg": "Яйцо призыва грёзы", + "item.antarchy.mantis_spawn_egg": "Яйцо призыва богомола", + "item.antarchy.alpha_mantis_spawn_egg": "Яйцо призыва альфа-богомола", + "biome.antarchy.moleworm_caves": "Пещеры кроточервей", + "biome.antarchy.butterfly_fields": "Поля бабочек", + "biome.antarchy.ouranwood_forest": "Оурановый лес", + "biome.antarchy.glimmering_pools": "Мерцающие пруды", + "biome.antarchy.peach_forest": "Персиковый лес", + "biome.antarchy.fungal_ouranwood_forest": "Грибной оурановый лес", + "message.antarchy.brown_ant_activated": "Коричневый муравей готов открыть путь в свой мир.", + "message.antarchy.brown_ant_needs_reagent": "Этому коричневому муравью нужен реагент, чтобы открыть путь в свой мир.", + "message.antarchy.rainbow_ant_activated": "Радужный муравей гудит новым измерением из Infinity.", + "message.antarchy.rainbow_ant_activated_inherited": "Радужный муравей гудит унаследованным измерением из Infinity.", + "message.antarchy.rainbow_ant_activated_inherited_existing": "Радужный муравей переподключается к унаследованному измерению Infinity.", + "message.antarchy.rainbow_ant_failed_dimension_create": "Не удалось создать измерение. Вероятно, ошибка в конфигурации мода Infinity. Перезапустите игру и попробуйте снова.", + "message.antarchy.rainbow_ant_infinity_missing": "Мод Infinity должен быть установлен, чтобы миры радужных муравьёв работали.", + "message.antarchy.rainbow_ant_needs_reagent": "Этому радужному муравью нужен реагент, чтобы открыть измерение.", + "message.antarchy.red_ant_activated": "Красный муравей готов открыть путь в свой мир.", + "message.antarchy.red_ant_needs_reagent": "Этому красному муравью нужен реагент, чтобы открыть путь в свой мир.", + "message.antarchy.termite_activated": "Термит готов открыть путь к своей цели.", + "message.antarchy.termite_needs_reagent": "Этому термиту нужен реагент, чтобы открыть путь к своей цели.", + "message.antarchy.big_bertha.mode": "Режим Большой Берты: %s", + "message.antarchy.big_bertha.mode.basilisk": "Василиск", + "message.antarchy.big_bertha.mode.lucid": "Люцид", + "message.antarchy.big_bertha.mode.nightmare": "Кошмар", + "message.antarchy.big_bertha.mode.kraken": "Кракен", + "message.antarchy.big_bertha.mode.molevore": "Кротожор", + "message.antarchy.big_bertha.mode.toreterror": "Тортеррор", + "message.antarchy.ultimate_tool.mode_3x3": "Включено копание 3x3", + "message.antarchy.ultimate_tool.mode_default": "Включено обычное копание", + "advancements.antarchy.hey_listen.title": "Эй, послушай", + "advancements.antarchy.hey_listen.description": "К вам присоединилась грёза.", + "advancements.antarchy.very_hungry_caterpillar.title": "Очень голодная гусеница", + "advancements.antarchy.very_hungry_caterpillar.description": "Помогите гусенице вырасти.", + "effect.antarchy.dread": "Ужас", + "effect.antarchy.dread.description": "Вызывает зрительные и звуковые галлюцинации.", + "effect.antarchy.paralyzed": "Паралич", + "effect.antarchy.paralyzed.description": "Не дает целям двигаться.", + "effect.antarchy.inverted": "Инверсия", + "effect.antarchy.inverted.description": "Инвертирует гравитацию цели.", + "effect.antarchy.stinky": "Вонючесть", + "effect.antarchy.stinky.description": "Отпугивает мирных и нейтральных мобов, но притягивает членистоногих.", + "effect.antarchy.gooped.description": "Замедляет движение и скорость атаки.", + "effect.antarchy.shrinking": "Уменьшение", + "effect.antarchy.growth": "Увеличение", + "effect.antarchy.bloodglass_ward": "Защита кровавого стекла", + "effect.antarchy.bloodglass_ward.description": "Дает сердца, которые разбиваются и полностью поглощают один удар. Со временем они восстанавливаются.", + "death.attack.triffid_mauling": "%1$s был растерзан растением", + "death.attack.triffid_mauling.player": "%1$s был растерзан растением", + "death.attack.triffid_swallow": "%1$s был проглочен триффидом", + "death.attack.triffid_swallow.player": "%1$s был проглочен триффидом", + "potion.antarchy.haste": "Зелье спешки", + "potion.antarchy.strong_haste": "Мощное зелье спешки", + "tooltip.antarchy.big_bertha.mode": "Режим: %s", + "tooltip.antarchy.big_bertha.toggle_mode": "Shift + ПКМ для переключения режимов босса.", + "tooltip.antarchy.big_bertha.mode.basilisk": "ПКМ парализует цель. Удары накладывают отравление и замедление.", + "tooltip.antarchy.big_bertha.mode.lucid": "Удары инвертируют цель на несколько секунд. Удары наносят больше урона, когда вы инвертированы.", + "tooltip.antarchy.big_bertha.mode.nightmare": "Игроки страдают от Ужаса; удары накладывают слабость.", + "tooltip.antarchy.big_bertha.mode.kraken": "Удары отбрасывают цели и вызывают молнию.", + "tooltip.antarchy.big_bertha.mode.molevore": "ПКМ для рывка вперёд и бурения сквозь блоки кротожора.", + "tooltip.antarchy.big_bertha.mode.toreterror": "ПКМ запускает вас в воздух и обрушивает вниз с ударной волной по площади.", + "tooltip.antarchy.ultimate_tools_3x3": "Shift + ПКМ для переключения режима копания 3x3.", + "tooltip.antarchy.moggles.reveal": "Дают ночное зрение и указывают на ближайшие пещеры.", + "tooltip.antarchy.moggles.underground": "Работает только если над вами нет открытого неба.", + "tooltip.antarchy.cornea_ear.vision": "Даёт Ночное зрение на %s секунд.", + "tooltip.antarchy.mob_coming_soon": "Моб появится в будущем!", + "tooltip.antarchy.gravity_gun.primary": "ЛКМ: отбрасывает ближайших сущностей или бросает удерживаемую цель.", + "tooltip.antarchy.gravity_gun.secondary": "ПКМ: притягивает сущность или подходящий блок.", + "tooltip.antarchy.gravity_gun.scroll": "Удерживайте Ctrl и крутите колёсико мыши, чтобы приблизить или отдалить удерживаемую цель.", + "tooltip.antarchy.gravity_gun.blacklist": "Не действует на блоки и сущности из чёрного списка.", + "tooltip.antarchy.antimetal_inversion": "Инвертирует сущности прямо под собой", + "tooltip.antarchy.diamond_minecart.forward": "Будет добавлено позже.", + "tooltip.antarchy.diamond_minecart.rails": " ", + "tooltip.antarchy.rainbow_sugar": "Активирует измерения радужного муравья. Съешьте, находясь в нём, чтобы вернуться домой.", + "advancements.antarchy.visit_elythia.title": "Межмуравьиное пространство", + "advancements.antarchy.visit_elythia.description": "Используйте коричневого муравья, чтобы попасть в Элитию.", + "advancements.antarchy.visit_thoraxis.title": "Муравьиный гнев", + "advancements.antarchy.visit_thoraxis.description": "Используйте красного муравья, чтобы попасть в Тораксис.", + "advancements.antarchy.fallen_kingdom_castle.title": "Я когда-то правил миром...", + "advancements.antarchy.fallen_kingdom_castle.description": "Найдите замок падшего королевства.", + "advancements.antarchy.fallen_king_crown.title": "Чанки грузились по моему приказу...", + "advancements.antarchy.fallen_king_crown.description": "Добудьте корону павшего короля.", + "advancements.antarchy.the_lab.title": "Всем привет, с вами Дэн!", + "advancements.antarchy.the_lab.description": "Найдите лабораторию доктора Траяуруса.", + "advancements.antarchy.sweater_dreams.title": "Тёплые сны", + "advancements.antarchy.sweater_dreams.description": "Победите Кошмара.", + "advancements.antarchy.stone_cold.title": "Холодный как камень", + "advancements.antarchy.stone_cold.description": "Победите василиска.", + "advancements.antarchy.moley_poley.title": "Кротовьи забавы", + "advancements.antarchy.moley_poley.description": "Победите кротожора.", + "advancements.antarchy.lucid_dreams.title": "Осознанные сновидения", + "advancements.antarchy.lucid_dreams.description": "Победите люцида.", + "advancements.antarchy.davy_jones_locker.title": "Тайник Дэйви Джонса", + "advancements.antarchy.davy_jones_locker.description": "Победите кракена.", + "advancements.antarchy.shark_weak.title": "Когда акулы полетят", + "advancements.antarchy.shark_weak.description": "Победите облачную акулу.", + "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "И пусть клопы не кусают", + "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "Победите постельного клопа.", + "advancements.antarchy.soups_up.title": "Суп готов", + "advancements.antarchy.soups_up.description": "Съешьте суп из плавников облачной акулы.", + "advancements.antarchy.in_the_upside_down.title": "Вверх тормашками", + "advancements.antarchy.in_the_upside_down.description": "Окажитесь под эффектом инверсии впервые.", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "Кто унюхал, тот и пукнул", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "Окажитесь вонючим в первый раз.", + "advancements.antarchy.ultimate_armor.title": "Абсолютная защита", + "advancements.antarchy.ultimate_armor.description": "Соберите полный комплект ультимативной брони.", + "advancements.antarchy.ultimate_bow.title": "Богемская рапсодия", + "advancements.antarchy.ultimate_bow.description": "Добудьте ультимативный лук.", + "advancements.antarchy.brutalfly.title": "Порхай как жестококрыл, жаль как пчела", + "advancements.antarchy.brutalfly.description": "Получите элитры жестококрыла.", + "advancements.antarchy.now_watch_me_whip.title": "А теперь смотри", + "advancements.antarchy.now_watch_me_whip.description": "А теперь смотри, как я делаю нэй-нэй", + "advancements.antarchy.kill_molevore.title": "Кротовьи забавы", + "advancements.antarchy.kill_molevore.description": "Убейте кротожора.", + "advancements.antarchy.water_cannon_craft.title": "Мокрее — лучше!", + "advancements.antarchy.water_cannon_craft.description": "Создайте водяную пушку.", + "advancements.antarchy.kill_toreterror.title": "Тортеррор сбежал!", + "advancements.antarchy.kill_toreterror.description": "Победите тортеррора.", + "advancements.antarchy.challenge_games.title": "Испытания начинаются!", + "advancements.antarchy.challenge_games.description": "Войдите на Разрушенную арену.", + "advancements.antarchy.bugged_out.title": "Жук-переросток", + "advancements.antarchy.bugged_out.description": "Победите альфа-богомола.", + "death.attack.bed_bug_bite": "%1$s был покусан постельными клопами", + "death.attack.bed_bug_bite.player": "%1$s был покусан постельными клопами во время сражения с %2$s", + "message.antarchy.dread_too_scared_to_sleep": "Вы слишком напуганы, чтобы уснуть.", + "death.attack.kraken_mauling": "%1$s был затянут на дно кракеном", + "death.attack.kraken_mauling.player": "%1$s был затянут на дно кракеном во время сражения с %2$s", + "death.attack.kraken_lightning": "%1$s был поражён штормом кракена", + "death.attack.kraken_lightning.player": "%1$s был поражён штормом кракена во время сражения с %2$s", + "death.attack.nightmare_mauling": "%1$s был сожран кошмаром", + "death.attack.nightmare_mauling.player": "%1$s был сожран кошмаром во время сражения с %2$s", + "death.attack.basilisk_bite": "%1$s был проглочен василиском", + "death.attack.basilisk_bite.player": "%1$s был проглочен василиском во время сражения с %2$s", + "death.attack.emperor_scorpion_sting": "%1$s был ужален императорским скорпионом", + "death.attack.emperor_scorpion_sting.player": "%1$s был ужален императорским скорпионом во время сражения с %2$s", + "death.attack.cornea_stalk_prick": "%1$s был заколот насмерть глазным стеблем", + "death.attack.toreterror_spin": "%1$s был закручен до смерти тортеррором", + "death.attack.toreterror_spin.player": "%1$s был закручен до смерти тортеррором", + "death.attack.toreterror_jump": "%1$s был раздавлен насмерть тортеррором", + "death.attack.toreterror_jump.player": "%1$s был раздавлен насмерть тортеррором", + "death.attack.water_soaked": "%1$s был намочен до смерти сущностью %2$s", + "death.attack.water_soaked.player": "%1$s был намочен до смерти сущностью %2$s", + "entity.antarchy.lucid": "Люцид", + "item.antarchy.lucid_spawn_egg": "Яйцо призыва люцида", + "item.antarchy.lucid_eye": "Глаз люцида", + "entity.antarchy.scorpion": "Скорпион", + "item.antarchy.scorpion_spawn_egg": "Яйцо призыва скорпиона", + "entity.antarchy.basilisk": "Василиск", + "item.antarchy.basilisk_spawn_egg": "Яйцо призыва василиска", + "entity.antarchy.emperor_scorpion": "Императорский скорпион", + "item.antarchy.emperor_scorpion_spawn_egg": "Яйцо призыва императорского скорпиона", + "item.antarchy.emperor_scorpion_stinger": "Жало императорского скорпиона", + "item.antarchy.lucid_pearl": "Жемчуг люцида", + "tooltip.antarchy.lucid_pearl": "Бросает снаряд, инвертирующий гравитацию.", + "tooltip.antarchy.lucid_pearl.detail": "Телепортирует вас в точку падения и накладывает Инверсию.", + "subtitles.antarchy.squidzooka_fire": "Сквидзука стреляет", + "subtitles.antarchy.shrink_ray": "Уменьшитель стреляет", + "subtitles.antarchy.growth_ray": "Увеличитель стреляет", + "subtitles.antarchy.size_ray_charge": "Лучевое ружьё заряжается", + "subtitles.antarchy.ant_ambient": "Муравьи стрекочут", + "subtitles.antarchy.ant_idle": "Муравьи шевелятся", + "subtitles.antarchy.ant_hurt": "Муравью больно", + "subtitles.antarchy.ant_bite": "Муравьи кусают", + "subtitles.antarchy.ant_gather": "Муравьи собираются", + "subtitles.antarchy.ant_nest": "Муравейник шуршит", + "subtitles.antarchy.cloud_shark_bite": "Облачная акула кусает", + "subtitles.antarchy.cloud_shark_idle": "Облачная акула парит", + "subtitles.antarchy.cloud_shark_hurt": "Облачной акуле больно", + "subtitles.antarchy.cloud_shark_death": "Облачная акула умирает", + "subtitles.antarchy.cloud_shark_fly": "Облачная акула летит", + "subtitles.antarchy.caterpillar_idle": "Гусеница шевелится", + "subtitles.antarchy.caterpillar_hurt": "Гусенице больно", + "subtitles.antarchy.caterpillar_crawl": "Гусеница ползёт", + "subtitles.antarchy.butterfly_hurt": "Бабочке больно", + "subtitles.antarchy.brutalfly_idle": "Жестококрыл парит", + "subtitles.antarchy.brutalfly_death": "Жестококрыл умирает", + "subtitles.antarchy.thoraxis_nightmare_wastes_ambient": "Пустоши кошмара гудят", + "subtitles.antarchy.thoraxis_nightmare_wastes_additions": "Пустоши кошмара волнуются", + "subtitles.antarchy.thoraxis_nightmare_wastes_mood": "Пустоши кошмара шепчут", + "subtitles.antarchy.thoraxis_dream_dunes_ambient": "Дюны сновидений шепчут", + "subtitles.antarchy.thoraxis_dream_dunes_additions": "Дюны сновидений шуршат", + "subtitles.antarchy.thoraxis_dream_dunes_mood": "Дюны сновидений вздыхают", + "subtitles.antarchy.thoraxis_lucid_pools_ambient": "Пруды люцидов гудят", + "subtitles.antarchy.thoraxis_lucid_pools_additions": "Пруды люцидов зловеще шумят", + "subtitles.antarchy.thoraxis_lucid_pools_mood": "Пруды люцидов бормочут", + "subtitles.antarchy.lucid_ambient": "Люцид гудит", + "subtitles.antarchy.lucid_flying": "Люцид порхает", + "subtitles.antarchy.lucid_attack": "Люцид атакует", + "subtitles.antarchy.lucid_bolt": "Люцид стреляет", + "subtitles.antarchy.lucid_hurt": "Люциду больно", + "subtitles.antarchy.lucid_death": "Люцид умирает", + "subtitles.antarchy.reverie_idle": "Грёза дрейфует", + "subtitles.antarchy.reverie_hurt": "Грёзе больно", + "subtitles.antarchy.reverie_worry": "Грёза тревожится", + "subtitles.antarchy.reverie_save": "Грёза спасает вас", + "subtitles.antarchy.reverie_join_player": "Грёза присоединяется к вам", + "subtitles.antarchy.reverie_alert": "Грёза предупреждает вас", + "subtitles.antarchy.flying_squirrel_idle": "Белка-летяга щебечет", + "subtitles.antarchy.flying_squirrel_beg": "Белка-летяга просит еду", + "subtitles.antarchy.flying_squirrel_nut": "Белка-летяга ест", + "subtitles.antarchy.flying_squirrel_glide_loop": "Белка-летяга парит", + "subtitles.antarchy.flying_squirrel_hurt": "Белке-летяге больно", + "subtitles.antarchy.flying_squirrel_death": "Белка-летяга умирает", + "subtitles.antarchy.nightmare_idle": "Кошмар рычит", + "subtitles.antarchy.nightmare_hurt": "Кошмару больно", + "subtitles.antarchy.nightmare_roar": "Кошмар ревёт", + "subtitles.antarchy.nightmare_death": "Кошмар умирает", + "subtitles.antarchy.nightmare_bite": "Кошмар кусает", + "subtitles.antarchy.nightmare_flap": "Кошмар машет крыльями", + "subtitles.antarchy.triffid_attack": "Триффид атакует", + "subtitles.antarchy.triffid_grab": "Триффид хватает", + "subtitles.antarchy.triffid_hurt": "Триффиду больно", + "subtitles.antarchy.triffid_death": "Триффид умирает", + "subtitles.antarchy.triffid_hiss": "Триффид шипит", + "subtitles.antarchy.triffid_growl": "Триффид урчит", + "subtitles.antarchy.gravity_gun_pickup": "Пушка притягивает", + "subtitles.antarchy.gravity_gun_drop": "Пушка отпускает", + "subtitles.antarchy.gravity_gun_hold_loop": "Пушка гудит", + "subtitles.antarchy.gravity_gun_launch": "Пушка стреляет", + "subtitles.antarchy.gravity_gun_dryfire": "Осечка пушки", + "subtitles.antarchy.bed_bug_ambient": "Постельный клоп стрекочет", + "subtitles.antarchy.bed_bug_hurt": "Постельному клопу больно", + "subtitles.antarchy.bed_bug_attack": "Постельный клоп кусает", + "subtitles.antarchy.wasp_idle": "Оса жужжит", + "subtitles.antarchy.wasp_hurt": "Осе больно", + "subtitles.antarchy.wasp_attack": "Оса жалит", + "subtitles.antarchy.wasp_death": "Оса умирает", + "subtitles.antarchy.scorpion_ambient": "Скорпион гремит", + "subtitles.antarchy.scorpion_hurt": "Скорпиону больно", + "subtitles.antarchy.scorpion_attack": "Скорпион атакует", + "subtitles.antarchy.emperor_scorpion_ambient": "Императорский скорпион гремит", + "subtitles.antarchy.emperor_scorpion_hurt": "Императорскому скорпиону больно", + "subtitles.antarchy.emperor_scorpion_attack": "Императорский скорпион атакует", + "subtitles.antarchy.emperor_scorpion_roar": "Императорский скорпион ревёт", + "subtitles.antarchy.moleworm_ambient": "Кроточервь шуршит", + "subtitles.antarchy.moleworm_hurt": "Кроточервю больно", + "subtitles.antarchy.moleworm_attack": "Кроточервь атакует", + "subtitles.antarchy.moleworm_dig": "Кроточервь копает", + "subtitles.antarchy.molevore_ambient": "Кротожор урчит", + "subtitles.antarchy.molevore_hurt": "Кротожору больно", + "subtitles.antarchy.molevore_attack": "Кротожор атакует", + "subtitles.antarchy.molevore_dig": "Кротожор копает", + "subtitles.antarchy.duct_tape_use": "Лента рвётся", + "subtitles.antarchy.potent_nyxite_hypnotic_gas": "Насыщенный никсит шипит", + "subtitles.antarchy.potent_nyxite_geyser_eruption": "Насыщенный никсит извергается", + "subtitles.antarchy.potent_nyxite_geyser_continuous": "Гейзер насыщенного никсита ревёт", + "subtitles.antarchy.missile_squid_ambient": "Кальмар-ракета гудит", + "subtitles.antarchy.missile_squid_hurt": "Кальмару-ракете больно", + "subtitles.antarchy.missile_squid_death": "Кальмар-ракета умирает", + "subtitles.antarchy.missile_squid_attack": "Кальмар-ракета атакует", + "subtitles.antarchy.kraken_flying_loop": "Кракен парит", + "subtitles.antarchy.kraken_flying_sideways_loop": "Кракен кружит", + "subtitles.antarchy.kraken_attack": "Кракен бьёт", + "subtitles.antarchy.kraken_spin": "Кракен вращается", + "subtitles.antarchy.kraken_roar": "Кракен ревёт", + "subtitles.antarchy.kraken_summon": "Кракен появляется", + "subtitles.antarchy.kraken_hurt": "Кракену больно", + "subtitles.antarchy.kraken_death": "Кракен умирает", + "subtitles.antarchy.basilisk_idle_loop": "Василиск шипит", + "subtitles.antarchy.basilisk_slither_loop": "Василиск ползёт", + "subtitles.antarchy.basilisk_bite": "Василиск кусает", + "subtitles.antarchy.basilisk_hiss": "Василиск шипит", + "subtitles.antarchy.basilisk_hurt": "Василиску больно", + "subtitles.antarchy.basilisk_death": "Василиск умирает", + "subtitles.antarchy.bomber_walk": "Бомбардир идёт", + "subtitles.antarchy.bomber_knock": "Бомбардир получает удар", + "subtitles.antarchy.bomber_explode": "Фитиль бомбардира шипит", + "subtitles.antarchy.toreterror_idle": "Тортеррор дышит", + "subtitles.antarchy.toreterror_hurt": "Тортеррору больно", + "subtitles.antarchy.toreterror_death": "Тортеррор умирает", + "subtitles.antarchy.toreterror_bomber_fire": "Тортеррор выпускает бомбардиров", + "subtitles.antarchy.toreterror_spin": "Тортеррор крутится", + "subtitles.antarchy.toreterror_ricochet": "Тортеррор рикошетит", + "subtitles.antarchy.water_cannon_fire": "Водяная пушка стреляет", + "subtitles.antarchy.toreterror_jump_up": "Тортеррор прыгает", + "subtitles.antarchy.toreterror_jump_land": "Тортеррор приземляется", + "subtitles.antarchy.stinky_fly": "Вонючие мухи жужжат", + "subtitles.antarchy.jerry_idle": "Джерри стрекочет", + "subtitles.antarchy.jerry_hurt": "Джерри ранен", + "subtitles.antarchy.jerry_death": "Джерри умирает", + "subtitles.antarchy.jerry_attack": "Джерри атакует", + "item.minecraft.potion.effect.inversion": "Зелье инверсии", + "item.minecraft.potion.effect.long_inversion": "Зелье инверсии", + "item.minecraft.splash_potion.effect.inversion": "Взрывное зелье инверсии", + "item.minecraft.splash_potion.effect.long_inversion": "Взрывное зелье инверсии", + "item.minecraft.lingering_potion.effect.inversion": "Туманное зелье инверсии", + "item.minecraft.lingering_potion.effect.long_inversion": "Туманное зелье инверсии", + "item.minecraft.tipped_arrow.effect.inversion": "Стрела инверсии", + "item.minecraft.tipped_arrow.effect.long_inversion": "Стрела инверсии", + "item.minecraft.potion.effect.paralysis": "Зелье паралича", + "item.minecraft.potion.effect.long_paralysis": "Зелье паралича", + "item.minecraft.splash_potion.effect.paralysis": "Взрывное зелье паралича", + "item.minecraft.splash_potion.effect.long_paralysis": "Взрывное зелье паралича", + "item.minecraft.lingering_potion.effect.paralysis": "Туманное зелье паралича", + "item.minecraft.lingering_potion.effect.long_paralysis": "Туманное зелье паралича", + "item.minecraft.tipped_arrow.effect.paralysis": "Стрела паралича", + "item.minecraft.tipped_arrow.effect.long_paralysis": "Стрела паралича", + "item.minecraft.potion.effect.shrinking": "Зелье уменьшения", + "item.minecraft.potion.effect.strong_shrinking": "Зелье уменьшения II", + "item.minecraft.potion.effect.extreme_shrinking": "Зелье уменьшения III", + "item.minecraft.splash_potion.effect.shrinking": "Взрывное зелье уменьшения", + "item.minecraft.splash_potion.effect.strong_shrinking": "Взрывное зелье уменьшения II", + "item.minecraft.splash_potion.effect.extreme_shrinking": "Взрывное зелье уменьшения III", + "item.minecraft.lingering_potion.effect.shrinking": "Туманное зелье уменьшения", + "item.minecraft.lingering_potion.effect.strong_shrinking": "Туманное зелье уменьшения II", + "item.minecraft.lingering_potion.effect.extreme_shrinking": "Туманное зелье уменьшения III", + "item.minecraft.tipped_arrow.effect.shrinking": "Стрела уменьшения", + "item.minecraft.tipped_arrow.effect.strong_shrinking": "Стрела уменьшения II", + "item.minecraft.tipped_arrow.effect.extreme_shrinking": "Стрела уменьшения III", + "item.minecraft.potion.effect.growing": "Зелье увеличения", + "item.minecraft.potion.effect.strong_growing": "Зелье увеличения II", + "item.minecraft.potion.effect.extreme_growing": "Зелье увеличения III", + "item.minecraft.splash_potion.effect.growing": "Взрывное зелье увеличения", + "item.minecraft.splash_potion.effect.strong_growing": "Взрывное зелье увеличения II", + "item.minecraft.splash_potion.effect.extreme_growing": "Взрывное зелье увеличения III", + "item.minecraft.lingering_potion.effect.growing": "Туманное зелье увеличения", + "item.minecraft.lingering_potion.effect.strong_growing": "Туманное зелье увеличения II", + "item.minecraft.lingering_potion.effect.extreme_growing": "Туманное зелье увеличения III", + "item.minecraft.tipped_arrow.effect.growing": "Стрела увеличения", + "item.minecraft.tipped_arrow.effect.strong_growing": "Стрела увеличения II", + "item.minecraft.tipped_arrow.effect.extreme_growing": "Стрела увеличения III", + "item.minecraft.potion.effect.dread": "Зелье ужаса", + "item.minecraft.potion.effect.long_dread": "Зелье ужаса", + "item.minecraft.splash_potion.effect.dread": "Взрывное зелье ужаса", + "item.minecraft.splash_potion.effect.long_dread": "Взрывное зелье ужаса", + "item.minecraft.lingering_potion.effect.dread": "Туманное зелье ужаса", + "item.minecraft.lingering_potion.effect.long_dread": "Туманное зелье ужаса", + "item.minecraft.tipped_arrow.effect.dread": "Стрела ужаса", + "item.minecraft.tipped_arrow.effect.long_dread": "Стрела ужаса", + "item.minecraft.potion.effect.stinky": "Зелье вонючести", + "item.minecraft.potion.effect.long_stinky": "Зелье вонючести", + "item.minecraft.splash_potion.effect.stinky": "Взрывное зелье вонючести", + "item.minecraft.splash_potion.effect.long_stinky": "Взрывное зелье вонючести", + "item.minecraft.lingering_potion.effect.stinky": "Туманное зелье вонючести", + "item.minecraft.lingering_potion.effect.long_stinky": "Туманное зелье вонючести", + "item.minecraft.tipped_arrow.effect.stinky": "Стрела вонючести", + "item.minecraft.tipped_arrow.effect.long_stinky": "Стрела вонючести", + "item.minecraft.potion.effect.haste": "Зелье спешки", + "item.minecraft.potion.effect.strong_haste": "Зелье спешки II", + "item.minecraft.splash_potion.effect.haste": "Взрывное зелье спешки", + "item.minecraft.splash_potion.effect.strong_haste": "Взрывное зелье спешки II", + "item.minecraft.lingering_potion.effect.haste": "Туманное зелье спешки", + "item.minecraft.lingering_potion.effect.strong_haste": "Туманное зелье спешки II", + "item.minecraft.tipped_arrow.effect.haste": "Стрела спешки", + "item.minecraft.tipped_arrow.effect.strong_haste": "Стрела спешки II", + "advancements.antarchy.cancel_out.title": "1 - 1 = ?", + "advancements.antarchy.cancel_out.description": "Имейте эффекты увеличения и уменьшения активными одновременно.", + "entity.antarchy.cheep": "Чип", + "item.antarchy.cheep": "Чип", + "item.antarchy.cheep_spawn_egg": "Яйцо призыва чипа", + "entity.antarchy.reverie": "Грёза", + "biome.antarchy.thoraxis": "Тораксис", + "biome.antarchy.nightmare_wastes": "Пустоши кошмара", + "biome.antarchy.umbral_hills": "Теневые холмы", + "biome.antarchy.lucid_pools": "Пруды люцидов", + "biome.antarchy.dream_dunes": "Дюны сновидений", + "block.antarchy.wild_corn": "Дикая кукуруза", + "trim_material.antarchy.blood_crystal": "Кровавый кристалл", + "trim_material.antarchy.nightmare_scale": "Чешуя кошмара", + "trim_material.antarchy.uranium": "Уран", + "trim_material.antarchy.titanium": "Титан", + "advancements.antarchy.duct_tape.title": "Я распилил эту лодку пополам!", + "advancements.antarchy.duct_tape.description": "и починил её с помощью силы клейкой ленты!", + "key.categories.antarchy": "Antarchy", + "key.antarchy.brutalfly_flap": "Элитры жестококрыла: Взмах крыльями", + "advancements.antarchy.shrink_ray_craft.title": "Дорогая, я уменьшил мобов", + "advancements.antarchy.shrink_ray_craft.description": "Создайте уменьшитель.", + "advancements.antarchy.growth_ray_craft.title": "Размер имеет значение", + "advancements.antarchy.growth_ray_craft.description": "Создайте увеличитель.", + "advancements.antarchy.squidzooka_craft.title": "Чернильный армагеддон", + "advancements.antarchy.squidzooka_craft.description": "Создайте сквидзуку.", + "advancements.antarchy.gravity_gun_craft.title": "Мастер притяжения", + "advancements.antarchy.gravity_gun_craft.description": "Создайте гравитационную пушку." +} 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 new file mode 100644 index 00000000..36d52d16 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_cn.json @@ -0,0 +1,962 @@ +{ + "block.antarchy.duplicator_log": "复制原木", + "block.antarchy.ouranwood_log": "欧兰伍德原木", + "block.antarchy.ouranwood_wood": "欧兰伍德木", + "block.antarchy.mossy_ouranwood_log": "苔藓覆盖的欧兰伍德原木", + "block.antarchy.mossy_ouranwood_wood": "苔藓覆盖的欧兰伍德木", + "block.antarchy.stripped_ouranwood_log": "去皮欧兰伍德原木", + "block.antarchy.stripped_ouranwood_wood": "去皮欧兰伍德木", + "block.antarchy.ouranwood_planks": "欧兰伍德木板", + "block.antarchy.ouranwood_stairs": "欧兰伍德楼梯", + "block.antarchy.ouranwood_slab": "欧兰伍德台阶", + "block.antarchy.ouranwood_fence": "欧兰伍德栅栏", + "block.antarchy.ouranwood_fence_gate": "欧兰伍德栅栏门", + "block.antarchy.ouranwood_door": "欧兰伍德门", + "block.antarchy.ouranwood_trapdoor": "欧兰伍德活板门", + "block.antarchy.ouranwood_pressure_plate": "欧兰伍德压力板", + "block.antarchy.ouranwood_button": "欧兰伍德按钮", + "block.antarchy.ouranwood_leaves": "欧兰伍德树叶", + "block.antarchy.ouranwood_acorn": "欧兰伍德橡果", + "block.antarchy.ouranwood_sign": "欧兰伍德告示牌", + "block.antarchy.ouranwood_hanging_sign": "欧兰伍德悬挂式告示牌", + "block.antarchy.peach_log": "桃子原木", + "block.antarchy.peach_wood": "桃子木", + "block.antarchy.stripped_peach_log": "去皮桃子原木", + "block.antarchy.stripped_peach_wood": "去皮桃子木", + "block.antarchy.peach_planks": "桃子木板", + "block.antarchy.peach_stairs": "桃子楼梯", + "block.antarchy.peach_slab": "桃子台阶", + "block.antarchy.peach_fence": "桃子栅栏", + "block.antarchy.peach_fence_gate": "桃子栅栏门", + "block.antarchy.peach_door": "桃子门", + "block.antarchy.peach_trapdoor": "桃子活板门", + "block.antarchy.peach_pressure_plate": "桃子压力板", + "block.antarchy.peach_button": "桃子按钮", + "block.antarchy.peach_leaves": "桃子树叶", + "block.antarchy.hanging_peach": "垂吊桃子", + "block.antarchy.peach_sapling": "桃子树苗", + "block.antarchy.peach_sign": "桃子告示牌", + "block.antarchy.peach_hanging_sign": "桃子悬挂式告示牌", + "block.antarchy.orange_milkweed": "橙色马利筋", + "block.antarchy.pink_milkweed": "粉色马利筋", + "block.antarchy.camellia": "山茶花", + "block.antarchy.spider_lily": "彼岸花", + "block.antarchy.lotus": "莲花", + "item.antarchy.lotus": "莲花", + "item.antarchy.critter_cage": "小动物笼", + "block.antarchy.giant_lily_pad": "巨型睡莲叶", + "block.antarchy.seashell": "贝壳", + "block.antarchy.critter_cage_block": "小动物笼", + "block.antarchy.hushweed": "哈什维德", + "block.antarchy.umbral_moss_block": "幽影苔藓块", + "block.antarchy.umbral_moss_carpet": "幽影苔藓地毯", + "block.antarchy.blush_moss_block": "绯红苔藓块", + "block.antarchy.blush_moss_carpet": "绯红苔藓地毯", + "block.antarchy.duplicator_sapling": "复制树苗", + "block.antarchy.duct_tape": "强力胶带", + "block.antarchy.infested_rooted_dirt": "虫蚀缠根 泥土", + "block.antarchy.infested_coarse_dirt": "虫蚀砂土 泥土", + "block.antarchy.nyxite": "尼克赛特", + "block.antarchy.polished_nyxite": "磨制尼克赛特", + "block.antarchy.chiseled_nyxite": "雕纹尼克赛特", + "block.antarchy.nyxite_bricks": "尼克赛特砖块", + "block.antarchy.shellstone": "舍尔斯通", + "block.antarchy.polished_shellstone": "磨制舍尔斯通", + "block.antarchy.shellstone_bricks": "舍尔斯通砖块", + "block.antarchy.chiseled_shellstone": "雕纹舍尔斯通", + "block.antarchy.mossy_shellstone_bricks": "苔藓舍尔斯通砖块", + "block.antarchy.mossy_shellstone_brick_stairs": "苔藓舍尔斯通砖楼梯", + "block.antarchy.mossy_shellstone_brick_slab": "苔藓舍尔斯通砖台阶", + "block.antarchy.mossy_shellstone_brick_wall": "苔藓舍尔斯通砖墙", + "block.antarchy.cracked_shellstone_bricks": "裂纹舍尔斯通砖块", + "block.antarchy.shellstone_stairs": "舍尔斯通楼梯", + "block.antarchy.shellstone_slab": "舍尔斯通台阶", + "block.antarchy.shellstone_wall": "舍尔斯通墙", + "block.antarchy.polished_shellstone_stairs": "磨制舍尔斯通楼梯", + "block.antarchy.polished_shellstone_slab": "磨制舍尔斯通台阶", + "block.antarchy.polished_shellstone_wall": "磨制舍尔斯通墙", + "block.antarchy.shellstone_brick_stairs": "舍尔斯通砖楼梯", + "block.antarchy.shellstone_brick_slab": "舍尔斯通砖台阶", + "block.antarchy.shellstone_brick_wall": "舍尔斯通砖墙", + "block.antarchy.nyxite_stairs": "尼克赛特楼梯", + "block.antarchy.nyxite_slab": "尼克赛特台阶", + "block.antarchy.nyxite_wall": "尼克赛特墙", + "block.antarchy.polished_nyxite_stairs": "磨制尼克赛特楼梯", + "block.antarchy.polished_nyxite_slab": "磨制尼克赛特台阶", + "block.antarchy.polished_nyxite_wall": "磨制尼克赛特墙", + "block.antarchy.nyxite_brick_stairs": "尼克赛特砖楼梯", + "block.antarchy.nyxite_brick_slab": "尼克赛特砖台阶", + "block.antarchy.nyxite_brick_wall": "尼克赛特砖墙", + "block.antarchy.pale_nyxite": "苍白尼克赛特", + "block.antarchy.nyxite_spike": "尼克赛特尖刺", + "block.antarchy.potent_nyxite": "强效尼克赛特", + "block.antarchy.triffid_goo_block": "特里菲德 黏液块", + "block.antarchy.elythia_portal": "艾莉提娅传送门", + "block.antarchy.cloud_block": "云块", + "block.antarchy.thoraxis_portal": "索尔阿克西斯传送门", + "block.antarchy.antimetal": "安提梅塔尔", + "block.antarchy.polished_antimetal": "磨制安提梅塔尔", + "block.antarchy.antimetal_scaffolding": "安提梅塔尔脚手架", + "block.antarchy.cornea_stalk": "科尔尼娅茎", + "block.antarchy.corn_crop": "玉米作物", + "block.antarchy.dream_torch": "梦境火把", + "block.antarchy.dream_wall_torch": "梦境墙上火把", + "block.antarchy.dream_lantern": "梦境灯笼", + "block.antarchy.dream_campfire": "梦境营火", + "block.antarchy.dream_fire": "梦境火", + "block.antarchy.dream_fire_ceiling": "梦境火", + "block.antarchy.budding_blood_crystal": "紫芽血晶", + "block.antarchy.blood_crystal_block": "血晶块", + "block.antarchy.small_blood_crystal_bud": "小型血晶芽", + "block.antarchy.medium_blood_crystal_bud": "中型血晶芽", + "block.antarchy.large_blood_crystal_bud": "大型血晶芽", + "block.antarchy.blood_crystal_cluster": "血晶簇", + "block.antarchy.dream_sand": "梦境沙", + "block.antarchy.dream_sandstone": "梦境砂岩", + "block.antarchy.chiseled_dream_sandstone": "雕纹梦境砂岩", + "block.antarchy.cut_dream_sandstone": "切制梦境砂岩", + "block.antarchy.smooth_dream_sandstone": "平滑梦境砂岩", + "block.antarchy.dream_sandstone_stairs": "梦境砂岩楼梯", + "block.antarchy.dream_sandstone_slab": "梦境砂岩台阶", + "block.antarchy.dream_sandstone_wall": "梦境砂岩墙", + "block.antarchy.smooth_dream_sandstone_stairs": "平滑梦境砂岩楼梯", + "block.antarchy.smooth_dream_sandstone_slab": "平滑梦境砂岩台阶", + "block.antarchy.cut_dream_sandstone_slab": "切制梦境砂岩台阶", + "block.antarchy.bed_bug_egg": "臭虫蛋", + "block.antarchy.wasp_nest": "黄蜂巢", + "block.antarchy.red_ant_nest": "红蚂蚁巢", + "block.antarchy.brown_ant_nest": "棕蚂蚁巢", + "block.antarchy.rainbow_ant_nest": "彩虹蚂蚁巢", + "block.antarchy.uranium_ore": "铀矿石", + "block.antarchy.deepslate_uranium_ore": "深板岩铀矿石", + "block.antarchy.titanium_ore": "钛矿石", + "block.antarchy.deepslate_titanium_ore": "深板岩钛矿石", + "block.antarchy.uranium_block": "铀块", + "block.antarchy.titanium_block": "钛块", + "block.antarchy.raw_uranium_block": "粗制铀块", + "block.antarchy.raw_titanium_block": "粗制钛块", + "block.antarchy.cut_uranium": "切制铀", + "block.antarchy.cut_titanium": "切制钛", + "block.antarchy.cut_uranium_slab": "切制铀台阶", + "block.antarchy.cut_titanium_slab": "切制钛台阶", + "block.antarchy.cut_uranium_stairs": "切制铀楼梯", + "block.antarchy.cut_titanium_stairs": "切制钛楼梯", + "block.antarchy.chiseled_uranium": "雕纹铀", + "block.antarchy.chiseled_titanium": "雕纹钛", + "block.antarchy.uranium_bulb": "铀灯", + "block.antarchy.titanium_bulb": "钛灯", + "block.antarchy.uranium_door": "铀门", + "block.antarchy.titanium_door": "钛门", + "block.antarchy.uranium_trapdoor": "铀活板门", + "block.antarchy.titanium_trapdoor": "钛活板门", + "block.antarchy.uranium_bars": "铀栏杆", + "block.antarchy.titanium_bars": "钛栏杆", + "tooltip.antarchy.signal_saving_bulb": "可切换开关。亮度等级等于其中储存的信号强度。", + "block.antarchy.bile": "胆汁", + "block.antarchy.ichor": "灵液", + "block.antarchy.antiwater": "反水", + "block.antarchy.lumen": "卢门", + "block.antarchy.lumen_froglight": "卢门蛙明灯", + "block.antarchy.roseate_froglight": "玫红蛙明灯", + "block.antarchy.star_coral": "星珊瑚", + "block.antarchy.star_coral_fan": "星珊瑚扇", + "block.antarchy.star_coral_block": "星珊瑚块", + "block.antarchy.dead_star_coral": "失活星珊瑚", + "block.antarchy.dead_star_coral_fan": "失活星珊瑚扇", + "block.antarchy.dead_star_coral_block": "失活星珊瑚块", + "entity.antarchy.apple_cow": "苹果牛", + "entity.antarchy.golden_apple_cow": "金苹果牛", + "entity.antarchy.enchanted_golden_apple_cow": "附魔金苹果牛", + "entity.antarchy.easter_bunny": "复活节兔", + "entity.antarchy.glimmer": "格利默", + "entity.antarchy.ouranwood_deer": "欧兰伍德鹿", + "entity.antarchy.elka": "艾尔卡", + "entity.antarchy.dorrie": "多莉", + "entity.antarchy.flying_squirrel": "飞鼠", + "entity.antarchy.caterpillar": "毛毛虫", + "entity.antarchy.butterfly": "蝴蝶", + "entity.antarchy.brutalfly": "布鲁塔尔弗莱", + "entity.antarchy.red_ant": "红蚂蚁", + "entity.antarchy.brown_ant": "棕蚂蚁", + "entity.antarchy.rainbow_ant": "彩虹蚂蚁", + "entity.antarchy.diamond_minecart": "钻石矿车", + "entity.antarchy.dr_trayaurus": "特雷奥勒斯博士", + "entity.antarchy.cloud_shark": "云鲨", + "entity.antarchy.kraken": "克拉肯", + "entity.antarchy.missile_squid": "导弹鱿鱼", + "entity.antarchy.octopus_bomb": "章鱼炸弹", + "entity.antarchy.nightmare": "梦魇", + "entity.antarchy.bed_bug": "臭虫", + "entity.antarchy.wasp": "黄蜂", + "entity.antarchy.bomber": "轰炸虫", + "entity.antarchy.moleworm": "莫尔沃姆", + "entity.antarchy.molevore": "莫尔沃尔", + "entity.antarchy.mantis": "螳螂", + "entity.antarchy.alpha_mantis": "阿尔法螳螂", + "entity.antarchy.triffid": "特里菲德", + "entity.antarchy.toreterror": "托尔泰罗尔", + "entity.antarchy.water_bomb": "水炸弹", + "subtitles.antarchy.mantis_ambient": "螳螂发出咔嗒声", + "subtitles.antarchy.mantis_hurt": "螳螂尖啸", + "subtitles.antarchy.mantis_attack": "螳螂咔嚓作响", + "subtitles.antarchy.mantis_fly_loop": "螳螂振翅嗡鸣", + "item.antarchy.big_bertha": "大贝莎", + "item.antarchy.wasp_nest": "黄蜂巢", + "item.antarchy.stink_bug": "臭屁虫", + "item.antarchy.wasp_spawn_egg": "黄蜂刷怪蛋", + "item.antarchy.bomber_spawn_egg": "轰炸虫刷怪蛋", + "item.antarchy.big_bertha_blade": "大贝莎刀刃", + "item.antarchy.big_bertha_handle": "大贝莎握柄", + "item.antarchy.big_bertha_hilt": "大贝莎护手", + "item.antarchy.battle_axe": "战斧", + "item.antarchy.attitude_adjuster": "态度调整锤", + "tooltip.antarchy.attitude_adjuster.grounded": "将地面上的目标击飞,并把空中的目标砸向地面。", + "tooltip.antarchy.attitude_adjuster.slam": "在空中右键可发动落地重击。", + "item.antarchy.cloud_shark_fin": "云鲨鳍", + "item.antarchy.cloud_shark_fin_soup": "云鲨鳍汤", + "tooltip.antarchy.cloud_shark_fin_soup": "获得力量与缓降。", + "tooltip.antarchy.critter_cage.empty": "右键投掷", + "tooltip.antarchy.critter_cage.contains": "装有:%s", + "tooltip.antarchy.critter_cage.release": "右键释放", + "tooltip.antarchy.critter_cage.place": "潜行键+右键放置", + "item.antarchy.kraken_tooth": "克拉肯牙齿", + "item.antarchy.kraken_tentacle": "克拉肯触手", + "item.antarchy.krakens_grasp": "克拉肯之握", + "entity.antarchy.tentacle": "触手", + "item.antarchy.basilisk_fang": "蛇怪尖牙", + "item.antarchy.basilisk_dagger": "蛇怪匕首", + "item.antarchy.blood_crystal_block": "血晶块", + "item.antarchy.small_blood_crystal_bud": "小型血晶芽", + "item.antarchy.medium_blood_crystal_bud": "中型血晶芽", + "item.antarchy.large_blood_crystal_bud": "大型血晶芽", + "item.antarchy.blood_crystal_cluster": "血晶簇", + "item.antarchy.dream_sand": "梦境沙", + "item.antarchy.dream_sandstone": "梦境砂岩", + "item.antarchy.chiseled_dream_sandstone": "雕纹梦境砂岩", + "item.antarchy.cut_dream_sandstone": "切制梦境砂岩", + "item.antarchy.smooth_dream_sandstone": "平滑梦境砂岩", + "item.antarchy.dream_sandstone_stairs": "梦境砂岩楼梯", + "item.antarchy.dream_sandstone_slab": "梦境砂岩台阶", + "item.antarchy.dream_sandstone_wall": "梦境砂岩墙", + "item.antarchy.smooth_dream_sandstone_stairs": "平滑梦境砂岩楼梯", + "item.antarchy.smooth_dream_sandstone_slab": "平滑梦境砂岩台阶", + "item.antarchy.cut_dream_sandstone_slab": "切制梦境砂岩台阶", + "item.antarchy.dream_torch": "梦境火把", + "item.antarchy.dream_lantern": "梦境灯笼", + "item.antarchy.dream_campfire": "梦境营火", + "item.antarchy.giant_lily_pad": "巨型睡莲叶", + "item.antarchy.seashell": "贝壳", + "item.antarchy.nightmare_scale": "梦魇鳞片", + "item.antarchy.nightmare_helmet": "梦魇头盔", + "item.antarchy.nightmare_chestplate": "梦魇胸甲", + "item.antarchy.nightmare_leggings": "梦魇护腿", + "item.antarchy.nightmare_boots": "梦魇靴子", + "item.antarchy.nightmare_sword": "梦魇剑", + "tooltip.antarchy.nightmare_armor_double_damage": "有%s%%的概率造成双倍伤害", + "tooltip.antarchy.nightmare_armor_set_bonus": "全套:免疫凋零与恐惧", + "tooltip.antarchy.nightmare_sword": "生命值越低,造成的伤害越高。", + "tooltip.antarchy.nightmare_sword_damage": "造成%s点伤害", + "tooltip.antarchy.primordial_helmet_water_breathing": "使穿戴者获得水下呼吸", + "tooltip.antarchy.primordial_armor_knockback_dealt": "每件增加%s攻击击退", + "tooltip.antarchy.primordial_armor_set_bonus": "全套:攻击无视敌人的击退抗性", + "attribute.antarchy.double_damage_chance": "双倍伤害概率", + "attribute.antarchy.bloodglass_max_hearts": "血晶之心上限", + "item.antarchy.molevore_nose": "莫尔沃尔鼻子", + "item.antarchy.moleworm": "莫尔沃姆", + "item.antarchy.triffid_spawn_egg": "特里菲德刷怪蛋", + "item.antarchy.infested_rooted_dirt": "虫蚀缠根 泥土", + "item.antarchy.infested_coarse_dirt": "虫蚀砂土 泥土", + "item.antarchy.pale_nyxite": "苍白尼克赛特", + "item.antarchy.polished_nyxite": "磨制尼克赛特", + "item.antarchy.chiseled_nyxite": "雕纹尼克赛特", + "item.antarchy.nyxite_bricks": "尼克赛特砖块", + "item.antarchy.shellstone": "舍尔斯通", + "item.antarchy.polished_shellstone": "磨制舍尔斯通", + "item.antarchy.shellstone_bricks": "舍尔斯通砖块", + "item.antarchy.chiseled_shellstone": "雕纹舍尔斯通", + "item.antarchy.mossy_shellstone_bricks": "苔藓舍尔斯通砖块", + "item.antarchy.mossy_shellstone_brick_stairs": "苔藓舍尔斯通砖楼梯", + "item.antarchy.mossy_shellstone_brick_slab": "苔藓舍尔斯通砖台阶", + "item.antarchy.mossy_shellstone_brick_wall": "苔藓舍尔斯通砖墙", + "item.antarchy.cracked_shellstone_bricks": "裂纹舍尔斯通砖块", + "item.antarchy.shellstone_stairs": "舍尔斯通楼梯", + "item.antarchy.shellstone_slab": "舍尔斯通台阶", + "item.antarchy.shellstone_wall": "舍尔斯通墙", + "item.antarchy.polished_shellstone_stairs": "磨制舍尔斯通楼梯", + "item.antarchy.polished_shellstone_slab": "磨制舍尔斯通台阶", + "item.antarchy.polished_shellstone_wall": "磨制舍尔斯通墙", + "item.antarchy.shellstone_brick_stairs": "舍尔斯通砖楼梯", + "item.antarchy.shellstone_brick_slab": "舍尔斯通砖台阶", + "item.antarchy.shellstone_brick_wall": "舍尔斯通砖墙", + "item.antarchy.nyxite_stairs": "尼克赛特楼梯", + "item.antarchy.nyxite_slab": "尼克赛特台阶", + "item.antarchy.nyxite_wall": "尼克赛特墙", + "item.antarchy.polished_nyxite_stairs": "磨制尼克赛特楼梯", + "item.antarchy.polished_nyxite_slab": "磨制尼克赛特台阶", + "item.antarchy.polished_nyxite_wall": "磨制尼克赛特墙", + "item.antarchy.nyxite_brick_stairs": "尼克赛特砖楼梯", + "item.antarchy.nyxite_brick_slab": "尼克赛特砖台阶", + "item.antarchy.nyxite_brick_wall": "尼克赛特砖墙", + "item.antarchy.potent_nyxite": "强效尼克赛特", + "item.antarchy.antimetal": "安提梅塔尔", + "item.antarchy.polished_antimetal": "磨制安提梅塔尔", + "item.antarchy.antimetal_scaffolding": "安提梅塔尔脚手架", + "item.antarchy.ouranwood_acorn": "欧兰伍德橡果", + "item.antarchy.ouranwood_boat": "欧兰伍德船", + "item.antarchy.ouranwood_chest_boat": "欧兰伍德运输船", + "item.antarchy.raw_venison": "生鹿肉", + "item.antarchy.cooked_venison": "熟鹿肉", + "item.antarchy.peach_sapling": "桃子树苗", + "item.antarchy.peach": "桃子", + "item.antarchy.peach_pie": "桃子派", + "item.antarchy.cornbread": "玉米面包", + "item.antarchy.popcorn": "爆米花", + "item.antarchy.peach_sign": "桃子告示牌", + "item.antarchy.peach_hanging_sign": "桃子悬挂式告示牌", + "item.antarchy.peach_boat": "桃子船", + "item.antarchy.peach_chest_boat": "桃子运输船", + "item.antarchy.orange_milkweed": "橙色马利筋", + "item.antarchy.pink_milkweed": "粉色马利筋", + "item.antarchy.camellia": "山茶花", + "item.antarchy.spider_lily": "彼岸花", + "item.antarchy.hushweed": "哈什维德", + "item.antarchy.umbral_moss_block": "幽影苔藓块", + "item.antarchy.umbral_moss_carpet": "幽影苔藓地毯", + "item.antarchy.blush_moss_block": "绯红苔藓块", + "item.antarchy.blush_moss_carpet": "绯红苔藓地毯", + "item.antarchy.mud_pie": "泥巴派", + "item.antarchy.duct_tape": "强力胶带", + "item.antarchy.duct_tape.tooltip": "放置后右键可修理工具", + "item.antarchy.rainbow_sugar": "彩虹糖", + "item.antarchy.uranium_nugget": "铀粒", + "item.antarchy.titanium_nugget": "钛粒", + "item.antarchy.raw_uranium_scrap": "粗制铀碎片", + "item.antarchy.raw_titanium_scrap": "粗制钛碎片", + "item.antarchy.raw_uranium": "粗制铀", + "item.antarchy.raw_titanium": "粗制钛", + "item.antarchy.uranium_ingot": "铀锭", + "item.antarchy.titanium_ingot": "钛锭", + "item.antarchy.blood_crystal_shard": "血晶碎片", + "item.antarchy.blood_crystal_apple": "血晶苹果", + "item.antarchy.blood_crystal_katana": "血晶武士刀", + "item.antarchy.blood_crystal_helmet": "血晶头盔", + "item.antarchy.blood_crystal_chestplate": "血晶胸甲", + "item.antarchy.blood_crystal_leggings": "血晶护腿", + "item.antarchy.blood_crystal_boots": "血晶靴子", + "item.antarchy.blood_crystal_armor.tooltip": "获得一颗血晶之心,可抵挡一次攻击,破碎后会重新充能。", + "item.antarchy.blood_crystal_boots.tooltip2": "重力反转时向上坠落不会受到摔落伤害。", + "item.antarchy.blood_crystal_apple.tooltip": "获得血晶守护,并在效果持续期间提供可重新充能的临时血晶之心。", + "tooltip.antarchy.blood_crystal_katana.launch": "命中时将你向前推进。", + "tooltip.antarchy.blood_crystal_katana.trail": "在身后留下猩红轨迹。", + "item.antarchy.mantis_claw": "螳螂利爪", + "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", + "item.antarchy.king_scale": "国王鳞片", + "item.antarchy.queen_scale": "女王鳞片", + "item.antarchy.jumpy_bug_leg": "跳跳虫腿", + "item.antarchy.jumpy_boots": "弹跳靴", + "tooltip.antarchy.jumpy_boots": "潜行蓄力,然后跳跃即可向上弹射。", + "item.antarchy.brutalfly_wing": "布鲁塔尔弗莱翼", + "item.antarchy.brutalfly_elytra": "布鲁塔尔弗莱鞘翅", + "tooltip.antarchy.brutalfly_elytra.flap": "飞行时按住%s拍动翅膀", + "item.antarchy.cornea_ear": "科尔尼娅耳朵", + "item.antarchy.corn": "玉米", + "item.antarchy.corn_seeds": "玉米种子", + "item.antarchy.raw_corndog": "生玉米热狗", + "item.antarchy.cooked_corndog": "熟玉米热狗", + "item.antarchy.high_fructose_corn_syrup": "高果糖玉米糖浆", + "jei.antarchy.americanize": "美国化", + "item.antarchy.american_name": "美式%s", + "item.antarchy.root_beer": "根汁汽水", + "item.antarchy.primordial_scute": "原初甲片", + "item.antarchy.triffid_goo": "特里菲德 黏液", + "item.antarchy.triffid_goo_block": "特里菲德 黏液块", + "tooltip.antarchy.triffid_goo_block": "高速接触时会向上弹起,否则会沉入其中。", + "item.antarchy.cloud_bucket": "云桶", + "tooltip.antarchy.cloud_bucket.midair": "可放置在空中", + "item.antarchy.lumen_bucket": "卢门桶", + "item.antarchy.scorpion_whip": "帝王蝎鞭", + "tooltip.antarchy.scorpion_whip.lash": "从远处鞭打猎物并嵌入带毒的牵绳。", + "tooltip.antarchy.scorpion_whip.reel": "右键收回被牵住的猎物。", + "tooltip.antarchy.scorpion_whip.snap": "再次左键被牵住的猎物可扯出毒刺。", + "item.antarchy.fallen_king_crown": "陨落之王的王冠", + "tooltip.antarchy.fallen_king_crown.hero": "击杀敌对生物时获得村庄英雄", + "item.antarchy.vortex_eye": "漩涡之眼", + "item.antarchy.ultimate_helmet": "终极头盔", + "item.antarchy.ultimate_chestplate": "终极胸甲", + "item.antarchy.ultimate_leggings": "终极护腿", + "item.antarchy.ultimate_boots": "终极靴子", + "item.antarchy.ultimate_sword": "终极剑", + "item.antarchy.ultimate_pickaxe": "终极镐", + "item.antarchy.ultimate_axe": "终极斧", + "item.antarchy.ultimate_shovel": "终极锹", + "item.antarchy.ultimate_hoe": "终极锄", + "item.antarchy.ultimate_bow": "终极弓", + "item.antarchy.ultimate_crossbow": "终极弩", + "item.antarchy.ultimate_crossbow.capacity": "一次最多装填16支箭", + "item.antarchy.ultimate_crossbow.arrows_remaining": "已装填%1$s支%2$s", + "item.antarchy.ultimate_mace": "终极重锤", + "item.antarchy.moggles": "莫格尔斯", + "itemGroup.antarchy.antarchy": "安塔奇", + "item.antarchy.bile_bucket": "胆汁桶", + "item.antarchy.ichor_bucket": "灵液桶", + "item.antarchy.antiwater_bucket": "反水桶", + "item.antarchy.reverie_bottle": "雷弗里瓶", + "item.antarchy.squidzooka": "斯奎祖卡", + "item.antarchy.rpo_launcher": "火动章发射器", + "item.antarchy.shrink_ray": "缩小射线枪", + "item.antarchy.growth_ray": "生长射线枪", + "tooltip.antarchy.shrink_ray": "永久缩小目标。按住以蓄力。", + "tooltip.antarchy.growth_ray": "永久放大目标。按住以蓄力。", + "tooltip.antarchy.size_ray_milk_reset": "喝牛奶可重置此效果。", + "tooltip.antarchy.reverie_bottle.capture": "手持玻璃瓶右键雷弗里即可将其收纳。", + "tooltip.antarchy.reverie_bottle.release": "右键释放雷弗里。", + "item.antarchy.gravity_gun": "重力枪", + "item.antarchy.miners_dream": "矿工之梦", + "tooltip.antarchy.miners_dream.line1": "右键挖出一条蜿蜒洞穴。", + "tooltip.antarchy.miners_dream.line2": "不会破坏贵重方块。", + "message.antarchy.miners_dream_disabled": "矿工之梦已禁用。", + "message.antarchy.miners_dream_busy": "你之前的梦仍在展开。", + "item.antarchy.diamond_minecart": "钻石矿车", + "item.antarchy.cogwheel_pet": "齿轮宠物", + "item.antarchy.fire_dragon_pet": "火龙宠物", + "item.antarchy.ice_dragon_pet": "冰龙宠物", + "item.antarchy.lightning_dragon_pet": "雷龙宠物", + "item.antarchy.gorgon_pet": "戈尔贡宠物", + "item.antarchy.apple_cow_spawn_egg": "苹果牛刷怪蛋", + "item.antarchy.red_ant_spawn_egg": "红蚂蚁刷怪蛋", + "item.antarchy.brown_ant_spawn_egg": "棕蚂蚁刷怪蛋", + "item.antarchy.rainbow_ant_spawn_egg": "彩虹蚂蚁刷怪蛋", + "item.antarchy.golden_apple_cow_spawn_egg": "金色苹果牛刷怪蛋", + "item.antarchy.enchanted_golden_apple_cow_spawn_egg": "附魔金色苹果牛刷怪蛋", + "item.antarchy.dr_trayaurus_spawn_egg": "特雷奥勒斯博士刷怪蛋", + "item.antarchy.easter_bunny_spawn_egg": "复活节兔刷怪蛋", + "item.antarchy.glimmer_spawn_egg": "格利默刷怪蛋", + "item.antarchy.ouranwood_deer_spawn_egg": "欧兰伍德鹿刷怪蛋", + "item.antarchy.spirit_apple": "灵魂苹果", + "item.antarchy.elka_spawn_egg": "艾尔卡刷怪蛋", + "item.antarchy.glimmer_bottle": "格利默瓶", + "item.antarchy.glimmer_bottle.contains": "装有:%s", + "glimmer_variant.antarchy.apple_cow": "苹果牛", + "glimmer_variant.antarchy.ouranwood_deer": "欧兰伍德鹿", + "glimmer_variant.antarchy.frog": "青蛙", + "glimmer_variant.antarchy.ant": "蚂蚁", + "glimmer_variant.antarchy.elka": "艾尔卡", + "entity.antarchy.glimmer.set_sit": "已让格利默坐下。", + "entity.antarchy.glimmer.set_follow": "已让格利默跟随。", + "entity.antarchy.glimmer.set_wander": "已让格利默自由游荡。", + "entity.antarchy.glimmer.ability.ant": "你的蚂蚁激起了你对%s的斗志!", + "entity.antarchy.glimmer.ability.apple_cow": "你的苹果牛哞叫着滋养了你!", + "entity.antarchy.glimmer.ability.elka": "你的艾尔卡发出尖啸并震碎了守护!", + "entity.antarchy.glimmer.ability.deer": "你的欧兰伍德鹿冲穿了敌人!", + "entity.antarchy.glimmer.ability.frog": "你的青蛙吞掉了%s!", + "item.antarchy.glimmer_bottle.passive.apple_cow": "被动:饥饿值消耗速度降低25%", + "item.antarchy.glimmer_bottle.ability.apple_cow": "能力:饥饿值较低时哞叫,短暂提供饱和与生命恢复", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "被动:速度 Ⅰ", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "能力:冲刺撞向敌对生物时会贯穿并将其击飞", + "item.antarchy.glimmer_bottle.passive.frog": "被动:跳跃提升 Ⅰ", + "item.antarchy.glimmer_bottle.ability.frog": "能力:吞噬附近的敌对生物,并在一段时间内变得更大更强", + "item.antarchy.glimmer_bottle.passive.ant": "被动:攻击距离略微增加", + "item.antarchy.glimmer_bottle.ability.ant": "能力:命中大型敌人时短暂获得力量 Ⅱ", + "item.antarchy.glimmer_bottle.passive.elka": "被动:血晶守护 Ⅱ", + "item.antarchy.glimmer_bottle.ability.elka": "能力:一颗守护之心破碎时发出尖啸并化作冲击波", + "advancements.antarchy.spirant_animal.title": "蚁气相投", + "advancements.antarchy.spirant_animal.description": "驯服一个蚂蚁格利默。", + "advancements.antarchy.hoppy_together.title": "一起蹦跶", + "advancements.antarchy.hoppy_together.description": "驯服一个青蛙格利默。", + "advancements.antarchy.deerly_beloved.title": "鹿有知己", + "advancements.antarchy.deerly_beloved.description": "驯服一个欧兰伍德鹿格利默。", + "advancements.antarchy.elkcellent_choice.title": "麋好选择", + "advancements.antarchy.elkcellent_choice.description": "驯服一个艾尔卡 格利默。", + "advancements.antarchy.apple_of_my_eye.title": "掌上明珠", + "advancements.antarchy.apple_of_my_eye.description": "驯服一个苹果牛格利默。", + "item.antarchy.dorrie_spawn_egg": "多莉刷怪蛋", + "item.antarchy.flying_squirrel_spawn_egg": "飞鼠刷怪蛋", + "item.antarchy.caterpillar_spawn_egg": "毛毛虫刷怪蛋", + "item.antarchy.butterfly_spawn_egg": "蝴蝶刷怪蛋", + "item.antarchy.brutalfly_spawn_egg": "布鲁塔尔弗莱刷怪蛋", + "item.antarchy.cloud_shark_spawn_egg": "云鲨刷怪蛋", + "item.antarchy.kraken_spawn_egg": "呃,不。别这样。", + "item.antarchy.missile_squid_spawn_egg": "导弹鱿鱼刷怪蛋", + "item.antarchy.octopus_bomb_spawn_egg": "章鱼炸弹刷怪蛋", + "item.antarchy.nightmare_spawn_egg": "梦魇刷怪蛋", + "item.antarchy.toreterror_spawn_egg": "托尔泰罗尔刷怪蛋", + "item.antarchy.water_cannon": "水炮", + "item.antarchy.primordial_helmet": "原初头盔", + "item.antarchy.primordial_chestplate": "原初胸甲", + "item.antarchy.primordial_leggings": "原初护腿", + "item.antarchy.primordial_boots": "原初靴子", + "item.antarchy.bed_bug_spawn_egg": "臭虫刷怪蛋", + "item.antarchy.moleworm_spawn_egg": "莫尔沃姆刷怪蛋", + "item.antarchy.molevore_spawn_egg": "莫尔沃尔刷怪蛋", + "item.antarchy.reverie_spawn_egg": "雷弗里刷怪蛋", + "item.antarchy.mantis_spawn_egg": "螳螂刷怪蛋", + "item.antarchy.alpha_mantis_spawn_egg": "阿尔法螳螂刷怪蛋", + "biome.antarchy.moleworm_caves": "莫尔沃姆洞穴", + "biome.antarchy.elythia_meadow": "艾莉提娅草甸", + "biome.antarchy.butterfly_fields": "蝴蝶原野", + "biome.antarchy.ouranwood_forest": "欧兰伍德 森林", + "biome.antarchy.glimmering_pools": "微光池", + "biome.antarchy.peach_forest": "桃林", + "biome.antarchy.fungal_ouranwood_forest": "菌生欧兰伍德 森林", + "biome.antarchy.glowcap_caves": "荧光菌盖洞穴", + "message.antarchy.brown_ant_activated": "棕蚂蚁已准备好开启目的地。", + "message.antarchy.brown_ant_needs_reagent": "这只棕蚂蚁需要试剂才能开启目的地。", + "message.antarchy.rainbow_ant_activated": "彩虹蚂蚁嗡鸣着连接到一个新的英菲尼提目的地。", + "message.antarchy.rainbow_ant_activated_inherited": "彩虹蚂蚁嗡鸣着连接到继承的英菲尼提目的地。", + "message.antarchy.rainbow_ant_activated_inherited_existing": "彩虹蚂蚁重新连接到继承的英菲尼提目的地。", + "message.antarchy.rainbow_ant_failed_dimension_create": "创建维度失败。英菲尼提配置可能存在问题。请重启或重新登录后再试。", + "message.antarchy.rainbow_ant_infinity_missing": "必须安装英菲尼提,彩虹蚂蚁维度才能正常使用。", + "message.antarchy.rainbow_ant_needs_reagent": "这只彩虹蚂蚁需要试剂才能开启维度。", + "message.antarchy.red_ant_activated": "红蚂蚁已准备好开启目的地。", + "message.antarchy.red_ant_needs_reagent": "这只红蚂蚁需要试剂才能开启目的地。", + "message.antarchy.termite_activated": "白蚁已准备好开启目的地。", + "message.antarchy.termite_needs_reagent": "这只白蚁需要试剂才能开启目的地。", + "death.attack.spit_bug_disrespect": "%1$s遭到了喷吐虫的羞辱", + "death.attack.jumpy_bug_jump": "%1$s被跳跳虫扑倒了", + "death.attack.hercules_beetle_obliteration": "%1$s被赫拉克勒斯甲虫彻底摧毁", + "message.antarchy.big_bertha.mode": "大贝莎模式:%s", + "message.antarchy.big_bertha.mode.basilisk": "蛇怪", + "message.antarchy.big_bertha.mode.lucid": "卢西德", + "message.antarchy.big_bertha.mode.nightmare": "梦魇", + "message.antarchy.big_bertha.mode.kraken": "克拉肯", + "message.antarchy.big_bertha.mode.molevore": "莫尔沃尔", + "message.antarchy.big_bertha.mode.toreterror": "托尔泰罗尔", + "message.antarchy.ultimate_tool.mode_3x3": "已切换至3×3挖掘", + "message.antarchy.ultimate_tool.mode_default": "已切换至默认挖掘", + "advancements.antarchy.hey_listen.title": "嘿,听着!", + "advancements.antarchy.hey_listen.description": "一只雷弗里加入了你。", + "advancements.antarchy.very_hungry_caterpillar.title": "好饿的毛毛虫", + "advancements.antarchy.very_hungry_caterpillar.description": "帮助一只毛毛虫成长。", + "effect.antarchy.dread": "恐惧", + "effect.antarchy.dread.description": "会产生视觉和听觉幻觉。", + "effect.antarchy.paralyzed": "麻痹", + "effect.antarchy.paralyzed.description": "阻止目标移动。", + "effect.antarchy.inverted": "反转", + "effect.antarchy.inverted.description": "反转目标的重力。", + "effect.antarchy.stinky": "臭气", + "effect.antarchy.stinky.description": "驱赶被动和中立生物,吸引节肢生物。", + "effect.antarchy.gooped.description": "减缓移动速度和攻击速度。", + "effect.antarchy.shrinking": "缩小", + "effect.antarchy.growth": "生长", + "effect.antarchy.bloodglass_ward": "血晶守护", + "effect.antarchy.bloodglass_ward.description": "给予会破碎的心,能吸收整整一次伤害。它们会随时间恢复。", + "death.attack.triffid_mauling": "%1$s被一株植物撕咬致死", + "death.attack.triffid_mauling.player": "%1$s被一株植物撕咬致死", + "death.attack.triffid_swallow": "%1$s被特里菲德吞下了", + "death.attack.triffid_swallow.player": "%1$s被特里菲德吞下了", + "potion.antarchy.haste": "急迫药水", + "potion.antarchy.strong_haste": "强效急迫药水", + "tooltip.antarchy.big_bertha.mode": "模式:%s", + "tooltip.antarchy.big_bertha.toggle_mode": "潜行键+右键循环切换首领模式。", + "tooltip.antarchy.big_bertha.mode.basilisk": "右键可麻痹目标。攻击会施加中毒与缓慢。", + "tooltip.antarchy.big_bertha.mode.lucid": "攻击会使目标反转数秒。自身处于反转状态时攻击伤害更高。", + "tooltip.antarchy.big_bertha.mode.nightmare": "玩家会受到恐惧;攻击会施加虚弱。", + "tooltip.antarchy.big_bertha.mode.kraken": "攻击会将目标砸回并召唤闪电。", + "tooltip.antarchy.big_bertha.mode.molevore": "右键旋转向前并钻穿莫尔沃尔方块。", + "tooltip.antarchy.big_bertha.mode.toreterror": "右键跃向空中并以范围冲击波砸落。", + "tooltip.antarchy.ultimate_tools_3x3": "潜行键+右键切换3×3挖掘。", + "tooltip.antarchy.moggles.reveal": "获得夜视并指向附近洞穴。", + "tooltip.antarchy.moggles.underground": "仅在无法接触天空时生效。", + "tooltip.antarchy.cornea_ear.vision": "获得%s秒夜视。", + "tooltip.antarchy.mob_coming_soon": "生物即将推出!", + "tooltip.antarchy.gravity_gun.primary": "左键:轰飞附近实体或投掷抓住的目标。", + "tooltip.antarchy.gravity_gun.secondary": "右键:拉取实体或有效方块。", + "tooltip.antarchy.gravity_gun.scroll": "按住控制键并滚动滚轮,可拉近或推远抓住的目标。", + "tooltip.antarchy.gravity_gun.blacklist": "不会影响黑名单中的方块或实体。", + "tooltip.antarchy.antimetal_inversion": "反转正下方实体的重力", + "tooltip.antarchy.diamond_minecart.forward": "将在之后实现。", + "tooltip.antarchy.diamond_minecart.rails": " ", + "tooltip.antarchy.rainbow_sugar": "激活彩虹蚂蚁维度。在其中食用可返回家园。", + "advancements.antarchy.visit_elythia.title": "跨维度之蚁", + "advancements.antarchy.visit_elythia.description": "使用一只棕蚂蚁前往艾莉提娅。", + "advancements.antarchy.visit_thoraxis.title": "蚁怒管理", + "advancements.antarchy.visit_thoraxis.description": "使用一只红蚂蚁前往索尔阿克西斯。", + "advancements.antarchy.fallen_kingdom_castle.title": "我曾统治世界……", + "advancements.antarchy.fallen_kingdom_castle.description": "发现陨落王国城堡。", + "advancements.antarchy.fallen_king_crown.title": "我一声令下,区块便会加载……", + "advancements.antarchy.fallen_king_crown.description": "获得陨落之王的王冠。", + "advancements.antarchy.the_lab.title": "大家好,我是丹!", + "advancements.antarchy.the_lab.description": "发现特雷奥勒斯博士的实验室。", + "advancements.antarchy.sweater_dreams.title": "毛衣之梦", + "advancements.antarchy.sweater_dreams.description": "击败梦魇。", + "advancements.antarchy.stone_cold.title": "冷若磐石", + "advancements.antarchy.stone_cold.description": "击败一只蛇怪。", + "advancements.antarchy.moley_poley.title": "鼹鼹滚滚", + "advancements.antarchy.moley_poley.description": "击败一只莫尔沃尔。", + "advancements.antarchy.lucid_dreams.title": "清醒梦", + "advancements.antarchy.lucid_dreams.description": "击败一只卢西德。", + "advancements.antarchy.davy_jones_locker.title": "戴维·琼斯的魔柜", + "advancements.antarchy.davy_jones_locker.description": "击败克拉肯。", + "advancements.antarchy.shark_weak.title": "当鲨鱼会飞", + "advancements.antarchy.shark_weak.description": "击败一只云鲨。", + "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "别让臭虫咬你", + "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "击败一只臭虫。", + "advancements.antarchy.soups_up.title": "汤好了", + "advancements.antarchy.soups_up.description": "食用云鲨鳍汤。", + "advancements.antarchy.in_the_upside_down.title": "身处颠倒世界", + "advancements.antarchy.in_the_upside_down.description": "首次进入反转状态。", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "谁闻到就是谁放的", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "首次进入臭气状态。", + "advancements.antarchy.ultimate_armor.title": "终极防护", + "advancements.antarchy.ultimate_armor.description": "收集整套终极盔甲。", + "advancements.antarchy.ultimate_bow.title": "弓西米亚狂想曲", + "advancements.antarchy.ultimate_bow.description": "获得终极弓。", + "advancements.antarchy.brutalfly.title": "像布鲁塔尔弗莱一样飞舞,像蜜蜂一样蜇刺", + "advancements.antarchy.brutalfly.description": "获得布鲁塔尔弗莱鞘翅。", + "advancements.antarchy.now_watch_me_whip.title": "现在看我挥鞭", + "advancements.antarchy.now_watch_me_whip.description": "现在看我跳奈 奈", + "advancements.antarchy.kill_molevore.title": "鼹鼹滚滚", + "advancements.antarchy.kill_molevore.description": "击杀一只莫尔沃尔。", + "advancements.antarchy.water_cannon_craft.title": "越湿越好!", + "advancements.antarchy.water_cannon_craft.description": "获得水炮。", + "advancements.antarchy.kill_toreterror.title": "不如叫托尔-糟糕准头!", + "advancements.antarchy.kill_toreterror.description": "击败托尔泰罗尔。", + "advancements.antarchy.challenge_games.title": "挑战游戏!", + "advancements.antarchy.challenge_games.description": "进入废墟竞技场。", + "advancements.antarchy.bugged_out.title": "虫到极点", + "advancements.antarchy.bugged_out.description": "击败阿尔法螳螂。", + "death.attack.bed_bug_bite": "%1$s被臭虫咬了", + "death.attack.bed_bug_bite.player": "%1$s在与%2$s战斗时被臭虫咬了", + "message.antarchy.dread_too_scared_to_sleep": "你害怕得无法入睡。", + "death.attack.kraken_mauling": "%1$s被克拉肯拖入水下", + "death.attack.kraken_mauling.player": "%1$s在与%2$s战斗时被克拉肯拖入水下", + "death.attack.kraken_lightning": "%1$s被克拉肯的风暴击倒", + "death.attack.kraken_lightning.player": "%1$s在与%2$s战斗时被克拉肯的风暴击倒", + "death.attack.rpo_launcher_blast": "%1$s被火动章击倒", + "death.attack.rpo_launcher_blast.player": "%1$s在与%2$s战斗时被火动章击倒", + "death.attack.nightmare_mauling": "%1$s被梦魇吞噬", + "death.attack.nightmare_mauling.player": "%1$s在与%2$s战斗时被梦魇吞噬", + "death.attack.basilisk_bite": "%1$s被蛇怪吞下", + "death.attack.basilisk_bite.player": "%1$s在与%2$s战斗时被蛇怪吞下", + "death.attack.emperor_scorpion_sting": "%1$s被帝王蝎蜇伤", + "death.attack.emperor_scorpion_sting.player": "%1$s在与%2$s战斗时被帝王蝎蜇伤", + "death.attack.cornea_stalk_prick": "%1$s被科尔尼娅茎刺死", + "death.attack.toreterror_spin": "%1$s被托尔泰罗尔旋转致死", + "death.attack.toreterror_spin.player": "%1$s被托尔泰罗尔旋转致死", + "death.attack.toreterror_jump": "%1$s被托尔泰罗尔砸死", + "death.attack.toreterror_jump.player": "%1$s被托尔泰罗尔砸死", + "death.attack.water_soaked": "%1$s被%2$s浸透致死", + "death.attack.water_soaked.player": "%1$s被%2$s浸透致死", + "entity.antarchy.lucid": "卢西德", + "item.antarchy.lucid_spawn_egg": "卢西德刷怪蛋", + "item.antarchy.lucid_eye": "卢西德之眼", + "entity.antarchy.scorpion": "蝎子", + "item.antarchy.scorpion_spawn_egg": "蝎子刷怪蛋", + "entity.antarchy.basilisk": "蛇怪", + "item.antarchy.basilisk_spawn_egg": "蛇怪刷怪蛋", + "entity.antarchy.emperor_scorpion": "帝王蝎", + "item.antarchy.emperor_scorpion_spawn_egg": "帝王蝎刷怪蛋", + "item.antarchy.emperor_scorpion_stinger": "帝王蝎毒刺", + "item.antarchy.lucid_pearl": "卢西德珍珠", + "tooltip.antarchy.lucid_pearl": "投掷一个重力反转的弹射物。", + "tooltip.antarchy.lucid_pearl.detail": "将你传送到落点并施加反转。", + "subtitles.antarchy.squidzooka_fire": "斯奎祖卡开火", + "subtitles.antarchy.shrink_ray": "缩小射线枪开火", + "subtitles.antarchy.growth_ray": "生长射线枪开火", + "subtitles.antarchy.size_ray_charge": "尺寸射线枪蓄力", + "subtitles.antarchy.ant_ambient": "蚂蚁唧唧叫", + "subtitles.antarchy.ant_idle": "蚂蚁发出动静", + "subtitles.antarchy.ant_hurt": "蚂蚁受伤", + "subtitles.antarchy.ant_bite": "蚂蚁啃咬", + "subtitles.antarchy.ant_gather": "蚂蚁采集", + "subtitles.antarchy.ant_nest": "蚁巢沙沙作响", + "subtitles.antarchy.cloud_shark_bite": "云鲨啃咬", + "subtitles.antarchy.cloud_shark_idle": "云鲨发出动静", + "subtitles.antarchy.cloud_shark_hurt": "云鲨受伤", + "subtitles.antarchy.cloud_shark_death": "云鲨死亡", + "subtitles.antarchy.cloud_shark_fly": "云鲨飞行", + "subtitles.antarchy.caterpillar_idle": "毛毛虫发出动静", + "subtitles.antarchy.caterpillar_hurt": "毛毛虫受伤", + "subtitles.antarchy.caterpillar_crawl": "毛毛虫爬行", + "subtitles.antarchy.butterfly_hurt": "蝴蝶受伤", + "subtitles.antarchy.brutalfly_idle": "布鲁塔尔弗莱发出动静", + "subtitles.antarchy.brutalfly_death": "布鲁塔尔弗莱死亡", + "subtitles.antarchy.thoraxis_nightmare_wastes_ambient": "梦魇荒原嗡鸣", + "subtitles.antarchy.thoraxis_nightmare_wastes_additions": "梦魇荒原躁动", + "subtitles.antarchy.thoraxis_nightmare_wastes_mood": "梦魇荒原低语", + "subtitles.antarchy.thoraxis_dream_dunes_ambient": "梦境沙丘窃窃私语", + "subtitles.antarchy.thoraxis_dream_dunes_additions": "梦境沙丘沙沙作响", + "subtitles.antarchy.thoraxis_dream_dunes_mood": "梦境沙丘叹息", + "subtitles.antarchy.thoraxis_lucid_pools_ambient": "清醒池嗡鸣", + "subtitles.antarchy.thoraxis_lucid_pools_additions": "清醒池发出诅咒声", + "subtitles.antarchy.thoraxis_lucid_pools_mood": "清醒池低语", + "subtitles.antarchy.lucid_ambient": "卢西德嗡鸣", + "subtitles.antarchy.lucid_flying": "卢西德扑动", + "subtitles.antarchy.lucid_attack": "卢西德攻击", + "subtitles.antarchy.lucid_bolt": "卢西德发射弹体", + "subtitles.antarchy.lucid_hurt": "卢西德受伤", + "subtitles.antarchy.lucid_death": "卢西德死亡", + "subtitles.antarchy.reverie_idle": "雷弗里漂浮", + "subtitles.antarchy.reverie_hurt": "雷弗里受伤", + "subtitles.antarchy.reverie_worry": "雷弗里担忧", + "subtitles.antarchy.reverie_save": "雷弗里救下了你", + "subtitles.antarchy.reverie_join_player": "雷弗里加入了你", + "subtitles.antarchy.reverie_alert": "雷弗里向你示警", + "subtitles.antarchy.flying_squirrel_idle": "飞鼠唧唧叫", + "subtitles.antarchy.flying_squirrel_beg": "飞鼠讨要食物", + "subtitles.antarchy.flying_squirrel_nut": "飞鼠进食", + "subtitles.antarchy.flying_squirrel_glide_loop": "飞鼠滑翔", + "subtitles.antarchy.flying_squirrel_hurt": "飞鼠受伤", + "subtitles.antarchy.flying_squirrel_death": "飞鼠死亡", + "subtitles.antarchy.nightmare_idle": "梦魇低吼", + "subtitles.antarchy.nightmare_hurt": "梦魇受伤", + "subtitles.antarchy.nightmare_roar": "梦魇咆哮", + "subtitles.antarchy.nightmare_death": "梦魇死亡", + "subtitles.antarchy.nightmare_bite": "梦魇啃咬", + "subtitles.antarchy.nightmare_flap": "梦魇振翅", + "subtitles.antarchy.triffid_attack": "特里菲德攻击", + "subtitles.antarchy.triffid_grab": "特里菲德抓取", + "subtitles.antarchy.triffid_hurt": "特里菲德受伤", + "subtitles.antarchy.triffid_death": "特里菲德死亡", + "subtitles.antarchy.triffid_hiss": "特里菲德嘶嘶作响", + "subtitles.antarchy.triffid_growl": "特里菲德咆哮", + "subtitles.antarchy.gravity_gun_pickup": "重力枪拾取", + "subtitles.antarchy.gravity_gun_drop": "重力枪放下", + "subtitles.antarchy.gravity_gun_hold_loop": "重力枪嗡鸣", + "subtitles.antarchy.gravity_gun_launch": "重力枪发射", + "subtitles.antarchy.gravity_gun_dryfire": "重力枪空击", + "subtitles.antarchy.bed_bug_ambient": "臭虫唧唧叫", + "subtitles.antarchy.bed_bug_hurt": "臭虫受伤", + "subtitles.antarchy.bed_bug_attack": "臭虫啃咬", + "subtitles.antarchy.wasp_idle": "黄蜂嗡嗡作响", + "subtitles.antarchy.wasp_hurt": "黄蜂受伤", + "subtitles.antarchy.wasp_attack": "黄蜂蜇刺", + "subtitles.antarchy.wasp_death": "黄蜂死亡", + "subtitles.antarchy.scorpion_ambient": "蝎子咔嗒作响", + "subtitles.antarchy.scorpion_hurt": "蝎子受伤", + "subtitles.antarchy.scorpion_attack": "蝎子攻击", + "subtitles.antarchy.emperor_scorpion_ambient": "帝王蝎咔嗒作响", + "subtitles.antarchy.emperor_scorpion_hurt": "帝王蝎受伤", + "subtitles.antarchy.emperor_scorpion_attack": "帝王蝎攻击", + "subtitles.antarchy.emperor_scorpion_roar": "帝王蝎咆哮", + "subtitles.antarchy.moleworm_ambient": "莫尔沃姆沙沙作响", + "subtitles.antarchy.moleworm_hurt": "莫尔沃姆受伤", + "subtitles.antarchy.moleworm_attack": "莫尔沃姆攻击", + "subtitles.antarchy.moleworm_dig": "莫尔沃姆挖掘", + "subtitles.antarchy.molevore_ambient": "莫尔沃尔隆隆作响", + "subtitles.antarchy.molevore_hurt": "莫尔沃尔受伤", + "subtitles.antarchy.molevore_attack": "莫尔沃尔攻击", + "subtitles.antarchy.molevore_dig": "莫尔沃尔挖掘", + "subtitles.antarchy.duct_tape_use": "强力胶带撕裂", + "subtitles.antarchy.potent_nyxite_hypnotic_gas": "强效尼克赛特嘶嘶作响", + "subtitles.antarchy.potent_nyxite_geyser_eruption": "强效尼克赛特喷发", + "subtitles.antarchy.potent_nyxite_geyser_continuous": "强效尼克赛特间歇泉轰鸣", + "subtitles.antarchy.missile_squid_ambient": "导弹鱿鱼嗡鸣", + "subtitles.antarchy.missile_squid_hurt": "导弹鱿鱼受伤", + "subtitles.antarchy.missile_squid_death": "导弹鱿鱼死亡", + "subtitles.antarchy.missile_squid_attack": "导弹鱿鱼攻击", + "subtitles.antarchy.kraken_flying_loop": "克拉肯滑翔", + "subtitles.antarchy.kraken_flying_sideways_loop": "克拉肯盘旋", + "subtitles.antarchy.kraken_attack": "克拉肯猛击", + "subtitles.antarchy.kraken_spin": "克拉肯旋转", + "subtitles.antarchy.kraken_roar": "克拉肯咆哮", + "subtitles.antarchy.kraken_summon": "克拉肯现身", + "subtitles.antarchy.kraken_hurt": "克拉肯受伤", + "subtitles.antarchy.kraken_death": "克拉肯死亡", + "subtitles.antarchy.basilisk_idle_loop": "蛇怪发出动静", + "subtitles.antarchy.basilisk_slither_loop": "蛇怪蜿蜒爬行", + "subtitles.antarchy.basilisk_bite": "蛇怪啃咬", + "subtitles.antarchy.basilisk_hiss": "蛇怪嘶嘶作响", + "subtitles.antarchy.basilisk_hurt": "蛇怪受伤", + "subtitles.antarchy.basilisk_death": "蛇怪死亡", + "subtitles.antarchy.bomber_walk": "轰炸虫行走", + "subtitles.antarchy.bomber_knock": "轰炸虫受到攻击", + "subtitles.antarchy.bomber_explode": "轰炸虫引信嘶嘶作响", + "subtitles.antarchy.toreterror_idle": "托尔泰罗尔发出动静", + "subtitles.antarchy.toreterror_hurt": "托尔泰罗尔受伤", + "subtitles.antarchy.toreterror_death": "托尔泰罗尔死亡", + "subtitles.antarchy.toreterror_bomber_fire": "托尔泰罗尔发射轰炸虫", + "subtitles.antarchy.toreterror_spin": "托尔泰罗尔旋转", + "subtitles.antarchy.toreterror_ricochet": "托尔泰罗尔弹跳", + "subtitles.antarchy.water_cannon_fire": "水炮开火", + "subtitles.antarchy.toreterror_jump_up": "托尔泰罗尔跳跃", + "subtitles.antarchy.toreterror_jump_land": "托尔泰罗尔落地", + "subtitles.antarchy.stinky_fly": "臭苍蝇嗡嗡作响", + "item.minecraft.potion.effect.inversion": "反转药水", + "item.minecraft.potion.effect.long_inversion": "反转药水", + "item.minecraft.splash_potion.effect.inversion": "反转喷溅药水", + "item.minecraft.splash_potion.effect.long_inversion": "反转喷溅药水", + "item.minecraft.lingering_potion.effect.inversion": "反转滞留药水", + "item.minecraft.lingering_potion.effect.long_inversion": "反转滞留药水", + "item.minecraft.tipped_arrow.effect.inversion": "反转箭", + "item.minecraft.tipped_arrow.effect.long_inversion": "反转箭", + "item.minecraft.potion.effect.paralysis": "麻痹药水", + "item.minecraft.potion.effect.long_paralysis": "麻痹药水", + "item.minecraft.splash_potion.effect.paralysis": "麻痹喷溅药水", + "item.minecraft.splash_potion.effect.long_paralysis": "麻痹喷溅药水", + "item.minecraft.lingering_potion.effect.paralysis": "麻痹滞留药水", + "item.minecraft.lingering_potion.effect.long_paralysis": "麻痹滞留药水", + "item.minecraft.tipped_arrow.effect.paralysis": "麻痹箭", + "item.minecraft.tipped_arrow.effect.long_paralysis": "麻痹箭", + "item.minecraft.potion.effect.shrinking": "缩小药水", + "item.minecraft.potion.effect.strong_shrinking": "缩小药水 Ⅱ", + "item.minecraft.potion.effect.extreme_shrinking": "缩小药水 Ⅲ", + "item.minecraft.splash_potion.effect.shrinking": "缩小喷溅药水", + "item.minecraft.splash_potion.effect.strong_shrinking": "缩小喷溅药水 Ⅱ", + "item.minecraft.splash_potion.effect.extreme_shrinking": "缩小喷溅药水 Ⅲ", + "item.minecraft.lingering_potion.effect.shrinking": "缩小滞留药水", + "item.minecraft.lingering_potion.effect.strong_shrinking": "缩小滞留药水 Ⅱ", + "item.minecraft.lingering_potion.effect.extreme_shrinking": "缩小滞留药水 Ⅲ", + "item.minecraft.tipped_arrow.effect.shrinking": "缩小箭", + "item.minecraft.tipped_arrow.effect.strong_shrinking": "缩小箭 Ⅱ", + "item.minecraft.tipped_arrow.effect.extreme_shrinking": "缩小箭 Ⅲ", + "item.minecraft.potion.effect.growing": "生长药水", + "item.minecraft.potion.effect.strong_growing": "生长药水 Ⅱ", + "item.minecraft.potion.effect.extreme_growing": "生长药水 Ⅲ", + "item.minecraft.splash_potion.effect.growing": "生长喷溅药水", + "item.minecraft.splash_potion.effect.strong_growing": "生长喷溅药水 Ⅱ", + "item.minecraft.splash_potion.effect.extreme_growing": "生长喷溅药水 Ⅲ", + "item.minecraft.lingering_potion.effect.growing": "生长滞留药水", + "item.minecraft.lingering_potion.effect.strong_growing": "生长滞留药水 Ⅱ", + "item.minecraft.lingering_potion.effect.extreme_growing": "生长滞留药水 Ⅲ", + "item.minecraft.tipped_arrow.effect.growing": "生长箭", + "item.minecraft.tipped_arrow.effect.strong_growing": "生长箭 Ⅱ", + "item.minecraft.tipped_arrow.effect.extreme_growing": "生长箭 Ⅲ", + "item.minecraft.potion.effect.dread": "恐惧药水", + "item.minecraft.potion.effect.long_dread": "恐惧药水", + "item.minecraft.splash_potion.effect.dread": "恐惧喷溅药水", + "item.minecraft.splash_potion.effect.long_dread": "恐惧喷溅药水", + "item.minecraft.lingering_potion.effect.dread": "恐惧滞留药水", + "item.minecraft.lingering_potion.effect.long_dread": "恐惧滞留药水", + "item.minecraft.tipped_arrow.effect.dread": "恐惧箭", + "item.minecraft.tipped_arrow.effect.long_dread": "恐惧箭", + "item.minecraft.potion.effect.stinky": "臭气药水", + "item.minecraft.potion.effect.long_stinky": "臭气药水", + "item.minecraft.splash_potion.effect.stinky": "臭气喷溅药水", + "item.minecraft.splash_potion.effect.long_stinky": "臭气喷溅药水", + "item.minecraft.lingering_potion.effect.stinky": "臭气滞留药水", + "item.minecraft.lingering_potion.effect.long_stinky": "臭气滞留药水", + "item.minecraft.tipped_arrow.effect.stinky": "臭气箭", + "item.minecraft.tipped_arrow.effect.long_stinky": "臭气箭", + "item.minecraft.potion.effect.haste": "急迫药水", + "item.minecraft.potion.effect.strong_haste": "急迫药水 Ⅱ", + "item.minecraft.splash_potion.effect.haste": "急迫喷溅药水", + "item.minecraft.splash_potion.effect.strong_haste": "急迫喷溅药水 Ⅱ", + "item.minecraft.lingering_potion.effect.haste": "急迫滞留药水", + "item.minecraft.lingering_potion.effect.strong_haste": "急迫滞留药水 Ⅱ", + "item.minecraft.tipped_arrow.effect.haste": "急迫箭", + "item.minecraft.tipped_arrow.effect.strong_haste": "急迫箭 Ⅱ", + "advancements.antarchy.cancel_out.title": "1 - 1 = ?", + "advancements.antarchy.cancel_out.description": "同时拥有生长与缩小效果。", + "entity.antarchy.cheep": "奇普", + "item.antarchy.cheep": "奇普", + "item.antarchy.cheep_spawn_egg": "奇普刷怪蛋", + "entity.antarchy.reverie": "雷弗里", + "biome.antarchy.thoraxis": "索尔阿克西斯", + "biome.antarchy.nightmare_wastes": "梦魇荒原", + "biome.antarchy.umbral_hills": "幽影丘陵", + "biome.antarchy.lucid_pools": "清醒池", + "biome.antarchy.dream_dunes": "梦境沙丘", + "block.antarchy.wild_corn": "野生玉米", + "trim_material.antarchy.blood_crystal": "血晶", + "trim_material.antarchy.nightmare_scale": "梦魇鳞片", + "trim_material.antarchy.uranium": "铀", + "trim_material.antarchy.titanium": "钛", + "advancements.antarchy.duct_tape.title": "我把这艘船锯成两半了!", + "advancements.antarchy.duct_tape.description": "再用强力胶带的力量修好了!", + "key.categories.antarchy": "安塔奇", + "key.antarchy.brutalfly_flap": "布鲁塔尔弗莱鞘翅:振翅", + "advancements.antarchy.shrink_ray_craft.title": "亲爱的,我把生物缩小了", + "advancements.antarchy.shrink_ray_craft.description": "合成缩小射线枪。", + "advancements.antarchy.growth_ray_craft.title": "要么变大,要么回家", + "advancements.antarchy.growth_ray_craft.description": "合成生长射线枪。", + "advancements.antarchy.squidzooka_craft.title": "墨染毁灭", + "advancements.antarchy.squidzooka_craft.description": "合成斯奎祖卡。", + "advancements.antarchy.rocket_powered_octopus.title": "火箭动力章鱼", + "advancements.antarchy.rocket_powered_octopus.description": "合成火动章发射器。", + "advancements.antarchy.gravity_gun_craft.title": "搭讪高手", + "advancements.antarchy.gravity_gun_craft.description": "合成重力枪。", + "block.antarchy.cavaryn_portal": "卡瓦林传送门", + "block.antarchy.termite_nest": "白蚁巢", + "block.antarchy.chitin_spike": "甲壳素尖刺", + "block.antarchy.chitin_block": "甲壳素块", + "block.antarchy.myrmite": "米尔迈特", + "block.antarchy.broodstone": "布鲁德斯通", + "block.antarchy.amber_moss_block": "琥珀苔藓块", + "block.antarchy.amber_moss_carpet": "琥珀苔藓地毯", + "block.antarchy.amber_lichen": "琥珀地衣", + "block.antarchy.bile_vein": "胆汁矿脉", + "block.antarchy.creepvine": "爬藤", + "block.antarchy.creeping_horror_egg": "爬行恐魔蛋", + "block.antarchy.lurking_terror_egg": "潜伏恐魔蛋", + "entity.antarchy.termite": "白蚁", + "entity.antarchy.jumpy_bug": "跳跳虫", + "entity.antarchy.spit_bug": "喷吐虫", + "entity.antarchy.stink_bug": "臭屁虫", + "entity.antarchy.rolly_polly": "鼠妇", + "entity.antarchy.creeping_horror": "爬行恐魔", + "entity.antarchy.lurking_terror": "潜伏恐魔", + "entity.antarchy.hercules_beetle": "赫拉克勒斯甲虫", + "item.antarchy.jumpy_bug_spawn_egg": "跳跳虫刷怪蛋", + "item.antarchy.spit_bug_spawn_egg": "喷吐虫刷怪蛋", + "item.antarchy.stink_bug_spawn_egg": "臭屁虫刷怪蛋", + "item.antarchy.termite_spawn_egg": "白蚁刷怪蛋", + "item.antarchy.rolly_polly_spawn_egg": "鼠妇刷怪蛋", + "item.antarchy.creeping_horror_spawn_egg": "爬行恐魔刷怪蛋", + "item.antarchy.lurking_terror_spawn_egg": "潜伏恐魔刷怪蛋", + "item.antarchy.hercules_beetle_spawn_egg": "赫拉克勒斯甲虫刷怪蛋", + "item.antarchy.chitin": "甲壳素", + "block.antarchy.polished_broodstone": "磨制布鲁德斯通", + "block.antarchy.chiseled_broodstone": "雕纹布鲁德斯通", + "block.antarchy.broodstone_bricks": "布鲁德斯通砖块", + "block.antarchy.broodstone_stairs": "布鲁德斯通楼梯", + "block.antarchy.broodstone_slab": "布鲁德斯通台阶", + "block.antarchy.broodstone_wall": "布鲁德斯通墙", + "block.antarchy.polished_broodstone_stairs": "磨制布鲁德斯通楼梯", + "block.antarchy.polished_broodstone_slab": "磨制布鲁德斯通台阶", + "block.antarchy.polished_broodstone_wall": "磨制布鲁德斯通墙", + "block.antarchy.broodstone_brick_stairs": "布鲁德斯通砖楼梯", + "block.antarchy.broodstone_brick_slab": "布鲁德斯通砖台阶", + "block.antarchy.broodstone_brick_wall": "布鲁德斯通砖墙", + "block.antarchy.myrmite_coal_ore": "米尔迈特煤矿石", + "block.antarchy.broodstone_uranium_ore": "布鲁德斯通 铀矿石", + "block.antarchy.broodstone_titanium_ore": "布鲁德斯通 钛矿石", + "item.antarchy.raw_bug_meat": "生虫肉", + "item.antarchy.cooked_bug_meat": "熟虫肉", + "item.antarchy.hercules_horn": "赫拉克勒斯之角", + "block.antarchy.hanging_creeproots": "垂吊爬根", + "block.antarchy.glowcap_mushroom": "荧光菌盖蘑菇", + "block.antarchy.potted_glowcap_mushroom": "盆栽荧光菌盖蘑菇", + "block.antarchy.glowcap_mushroom_block": "荧光菌盖蘑菇块", + "block.antarchy.molting_vines": "蜕皮藤蔓", + "item.antarchy.broodfruit": "育巢果", + "block.antarchy.jumpy_bug_egg": "跳跳虫蛋", + "subtitles.antarchy.creeping_horror_growl": "爬行恐魔咆哮", + "subtitles.antarchy.creeping_horror_hurt": "爬行恐魔受伤", + "subtitles.antarchy.creeping_horror_bite": "爬行恐魔啃咬", + "subtitles.antarchy.lurking_terror_snarl": "潜伏恐魔低吼", + "subtitles.antarchy.lurking_terror_hurt": "潜伏恐魔受伤", + "subtitles.antarchy.lurking_terror_bite": "潜伏恐魔啃咬", + "subtitles.antarchy.lurking_terror_fly_loop": "潜伏恐魔飞行", + "subtitles.antarchy.stink_bug_fart": "臭屁虫放屁", + "subtitles.antarchy.stink_bug_idle": "臭屁虫发出动静", + "subtitles.antarchy.rolly_polly_idle": "鼠妇发出动静", + "subtitles.antarchy.rolly_polly_wheel_mode": "鼠妇蜷缩起来", + "subtitles.antarchy.rolly_polly_normal_mode": "鼠妇展开身体", + "subtitles.antarchy.rolly_polly_roll": "鼠妇滚动", + "subtitles.antarchy.hercules_beetle_idle": "赫拉克勒斯甲虫发出动静", + "subtitles.antarchy.hercules_beetle_hurt": "赫拉克勒斯甲虫受伤", + "subtitles.antarchy.hercules_beetle_attack": "赫拉克勒斯甲虫攻击", + "subtitles.antarchy.hercules_beetle_cry": "赫拉克勒斯甲虫咆哮", + "subtitles.antarchy.hercules_beetle_charge_start": "赫拉克勒斯甲虫开始蓄力", + "subtitles.antarchy.hercules_beetle_knocked_down": "赫拉克勒斯甲虫被击倒", + "subtitles.antarchy.jerry_idle": "杰瑞喋喋不休", + "subtitles.antarchy.jerry_hurt": "杰瑞受伤", + "subtitles.antarchy.jerry_death": "杰瑞死亡", + "subtitles.antarchy.jerry_attack": "杰瑞攻击", + "subtitles.antarchy.jumpy_bug_idle": "跳跳虫发出动静", + "subtitles.antarchy.spit_bug_idle": "喷吐虫发出动静", + "subtitles.antarchy.jumpy_bug_hurt": "跳跳虫受伤", + "subtitles.antarchy.jumpy_bug_jump": "跳跳虫跳跃", + "subtitles.antarchy.spit_bug_hurt": "喷吐虫受伤", + "subtitles.antarchy.spit_bug_spit": "喷吐虫喷吐", + "subtitles.antarchy.brutalfly_spit": "布鲁塔尔弗莱喷吐", + "advancements.antarchy.bug_apetit.title": "虫虫好胃口", + "advancements.antarchy.bug_apetit.description": "食用熟虫肉。", + "advancements.antarchy.behavioral_correction.title": "行为矫正", + "advancements.antarchy.behavioral_correction.description": "获得态度调整锤。", + "advancements.antarchy.beetle_buddies.title": "甲虫伙伴", + "advancements.antarchy.beetle_buddies.description": "驯服一只赫拉克勒斯甲虫。", + "advancements.antarchy.herculean_task.title": "赫拉克勒斯之业", + "advancements.antarchy.herculean_task.description": "斩杀一只赫拉克勒斯甲虫。" +} 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 new file mode 100644 index 00000000..e64db662 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_tw.json @@ -0,0 +1,962 @@ +{ + "block.antarchy.duplicator_log": "複製原木", + "block.antarchy.ouranwood_log": "歐蘭伍德原木", + "block.antarchy.ouranwood_wood": "歐蘭伍德木", + "block.antarchy.mossy_ouranwood_log": "苔蘚覆蓋的歐蘭伍德原木", + "block.antarchy.mossy_ouranwood_wood": "苔蘚覆蓋的歐蘭伍德木", + "block.antarchy.stripped_ouranwood_log": "去皮歐蘭伍德原木", + "block.antarchy.stripped_ouranwood_wood": "去皮歐蘭伍德木", + "block.antarchy.ouranwood_planks": "歐蘭伍德木板", + "block.antarchy.ouranwood_stairs": "歐蘭伍德樓梯", + "block.antarchy.ouranwood_slab": "歐蘭伍德臺階", + "block.antarchy.ouranwood_fence": "歐蘭伍德柵欄", + "block.antarchy.ouranwood_fence_gate": "歐蘭伍德柵欄門", + "block.antarchy.ouranwood_door": "歐蘭伍德門", + "block.antarchy.ouranwood_trapdoor": "歐蘭伍德活板門", + "block.antarchy.ouranwood_pressure_plate": "歐蘭伍德壓力板", + "block.antarchy.ouranwood_button": "歐蘭伍德按鈕", + "block.antarchy.ouranwood_leaves": "歐蘭伍德樹葉", + "block.antarchy.ouranwood_acorn": "歐蘭伍德橡果", + "block.antarchy.ouranwood_sign": "歐蘭伍德告示牌", + "block.antarchy.ouranwood_hanging_sign": "歐蘭伍德懸掛式告示牌", + "block.antarchy.peach_log": "桃子原木", + "block.antarchy.peach_wood": "桃子木", + "block.antarchy.stripped_peach_log": "去皮桃子原木", + "block.antarchy.stripped_peach_wood": "去皮桃子木", + "block.antarchy.peach_planks": "桃子木板", + "block.antarchy.peach_stairs": "桃子樓梯", + "block.antarchy.peach_slab": "桃子臺階", + "block.antarchy.peach_fence": "桃子柵欄", + "block.antarchy.peach_fence_gate": "桃子柵欄門", + "block.antarchy.peach_door": "桃子門", + "block.antarchy.peach_trapdoor": "桃子活板門", + "block.antarchy.peach_pressure_plate": "桃子壓力板", + "block.antarchy.peach_button": "桃子按鈕", + "block.antarchy.peach_leaves": "桃子樹葉", + "block.antarchy.hanging_peach": "垂吊桃子", + "block.antarchy.peach_sapling": "桃子樹苗", + "block.antarchy.peach_sign": "桃子告示牌", + "block.antarchy.peach_hanging_sign": "桃子懸掛式告示牌", + "block.antarchy.orange_milkweed": "橙色馬利筋", + "block.antarchy.pink_milkweed": "粉色馬利筋", + "block.antarchy.camellia": "山茶花", + "block.antarchy.spider_lily": "彼岸花", + "block.antarchy.lotus": "蓮花", + "item.antarchy.lotus": "蓮花", + "item.antarchy.critter_cage": "小動物籠", + "block.antarchy.giant_lily_pad": "巨型睡蓮葉", + "block.antarchy.seashell": "貝殼", + "block.antarchy.critter_cage_block": "小動物籠", + "block.antarchy.hushweed": "哈什維德", + "block.antarchy.umbral_moss_block": "幽影苔蘚塊", + "block.antarchy.umbral_moss_carpet": "幽影苔蘚地毯", + "block.antarchy.blush_moss_block": "緋紅苔蘚塊", + "block.antarchy.blush_moss_carpet": "緋紅苔蘚地毯", + "block.antarchy.duplicator_sapling": "複製樹苗", + "block.antarchy.duct_tape": "強力膠帶", + "block.antarchy.infested_rooted_dirt": "蟲蝕纏根 泥土", + "block.antarchy.infested_coarse_dirt": "蟲蝕砂土 泥土", + "block.antarchy.nyxite": "尼克賽特", + "block.antarchy.polished_nyxite": "磨製尼克賽特", + "block.antarchy.chiseled_nyxite": "雕紋尼克賽特", + "block.antarchy.nyxite_bricks": "尼克賽特磚塊", + "block.antarchy.shellstone": "舍爾斯通", + "block.antarchy.polished_shellstone": "磨製舍爾斯通", + "block.antarchy.shellstone_bricks": "舍爾斯通磚塊", + "block.antarchy.chiseled_shellstone": "雕紋舍爾斯通", + "block.antarchy.mossy_shellstone_bricks": "苔蘚舍爾斯通磚塊", + "block.antarchy.mossy_shellstone_brick_stairs": "苔蘚舍爾斯通磚樓梯", + "block.antarchy.mossy_shellstone_brick_slab": "苔蘚舍爾斯通磚臺階", + "block.antarchy.mossy_shellstone_brick_wall": "苔蘚舍爾斯通磚牆", + "block.antarchy.cracked_shellstone_bricks": "裂紋舍爾斯通磚塊", + "block.antarchy.shellstone_stairs": "舍爾斯通樓梯", + "block.antarchy.shellstone_slab": "舍爾斯通臺階", + "block.antarchy.shellstone_wall": "舍爾斯通牆", + "block.antarchy.polished_shellstone_stairs": "磨製舍爾斯通樓梯", + "block.antarchy.polished_shellstone_slab": "磨製舍爾斯通臺階", + "block.antarchy.polished_shellstone_wall": "磨製舍爾斯通牆", + "block.antarchy.shellstone_brick_stairs": "舍爾斯通磚樓梯", + "block.antarchy.shellstone_brick_slab": "舍爾斯通磚臺階", + "block.antarchy.shellstone_brick_wall": "舍爾斯通磚牆", + "block.antarchy.nyxite_stairs": "尼克賽特樓梯", + "block.antarchy.nyxite_slab": "尼克賽特臺階", + "block.antarchy.nyxite_wall": "尼克賽特牆", + "block.antarchy.polished_nyxite_stairs": "磨製尼克賽特樓梯", + "block.antarchy.polished_nyxite_slab": "磨製尼克賽特臺階", + "block.antarchy.polished_nyxite_wall": "磨製尼克賽特牆", + "block.antarchy.nyxite_brick_stairs": "尼克賽特磚樓梯", + "block.antarchy.nyxite_brick_slab": "尼克賽特磚臺階", + "block.antarchy.nyxite_brick_wall": "尼克賽特磚牆", + "block.antarchy.pale_nyxite": "蒼白尼克賽特", + "block.antarchy.nyxite_spike": "尼克賽特尖刺", + "block.antarchy.potent_nyxite": "強效尼克賽特", + "block.antarchy.triffid_goo_block": "特里菲德 黏液塊", + "block.antarchy.elythia_portal": "艾莉提婭傳送門", + "block.antarchy.cloud_block": "雲塊", + "block.antarchy.thoraxis_portal": "索爾阿克西斯傳送門", + "block.antarchy.antimetal": "安提梅塔爾", + "block.antarchy.polished_antimetal": "磨製安提梅塔爾", + "block.antarchy.antimetal_scaffolding": "安提梅塔爾腳手架", + "block.antarchy.cornea_stalk": "科爾尼婭莖", + "block.antarchy.corn_crop": "玉米作物", + "block.antarchy.dream_torch": "夢境火把", + "block.antarchy.dream_wall_torch": "夢境牆上火把", + "block.antarchy.dream_lantern": "夢境燈籠", + "block.antarchy.dream_campfire": "夢境營火", + "block.antarchy.dream_fire": "夢境火", + "block.antarchy.dream_fire_ceiling": "夢境火", + "block.antarchy.budding_blood_crystal": "紫芽血晶", + "block.antarchy.blood_crystal_block": "血晶塊", + "block.antarchy.small_blood_crystal_bud": "小型血晶芽", + "block.antarchy.medium_blood_crystal_bud": "中型血晶芽", + "block.antarchy.large_blood_crystal_bud": "大型血晶芽", + "block.antarchy.blood_crystal_cluster": "血晶簇", + "block.antarchy.dream_sand": "夢境沙", + "block.antarchy.dream_sandstone": "夢境砂岩", + "block.antarchy.chiseled_dream_sandstone": "雕紋夢境砂岩", + "block.antarchy.cut_dream_sandstone": "切制夢境砂岩", + "block.antarchy.smooth_dream_sandstone": "平滑夢境砂岩", + "block.antarchy.dream_sandstone_stairs": "夢境砂岩樓梯", + "block.antarchy.dream_sandstone_slab": "夢境砂岩臺階", + "block.antarchy.dream_sandstone_wall": "夢境砂岩牆", + "block.antarchy.smooth_dream_sandstone_stairs": "平滑夢境砂岩樓梯", + "block.antarchy.smooth_dream_sandstone_slab": "平滑夢境砂岩臺階", + "block.antarchy.cut_dream_sandstone_slab": "切制夢境砂岩臺階", + "block.antarchy.bed_bug_egg": "臭蟲蛋", + "block.antarchy.wasp_nest": "黃蜂巢", + "block.antarchy.red_ant_nest": "紅螞蟻巢", + "block.antarchy.brown_ant_nest": "棕螞蟻巢", + "block.antarchy.rainbow_ant_nest": "彩虹螞蟻巢", + "block.antarchy.uranium_ore": "鈾礦石", + "block.antarchy.deepslate_uranium_ore": "深板岩鈾礦石", + "block.antarchy.titanium_ore": "鈦礦石", + "block.antarchy.deepslate_titanium_ore": "深板岩鈦礦石", + "block.antarchy.uranium_block": "鈾塊", + "block.antarchy.titanium_block": "鈦塊", + "block.antarchy.raw_uranium_block": "粗製鈾塊", + "block.antarchy.raw_titanium_block": "粗製鈦塊", + "block.antarchy.cut_uranium": "切制鈾", + "block.antarchy.cut_titanium": "切制鈦", + "block.antarchy.cut_uranium_slab": "切制鈾臺階", + "block.antarchy.cut_titanium_slab": "切制鈦臺階", + "block.antarchy.cut_uranium_stairs": "切制鈾樓梯", + "block.antarchy.cut_titanium_stairs": "切制鈦樓梯", + "block.antarchy.chiseled_uranium": "雕紋鈾", + "block.antarchy.chiseled_titanium": "雕紋鈦", + "block.antarchy.uranium_bulb": "鈾燈", + "block.antarchy.titanium_bulb": "鈦燈", + "block.antarchy.uranium_door": "鈾門", + "block.antarchy.titanium_door": "鈦門", + "block.antarchy.uranium_trapdoor": "鈾活板門", + "block.antarchy.titanium_trapdoor": "鈦活板門", + "block.antarchy.uranium_bars": "鈾欄杆", + "block.antarchy.titanium_bars": "鈦欄杆", + "tooltip.antarchy.signal_saving_bulb": "可切換開關。亮度等級等於其中儲存的訊號強度。", + "block.antarchy.bile": "膽汁", + "block.antarchy.ichor": "靈液", + "block.antarchy.antiwater": "反水", + "block.antarchy.lumen": "盧門", + "block.antarchy.lumen_froglight": "盧門蛙明燈", + "block.antarchy.roseate_froglight": "玫紅蛙明燈", + "block.antarchy.star_coral": "星珊瑚", + "block.antarchy.star_coral_fan": "星珊瑚扇", + "block.antarchy.star_coral_block": "星珊瑚塊", + "block.antarchy.dead_star_coral": "失活星珊瑚", + "block.antarchy.dead_star_coral_fan": "失活星珊瑚扇", + "block.antarchy.dead_star_coral_block": "失活星珊瑚塊", + "entity.antarchy.apple_cow": "蘋果牛", + "entity.antarchy.golden_apple_cow": "金蘋果牛", + "entity.antarchy.enchanted_golden_apple_cow": "附魔金蘋果牛", + "entity.antarchy.easter_bunny": "復活節兔", + "entity.antarchy.glimmer": "格利默", + "entity.antarchy.ouranwood_deer": "歐蘭伍德鹿", + "entity.antarchy.elka": "艾爾卡", + "entity.antarchy.dorrie": "多莉", + "entity.antarchy.flying_squirrel": "飛鼠", + "entity.antarchy.caterpillar": "毛毛蟲", + "entity.antarchy.butterfly": "蝴蝶", + "entity.antarchy.brutalfly": "布魯塔爾弗萊", + "entity.antarchy.red_ant": "紅螞蟻", + "entity.antarchy.brown_ant": "棕螞蟻", + "entity.antarchy.rainbow_ant": "彩虹螞蟻", + "entity.antarchy.diamond_minecart": "鑽石礦車", + "entity.antarchy.dr_trayaurus": "特雷奧勒斯博士", + "entity.antarchy.cloud_shark": "雲鯊", + "entity.antarchy.kraken": "克拉肯", + "entity.antarchy.missile_squid": "導彈魷魚", + "entity.antarchy.octopus_bomb": "章魚炸彈", + "entity.antarchy.nightmare": "夢魘", + "entity.antarchy.bed_bug": "臭蟲", + "entity.antarchy.wasp": "黃蜂", + "entity.antarchy.bomber": "轟炸蟲", + "entity.antarchy.moleworm": "莫爾沃姆", + "entity.antarchy.molevore": "莫爾沃爾", + "entity.antarchy.mantis": "螳螂", + "entity.antarchy.alpha_mantis": "阿爾法螳螂", + "entity.antarchy.triffid": "特里菲德", + "entity.antarchy.toreterror": "托爾泰羅爾", + "entity.antarchy.water_bomb": "水炸彈", + "subtitles.antarchy.mantis_ambient": "螳螂發出咔嗒聲", + "subtitles.antarchy.mantis_hurt": "螳螂尖嘯", + "subtitles.antarchy.mantis_attack": "螳螂咔嚓作響", + "subtitles.antarchy.mantis_fly_loop": "螳螂振翅嗡鳴", + "item.antarchy.big_bertha": "大貝莎", + "item.antarchy.wasp_nest": "黃蜂巢", + "item.antarchy.stink_bug": "臭屁蟲", + "item.antarchy.wasp_spawn_egg": "黃蜂刷怪蛋", + "item.antarchy.bomber_spawn_egg": "轟炸蟲刷怪蛋", + "item.antarchy.big_bertha_blade": "大貝莎刀刃", + "item.antarchy.big_bertha_handle": "大貝莎握柄", + "item.antarchy.big_bertha_hilt": "大貝莎護手", + "item.antarchy.battle_axe": "戰斧", + "item.antarchy.attitude_adjuster": "態度調整錘", + "tooltip.antarchy.attitude_adjuster.grounded": "將地面上的目標擊飛,並把空中的目標砸向地面。", + "tooltip.antarchy.attitude_adjuster.slam": "在空中右鍵可發動落地重擊。", + "item.antarchy.cloud_shark_fin": "雲鯊鰭", + "item.antarchy.cloud_shark_fin_soup": "雲鯊鰭湯", + "tooltip.antarchy.cloud_shark_fin_soup": "獲得力量與緩降。", + "tooltip.antarchy.critter_cage.empty": "右鍵投擲", + "tooltip.antarchy.critter_cage.contains": "裝有:%s", + "tooltip.antarchy.critter_cage.release": "右鍵釋放", + "tooltip.antarchy.critter_cage.place": "潛行鍵+右鍵放置", + "item.antarchy.kraken_tooth": "克拉肯牙齒", + "item.antarchy.kraken_tentacle": "克拉肯觸手", + "item.antarchy.krakens_grasp": "克拉肯之握", + "entity.antarchy.tentacle": "觸手", + "item.antarchy.basilisk_fang": "蛇怪尖牙", + "item.antarchy.basilisk_dagger": "蛇怪匕首", + "item.antarchy.blood_crystal_block": "血晶塊", + "item.antarchy.small_blood_crystal_bud": "小型血晶芽", + "item.antarchy.medium_blood_crystal_bud": "中型血晶芽", + "item.antarchy.large_blood_crystal_bud": "大型血晶芽", + "item.antarchy.blood_crystal_cluster": "血晶簇", + "item.antarchy.dream_sand": "夢境沙", + "item.antarchy.dream_sandstone": "夢境砂岩", + "item.antarchy.chiseled_dream_sandstone": "雕紋夢境砂岩", + "item.antarchy.cut_dream_sandstone": "切制夢境砂岩", + "item.antarchy.smooth_dream_sandstone": "平滑夢境砂岩", + "item.antarchy.dream_sandstone_stairs": "夢境砂岩樓梯", + "item.antarchy.dream_sandstone_slab": "夢境砂岩臺階", + "item.antarchy.dream_sandstone_wall": "夢境砂岩牆", + "item.antarchy.smooth_dream_sandstone_stairs": "平滑夢境砂岩樓梯", + "item.antarchy.smooth_dream_sandstone_slab": "平滑夢境砂岩臺階", + "item.antarchy.cut_dream_sandstone_slab": "切制夢境砂岩臺階", + "item.antarchy.dream_torch": "夢境火把", + "item.antarchy.dream_lantern": "夢境燈籠", + "item.antarchy.dream_campfire": "夢境營火", + "item.antarchy.giant_lily_pad": "巨型睡蓮葉", + "item.antarchy.seashell": "貝殼", + "item.antarchy.nightmare_scale": "夢魘鱗片", + "item.antarchy.nightmare_helmet": "夢魘頭盔", + "item.antarchy.nightmare_chestplate": "夢魘胸甲", + "item.antarchy.nightmare_leggings": "夢魘護腿", + "item.antarchy.nightmare_boots": "夢魘靴子", + "item.antarchy.nightmare_sword": "夢魘劍", + "tooltip.antarchy.nightmare_armor_double_damage": "有%s%%的機率造成雙倍傷害", + "tooltip.antarchy.nightmare_armor_set_bonus": "全套:免疫凋零與恐懼", + "tooltip.antarchy.nightmare_sword": "生命值越低,造成的傷害越高。", + "tooltip.antarchy.nightmare_sword_damage": "造成%s點傷害", + "tooltip.antarchy.primordial_helmet_water_breathing": "使穿戴者獲得水下呼吸", + "tooltip.antarchy.primordial_armor_knockback_dealt": "每件增加%s攻擊擊退", + "tooltip.antarchy.primordial_armor_set_bonus": "全套:攻擊無視敵人的擊退抗性", + "attribute.antarchy.double_damage_chance": "雙倍傷害機率", + "attribute.antarchy.bloodglass_max_hearts": "血晶之心上限", + "item.antarchy.molevore_nose": "莫爾沃爾鼻子", + "item.antarchy.moleworm": "莫爾沃姆", + "item.antarchy.triffid_spawn_egg": "特里菲德刷怪蛋", + "item.antarchy.infested_rooted_dirt": "蟲蝕纏根 泥土", + "item.antarchy.infested_coarse_dirt": "蟲蝕砂土 泥土", + "item.antarchy.pale_nyxite": "蒼白尼克賽特", + "item.antarchy.polished_nyxite": "磨製尼克賽特", + "item.antarchy.chiseled_nyxite": "雕紋尼克賽特", + "item.antarchy.nyxite_bricks": "尼克賽特磚塊", + "item.antarchy.shellstone": "舍爾斯通", + "item.antarchy.polished_shellstone": "磨製舍爾斯通", + "item.antarchy.shellstone_bricks": "舍爾斯通磚塊", + "item.antarchy.chiseled_shellstone": "雕紋舍爾斯通", + "item.antarchy.mossy_shellstone_bricks": "苔蘚舍爾斯通磚塊", + "item.antarchy.mossy_shellstone_brick_stairs": "苔蘚舍爾斯通磚樓梯", + "item.antarchy.mossy_shellstone_brick_slab": "苔蘚舍爾斯通磚臺階", + "item.antarchy.mossy_shellstone_brick_wall": "苔蘚舍爾斯通磚牆", + "item.antarchy.cracked_shellstone_bricks": "裂紋舍爾斯通磚塊", + "item.antarchy.shellstone_stairs": "舍爾斯通樓梯", + "item.antarchy.shellstone_slab": "舍爾斯通臺階", + "item.antarchy.shellstone_wall": "舍爾斯通牆", + "item.antarchy.polished_shellstone_stairs": "磨製舍爾斯通樓梯", + "item.antarchy.polished_shellstone_slab": "磨製舍爾斯通臺階", + "item.antarchy.polished_shellstone_wall": "磨製舍爾斯通牆", + "item.antarchy.shellstone_brick_stairs": "舍爾斯通磚樓梯", + "item.antarchy.shellstone_brick_slab": "舍爾斯通磚臺階", + "item.antarchy.shellstone_brick_wall": "舍爾斯通磚牆", + "item.antarchy.nyxite_stairs": "尼克賽特樓梯", + "item.antarchy.nyxite_slab": "尼克賽特臺階", + "item.antarchy.nyxite_wall": "尼克賽特牆", + "item.antarchy.polished_nyxite_stairs": "磨製尼克賽特樓梯", + "item.antarchy.polished_nyxite_slab": "磨製尼克賽特臺階", + "item.antarchy.polished_nyxite_wall": "磨製尼克賽特牆", + "item.antarchy.nyxite_brick_stairs": "尼克賽特磚樓梯", + "item.antarchy.nyxite_brick_slab": "尼克賽特磚臺階", + "item.antarchy.nyxite_brick_wall": "尼克賽特磚牆", + "item.antarchy.potent_nyxite": "強效尼克賽特", + "item.antarchy.antimetal": "安提梅塔爾", + "item.antarchy.polished_antimetal": "磨製安提梅塔爾", + "item.antarchy.antimetal_scaffolding": "安提梅塔爾腳手架", + "item.antarchy.ouranwood_acorn": "歐蘭伍德橡果", + "item.antarchy.ouranwood_boat": "歐蘭伍德船", + "item.antarchy.ouranwood_chest_boat": "歐蘭伍德運輸船", + "item.antarchy.raw_venison": "生鹿肉", + "item.antarchy.cooked_venison": "熟鹿肉", + "item.antarchy.peach_sapling": "桃子樹苗", + "item.antarchy.peach": "桃子", + "item.antarchy.peach_pie": "桃子派", + "item.antarchy.cornbread": "玉米麵包", + "item.antarchy.popcorn": "爆米花", + "item.antarchy.peach_sign": "桃子告示牌", + "item.antarchy.peach_hanging_sign": "桃子懸掛式告示牌", + "item.antarchy.peach_boat": "桃子船", + "item.antarchy.peach_chest_boat": "桃子運輸船", + "item.antarchy.orange_milkweed": "橙色馬利筋", + "item.antarchy.pink_milkweed": "粉色馬利筋", + "item.antarchy.camellia": "山茶花", + "item.antarchy.spider_lily": "彼岸花", + "item.antarchy.hushweed": "哈什維德", + "item.antarchy.umbral_moss_block": "幽影苔蘚塊", + "item.antarchy.umbral_moss_carpet": "幽影苔蘚地毯", + "item.antarchy.blush_moss_block": "緋紅苔蘚塊", + "item.antarchy.blush_moss_carpet": "緋紅苔蘚地毯", + "item.antarchy.mud_pie": "泥巴派", + "item.antarchy.duct_tape": "強力膠帶", + "item.antarchy.duct_tape.tooltip": "放置後右鍵可修理工具", + "item.antarchy.rainbow_sugar": "彩虹糖", + "item.antarchy.uranium_nugget": "鈾粒", + "item.antarchy.titanium_nugget": "鈦粒", + "item.antarchy.raw_uranium_scrap": "粗製鈾碎片", + "item.antarchy.raw_titanium_scrap": "粗製鈦碎片", + "item.antarchy.raw_uranium": "粗製鈾", + "item.antarchy.raw_titanium": "粗製鈦", + "item.antarchy.uranium_ingot": "鈾錠", + "item.antarchy.titanium_ingot": "鈦錠", + "item.antarchy.blood_crystal_shard": "血晶碎片", + "item.antarchy.blood_crystal_apple": "血晶蘋果", + "item.antarchy.blood_crystal_katana": "血晶武士刀", + "item.antarchy.blood_crystal_helmet": "血晶頭盔", + "item.antarchy.blood_crystal_chestplate": "血晶胸甲", + "item.antarchy.blood_crystal_leggings": "血晶護腿", + "item.antarchy.blood_crystal_boots": "血晶靴子", + "item.antarchy.blood_crystal_armor.tooltip": "獲得一顆血晶之心,可抵擋一次攻擊,破碎後會重新充能。", + "item.antarchy.blood_crystal_boots.tooltip2": "重力反轉時向上墜落不會受到摔落傷害。", + "item.antarchy.blood_crystal_apple.tooltip": "獲得血晶守護,並在效果持續期間提供可重新充能的臨時血晶之心。", + "tooltip.antarchy.blood_crystal_katana.launch": "命中時將你向前推進。", + "tooltip.antarchy.blood_crystal_katana.trail": "在身後留下猩紅軌跡。", + "item.antarchy.mantis_claw": "螳螂利爪", + "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", + "item.antarchy.king_scale": "國王鱗片", + "item.antarchy.queen_scale": "女王鱗片", + "item.antarchy.jumpy_bug_leg": "跳跳蟲腿", + "item.antarchy.jumpy_boots": "彈跳靴", + "tooltip.antarchy.jumpy_boots": "潛行蓄力,然後跳躍即可向上彈射。", + "item.antarchy.brutalfly_wing": "布魯塔爾弗萊翼", + "item.antarchy.brutalfly_elytra": "布魯塔爾弗萊鞘翅", + "tooltip.antarchy.brutalfly_elytra.flap": "飛行時按住%s拍動翅膀", + "item.antarchy.cornea_ear": "科爾尼婭耳朵", + "item.antarchy.corn": "玉米", + "item.antarchy.corn_seeds": "玉米種子", + "item.antarchy.raw_corndog": "生玉米熱狗", + "item.antarchy.cooked_corndog": "熟玉米熱狗", + "item.antarchy.high_fructose_corn_syrup": "高果糖玉米糖漿", + "jei.antarchy.americanize": "美國化", + "item.antarchy.american_name": "美式%s", + "item.antarchy.root_beer": "根汁汽水", + "item.antarchy.primordial_scute": "原初甲片", + "item.antarchy.triffid_goo": "特里菲德 黏液", + "item.antarchy.triffid_goo_block": "特里菲德 黏液塊", + "tooltip.antarchy.triffid_goo_block": "高速接觸時會向上彈起,否則會沉入其中。", + "item.antarchy.cloud_bucket": "雲桶", + "tooltip.antarchy.cloud_bucket.midair": "可放置在空中", + "item.antarchy.lumen_bucket": "盧門桶", + "item.antarchy.scorpion_whip": "帝王蠍鞭", + "tooltip.antarchy.scorpion_whip.lash": "從遠處鞭打獵物並嵌入帶毒的牽繩。", + "tooltip.antarchy.scorpion_whip.reel": "右鍵收回被牽住的獵物。", + "tooltip.antarchy.scorpion_whip.snap": "再次左鍵被牽住的獵物可扯出毒刺。", + "item.antarchy.fallen_king_crown": "隕落之王的王冠", + "tooltip.antarchy.fallen_king_crown.hero": "擊殺敵對生物時獲得村莊英雄", + "item.antarchy.vortex_eye": "漩渦之眼", + "item.antarchy.ultimate_helmet": "終極頭盔", + "item.antarchy.ultimate_chestplate": "終極胸甲", + "item.antarchy.ultimate_leggings": "終極護腿", + "item.antarchy.ultimate_boots": "終極靴子", + "item.antarchy.ultimate_sword": "終極劍", + "item.antarchy.ultimate_pickaxe": "終極鎬", + "item.antarchy.ultimate_axe": "終極斧", + "item.antarchy.ultimate_shovel": "終極鍬", + "item.antarchy.ultimate_hoe": "終極鋤", + "item.antarchy.ultimate_bow": "終極弓", + "item.antarchy.ultimate_crossbow": "終極弩", + "item.antarchy.ultimate_crossbow.capacity": "一次最多裝填16支箭", + "item.antarchy.ultimate_crossbow.arrows_remaining": "已裝填%1$s支%2$s", + "item.antarchy.ultimate_mace": "終極重錘", + "item.antarchy.moggles": "莫格爾斯", + "itemGroup.antarchy.antarchy": "安塔奇", + "item.antarchy.bile_bucket": "膽汁桶", + "item.antarchy.ichor_bucket": "靈液桶", + "item.antarchy.antiwater_bucket": "反水桶", + "item.antarchy.reverie_bottle": "雷弗裡瓶", + "item.antarchy.squidzooka": "斯奎祖卡", + "item.antarchy.rpo_launcher": "火動章發射器", + "item.antarchy.shrink_ray": "縮小射線槍", + "item.antarchy.growth_ray": "生長射線槍", + "tooltip.antarchy.shrink_ray": "永久縮小目標。按住以蓄力。", + "tooltip.antarchy.growth_ray": "永久放大目標。按住以蓄力。", + "tooltip.antarchy.size_ray_milk_reset": "喝牛奶可重置此效果。", + "tooltip.antarchy.reverie_bottle.capture": "手持玻璃瓶右鍵雷弗裡即可將其收納。", + "tooltip.antarchy.reverie_bottle.release": "右鍵釋放雷弗裡。", + "item.antarchy.gravity_gun": "重力槍", + "item.antarchy.miners_dream": "礦工之夢", + "tooltip.antarchy.miners_dream.line1": "右鍵挖出一條蜿蜒洞穴。", + "tooltip.antarchy.miners_dream.line2": "不會破壞貴重方塊。", + "message.antarchy.miners_dream_disabled": "礦工之夢已禁用。", + "message.antarchy.miners_dream_busy": "你之前的夢仍在展開。", + "item.antarchy.diamond_minecart": "鑽石礦車", + "item.antarchy.cogwheel_pet": "齒輪寵物", + "item.antarchy.fire_dragon_pet": "火龍寵物", + "item.antarchy.ice_dragon_pet": "冰龍寵物", + "item.antarchy.lightning_dragon_pet": "雷龍寵物", + "item.antarchy.gorgon_pet": "戈爾貢寵物", + "item.antarchy.apple_cow_spawn_egg": "蘋果牛刷怪蛋", + "item.antarchy.red_ant_spawn_egg": "紅螞蟻刷怪蛋", + "item.antarchy.brown_ant_spawn_egg": "棕螞蟻刷怪蛋", + "item.antarchy.rainbow_ant_spawn_egg": "彩虹螞蟻刷怪蛋", + "item.antarchy.golden_apple_cow_spawn_egg": "金色蘋果牛刷怪蛋", + "item.antarchy.enchanted_golden_apple_cow_spawn_egg": "附魔金色蘋果牛刷怪蛋", + "item.antarchy.dr_trayaurus_spawn_egg": "特雷奧勒斯博士刷怪蛋", + "item.antarchy.easter_bunny_spawn_egg": "復活節兔刷怪蛋", + "item.antarchy.glimmer_spawn_egg": "格利默刷怪蛋", + "item.antarchy.ouranwood_deer_spawn_egg": "歐蘭伍德鹿刷怪蛋", + "item.antarchy.spirit_apple": "靈魂蘋果", + "item.antarchy.elka_spawn_egg": "艾爾卡刷怪蛋", + "item.antarchy.glimmer_bottle": "格利默瓶", + "item.antarchy.glimmer_bottle.contains": "裝有:%s", + "glimmer_variant.antarchy.apple_cow": "蘋果牛", + "glimmer_variant.antarchy.ouranwood_deer": "歐蘭伍德鹿", + "glimmer_variant.antarchy.frog": "青蛙", + "glimmer_variant.antarchy.ant": "螞蟻", + "glimmer_variant.antarchy.elka": "艾爾卡", + "entity.antarchy.glimmer.set_sit": "已讓格利默坐下。", + "entity.antarchy.glimmer.set_follow": "已讓格利默跟隨。", + "entity.antarchy.glimmer.set_wander": "已讓格利默自由遊蕩。", + "entity.antarchy.glimmer.ability.ant": "你的螞蟻激起了你對%s的鬥志!", + "entity.antarchy.glimmer.ability.apple_cow": "你的蘋果牛哞叫著滋養了你!", + "entity.antarchy.glimmer.ability.elka": "你的艾爾卡發出尖嘯並震碎了守護!", + "entity.antarchy.glimmer.ability.deer": "你的歐蘭伍德鹿衝穿了敵人!", + "entity.antarchy.glimmer.ability.frog": "你的青蛙吞掉了%s!", + "item.antarchy.glimmer_bottle.passive.apple_cow": "被動:飢餓值消耗速度降低25%", + "item.antarchy.glimmer_bottle.ability.apple_cow": "能力:飢餓值較低時哞叫,短暫提供飽和與生命恢復", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "被動:速度 Ⅰ", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "能力:衝刺撞向敵對生物時會貫穿並將其擊飛", + "item.antarchy.glimmer_bottle.passive.frog": "被動:跳躍提升 Ⅰ", + "item.antarchy.glimmer_bottle.ability.frog": "能力:吞噬附近的敵對生物,並在一段時間內變得更大更強", + "item.antarchy.glimmer_bottle.passive.ant": "被動:攻擊距離略微增加", + "item.antarchy.glimmer_bottle.ability.ant": "能力:命中大型敵人時短暫獲得力量 Ⅱ", + "item.antarchy.glimmer_bottle.passive.elka": "被動:血晶守護 Ⅱ", + "item.antarchy.glimmer_bottle.ability.elka": "能力:一顆守護之心破碎時發出尖嘯並化作衝擊波", + "advancements.antarchy.spirant_animal.title": "蟻氣相投", + "advancements.antarchy.spirant_animal.description": "馴服一個螞蟻格利默。", + "advancements.antarchy.hoppy_together.title": "一起蹦躂", + "advancements.antarchy.hoppy_together.description": "馴服一個青蛙格利默。", + "advancements.antarchy.deerly_beloved.title": "鹿有知己", + "advancements.antarchy.deerly_beloved.description": "馴服一個歐蘭伍德鹿格利默。", + "advancements.antarchy.elkcellent_choice.title": "麋好選擇", + "advancements.antarchy.elkcellent_choice.description": "馴服一個艾爾卡 格利默。", + "advancements.antarchy.apple_of_my_eye.title": "掌上明珠", + "advancements.antarchy.apple_of_my_eye.description": "馴服一個蘋果牛格利默。", + "item.antarchy.dorrie_spawn_egg": "多莉刷怪蛋", + "item.antarchy.flying_squirrel_spawn_egg": "飛鼠刷怪蛋", + "item.antarchy.caterpillar_spawn_egg": "毛毛蟲刷怪蛋", + "item.antarchy.butterfly_spawn_egg": "蝴蝶刷怪蛋", + "item.antarchy.brutalfly_spawn_egg": "布魯塔爾弗萊刷怪蛋", + "item.antarchy.cloud_shark_spawn_egg": "雲鯊刷怪蛋", + "item.antarchy.kraken_spawn_egg": "呃,不。別這樣。", + "item.antarchy.missile_squid_spawn_egg": "導彈魷魚刷怪蛋", + "item.antarchy.octopus_bomb_spawn_egg": "章魚炸彈刷怪蛋", + "item.antarchy.nightmare_spawn_egg": "夢魘刷怪蛋", + "item.antarchy.toreterror_spawn_egg": "托爾泰羅爾刷怪蛋", + "item.antarchy.water_cannon": "水炮", + "item.antarchy.primordial_helmet": "原初頭盔", + "item.antarchy.primordial_chestplate": "原初胸甲", + "item.antarchy.primordial_leggings": "原初護腿", + "item.antarchy.primordial_boots": "原初靴子", + "item.antarchy.bed_bug_spawn_egg": "臭蟲刷怪蛋", + "item.antarchy.moleworm_spawn_egg": "莫爾沃姆刷怪蛋", + "item.antarchy.molevore_spawn_egg": "莫爾沃爾刷怪蛋", + "item.antarchy.reverie_spawn_egg": "雷弗裡刷怪蛋", + "item.antarchy.mantis_spawn_egg": "螳螂刷怪蛋", + "item.antarchy.alpha_mantis_spawn_egg": "阿爾法螳螂刷怪蛋", + "biome.antarchy.moleworm_caves": "莫爾沃姆洞穴", + "biome.antarchy.elythia_meadow": "艾莉提婭草甸", + "biome.antarchy.butterfly_fields": "蝴蝶原野", + "biome.antarchy.ouranwood_forest": "歐蘭伍德 森林", + "biome.antarchy.glimmering_pools": "微光池", + "biome.antarchy.peach_forest": "桃林", + "biome.antarchy.fungal_ouranwood_forest": "菌生歐蘭伍德 森林", + "biome.antarchy.glowcap_caves": "熒光菌蓋洞穴", + "message.antarchy.brown_ant_activated": "棕螞蟻已準備好開啟目的地。", + "message.antarchy.brown_ant_needs_reagent": "這隻棕螞蟻需要試劑才能開啟目的地。", + "message.antarchy.rainbow_ant_activated": "彩虹螞蟻嗡鳴著連線到一個新的英菲尼提目的地。", + "message.antarchy.rainbow_ant_activated_inherited": "彩虹螞蟻嗡鳴著連線到繼承的英菲尼提目的地。", + "message.antarchy.rainbow_ant_activated_inherited_existing": "彩虹螞蟻重新連線到繼承的英菲尼提目的地。", + "message.antarchy.rainbow_ant_failed_dimension_create": "建立維度失敗。英菲尼提配置可能存在問題。請重啟或重新登入後再試。", + "message.antarchy.rainbow_ant_infinity_missing": "必須安裝英菲尼提,彩虹螞蟻維度才能正常使用。", + "message.antarchy.rainbow_ant_needs_reagent": "這隻彩虹螞蟻需要試劑才能開啟維度。", + "message.antarchy.red_ant_activated": "紅螞蟻已準備好開啟目的地。", + "message.antarchy.red_ant_needs_reagent": "這隻紅螞蟻需要試劑才能開啟目的地。", + "message.antarchy.termite_activated": "白蟻已準備好開啟目的地。", + "message.antarchy.termite_needs_reagent": "這隻白蟻需要試劑才能開啟目的地。", + "death.attack.spit_bug_disrespect": "%1$s遭到了噴吐蟲的羞辱", + "death.attack.jumpy_bug_jump": "%1$s被跳跳蟲撲倒了", + "death.attack.hercules_beetle_obliteration": "%1$s被赫拉克勒斯甲蟲徹底摧毀", + "message.antarchy.big_bertha.mode": "大貝莎模式:%s", + "message.antarchy.big_bertha.mode.basilisk": "蛇怪", + "message.antarchy.big_bertha.mode.lucid": "盧西德", + "message.antarchy.big_bertha.mode.nightmare": "夢魘", + "message.antarchy.big_bertha.mode.kraken": "克拉肯", + "message.antarchy.big_bertha.mode.molevore": "莫爾沃爾", + "message.antarchy.big_bertha.mode.toreterror": "托爾泰羅爾", + "message.antarchy.ultimate_tool.mode_3x3": "已切換至3×3挖掘", + "message.antarchy.ultimate_tool.mode_default": "已切換至預設挖掘", + "advancements.antarchy.hey_listen.title": "嘿,聽著!", + "advancements.antarchy.hey_listen.description": "一隻雷弗里加入了你。", + "advancements.antarchy.very_hungry_caterpillar.title": "好餓的毛毛蟲", + "advancements.antarchy.very_hungry_caterpillar.description": "幫助一隻毛毛蟲成長。", + "effect.antarchy.dread": "恐懼", + "effect.antarchy.dread.description": "會產生視覺與聽覺幻覺。", + "effect.antarchy.paralyzed": "麻痺", + "effect.antarchy.paralyzed.description": "阻止目標移動。", + "effect.antarchy.inverted": "反轉", + "effect.antarchy.inverted.description": "反轉目標的重力。", + "effect.antarchy.stinky": "臭氣", + "effect.antarchy.stinky.description": "驅趕被動與中立生物,吸引節肢生物。", + "effect.antarchy.gooped.description": "降低移動速度與攻擊速度。", + "effect.antarchy.shrinking": "縮小", + "effect.antarchy.growth": "生長", + "effect.antarchy.bloodglass_ward": "血晶守護", + "effect.antarchy.bloodglass_ward.description": "給予會破碎的心,能吸收完整一次傷害。它們會隨時間恢復。", + "death.attack.triffid_mauling": "%1$s被一株植物撕咬致死", + "death.attack.triffid_mauling.player": "%1$s被一株植物撕咬致死", + "death.attack.triffid_swallow": "%1$s被特里菲德吞下了", + "death.attack.triffid_swallow.player": "%1$s被特里菲德吞下了", + "potion.antarchy.haste": "急迫藥水", + "potion.antarchy.strong_haste": "強效急迫藥水", + "tooltip.antarchy.big_bertha.mode": "模式:%s", + "tooltip.antarchy.big_bertha.toggle_mode": "潛行鍵+右鍵迴圈切換首領模式。", + "tooltip.antarchy.big_bertha.mode.basilisk": "右鍵可麻痺目標。攻擊會施加中毒與緩慢。", + "tooltip.antarchy.big_bertha.mode.lucid": "攻擊會使目標反轉數秒。自身處於反轉狀態時攻擊傷害更高。", + "tooltip.antarchy.big_bertha.mode.nightmare": "玩家會受到恐懼;攻擊會施加虛弱。", + "tooltip.antarchy.big_bertha.mode.kraken": "攻擊會將目標砸回並召喚閃電。", + "tooltip.antarchy.big_bertha.mode.molevore": "右鍵旋轉向前並鑽穿莫爾沃爾方塊。", + "tooltip.antarchy.big_bertha.mode.toreterror": "右鍵躍向空中並以範圍衝擊波砸落。", + "tooltip.antarchy.ultimate_tools_3x3": "潛行鍵+右鍵切換3×3挖掘。", + "tooltip.antarchy.moggles.reveal": "獲得夜視並指向附近洞穴。", + "tooltip.antarchy.moggles.underground": "僅在無法接觸天空時生效。", + "tooltip.antarchy.cornea_ear.vision": "獲得%s秒夜視。", + "tooltip.antarchy.mob_coming_soon": "生物即將推出!", + "tooltip.antarchy.gravity_gun.primary": "左鍵:轟飛附近實體或投擲抓住的目標。", + "tooltip.antarchy.gravity_gun.secondary": "右鍵:拉取實體或有效方塊。", + "tooltip.antarchy.gravity_gun.scroll": "按住控制鍵並滾動滾輪,可拉近或推遠抓住的目標。", + "tooltip.antarchy.gravity_gun.blacklist": "不會影響黑名單中的方塊或實體。", + "tooltip.antarchy.antimetal_inversion": "反轉正下方實體的重力", + "tooltip.antarchy.diamond_minecart.forward": "將在之後實現。", + "tooltip.antarchy.diamond_minecart.rails": " ", + "tooltip.antarchy.rainbow_sugar": "啟用彩虹螞蟻維度。在其中食用可返回家園。", + "advancements.antarchy.visit_elythia.title": "跨維度之蟻", + "advancements.antarchy.visit_elythia.description": "使用一隻棕螞蟻前往艾莉提婭。", + "advancements.antarchy.visit_thoraxis.title": "蟻怒管理", + "advancements.antarchy.visit_thoraxis.description": "使用一隻紅螞蟻前往索爾阿克西斯。", + "advancements.antarchy.fallen_kingdom_castle.title": "我曾統治世界……", + "advancements.antarchy.fallen_kingdom_castle.description": "發現隕落王國城堡。", + "advancements.antarchy.fallen_king_crown.title": "我一聲令下,區塊便會載入……", + "advancements.antarchy.fallen_king_crown.description": "獲得隕落之王的王冠。", + "advancements.antarchy.the_lab.title": "大家好,我是丹!", + "advancements.antarchy.the_lab.description": "發現特雷奧勒斯博士的實驗室。", + "advancements.antarchy.sweater_dreams.title": "毛衣之夢", + "advancements.antarchy.sweater_dreams.description": "擊敗夢魘。", + "advancements.antarchy.stone_cold.title": "冷若磐石", + "advancements.antarchy.stone_cold.description": "擊敗一隻蛇怪。", + "advancements.antarchy.moley_poley.title": "鼴鼴滾滾", + "advancements.antarchy.moley_poley.description": "擊敗一隻莫爾沃爾。", + "advancements.antarchy.lucid_dreams.title": "清醒夢", + "advancements.antarchy.lucid_dreams.description": "擊敗一隻盧西德。", + "advancements.antarchy.davy_jones_locker.title": "戴維·瓊斯的魔櫃", + "advancements.antarchy.davy_jones_locker.description": "擊敗克拉肯。", + "advancements.antarchy.shark_weak.title": "當鯊魚會飛", + "advancements.antarchy.shark_weak.description": "擊敗一隻雲鯊。", + "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "別讓臭蟲咬你", + "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "擊敗一隻臭蟲。", + "advancements.antarchy.soups_up.title": "湯好了", + "advancements.antarchy.soups_up.description": "食用雲鯊鰭湯。", + "advancements.antarchy.in_the_upside_down.title": "身處顛倒世界", + "advancements.antarchy.in_the_upside_down.description": "首次進入反轉狀態。", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "誰聞到就是誰放的", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "首次進入臭氣狀態。", + "advancements.antarchy.ultimate_armor.title": "終極防護", + "advancements.antarchy.ultimate_armor.description": "收集整套終極盔甲。", + "advancements.antarchy.ultimate_bow.title": "弓西米亞狂想曲", + "advancements.antarchy.ultimate_bow.description": "獲得終極弓。", + "advancements.antarchy.brutalfly.title": "像布魯塔爾弗萊一樣飛舞,像蜜蜂一樣蜇刺", + "advancements.antarchy.brutalfly.description": "獲得布魯塔爾弗萊鞘翅。", + "advancements.antarchy.now_watch_me_whip.title": "現在看我揮鞭", + "advancements.antarchy.now_watch_me_whip.description": "現在看我跳奈 奈", + "advancements.antarchy.kill_molevore.title": "鼴鼴滾滾", + "advancements.antarchy.kill_molevore.description": "擊殺一隻莫爾沃爾。", + "advancements.antarchy.water_cannon_craft.title": "越溼越好!", + "advancements.antarchy.water_cannon_craft.description": "獲得水炮。", + "advancements.antarchy.kill_toreterror.title": "不如叫托爾-糟糕準頭!", + "advancements.antarchy.kill_toreterror.description": "擊敗托爾泰羅爾。", + "advancements.antarchy.challenge_games.title": "挑戰遊戲!", + "advancements.antarchy.challenge_games.description": "進入廢墟競技場。", + "advancements.antarchy.bugged_out.title": "蟲到極點", + "advancements.antarchy.bugged_out.description": "擊敗阿爾法螳螂。", + "death.attack.bed_bug_bite": "%1$s被臭蟲咬了", + "death.attack.bed_bug_bite.player": "%1$s在與%2$s戰鬥時被臭蟲咬了", + "message.antarchy.dread_too_scared_to_sleep": "你害怕得無法入睡。", + "death.attack.kraken_mauling": "%1$s被克拉肯拖入水下", + "death.attack.kraken_mauling.player": "%1$s在與%2$s戰鬥時被克拉肯拖入水下", + "death.attack.kraken_lightning": "%1$s被克拉肯的風暴擊倒", + "death.attack.kraken_lightning.player": "%1$s在與%2$s戰鬥時被克拉肯的風暴擊倒", + "death.attack.rpo_launcher_blast": "%1$s被火動章擊倒", + "death.attack.rpo_launcher_blast.player": "%1$s在與%2$s戰鬥時被火動章擊倒", + "death.attack.nightmare_mauling": "%1$s被夢魘吞噬", + "death.attack.nightmare_mauling.player": "%1$s在與%2$s戰鬥時被夢魘吞噬", + "death.attack.basilisk_bite": "%1$s被蛇怪吞下", + "death.attack.basilisk_bite.player": "%1$s在與%2$s戰鬥時被蛇怪吞下", + "death.attack.emperor_scorpion_sting": "%1$s被帝王蠍蜇傷", + "death.attack.emperor_scorpion_sting.player": "%1$s在與%2$s戰鬥時被帝王蠍蜇傷", + "death.attack.cornea_stalk_prick": "%1$s被科爾尼婭莖刺死", + "death.attack.toreterror_spin": "%1$s被托爾泰羅爾旋轉致死", + "death.attack.toreterror_spin.player": "%1$s被托爾泰羅爾旋轉致死", + "death.attack.toreterror_jump": "%1$s被托爾泰羅爾砸死", + "death.attack.toreterror_jump.player": "%1$s被托爾泰羅爾砸死", + "death.attack.water_soaked": "%1$s被%2$s浸透致死", + "death.attack.water_soaked.player": "%1$s被%2$s浸透致死", + "entity.antarchy.lucid": "盧西德", + "item.antarchy.lucid_spawn_egg": "盧西德刷怪蛋", + "item.antarchy.lucid_eye": "盧西德之眼", + "entity.antarchy.scorpion": "蠍子", + "item.antarchy.scorpion_spawn_egg": "蠍子刷怪蛋", + "entity.antarchy.basilisk": "蛇怪", + "item.antarchy.basilisk_spawn_egg": "蛇怪刷怪蛋", + "entity.antarchy.emperor_scorpion": "帝王蠍", + "item.antarchy.emperor_scorpion_spawn_egg": "帝王蠍刷怪蛋", + "item.antarchy.emperor_scorpion_stinger": "帝王蠍毒刺", + "item.antarchy.lucid_pearl": "盧西德珍珠", + "tooltip.antarchy.lucid_pearl": "投擲一個重力反轉的彈射物。", + "tooltip.antarchy.lucid_pearl.detail": "將你傳送到落點並施加反轉。", + "subtitles.antarchy.squidzooka_fire": "斯奎祖卡開火", + "subtitles.antarchy.shrink_ray": "縮小射線槍開火", + "subtitles.antarchy.growth_ray": "生長射線槍開火", + "subtitles.antarchy.size_ray_charge": "尺寸射線槍蓄力", + "subtitles.antarchy.ant_ambient": "螞蟻唧唧叫", + "subtitles.antarchy.ant_idle": "螞蟻發出動靜", + "subtitles.antarchy.ant_hurt": "螞蟻受傷", + "subtitles.antarchy.ant_bite": "螞蟻啃咬", + "subtitles.antarchy.ant_gather": "螞蟻採集", + "subtitles.antarchy.ant_nest": "蟻巢沙沙作響", + "subtitles.antarchy.cloud_shark_bite": "雲鯊啃咬", + "subtitles.antarchy.cloud_shark_idle": "雲鯊發出動靜", + "subtitles.antarchy.cloud_shark_hurt": "雲鯊受傷", + "subtitles.antarchy.cloud_shark_death": "雲鯊死亡", + "subtitles.antarchy.cloud_shark_fly": "雲鯊飛行", + "subtitles.antarchy.caterpillar_idle": "毛毛蟲發出動靜", + "subtitles.antarchy.caterpillar_hurt": "毛毛蟲受傷", + "subtitles.antarchy.caterpillar_crawl": "毛毛蟲爬行", + "subtitles.antarchy.butterfly_hurt": "蝴蝶受傷", + "subtitles.antarchy.brutalfly_idle": "布魯塔爾弗萊發出動靜", + "subtitles.antarchy.brutalfly_death": "布魯塔爾弗萊死亡", + "subtitles.antarchy.thoraxis_nightmare_wastes_ambient": "夢魘荒原嗡鳴", + "subtitles.antarchy.thoraxis_nightmare_wastes_additions": "夢魘荒原躁動", + "subtitles.antarchy.thoraxis_nightmare_wastes_mood": "夢魘荒原低語", + "subtitles.antarchy.thoraxis_dream_dunes_ambient": "夢境沙丘竊竊私語", + "subtitles.antarchy.thoraxis_dream_dunes_additions": "夢境沙丘沙沙作響", + "subtitles.antarchy.thoraxis_dream_dunes_mood": "夢境沙丘嘆息", + "subtitles.antarchy.thoraxis_lucid_pools_ambient": "清醒池嗡鳴", + "subtitles.antarchy.thoraxis_lucid_pools_additions": "清醒池發出詛咒聲", + "subtitles.antarchy.thoraxis_lucid_pools_mood": "清醒池低語", + "subtitles.antarchy.lucid_ambient": "盧西德嗡鳴", + "subtitles.antarchy.lucid_flying": "盧西德撲動", + "subtitles.antarchy.lucid_attack": "盧西德攻擊", + "subtitles.antarchy.lucid_bolt": "盧西德發射彈體", + "subtitles.antarchy.lucid_hurt": "盧西德受傷", + "subtitles.antarchy.lucid_death": "盧西德死亡", + "subtitles.antarchy.reverie_idle": "雷弗裡漂浮", + "subtitles.antarchy.reverie_hurt": "雷弗裡受傷", + "subtitles.antarchy.reverie_worry": "雷弗裡擔憂", + "subtitles.antarchy.reverie_save": "雷弗裡救下了你", + "subtitles.antarchy.reverie_join_player": "雷弗里加入了你", + "subtitles.antarchy.reverie_alert": "雷弗裡向你示警", + "subtitles.antarchy.flying_squirrel_idle": "飛鼠唧唧叫", + "subtitles.antarchy.flying_squirrel_beg": "飛鼠討要食物", + "subtitles.antarchy.flying_squirrel_nut": "飛鼠進食", + "subtitles.antarchy.flying_squirrel_glide_loop": "飛鼠滑翔", + "subtitles.antarchy.flying_squirrel_hurt": "飛鼠受傷", + "subtitles.antarchy.flying_squirrel_death": "飛鼠死亡", + "subtitles.antarchy.nightmare_idle": "夢魘低吼", + "subtitles.antarchy.nightmare_hurt": "夢魘受傷", + "subtitles.antarchy.nightmare_roar": "夢魘咆哮", + "subtitles.antarchy.nightmare_death": "夢魘死亡", + "subtitles.antarchy.nightmare_bite": "夢魘啃咬", + "subtitles.antarchy.nightmare_flap": "夢魘振翅", + "subtitles.antarchy.triffid_attack": "特里菲德攻擊", + "subtitles.antarchy.triffid_grab": "特里菲德抓取", + "subtitles.antarchy.triffid_hurt": "特里菲德受傷", + "subtitles.antarchy.triffid_death": "特里菲德死亡", + "subtitles.antarchy.triffid_hiss": "特里菲德嘶嘶作響", + "subtitles.antarchy.triffid_growl": "特里菲德咆哮", + "subtitles.antarchy.gravity_gun_pickup": "重力槍拾取", + "subtitles.antarchy.gravity_gun_drop": "重力槍放下", + "subtitles.antarchy.gravity_gun_hold_loop": "重力槍嗡鳴", + "subtitles.antarchy.gravity_gun_launch": "重力槍發射", + "subtitles.antarchy.gravity_gun_dryfire": "重力槍空擊", + "subtitles.antarchy.bed_bug_ambient": "臭蟲唧唧叫", + "subtitles.antarchy.bed_bug_hurt": "臭蟲受傷", + "subtitles.antarchy.bed_bug_attack": "臭蟲啃咬", + "subtitles.antarchy.wasp_idle": "黃蜂嗡嗡作響", + "subtitles.antarchy.wasp_hurt": "黃蜂受傷", + "subtitles.antarchy.wasp_attack": "黃蜂蜇刺", + "subtitles.antarchy.wasp_death": "黃蜂死亡", + "subtitles.antarchy.scorpion_ambient": "蠍子咔嗒作響", + "subtitles.antarchy.scorpion_hurt": "蠍子受傷", + "subtitles.antarchy.scorpion_attack": "蠍子攻擊", + "subtitles.antarchy.emperor_scorpion_ambient": "帝王蠍咔嗒作響", + "subtitles.antarchy.emperor_scorpion_hurt": "帝王蠍受傷", + "subtitles.antarchy.emperor_scorpion_attack": "帝王蠍攻擊", + "subtitles.antarchy.emperor_scorpion_roar": "帝王蠍咆哮", + "subtitles.antarchy.moleworm_ambient": "莫爾沃姆沙沙作響", + "subtitles.antarchy.moleworm_hurt": "莫爾沃姆受傷", + "subtitles.antarchy.moleworm_attack": "莫爾沃姆攻擊", + "subtitles.antarchy.moleworm_dig": "莫爾沃姆挖掘", + "subtitles.antarchy.molevore_ambient": "莫爾沃爾隆隆作響", + "subtitles.antarchy.molevore_hurt": "莫爾沃爾受傷", + "subtitles.antarchy.molevore_attack": "莫爾沃爾攻擊", + "subtitles.antarchy.molevore_dig": "莫爾沃爾挖掘", + "subtitles.antarchy.duct_tape_use": "強力膠帶撕裂", + "subtitles.antarchy.potent_nyxite_hypnotic_gas": "強效尼克賽特嘶嘶作響", + "subtitles.antarchy.potent_nyxite_geyser_eruption": "強效尼克賽特噴發", + "subtitles.antarchy.potent_nyxite_geyser_continuous": "強效尼克賽特間歇泉轟鳴", + "subtitles.antarchy.missile_squid_ambient": "導彈魷魚嗡鳴", + "subtitles.antarchy.missile_squid_hurt": "導彈魷魚受傷", + "subtitles.antarchy.missile_squid_death": "導彈魷魚死亡", + "subtitles.antarchy.missile_squid_attack": "導彈魷魚攻擊", + "subtitles.antarchy.kraken_flying_loop": "克拉肯滑翔", + "subtitles.antarchy.kraken_flying_sideways_loop": "克拉肯盤旋", + "subtitles.antarchy.kraken_attack": "克拉肯猛擊", + "subtitles.antarchy.kraken_spin": "克拉肯旋轉", + "subtitles.antarchy.kraken_roar": "克拉肯咆哮", + "subtitles.antarchy.kraken_summon": "克拉肯現身", + "subtitles.antarchy.kraken_hurt": "克拉肯受傷", + "subtitles.antarchy.kraken_death": "克拉肯死亡", + "subtitles.antarchy.basilisk_idle_loop": "蛇怪發出動靜", + "subtitles.antarchy.basilisk_slither_loop": "蛇怪蜿蜒爬行", + "subtitles.antarchy.basilisk_bite": "蛇怪啃咬", + "subtitles.antarchy.basilisk_hiss": "蛇怪嘶嘶作響", + "subtitles.antarchy.basilisk_hurt": "蛇怪受傷", + "subtitles.antarchy.basilisk_death": "蛇怪死亡", + "subtitles.antarchy.bomber_walk": "轟炸蟲行走", + "subtitles.antarchy.bomber_knock": "轟炸蟲受到攻擊", + "subtitles.antarchy.bomber_explode": "轟炸蟲引信嘶嘶作響", + "subtitles.antarchy.toreterror_idle": "托爾泰羅爾發出動靜", + "subtitles.antarchy.toreterror_hurt": "托爾泰羅爾受傷", + "subtitles.antarchy.toreterror_death": "托爾泰羅爾死亡", + "subtitles.antarchy.toreterror_bomber_fire": "托爾泰羅爾發射轟炸蟲", + "subtitles.antarchy.toreterror_spin": "托爾泰羅爾旋轉", + "subtitles.antarchy.toreterror_ricochet": "托爾泰羅爾彈跳", + "subtitles.antarchy.water_cannon_fire": "水炮開火", + "subtitles.antarchy.toreterror_jump_up": "托爾泰羅爾跳躍", + "subtitles.antarchy.toreterror_jump_land": "托爾泰羅爾落地", + "subtitles.antarchy.stinky_fly": "臭蒼蠅嗡嗡作響", + "item.minecraft.potion.effect.inversion": "反轉藥水", + "item.minecraft.potion.effect.long_inversion": "反轉藥水", + "item.minecraft.splash_potion.effect.inversion": "反轉噴濺藥水", + "item.minecraft.splash_potion.effect.long_inversion": "反轉噴濺藥水", + "item.minecraft.lingering_potion.effect.inversion": "反轉滯留藥水", + "item.minecraft.lingering_potion.effect.long_inversion": "反轉滯留藥水", + "item.minecraft.tipped_arrow.effect.inversion": "反轉箭", + "item.minecraft.tipped_arrow.effect.long_inversion": "反轉箭", + "item.minecraft.potion.effect.paralysis": "麻痺藥水", + "item.minecraft.potion.effect.long_paralysis": "麻痺藥水", + "item.minecraft.splash_potion.effect.paralysis": "麻痺噴濺藥水", + "item.minecraft.splash_potion.effect.long_paralysis": "麻痺噴濺藥水", + "item.minecraft.lingering_potion.effect.paralysis": "麻痺滯留藥水", + "item.minecraft.lingering_potion.effect.long_paralysis": "麻痺滯留藥水", + "item.minecraft.tipped_arrow.effect.paralysis": "麻痺箭", + "item.minecraft.tipped_arrow.effect.long_paralysis": "麻痺箭", + "item.minecraft.potion.effect.shrinking": "縮小藥水", + "item.minecraft.potion.effect.strong_shrinking": "縮小藥水 Ⅱ", + "item.minecraft.potion.effect.extreme_shrinking": "縮小藥水 Ⅲ", + "item.minecraft.splash_potion.effect.shrinking": "縮小噴濺藥水", + "item.minecraft.splash_potion.effect.strong_shrinking": "縮小噴濺藥水 Ⅱ", + "item.minecraft.splash_potion.effect.extreme_shrinking": "縮小噴濺藥水 Ⅲ", + "item.minecraft.lingering_potion.effect.shrinking": "縮小滯留藥水", + "item.minecraft.lingering_potion.effect.strong_shrinking": "縮小滯留藥水 Ⅱ", + "item.minecraft.lingering_potion.effect.extreme_shrinking": "縮小滯留藥水 Ⅲ", + "item.minecraft.tipped_arrow.effect.shrinking": "縮小箭", + "item.minecraft.tipped_arrow.effect.strong_shrinking": "縮小箭 Ⅱ", + "item.minecraft.tipped_arrow.effect.extreme_shrinking": "縮小箭 Ⅲ", + "item.minecraft.potion.effect.growing": "生長藥水", + "item.minecraft.potion.effect.strong_growing": "生長藥水 Ⅱ", + "item.minecraft.potion.effect.extreme_growing": "生長藥水 Ⅲ", + "item.minecraft.splash_potion.effect.growing": "生長噴濺藥水", + "item.minecraft.splash_potion.effect.strong_growing": "生長噴濺藥水 Ⅱ", + "item.minecraft.splash_potion.effect.extreme_growing": "生長噴濺藥水 Ⅲ", + "item.minecraft.lingering_potion.effect.growing": "生長滯留藥水", + "item.minecraft.lingering_potion.effect.strong_growing": "生長滯留藥水 Ⅱ", + "item.minecraft.lingering_potion.effect.extreme_growing": "生長滯留藥水 Ⅲ", + "item.minecraft.tipped_arrow.effect.growing": "生長箭", + "item.minecraft.tipped_arrow.effect.strong_growing": "生長箭 Ⅱ", + "item.minecraft.tipped_arrow.effect.extreme_growing": "生長箭 Ⅲ", + "item.minecraft.potion.effect.dread": "恐懼藥水", + "item.minecraft.potion.effect.long_dread": "恐懼藥水", + "item.minecraft.splash_potion.effect.dread": "恐懼噴濺藥水", + "item.minecraft.splash_potion.effect.long_dread": "恐懼噴濺藥水", + "item.minecraft.lingering_potion.effect.dread": "恐懼滯留藥水", + "item.minecraft.lingering_potion.effect.long_dread": "恐懼滯留藥水", + "item.minecraft.tipped_arrow.effect.dread": "恐懼箭", + "item.minecraft.tipped_arrow.effect.long_dread": "恐懼箭", + "item.minecraft.potion.effect.stinky": "臭氣藥水", + "item.minecraft.potion.effect.long_stinky": "臭氣藥水", + "item.minecraft.splash_potion.effect.stinky": "臭氣噴濺藥水", + "item.minecraft.splash_potion.effect.long_stinky": "臭氣噴濺藥水", + "item.minecraft.lingering_potion.effect.stinky": "臭氣滯留藥水", + "item.minecraft.lingering_potion.effect.long_stinky": "臭氣滯留藥水", + "item.minecraft.tipped_arrow.effect.stinky": "臭氣箭", + "item.minecraft.tipped_arrow.effect.long_stinky": "臭氣箭", + "item.minecraft.potion.effect.haste": "急迫藥水", + "item.minecraft.potion.effect.strong_haste": "急迫藥水 Ⅱ", + "item.minecraft.splash_potion.effect.haste": "急迫噴濺藥水", + "item.minecraft.splash_potion.effect.strong_haste": "急迫噴濺藥水 Ⅱ", + "item.minecraft.lingering_potion.effect.haste": "急迫滯留藥水", + "item.minecraft.lingering_potion.effect.strong_haste": "急迫滯留藥水 Ⅱ", + "item.minecraft.tipped_arrow.effect.haste": "急迫箭", + "item.minecraft.tipped_arrow.effect.strong_haste": "急迫箭 Ⅱ", + "advancements.antarchy.cancel_out.title": "1 - 1 = ?", + "advancements.antarchy.cancel_out.description": "同時擁有生長與縮小效果。", + "entity.antarchy.cheep": "奇普", + "item.antarchy.cheep": "奇普", + "item.antarchy.cheep_spawn_egg": "奇普刷怪蛋", + "entity.antarchy.reverie": "雷弗裡", + "biome.antarchy.thoraxis": "索爾阿克西斯", + "biome.antarchy.nightmare_wastes": "夢魘荒原", + "biome.antarchy.umbral_hills": "幽影丘陵", + "biome.antarchy.lucid_pools": "清醒池", + "biome.antarchy.dream_dunes": "夢境沙丘", + "block.antarchy.wild_corn": "野生玉米", + "trim_material.antarchy.blood_crystal": "血晶", + "trim_material.antarchy.nightmare_scale": "夢魘鱗片", + "trim_material.antarchy.uranium": "鈾", + "trim_material.antarchy.titanium": "鈦", + "advancements.antarchy.duct_tape.title": "我把這艘船鋸成兩半了!", + "advancements.antarchy.duct_tape.description": "再用強力膠帶的力量修好了!", + "key.categories.antarchy": "安塔奇", + "key.antarchy.brutalfly_flap": "布魯塔爾弗萊鞘翅:振翅", + "advancements.antarchy.shrink_ray_craft.title": "親愛的,我把生物縮小了", + "advancements.antarchy.shrink_ray_craft.description": "合成縮小射線槍。", + "advancements.antarchy.growth_ray_craft.title": "要麼變大,要麼回家", + "advancements.antarchy.growth_ray_craft.description": "合成生長射線槍。", + "advancements.antarchy.squidzooka_craft.title": "墨染毀滅", + "advancements.antarchy.squidzooka_craft.description": "合成斯奎祖卡。", + "advancements.antarchy.rocket_powered_octopus.title": "火箭動力章魚", + "advancements.antarchy.rocket_powered_octopus.description": "合成火動章發射器。", + "advancements.antarchy.gravity_gun_craft.title": "搭訕高手", + "advancements.antarchy.gravity_gun_craft.description": "合成重力槍。", + "block.antarchy.cavaryn_portal": "卡瓦林傳送門", + "block.antarchy.termite_nest": "白蟻巢", + "block.antarchy.chitin_spike": "甲殼素尖刺", + "block.antarchy.chitin_block": "甲殼素塊", + "block.antarchy.myrmite": "米爾邁特", + "block.antarchy.broodstone": "布魯德斯通", + "block.antarchy.amber_moss_block": "琥珀苔蘚塊", + "block.antarchy.amber_moss_carpet": "琥珀苔蘚地毯", + "block.antarchy.amber_lichen": "琥珀地衣", + "block.antarchy.bile_vein": "膽汁礦脈", + "block.antarchy.creepvine": "爬藤", + "block.antarchy.creeping_horror_egg": "爬行恐魔蛋", + "block.antarchy.lurking_terror_egg": "潛伏恐魔蛋", + "entity.antarchy.termite": "白蟻", + "entity.antarchy.jumpy_bug": "跳跳蟲", + "entity.antarchy.spit_bug": "噴吐蟲", + "entity.antarchy.stink_bug": "臭屁蟲", + "entity.antarchy.rolly_polly": "鼠婦", + "entity.antarchy.creeping_horror": "爬行恐魔", + "entity.antarchy.lurking_terror": "潛伏恐魔", + "entity.antarchy.hercules_beetle": "赫拉克勒斯甲蟲", + "item.antarchy.jumpy_bug_spawn_egg": "跳跳蟲刷怪蛋", + "item.antarchy.spit_bug_spawn_egg": "噴吐蟲刷怪蛋", + "item.antarchy.stink_bug_spawn_egg": "臭屁蟲刷怪蛋", + "item.antarchy.termite_spawn_egg": "白蟻刷怪蛋", + "item.antarchy.rolly_polly_spawn_egg": "鼠婦刷怪蛋", + "item.antarchy.creeping_horror_spawn_egg": "爬行恐魔刷怪蛋", + "item.antarchy.lurking_terror_spawn_egg": "潛伏恐魔刷怪蛋", + "item.antarchy.hercules_beetle_spawn_egg": "赫拉克勒斯甲蟲刷怪蛋", + "item.antarchy.chitin": "甲殼素", + "block.antarchy.polished_broodstone": "磨製布魯德斯通", + "block.antarchy.chiseled_broodstone": "雕紋布魯德斯通", + "block.antarchy.broodstone_bricks": "布魯德斯通磚塊", + "block.antarchy.broodstone_stairs": "布魯德斯通樓梯", + "block.antarchy.broodstone_slab": "布魯德斯通臺階", + "block.antarchy.broodstone_wall": "布魯德斯通牆", + "block.antarchy.polished_broodstone_stairs": "磨製布魯德斯通樓梯", + "block.antarchy.polished_broodstone_slab": "磨製布魯德斯通臺階", + "block.antarchy.polished_broodstone_wall": "磨製布魯德斯通牆", + "block.antarchy.broodstone_brick_stairs": "布魯德斯通磚樓梯", + "block.antarchy.broodstone_brick_slab": "布魯德斯通磚臺階", + "block.antarchy.broodstone_brick_wall": "布魯德斯通磚牆", + "block.antarchy.myrmite_coal_ore": "米爾邁特煤礦石", + "block.antarchy.broodstone_uranium_ore": "布魯德斯通 鈾礦石", + "block.antarchy.broodstone_titanium_ore": "布魯德斯通 鈦礦石", + "item.antarchy.raw_bug_meat": "生蟲肉", + "item.antarchy.cooked_bug_meat": "熟蟲肉", + "item.antarchy.hercules_horn": "赫拉克勒斯之角", + "block.antarchy.hanging_creeproots": "垂吊爬根", + "block.antarchy.glowcap_mushroom": "熒光菌蓋蘑菇", + "block.antarchy.potted_glowcap_mushroom": "盆栽熒光菌蓋蘑菇", + "block.antarchy.glowcap_mushroom_block": "熒光菌蓋蘑菇塊", + "block.antarchy.molting_vines": "蛻皮藤蔓", + "item.antarchy.broodfruit": "育巢果", + "block.antarchy.jumpy_bug_egg": "跳跳蟲蛋", + "subtitles.antarchy.creeping_horror_growl": "爬行恐魔咆哮", + "subtitles.antarchy.creeping_horror_hurt": "爬行恐魔受傷", + "subtitles.antarchy.creeping_horror_bite": "爬行恐魔啃咬", + "subtitles.antarchy.lurking_terror_snarl": "潛伏恐魔低吼", + "subtitles.antarchy.lurking_terror_hurt": "潛伏恐魔受傷", + "subtitles.antarchy.lurking_terror_bite": "潛伏恐魔啃咬", + "subtitles.antarchy.lurking_terror_fly_loop": "潛伏恐魔飛行", + "subtitles.antarchy.stink_bug_fart": "臭屁蟲放屁", + "subtitles.antarchy.stink_bug_idle": "臭屁蟲發出動靜", + "subtitles.antarchy.rolly_polly_idle": "鼠婦發出動靜", + "subtitles.antarchy.rolly_polly_wheel_mode": "鼠婦蜷縮起來", + "subtitles.antarchy.rolly_polly_normal_mode": "鼠婦展開身體", + "subtitles.antarchy.rolly_polly_roll": "鼠婦滾動", + "subtitles.antarchy.hercules_beetle_idle": "赫拉克勒斯甲蟲發出動靜", + "subtitles.antarchy.hercules_beetle_hurt": "赫拉克勒斯甲蟲受傷", + "subtitles.antarchy.hercules_beetle_attack": "赫拉克勒斯甲蟲攻擊", + "subtitles.antarchy.hercules_beetle_cry": "赫拉克勒斯甲蟲咆哮", + "subtitles.antarchy.hercules_beetle_charge_start": "赫拉克勒斯甲蟲開始蓄力", + "subtitles.antarchy.hercules_beetle_knocked_down": "赫拉克勒斯甲蟲被擊倒", + "subtitles.antarchy.jerry_idle": "傑瑞喋喋不休", + "subtitles.antarchy.jerry_hurt": "傑瑞受傷", + "subtitles.antarchy.jerry_death": "傑瑞死亡", + "subtitles.antarchy.jerry_attack": "傑瑞攻擊", + "subtitles.antarchy.jumpy_bug_idle": "跳跳蟲發出動靜", + "subtitles.antarchy.spit_bug_idle": "噴吐蟲發出動靜", + "subtitles.antarchy.jumpy_bug_hurt": "跳跳蟲受傷", + "subtitles.antarchy.jumpy_bug_jump": "跳跳蟲跳躍", + "subtitles.antarchy.spit_bug_hurt": "噴吐蟲受傷", + "subtitles.antarchy.spit_bug_spit": "噴吐蟲噴吐", + "subtitles.antarchy.brutalfly_spit": "布魯塔爾弗萊噴吐", + "advancements.antarchy.bug_apetit.title": "蟲蟲好胃口", + "advancements.antarchy.bug_apetit.description": "食用熟蟲肉。", + "advancements.antarchy.behavioral_correction.title": "行為矯正", + "advancements.antarchy.behavioral_correction.description": "獲得態度調整錘。", + "advancements.antarchy.beetle_buddies.title": "甲蟲夥伴", + "advancements.antarchy.beetle_buddies.description": "馴服一隻赫拉克勒斯甲蟲。", + "advancements.antarchy.herculean_task.title": "赫拉克勒斯之業", + "advancements.antarchy.herculean_task.description": "斬殺一隻赫拉克勒斯甲蟲。" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/armor/fallen_king_crown.json b/common-1.20.1/src/main/resources/assets/antarchy/models/armor/fallen_king_crown.json new file mode 100644 index 00000000..ff5aa500 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/armor/fallen_king_crown.json @@ -0,0 +1,91 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "gui_light": "front", + "display": { + "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, + 2, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + -135, + 0 + ], + "translation": [ + 0, + 2, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "head": { + "translation": [ + 0, + 9.5, + 0 + ], + "scale": [ + 1.7, + 1.7, + 1.7 + ] + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_lichen.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_lichen.json new file mode 100644 index 00000000..e6913b4a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_lichen.json @@ -0,0 +1,17 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/amber_moss/amber_lichen", + "glow_lichen": "antarchy:block/amber_moss/amber_lichen" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 16, 0.1], + "faces": { + "north": { "uv": [16, 0, 0, 16], "texture": "#glow_lichen" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#glow_lichen" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_block.json new file mode 100644 index 00000000..f3079b40 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/amber_moss/amber_moss_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_carpet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_carpet.json new file mode 100644 index 00000000..3058b1b5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "antarchy:block/amber_moss/amber_moss_carpet" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_small.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_small.json new file mode 100644 index 00000000..573900eb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_small.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": true, + "textures": { + "particle": "#side", + "side": "antarchy:block/amber_moss/amber_moss_carpet" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 8, 0.1], + "shade": true, + "faces": { + "north": {"uv": [16, 8, 0, 16], "texture": "#side"}, + "south": {"uv": [0, 8, 16, 16], "texture": "#side"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_tall.json new file mode 100644 index 00000000..f4bcd957 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_tall.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": true, + "textures": { + "particle": "#side", + "side": "antarchy:block/amber_moss/amber_moss_carpet" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 16, 0.1], + "shade": true, + "faces": { + "north": {"uv": [16, 0, 0, 16], "texture": "#side"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#side"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antigravel.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antigravel.json new file mode 100644 index 00000000..1036f786 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antigravel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/antigravel" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal.json new file mode 100644 index 00000000..355c1b80 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail.json new file mode 100644 index 00000000..0b3ae3eb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_flat", + "textures": { "rail": "antarchy:block/antimetal/antimetal_activator_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_on.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_on.json new file mode 100644 index 00000000..14ed2a27 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_on.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_flat", + "textures": { "rail": "antarchy:block/antimetal/antimetal_activator_rail_on" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_ne.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_ne.json new file mode 100644 index 00000000..41a63aa3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_ne.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_ne", + "textures": { "rail": "antarchy:block/antimetal/antimetal_activator_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_on_ne.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_on_ne.json new file mode 100644 index 00000000..b6b31600 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_on_ne.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_ne", + "textures": { "rail": "antarchy:block/antimetal/antimetal_activator_rail_on" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_on_sw.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_on_sw.json new file mode 100644 index 00000000..9419659d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_on_sw.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_sw", + "textures": { "rail": "antarchy:block/antimetal/antimetal_activator_rail_on" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_sw.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_sw.json new file mode 100644 index 00000000..4daaed2b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_activator_rail_raised_sw.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_sw", + "textures": { "rail": "antarchy:block/antimetal/antimetal_activator_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail.json new file mode 100644 index 00000000..73393e7c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_flat", + "textures": { "rail": "antarchy:block/antimetal/antimetal_detector_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_on.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_on.json new file mode 100644 index 00000000..e47007cb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_on.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_flat", + "textures": { "rail": "antarchy:block/antimetal/antimetal_detector_rail_on" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_ne.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_ne.json new file mode 100644 index 00000000..ed7bf60f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_ne.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_ne", + "textures": { "rail": "antarchy:block/antimetal/antimetal_detector_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_on_ne.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_on_ne.json new file mode 100644 index 00000000..cb9ab264 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_on_ne.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_ne", + "textures": { "rail": "antarchy:block/antimetal/antimetal_detector_rail_on" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_on_sw.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_on_sw.json new file mode 100644 index 00000000..afd368ee --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_on_sw.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_sw", + "textures": { "rail": "antarchy:block/antimetal/antimetal_detector_rail_on" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_sw.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_sw.json new file mode 100644 index 00000000..af312c74 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_detector_rail_raised_sw.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_sw", + "textures": { "rail": "antarchy:block/antimetal/antimetal_detector_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_horizontal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_horizontal.json new file mode 100644 index 00000000..fe353731 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail.json new file mode 100644 index 00000000..7d26b6bc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_flat", + "textures": { "rail": "antarchy:block/antimetal/antimetal_powered_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_on.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_on.json new file mode 100644 index 00000000..9d77a757 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_on.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_flat", + "textures": { "rail": "antarchy:block/antimetal/antimetal_powered_rail_on" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_ne.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_ne.json new file mode 100644 index 00000000..b76892c7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_ne.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_ne", + "textures": { "rail": "antarchy:block/antimetal/antimetal_powered_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_on_ne.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_on_ne.json new file mode 100644 index 00000000..8205e196 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_on_ne.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_ne", + "textures": { "rail": "antarchy:block/antimetal/antimetal_powered_rail_on" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_on_sw.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_on_sw.json new file mode 100644 index 00000000..b0689b05 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_on_sw.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_sw", + "textures": { "rail": "antarchy:block/antimetal/antimetal_powered_rail_on" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_sw.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_sw.json new file mode 100644 index 00000000..c44a445c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_powered_rail_raised_sw.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_sw", + "textures": { "rail": "antarchy:block/antimetal/antimetal_powered_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail.json new file mode 100644 index 00000000..bd327e43 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_flat", + "textures": { "rail": "antarchy:block/antimetal/antimetal_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail_corner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail_corner.json new file mode 100644 index 00000000..80c6492e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail_corner.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_flat", + "textures": { "rail": "antarchy:block/antimetal/antimetal_rail_corner" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail_raised_ne.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail_raised_ne.json new file mode 100644 index 00000000..9597f5e2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail_raised_ne.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_ne", + "textures": { "rail": "antarchy:block/antimetal/antimetal_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail_raised_sw.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail_raised_sw.json new file mode 100644 index 00000000..60baa47a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_rail_raised_sw.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/template_antimetal_rail_raised_sw", + "textures": { "rail": "antarchy:block/antimetal/antimetal_rail" } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_scaffolding_stable.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_scaffolding_stable.json new file mode 100644 index 00000000..081c2dab --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_scaffolding_stable.json @@ -0,0 +1,171 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "particle": "antarchy:block/antimetal/antimetal_scaffolding_side", + "3": "antarchy:block/antimetal/antimetal_scaffolding_bottom", + "4": "antarchy:block/antimetal/antimetal_scaffolding_side", + "5": "antarchy:block/antimetal/antimetal_scaffolding_top" + }, + "elements": [ + { + "from": [0, 15.99, 0], + "to": [16, 16, 16], + "faces": { + "up": {"uv": [0, 0, 16, 16], "texture": "#5", "cullface": "up"}, + "down": {"uv": [0, 16, 16, 0], "texture": "#5"} + } + }, + { + "from": [0, 0, 0], + "to": [2, 16, 2], + "faces": { + "north": {"uv": [14, 0, 16, 16], "texture": "#4", "cullface": "north"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#4"}, + "south": {"uv": [0, 0, 2, 16], "texture": "#4"}, + "west": {"uv": [0, 0, 2, 16], "texture": "#4", "cullface": "west"}, + "down": {"uv": [0, 14, 2, 16], "texture": "#3", "cullface": "down"} + } + }, + { + "from": [0, 0, 14], + "to": [2, 16, 16], + "faces": { + "north": {"uv": [14, 0, 16, 16], "texture": "#4"}, + "east": {"uv": [0, 0, 2, 16], "texture": "#4"}, + "south": {"uv": [0, 0, 2, 16], "texture": "#4", "cullface": "south"}, + "west": {"uv": [14, 0, 16, 16], "texture": "#4", "cullface": "west"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#3", "cullface": "down"} + } + }, + { + "from": [14, 0, 14], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 2, 16], "texture": "#4"}, + "east": {"uv": [0, 0, 2, 16], "texture": "#4", "cullface": "east"}, + "south": {"uv": [14, 0, 16, 16], "texture": "#4", "cullface": "south"}, + "west": {"uv": [14, 0, 16, 16], "texture": "#4"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#3", "cullface": "down"} + } + }, + { + "from": [14, 0, 0], + "to": [16, 16, 2], + "faces": { + "north": {"uv": [0, 0, 2, 16], "texture": "#4", "cullface": "north"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#4", "cullface": "east"}, + "south": {"uv": [14, 0, 16, 16], "texture": "#4"}, + "west": {"uv": [0, 0, 2, 16], "texture": "#4"}, + "down": {"uv": [14, 14, 16, 16], "texture": "#3", "cullface": "down"} + } + }, + { + "from": [2, 14, 0], + "to": [14, 16, 2], + "faces": { + "north": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "north"}, + "south": {"uv": [2, 0, 14, 2], "texture": "#4"}, + "down": {"uv": [2, 14, 14, 16], "texture": "#3"} + } + }, + { + "from": [2, 0, 0], + "to": [14, 14, 0], + "faces": { + "north": {"uv": [2, 2, 14, 16], "texture": "#4", "cullface": "north"}, + "south": {"uv": [2, 2, 14, 16], "texture": "#4"}, + "down": {"uv": [2, 16, 14, 16], "texture": "#3"} + } + }, + { + "from": [2, 14, 14], + "to": [14, 16, 16], + "faces": { + "north": {"uv": [14, 0, 2, 2], "texture": "#4"}, + "south": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "south"}, + "down": {"uv": [2, 0, 14, 2], "texture": "#3"} + } + }, + { + "from": [2, 0, 16], + "to": [14, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -2, 0]}, + "faces": { + "north": {"uv": [2, 2, 14, 16], "texture": "#4"}, + "south": {"uv": [2, 2, 14, 16], "texture": "#4", "cullface": "south"}, + "down": {"uv": [2, 0, 14, 0], "texture": "#3"} + } + }, + { + "from": [14, 14, 2], + "to": [16, 16, 14], + "faces": { + "east": {"uv": [14, 0, 2, 2], "texture": "#4", "cullface": "east"}, + "west": {"uv": [14, 0, 2, 2], "texture": "#4"}, + "down": {"uv": [14, 2, 16, 14], "texture": "#3"} + } + }, + { + "from": [16, 0, 2], + "to": [16, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -2, 0]}, + "faces": { + "east": {"uv": [2, 2, 14, 16], "texture": "#4", "cullface": "east"}, + "west": {"uv": [2, 2, 14, 16], "texture": "#4"}, + "down": {"uv": [16, 2, 16, 14], "texture": "#3"} + } + }, + { + "from": [0, 14, 2], + "to": [2, 16, 14], + "faces": { + "east": {"uv": [2, 0, 14, 2], "texture": "#4"}, + "west": {"uv": [14, 0, 2, 2], "texture": "#4", "cullface": "west"}, + "down": {"uv": [0, 2, 2, 14], "texture": "#3"} + } + }, + { + "from": [0, 0, 2], + "to": [0, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -2, 0]}, + "faces": { + "east": {"uv": [2, 2, 14, 16], "texture": "#4"}, + "west": {"uv": [2, 2, 14, 16], "texture": "#4", "cullface": "west"}, + "down": {"uv": [0, 2, 0, 14], "texture": "#3"} + } + } + ], + "display": { + "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], + "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] + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_scaffolding_unstable.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_scaffolding_unstable.json new file mode 100644 index 00000000..a6a9fa4a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_scaffolding_unstable.json @@ -0,0 +1,223 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "particle": "antarchy:block/antimetal/antimetal_scaffolding_side", + "3": "antarchy:block/antimetal/antimetal_scaffolding_bottom", + "4": "antarchy:block/antimetal/antimetal_scaffolding_side", + "5": "antarchy:block/antimetal/antimetal_scaffolding_top" + }, + "elements": [ + { + "from": [0, 15.99, 0], + "to": [16, 16, 16], + "faces": { + "up": {"uv": [0, 0, 16, 16], "texture": "#5", "cullface": "up"}, + "down": {"uv": [0, 16, 16, 0], "texture": "#5"} + } + }, + { + "from": [0, 0, 0], + "to": [2, 16, 2], + "faces": { + "north": {"uv": [14, 0, 16, 16], "texture": "#4", "cullface": "north"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#4"}, + "south": {"uv": [0, 0, 2, 16], "texture": "#4"}, + "west": {"uv": [0, 0, 2, 16], "texture": "#4", "cullface": "west"}, + "down": {"uv": [0, 2, 2, 0], "rotation": 90, "texture": "#3", "cullface": "down"} + } + }, + { + "from": [0, 0, 14], + "to": [2, 16, 16], + "faces": { + "north": {"uv": [14, 0, 16, 16], "texture": "#4"}, + "east": {"uv": [0, 0, 2, 16], "texture": "#4"}, + "south": {"uv": [0, 0, 2, 16], "texture": "#4", "cullface": "south"}, + "west": {"uv": [14, 0, 16, 16], "texture": "#4", "cullface": "west"}, + "down": {"uv": [0, 14, 2, 16], "texture": "#3", "cullface": "down"} + } + }, + { + "from": [14, 0, 14], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 2, 16], "texture": "#4"}, + "east": {"uv": [0, 0, 2, 16], "texture": "#4", "cullface": "east"}, + "south": {"uv": [14, 0, 16, 16], "texture": "#4", "cullface": "south"}, + "west": {"uv": [14, 0, 16, 16], "texture": "#4"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#3", "cullface": "down"} + } + }, + { + "from": [14, 0, 0], + "to": [16, 16, 2], + "faces": { + "north": {"uv": [0, 0, 2, 16], "texture": "#4", "cullface": "north"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#4", "cullface": "east"}, + "south": {"uv": [14, 0, 16, 16], "texture": "#4"}, + "west": {"uv": [0, 0, 2, 16], "texture": "#4"}, + "down": {"uv": [14, 14, 16, 16], "texture": "#3", "cullface": "down"} + } + }, + { + "from": [2, 14, 0], + "to": [14, 16, 2], + "faces": { + "north": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "north"}, + "south": {"uv": [2, 0, 14, 2], "texture": "#4"}, + "down": {"uv": [2, 14, 14, 16], "texture": "#3"} + } + }, + { + "from": [2, 2, 0], + "to": [14, 14, 0], + "faces": { + "north": {"uv": [2, 2, 14, 14], "texture": "#3", "cullface": "north"}, + "south": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "down": {"uv": [2, 16, 14, 16], "texture": "#3"} + } + }, + { + "from": [2, 14, 14], + "to": [14, 16, 16], + "faces": { + "north": {"uv": [14, 0, 2, 2], "texture": "#4"}, + "south": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "south"}, + "down": {"uv": [2, 0, 14, 2], "texture": "#3"} + } + }, + { + "from": [2, 2, 16], + "to": [14, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -2, 0]}, + "faces": { + "north": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "south": {"uv": [2, 2, 14, 14], "texture": "#3", "cullface": "south"}, + "down": {"uv": [2, 0, 14, 0], "texture": "#3"} + } + }, + { + "from": [14, 14, 2], + "to": [16, 16, 14], + "faces": { + "east": {"uv": [14, 0, 2, 2], "texture": "#4", "cullface": "east"}, + "west": {"uv": [14, 0, 2, 2], "texture": "#4"}, + "down": {"uv": [14, 2, 16, 14], "texture": "#3"} + } + }, + { + "from": [16, 2, 2], + "to": [16, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -2, 0]}, + "faces": { + "east": {"uv": [2, 2, 14, 14], "texture": "#3", "cullface": "east"}, + "west": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "down": {"uv": [16, 2, 16, 14], "texture": "#3"} + } + }, + { + "from": [0, 14, 2], + "to": [2, 16, 14], + "faces": { + "east": {"uv": [2, 0, 14, 2], "texture": "#4"}, + "west": {"uv": [14, 0, 2, 2], "texture": "#4", "cullface": "west"}, + "down": {"uv": [0, 2, 2, 14], "texture": "#3"} + } + }, + { + "from": [2, 0, 14], + "to": [14, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -14, 0]}, + "faces": { + "north": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "south"}, + "east": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "south"}, + "south": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "south"}, + "west": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "south"}, + "up": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "south"}, + "down": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "south"} + } + }, + { + "from": [0, 0, 2], + "to": [2, 2, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -14, 0]}, + "faces": { + "north": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "west"}, + "east": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "west"}, + "south": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "west"}, + "west": {"uv": [2, 0, 14, 2], "texture": "#4", "cullface": "west"}, + "up": {"uv": [2, 0, 14, 2], "rotation": 90, "texture": "#4", "cullface": "west"}, + "down": {"uv": [14, 2, 2, 0], "rotation": 90, "texture": "#4", "cullface": "west"} + } + }, + { + "from": [2, 0, 0], + "to": [14, 2, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -14, 0]}, + "faces": { + "north": {"uv": [2, 0, 14, 2], "texture": "#4"}, + "east": {"uv": [2, 0, 14, 2], "texture": "#4"}, + "south": {"uv": [2, 0, 14, 2], "texture": "#4"}, + "west": {"uv": [2, 0, 14, 2], "texture": "#4"}, + "up": {"uv": [2, 0, 14, 2], "texture": "#4"}, + "down": {"uv": [2, 2, 14, 0], "texture": "#4"} + } + }, + { + "from": [14, 0, 2], + "to": [16, 2, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -14, 0]}, + "faces": { + "north": {"uv": [14, 0, 2, 2], "texture": "#4"}, + "east": {"uv": [14, 0, 2, 2], "texture": "#4"}, + "south": {"uv": [14, 0, 2, 2], "texture": "#4"}, + "west": {"uv": [14, 0, 2, 2], "texture": "#4"}, + "up": {"uv": [2, 2, 14, 0], "rotation": 90, "texture": "#4"}, + "down": {"uv": [2, 2, 14, 0], "rotation": 90, "texture": "#4"} + } + }, + { + "from": [0, 2, 2], + "to": [0, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -2, 0]}, + "faces": { + "east": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "west": {"uv": [2, 2, 14, 14], "texture": "#3", "cullface": "west"}, + "down": {"uv": [0, 2, 0, 14], "texture": "#3"} + } + } + ], + "display": { + "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], + "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] + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_slab.json new file mode 100644 index 00000000..0ce829dd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block", + "top": "antarchy:block/antimetal/antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_slab_top.json new file mode 100644 index 00000000..a46b3cb8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block", + "top": "antarchy:block/antimetal/antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs.json new file mode 100644 index 00000000..6f52f439 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block", + "top": "antarchy:block/antimetal/antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_inner.json new file mode 100644 index 00000000..9df20c9c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block", + "top": "antarchy:block/antimetal/antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_outer.json new file mode 100644 index 00000000..8f86c47b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block", + "top": "antarchy:block/antimetal/antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_1.json new file mode 100644 index 00000000..b7f5e295 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/bed_bug_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_2.json new file mode 100644 index 00000000..c9d57e6e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/bed_bug_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_3.json new file mode 100644 index 00000000..749c15c0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/bed_bug_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_4.json new file mode 100644 index 00000000..1e474d54 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bed_bug_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/bed_bug_egg", + "particle": "antarchy:block/bed_bug_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bile_vein.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bile_vein.json new file mode 100644 index 00000000..1bbd5a7f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bile_vein.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/bile/bile_vein" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/biomite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/biomite.json new file mode 100644 index 00000000..18eb93e2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/biomite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/biomite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/biomite_turf.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/biomite_turf.json new file mode 100644 index 00000000..46c3a9be --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/biomite_turf.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "antarchy:block/biomite", + "top": "antarchy:block/biowart", + "side": "antarchy:block/biomite_turf" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/biowart.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/biowart.json new file mode 100644 index 00000000..8ba39617 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/biowart.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/biowart" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/biowart_tendrils.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/biowart_tendrils.json new file mode 100644 index 00000000..f15554c0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/biowart_tendrils.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/biowart_tendrils" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/blood_crystal_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blood_crystal_block.json new file mode 100644 index 00000000..682d2341 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blood_crystal_block.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/blood_crystal_block" + } +} + + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/blood_crystal_cluster.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blood_crystal_cluster.json new file mode 100644 index 00000000..5f771af4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blood_crystal_cluster.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/blood_crystal_cluster" + } +} + + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_block.json new file mode 100644 index 00000000..5643a8d9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/bluestone/bluestone_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator.json new file mode 100644 index 00000000..4a6da2b0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator.json @@ -0,0 +1,57 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/bluestone/bluestone_comparator", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_comparator", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [4, 9, 2], + "to": [6, 14, 4], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#unlit" } + } + }, + { + "from": [10, 9, 2], + "to": [12, 14, 4], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#unlit" } + } + }, + { + "from": [7, 11, 11], + "to": [9, 14, 13], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#unlit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator_on.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator_on.json new file mode 100644 index 00000000..fc3dc84a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator_on.json @@ -0,0 +1,60 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/bluestone/bluestone_comparator_on", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_comparator_on", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [4, 9, 2], + "to": [6, 14, 4], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#lit" } + } + }, + { + "from": [10, 9, 2], + "to": [12, 14, 4], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#lit" } + } + }, + { + "from": [7, 11, 11], + "to": [9, 14, 13], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#unlit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator_subtract.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator_subtract.json new file mode 100644 index 00000000..a96b7b91 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator_subtract.json @@ -0,0 +1,58 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/bluestone/bluestone_comparator", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_comparator", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [4, 9, 2], + "to": [6, 14, 4], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#unlit" } + } + }, + { + "from": [10, 9, 2], + "to": [12, 14, 4], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#unlit" } + } + }, + { + "from": [7, 11, 11], + "to": [9, 14, 13], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#lit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator_subtract_on.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator_subtract_on.json new file mode 100644 index 00000000..0081c140 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_comparator_subtract_on.json @@ -0,0 +1,60 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/bluestone/bluestone_comparator_on", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_comparator_on", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [4, 9, 2], + "to": [6, 14, 4], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#lit" } + } + }, + { + "from": [10, 9, 2], + "to": [12, 14, 4], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#lit" } + } + }, + { + "from": [7, 11, 11], + "to": [9, 14, 13], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#lit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp.json new file mode 100644 index 00000000..1cdd1c5a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/bluestone/bluestone_lamp" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp_on.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp_on.json new file mode 100644 index 00000000..66101d5b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp_on.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/bluestone/bluestone_lamp_on" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_ore.json new file mode 100644 index 00000000..b0a5df1b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/bluestone/bluestone_ore" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater.json new file mode 100644 index 00000000..76572cf5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater.json @@ -0,0 +1,46 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/bluestone/bluestone_repeater", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_repeater", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [7, 9, 11], + "to": [9, 14, 13], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#unlit" } + } + }, + { + "from": [7, 11, 8], + "to": [9, 14, 10], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#unlit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay2.json new file mode 100644 index 00000000..06e05079 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay2.json @@ -0,0 +1,46 @@ +{ + "parent": "antarchy:block/bluestone_repeater", + "textures": { + "particle": "antarchy:block/bluestone/bluestone_repeater", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_repeater", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [7, 9, 11], + "to": [9, 14, 13], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#unlit" } + } + }, + { + "from": [7, 11, 6], + "to": [9, 14, 8], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#unlit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay2_on.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay2_on.json new file mode 100644 index 00000000..b5c5b0d0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay2_on.json @@ -0,0 +1,48 @@ +{ + "parent": "antarchy:block/bluestone_repeater_on", + "textures": { + "particle": "antarchy:block/bluestone/bluestone_repeater_on", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_repeater_on", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [7, 9, 11], + "to": [9, 14, 13], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#lit" } + } + }, + { + "from": [7, 11, 6], + "to": [9, 14, 8], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#lit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay3.json new file mode 100644 index 00000000..990234b1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay3.json @@ -0,0 +1,46 @@ +{ + "parent": "antarchy:block/bluestone_repeater", + "textures": { + "particle": "antarchy:block/bluestone/bluestone_repeater", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_repeater", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [7, 9, 11], + "to": [9, 14, 13], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#unlit" } + } + }, + { + "from": [7, 11, 4], + "to": [9, 14, 6], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#unlit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay3_on.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay3_on.json new file mode 100644 index 00000000..524ff5f4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay3_on.json @@ -0,0 +1,48 @@ +{ + "parent": "antarchy:block/bluestone_repeater_on", + "textures": { + "particle": "antarchy:block/bluestone/bluestone_repeater_on", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_repeater_on", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [7, 9, 11], + "to": [9, 14, 13], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#lit" } + } + }, + { + "from": [7, 11, 4], + "to": [9, 14, 6], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#lit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay4.json new file mode 100644 index 00000000..dae339c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay4.json @@ -0,0 +1,46 @@ +{ + "parent": "antarchy:block/bluestone_repeater", + "textures": { + "particle": "antarchy:block/bluestone/bluestone_repeater", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_repeater", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [7, 9, 11], + "to": [9, 14, 13], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#unlit" } + } + }, + { + "from": [7, 11, 2], + "to": [9, 14, 4], + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#unlit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#unlit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay4_on.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay4_on.json new file mode 100644 index 00000000..e42e83df --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_delay4_on.json @@ -0,0 +1,48 @@ +{ + "parent": "antarchy:block/bluestone_repeater_on", + "textures": { + "particle": "antarchy:block/bluestone/bluestone_repeater_on", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_repeater_on", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [7, 9, 11], + "to": [9, 14, 13], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#lit" } + } + }, + { + "from": [7, 11, 2], + "to": [9, 14, 4], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#lit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_lock.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_lock.json new file mode 100644 index 00000000..9e16c0b0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_lock.json @@ -0,0 +1,19 @@ +{ + "ambientocclusion": false, + "textures": { + "lock": "minecraft:block/bedrock" + }, + "elements": [ + { + "from": [2, 12, 6], + "to": [14, 14, 8], + "faces": { + "down": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "south": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "west": { "uv": [6, 7, 8, 9], "texture": "#lock" }, + "east": { "uv": [6, 7, 8, 9], "texture": "#lock" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_on.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_on.json new file mode 100644 index 00000000..c1b1fc77 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_repeater_on.json @@ -0,0 +1,48 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/bluestone/bluestone_repeater_on", + "slab": "minecraft:block/smooth_stone", + "top": "antarchy:block/bluestone/bluestone_repeater_on", + "unlit": "antarchy:block/bluestone/bluestone_torch_off", + "lit": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#slab", "cullface": "up" }, + "north": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [0, 14, 16, 16], "texture": "#slab", "cullface": "east" } + } + }, + { + "from": [7, 9, 11], + "to": [9, 14, 13], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 11, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 11, 9, 6], "texture": "#lit" } + } + }, + { + "from": [7, 11, 8], + "to": [9, 14, 10], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lit" }, + "north": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "south": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "west": { "uv": [7, 9, 9, 6], "texture": "#lit" }, + "east": { "uv": [7, 9, 9, 6], "texture": "#lit" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_torch.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_torch.json new file mode 100644 index 00000000..59b0ccd8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_torch.json @@ -0,0 +1,22 @@ +{ + "ambientocclusion": false, + "textures": { + "torch": "antarchy:block/bluestone/bluestone_torch", + "particle": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [7, 6, 7], + "to": [9, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#torch" }, + "up": { "uv": [7, 13, 9, 15], "texture": "#torch", "cullface": "up" }, + "north": { "uv": [7, 16, 9, 6], "texture": "#torch" }, + "east": { "uv": [7, 16, 9, 6], "texture": "#torch" }, + "south": { "uv": [7, 16, 9, 6], "texture": "#torch" }, + "west": { "uv": [7, 16, 9, 6], "texture": "#torch" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_torch_off.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_torch_off.json new file mode 100644 index 00000000..0c13883e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_torch_off.json @@ -0,0 +1,22 @@ +{ + "ambientocclusion": false, + "textures": { + "torch": "antarchy:block/bluestone/bluestone_torch_off", + "particle": "antarchy:block/bluestone/bluestone_torch_off" + }, + "elements": [ + { + "from": [7, 6, 7], + "to": [9, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#torch" }, + "up": { "uv": [7, 13, 9, 15], "texture": "#torch", "cullface": "up" }, + "north": { "uv": [7, 16, 9, 6], "texture": "#torch" }, + "east": { "uv": [7, 16, 9, 6], "texture": "#torch" }, + "south": { "uv": [7, 16, 9, 6], "texture": "#torch" }, + "west": { "uv": [7, 16, 9, 6], "texture": "#torch" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wall_torch.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wall_torch.json new file mode 100644 index 00000000..8c42b6fb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wall_torch.json @@ -0,0 +1,39 @@ +{ + "ambientocclusion": false, + "textures": { + "torch": "antarchy:block/bluestone/bluestone_torch", + "particle": "antarchy:block/bluestone/bluestone_torch" + }, + "elements": [ + { + "from": [-1, 2.5, 7], + "to": [1, 12.5, 9], + "rotation": { "origin": [0, 12.5, 8], "axis": "z", "angle": 22.5 }, + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#torch" }, + "up": { "uv": [7, 13, 9, 15], "texture": "#torch" } + } + }, + { + "from": [-1, -3.5, 0], + "to": [1, 12.5, 16], + "rotation": { "origin": [0, 12.5, 8], "axis": "z", "angle": 22.5 }, + "shade": false, + "faces": { + "west": { "uv": [0, 16, 16, 0], "texture": "#torch" }, + "east": { "uv": [0, 16, 16, 0], "texture": "#torch" } + } + }, + { + "from": [-8, -3.5, 7], + "to": [8, 12.5, 9], + "rotation": { "origin": [0, 12.5, 8], "axis": "z", "angle": 22.5 }, + "shade": false, + "faces": { + "north": { "uv": [0, 16, 16, 0], "texture": "#torch" }, + "south": { "uv": [0, 16, 16, 0], "texture": "#torch" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wall_torch_off.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wall_torch_off.json new file mode 100644 index 00000000..42474e08 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wall_torch_off.json @@ -0,0 +1,39 @@ +{ + "ambientocclusion": false, + "textures": { + "torch": "antarchy:block/bluestone/bluestone_torch_off", + "particle": "antarchy:block/bluestone/bluestone_torch_off" + }, + "elements": [ + { + "from": [-1, 2.5, 7], + "to": [1, 12.5, 9], + "rotation": { "origin": [0, 12.5, 8], "axis": "z", "angle": 22.5 }, + "shade": false, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#torch" }, + "up": { "uv": [7, 13, 9, 15], "texture": "#torch" } + } + }, + { + "from": [-1, -3.5, 0], + "to": [1, 12.5, 16], + "rotation": { "origin": [0, 12.5, 8], "axis": "z", "angle": 22.5 }, + "shade": false, + "faces": { + "west": { "uv": [0, 16, 16, 0], "texture": "#torch" }, + "east": { "uv": [0, 16, 16, 0], "texture": "#torch" } + } + }, + { + "from": [-8, -3.5, 7], + "to": [8, 12.5, 9], + "rotation": { "origin": [0, 12.5, 8], "axis": "z", "angle": 22.5 }, + "shade": false, + "faces": { + "north": { "uv": [0, 16, 16, 0], "texture": "#torch" }, + "south": { "uv": [0, 16, 16, 0], "texture": "#torch" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_dot.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_dot.json new file mode 100644 index 00000000..30ea3070 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_dot.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/redstone_dust_dot", + "textures": { + "line": "antarchy:block/bluestone/bluestone_dust_dot", + "overlay": "antarchy:block/bluestone/bluestone_dust_overlay" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_down.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_down.json new file mode 100644 index 00000000..76ae5a0a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_down.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/redstone_dust_up", + "textures": { + "line": "antarchy:block/bluestone/bluestone_dust_line0", + "overlay": "antarchy:block/bluestone/bluestone_dust_overlay", + "particle": "antarchy:block/bluestone/bluestone_dust_dot" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_line0.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_line0.json new file mode 100644 index 00000000..74aaa3c9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_line0.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/bluestone/bluestone_dust_line0", + "line": "antarchy:block/bluestone/bluestone_dust_line0" + }, + "elements": [ + { + "from": [0, 0, 7.0], + "to": [16, 0, 9.0], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 2], "texture": "#line", "tintindex": 0 }, + "down": { "uv": [0, 0, 16, 2], "texture": "#line", "tintindex": 0 } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_line1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_line1.json new file mode 100644 index 00000000..8a5eabd7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_line1.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/bluestone/bluestone_dust_line1", + "line": "antarchy:block/bluestone/bluestone_dust_line1" + }, + "elements": [ + { + "from": [0, 0, 7.0], + "to": [16, 0, 9.0], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 2], "texture": "#line", "tintindex": 0 }, + "down": { "uv": [0, 0, 16, 2], "texture": "#line", "tintindex": 0 } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side0.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side0.json new file mode 100644 index 00000000..b5504412 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/redstone_dust_side0", + "textures": { + "line": "antarchy:block/bluestone/bluestone_dust_line0" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side1.json new file mode 100644 index 00000000..93a4be67 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/redstone_dust_side1", + "textures": { + "line": "antarchy:block/bluestone/bluestone_dust_line1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side_alt0.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side_alt0.json new file mode 100644 index 00000000..80647677 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side_alt0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/redstone_dust_side_alt0", + "textures": { + "line": "antarchy:block/bluestone/bluestone_dust_line0" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side_alt1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side_alt1.json new file mode 100644 index 00000000..10f7eac4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/bluestone_wire_side_alt1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/redstone_dust_side_alt1", + "textures": { + "line": "antarchy:block/bluestone/bluestone_dust_line1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_block.json new file mode 100644 index 00000000..df917fb8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/blush_moss/blush_moss_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_carpet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_carpet.json new file mode 100644 index 00000000..d5f159f3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "antarchy:block/blush_moss/blush_moss_carpet" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_small.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_small.json new file mode 100644 index 00000000..993f37b4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_small.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": true, + "textures": { + "particle": "#side", + "side": "antarchy:block/blush_moss/blush_moss_carpet" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 6, 0.1], + "shade": true, + "faces": { + "north": {"uv": [16, 0, 0, 6], "texture": "#side"}, + "south": {"uv": [0, 0, 16, 6], "texture": "#side"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_tall.json new file mode 100644 index 00000000..533a670a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_tall.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": true, + "textures": { + "particle": "#side", + "side": "antarchy:block/blush_moss/blush_moss_carpet" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 16, 0.1], + "shade": true, + "faces": { + "north": {"uv": [16, 0, 0, 16], "texture": "#side"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#side"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone.json new file mode 100644 index 00000000..b282bd92 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_slab.json new file mode 100644 index 00000000..0ee192c5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/broodstone/broodstone_bricks", + "side": "antarchy:block/broodstone/broodstone_bricks", + "top": "antarchy:block/broodstone/broodstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_slab_top.json new file mode 100644 index 00000000..067493ab --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/broodstone/broodstone_bricks", + "side": "antarchy:block/broodstone/broodstone_bricks", + "top": "antarchy:block/broodstone/broodstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_stairs.json new file mode 100644 index 00000000..d65ed867 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/broodstone/broodstone_bricks", + "side": "antarchy:block/broodstone/broodstone_bricks", + "top": "antarchy:block/broodstone/broodstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_stairs_inner.json new file mode 100644 index 00000000..c1a0fed2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/broodstone/broodstone_bricks", + "side": "antarchy:block/broodstone/broodstone_bricks", + "top": "antarchy:block/broodstone/broodstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_stairs_outer.json new file mode 100644 index 00000000..4f8c474a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/broodstone/broodstone_bricks", + "side": "antarchy:block/broodstone/broodstone_bricks", + "top": "antarchy:block/broodstone/broodstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_inventory.json new file mode 100644 index 00000000..b01fc0f3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/broodstone/broodstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_post.json new file mode 100644 index 00000000..5d94f43f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/broodstone/broodstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_side.json new file mode 100644 index 00000000..1ce43ea0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/broodstone/broodstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_side_tall.json new file mode 100644 index 00000000..d25a61d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/broodstone/broodstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_bricks.json new file mode 100644 index 00000000..6b27f02e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/broodstone/broodstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_pillar.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_pillar.json new file mode 100644 index 00000000..03e880d7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_pillar.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/broodstone/broodstone_pillar_top", + "side": "antarchy:block/broodstone/broodstone_pillar" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_slab.json new file mode 100644 index 00000000..e7546780 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/broodstone/broodstone", + "side": "antarchy:block/broodstone/broodstone", + "top": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_slab_top.json new file mode 100644 index 00000000..60ed97b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/broodstone/broodstone", + "side": "antarchy:block/broodstone/broodstone", + "top": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_stairs.json new file mode 100644 index 00000000..15e2f902 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/broodstone/broodstone", + "side": "antarchy:block/broodstone/broodstone", + "top": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_stairs_inner.json new file mode 100644 index 00000000..4edd0b2d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/broodstone/broodstone", + "side": "antarchy:block/broodstone/broodstone", + "top": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_stairs_outer.json new file mode 100644 index 00000000..679b7766 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/broodstone/broodstone", + "side": "antarchy:block/broodstone/broodstone", + "top": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_titanium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_titanium_ore.json new file mode 100644 index 00000000..9962b7fb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_titanium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/titanium/broodstone_titanium_ore" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_uranium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_uranium_ore.json new file mode 100644 index 00000000..9744b49b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_uranium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/uranium/broodstone_uranium_ore" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_inventory.json new file mode 100644 index 00000000..76a17bdc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_post.json new file mode 100644 index 00000000..1e0cabc7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_side.json new file mode 100644 index 00000000..b103a052 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_side_tall.json new file mode 100644 index 00000000..2124ed4d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/broodstone_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/brown_ant_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/brown_ant_nest.json new file mode 100644 index 00000000..1bc0e245 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/brown_ant_nest.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "antarchy:block/brown_ant_nest/brown_ant_nest", + "down": "minecraft:block/coarse_dirt", + "up": "antarchy:block/brown_ant_nest/brown_ant_nest_top", + "north": "antarchy:block/brown_ant_nest/brown_ant_nest", + "south": "antarchy:block/brown_ant_nest/brown_ant_nest", + "west": "antarchy:block/brown_ant_nest/brown_ant_nest", + "east": "antarchy:block/brown_ant_nest/brown_ant_nest" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/brutalfly_cocoon_spawner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/brutalfly_cocoon_spawner.json new file mode 100644 index 00000000..0ca69bbc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/brutalfly_cocoon_spawner.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/oak_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/budding_blood_crystal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/budding_blood_crystal.json new file mode 100644 index 00000000..4365150a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/budding_blood_crystal.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/budding_blood_crystal_block" + } +} + + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/camellia_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/camellia_bottom.json new file mode 100644 index 00000000..1e2db699 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/camellia_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/camellia_bush_bottom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/camellia_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/camellia_top.json new file mode 100644 index 00000000..b85b7aea --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/camellia_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/camellia_bush_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cavaryn_portal_x.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cavaryn_portal_x.json new file mode 100644 index 00000000..c3fbe98d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cavaryn_portal_x.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/cavaryn_portal", + "particle": "antarchy:block/cavaryn_portal" + }, + "elements": [ + { + "from": [0, 0, 7.5], + "to": [16, 16, 8.5], + "faces": { + "north": { "texture": "#portal" }, + "south": { "texture": "#portal" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cavaryn_portal_z.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cavaryn_portal_z.json new file mode 100644 index 00000000..8f25f81e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cavaryn_portal_z.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/cavaryn_portal", + "particle": "antarchy:block/cavaryn_portal" + }, + "elements": [ + { + "from": [7.5, 0, 0], + "to": [8.5, 16, 16], + "faces": { + "west": { "texture": "#portal" }, + "east": { "texture": "#portal" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_broodstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_broodstone.json new file mode 100644 index 00000000..8f9a0ff4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_broodstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/broodstone/chiseled_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_dream_sandstone.json new file mode 100644 index 00000000..797e23b9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_dream_sandstone.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/dream_sandstone_top", + "side": "antarchy:block/chiseled_dream_sandstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_nyxite.json new file mode 100644 index 00000000..47dbd261 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_nyxite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/chiseled_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_shellstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_shellstone.json new file mode 100644 index 00000000..9b87faca --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_shellstone.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/shellstone/chiseled_shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_titanium.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_titanium.json new file mode 100644 index 00000000..669c8ce5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_titanium.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/titanium/chiseled_titanium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_uranium.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_uranium.json new file mode 100644 index 00000000..387ef3bc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chiseled_uranium.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/uranium/chiseled_uranium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_block.json new file mode 100644 index 00000000..e74bec2a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_block.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/chitin_block", + "side": "antarchy:block/chitin_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_base.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_base.json new file mode 100644 index 00000000..4ec45128 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_base.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chitin_spike/chitin_spike_down_base" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_frustum.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_frustum.json new file mode 100644 index 00000000..5ad13746 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_frustum.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chitin_spike/chitin_spike_down_frustum" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_middle.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_middle.json new file mode 100644 index 00000000..9e3fd73e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_middle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chitin_spike/chitin_spike_down_middle" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip.json new file mode 100644 index 00000000..9f3622fb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chitin_spike/chitin_spike_down_tip" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip_merge.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip_merge.json new file mode 100644 index 00000000..e1325f39 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip_merge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chitin_spike/chitin_spike_down_tip_merge" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_base.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_base.json new file mode 100644 index 00000000..2fa8eca9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_base.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chitin_spike/chitin_spike_up_base" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_frustum.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_frustum.json new file mode 100644 index 00000000..75aeda2b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_frustum.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chitin_spike/chitin_spike_up_frustum" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_middle.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_middle.json new file mode 100644 index 00000000..dd2baeff --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_middle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chitin_spike/chitin_spike_up_middle" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip.json new file mode 100644 index 00000000..34d704ce --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chitin_spike/chitin_spike_up_tip" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip_merge.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip_merge.json new file mode 100644 index 00000000..6d0e4964 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip_merge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chitin_spike/chitin_spike_up_tip_merge" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cloud_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cloud_block.json new file mode 100644 index 00000000..90efc85b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cloud_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/cloud_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_0.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_0.json new file mode 100644 index 00000000..7c935ae4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/corn/corn_crop_stage_0" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_1.json new file mode 100644 index 00000000..c7a8fbfc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/corn/corn_crop_stage_1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_bottom.json new file mode 100644 index 00000000..cb9cdbd2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/corn/corn_crop_stage_2_bottom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_top.json new file mode 100644 index 00000000..ada37860 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/corn/corn_crop_stage_2_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_bottom.json new file mode 100644 index 00000000..a2148ba9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/corn/corn_crop_stage_3_bottom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_top.json new file mode 100644 index 00000000..d38872f2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/corn/corn_crop_stage_3_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cornea_stalk_stage0.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cornea_stalk_stage0.json new file mode 100644 index 00000000..3ce33897 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cornea_stalk_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/cornea/cornea_stalk_stage0" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cornea_stalk_stage1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cornea_stalk_stage1.json new file mode 100644 index 00000000..49f2c01e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cornea_stalk_stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/cornea/cornea_stalk_stage1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cornea_stalk_stage2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cornea_stalk_stage2.json new file mode 100644 index 00000000..36a88f27 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cornea_stalk_stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/cornea/cornea_stalk_stage2" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cracked_shellstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cracked_shellstone_bricks.json new file mode 100644 index 00000000..d987318d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cracked_shellstone_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/shellstone/cracked_shellstone_bricks" + } +} 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 new file mode 100644 index 00000000..f4187644 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..d2f9f14d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..ef956bbe --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..e5ba6281 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json @@ -0,0 +1,7 @@ +{ + "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/creepvine.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/creepvine.json new file mode 100644 index 00000000..3ee3bc66 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/creepvine.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/creepvine", + "vine": "antarchy:block/creepvine" + }, + "elements": [ + { + "from": [0, 0, 0.8], + "to": [16, 16, 0.8], + "shade": false, + "faces": { + "north": { "uv": [16, 0, 0, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/critter_cage_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/critter_cage_block.json new file mode 100644 index 00000000..55ca2e82 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/critter_cage_block.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:block/block", + "render_type": "cutout", + "textures": { + "cage": "antarchy:block/critter_cage", + "particle": "antarchy:block/critter_cage" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [15, 14, 15], + "faces": { + "down": { "texture": "#cage", "cullface": "down" }, + "up": { "texture": "#cage", "cullface": "up" }, + "north": { "texture": "#cage", "cullface": "north" }, + "south": { "texture": "#cage", "cullface": "south" }, + "west": { "texture": "#cage", "cullface": "west" }, + "east": { "texture": "#cage", "cullface": "east" } + } + }, + { + "from": [14.998, 0.002, 1.002], + "to": [1.002, 13.998, 14.998], + "faces": { + "down": { "uv": [14, 0, 0, 14], "texture": "#cage", "cullface": "down" }, + "up": { "uv": [14, 0, 0, 14], "texture": "#cage", "cullface": "up" }, + "north": { "uv": [14, 0, 0, 14], "texture": "#cage", "cullface": "south" }, + "south": { "uv": [14, 0, 0, 14], "texture": "#cage", "cullface": "north" }, + "west": { "uv": [14, 0, 0, 14], "texture": "#cage", "cullface": "east" }, + "east": { "uv": [14, 0, 0, 14], "texture": "#cage", "cullface": "west" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_dream_sandstone.json new file mode 100644 index 00000000..2cfad790 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_dream_sandstone.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/dream_sandstone_top", + "side": "antarchy:block/cut_dream_sandstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_dream_sandstone_slab.json new file mode 100644 index 00000000..2da75ea7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_dream_sandstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/dream_sandstone_top", + "side": "antarchy:block/cut_dream_sandstone", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_dream_sandstone_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_dream_sandstone_slab_top.json new file mode 100644 index 00000000..676e578c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_dream_sandstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/dream_sandstone_top", + "side": "antarchy:block/cut_dream_sandstone", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium.json new file mode 100644 index 00000000..9f6e2581 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/titanium/cut_titanium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_slab.json new file mode 100644 index 00000000..4907a95d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/titanium/cut_titanium", + "side": "antarchy:block/titanium/cut_titanium", + "top": "antarchy:block/titanium/cut_titanium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_slab_top.json new file mode 100644 index 00000000..028479ff --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/titanium/cut_titanium", + "side": "antarchy:block/titanium/cut_titanium", + "top": "antarchy:block/titanium/cut_titanium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_stairs.json new file mode 100644 index 00000000..0c69e8e3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/titanium/cut_titanium", + "side": "antarchy:block/titanium/cut_titanium", + "top": "antarchy:block/titanium/cut_titanium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_stairs_inner.json new file mode 100644 index 00000000..749df7d7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/titanium/cut_titanium", + "side": "antarchy:block/titanium/cut_titanium", + "top": "antarchy:block/titanium/cut_titanium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_stairs_outer.json new file mode 100644 index 00000000..3f416660 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/titanium/cut_titanium", + "side": "antarchy:block/titanium/cut_titanium", + "top": "antarchy:block/titanium/cut_titanium" + } +} 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 new file mode 100644 index 00000000..91807bc1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..fefb11fe --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_post.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..6c784c47 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..bcddc58e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "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.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium.json new file mode 100644 index 00000000..cdb6a599 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/uranium/cut_uranium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_slab.json new file mode 100644 index 00000000..8318cc4f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/uranium/cut_uranium", + "side": "antarchy:block/uranium/cut_uranium", + "top": "antarchy:block/uranium/cut_uranium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_slab_top.json new file mode 100644 index 00000000..73a06755 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/uranium/cut_uranium", + "side": "antarchy:block/uranium/cut_uranium", + "top": "antarchy:block/uranium/cut_uranium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_stairs.json new file mode 100644 index 00000000..b89eab68 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/uranium/cut_uranium", + "side": "antarchy:block/uranium/cut_uranium", + "top": "antarchy:block/uranium/cut_uranium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_stairs_inner.json new file mode 100644 index 00000000..4aad8f40 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/uranium/cut_uranium", + "side": "antarchy:block/uranium/cut_uranium", + "top": "antarchy:block/uranium/cut_uranium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_stairs_outer.json new file mode 100644 index 00000000..5f546d2c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/uranium/cut_uranium", + "side": "antarchy:block/uranium/cut_uranium", + "top": "antarchy:block/uranium/cut_uranium" + } +} 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 new file mode 100644 index 00000000..68cb60c7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..8ac993de --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_post.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..e95dcf78 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..363da0fb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "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/dead_star_coral.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dead_star_coral.json new file mode 100644 index 00000000..aa26a0de --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dead_star_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/star_coral/dead_star_coral" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dead_star_coral_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dead_star_coral_block.json new file mode 100644 index 00000000..d42fdd91 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dead_star_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/star_coral/dead_star_coral_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dead_star_coral_fan.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dead_star_coral_fan.json new file mode 100644 index 00000000..5794c397 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dead_star_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "antarchy:block/star_coral/dead_star_coral_fan" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dead_star_coral_wall_fan.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dead_star_coral_wall_fan.json new file mode 100644 index 00000000..3a80e1a7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dead_star_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "antarchy:block/star_coral/dead_star_coral_fan" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/deepslate_titanium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/deepslate_titanium_ore.json new file mode 100644 index 00000000..e45400ba --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/deepslate_titanium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/titanium/titanium_deepslate_ore" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/deepslate_uranium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/deepslate_uranium_ore.json new file mode 100644 index 00000000..fddd03d9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/deepslate_uranium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/uranium/uranium_deepslate_ore" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_campfire.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_campfire.json new file mode 100644 index 00000000..0cfd25f4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_campfire.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_campfire", + "textures": { + "fire": "antarchy:block/dream_campfire_fire", + "lit_log": "antarchy:block/dream_campfire_log_lit" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_floor0.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_floor0.json new file mode 100644 index 00000000..0816afb4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_floor0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_floor", + "textures": { + "fire": "antarchy:block/dream_fire_0" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_floor1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_floor1.json new file mode 100644 index 00000000..085ab8bf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_floor1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_floor", + "textures": { + "fire": "antarchy:block/dream_fire_1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side0.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side0.json new file mode 100644 index 00000000..f979fcfe --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side", + "textures": { + "fire": "antarchy:block/dream_fire_0" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side1.json new file mode 100644 index 00000000..cd49fde6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side", + "textures": { + "fire": "antarchy:block/dream_fire_1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side_alt0.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side_alt0.json new file mode 100644 index 00000000..77f610d8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side_alt0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side_alt", + "textures": { + "fire": "antarchy:block/dream_fire_0" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side_alt1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side_alt1.json new file mode 100644 index 00000000..e15612bb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_fire_side_alt1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fire_side_alt", + "textures": { + "fire": "antarchy:block/dream_fire_1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_lantern.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_lantern.json new file mode 100644 index 00000000..f43321db --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_lantern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_lantern", + "textures": { + "lantern": "antarchy:block/dream_lantern" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_lantern_hanging.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_lantern_hanging.json new file mode 100644 index 00000000..1f856d38 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_lantern_hanging.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_hanging_lantern", + "textures": { + "lantern": "antarchy:block/dream_lantern" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sand.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sand.json new file mode 100644 index 00000000..7f74edce --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sand.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/dream_sand" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone.json new file mode 100644 index 00000000..612cbb84 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "antarchy:block/dream_sandstone_bottom", + "side": "antarchy:block/dream_sandstone", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_slab.json new file mode 100644 index 00000000..02ffaba3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/dream_sandstone_bottom", + "side": "antarchy:block/dream_sandstone", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_slab_top.json new file mode 100644 index 00000000..460f507a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/dream_sandstone_bottom", + "side": "antarchy:block/dream_sandstone", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_stairs.json new file mode 100644 index 00000000..baed2929 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/dream_sandstone_bottom", + "side": "antarchy:block/dream_sandstone", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_stairs_inner.json new file mode 100644 index 00000000..e9b15e7d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/dream_sandstone_bottom", + "side": "antarchy:block/dream_sandstone", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_stairs_outer.json new file mode 100644 index 00000000..322c34dd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/dream_sandstone_bottom", + "side": "antarchy:block/dream_sandstone", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_inventory.json new file mode 100644 index 00000000..5437d917 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/dream_sandstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_post.json new file mode 100644 index 00000000..dc5a31a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/dream_sandstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_side.json new file mode 100644 index 00000000..0957d5ab --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/dream_sandstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_side_tall.json new file mode 100644 index 00000000..2b9672c4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_sandstone_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/dream_sandstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_torch.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_torch.json new file mode 100644 index 00000000..bff313b9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch", + "textures": { + "torch": "antarchy:block/dream_torch" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_wall_torch.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_wall_torch.json new file mode 100644 index 00000000..ffee7b9e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/dream_wall_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch_wall", + "textures": { + "torch": "antarchy:block/dream_torch" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer1.json new file mode 100644 index 00000000..51d58498 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer1.json @@ -0,0 +1,24 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/duct_tape/duct_tape_top", + "top": "antarchy:block/duct_tape/duct_tape_top", + "side": "antarchy:block/duct_tape/duct_tape_side_2", + "side_2": "antarchy:block/duct_tape/duct_tape_side", + "side_3": "antarchy:block/duct_tape/duct_tape_side_3" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": {"texture": "#side"}, + "up": {"texture": "#top", "rotation": 90, "uv": [0, 0, 16, 16]}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side_2"}, + "east": {"texture": "#side_3"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer2.json new file mode 100644 index 00000000..284c1425 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer2.json @@ -0,0 +1,17 @@ +{ + "parent": "antarchy:block/duct_tape_layer1", + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 4, 16], + "faces": { + "down": {"texture": "#texture"}, + "up": {"texture": "#texture"}, + "north": {"texture": "#texture"}, + "south": {"texture": "#texture"}, + "west": {"texture": "#texture"}, + "east": {"texture": "#texture"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer3.json new file mode 100644 index 00000000..f1a296bb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer3.json @@ -0,0 +1,17 @@ +{ + "parent": "antarchy:block/duct_tape_layer1", + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 6, 16], + "faces": { + "down": {"texture": "#texture"}, + "up": {"texture": "#texture"}, + "north": {"texture": "#texture"}, + "south": {"texture": "#texture"}, + "west": {"texture": "#texture"}, + "east": {"texture": "#texture"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer4.json new file mode 100644 index 00000000..4ac5675c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer4.json @@ -0,0 +1,17 @@ +{ + "parent": "antarchy:block/duct_tape_layer1", + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "down": {"texture": "#texture"}, + "up": {"texture": "#texture"}, + "north": {"texture": "#texture"}, + "south": {"texture": "#texture"}, + "west": {"texture": "#texture"}, + "east": {"texture": "#texture"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer5.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer5.json new file mode 100644 index 00000000..0dc90186 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer5.json @@ -0,0 +1,17 @@ +{ + "parent": "antarchy:block/duct_tape_layer1", + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 10, 16], + "faces": { + "down": {"texture": "#texture"}, + "up": {"texture": "#texture"}, + "north": {"texture": "#texture"}, + "south": {"texture": "#texture"}, + "west": {"texture": "#texture"}, + "east": {"texture": "#texture"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer6.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer6.json new file mode 100644 index 00000000..a6aa085d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer6.json @@ -0,0 +1,17 @@ +{ + "parent": "antarchy:block/duct_tape_layer1", + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 12, 16], + "faces": { + "down": {"texture": "#texture"}, + "up": {"texture": "#texture"}, + "north": {"texture": "#texture"}, + "south": {"texture": "#texture"}, + "west": {"texture": "#texture"}, + "east": {"texture": "#texture"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer7.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer7.json new file mode 100644 index 00000000..42480efc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer7.json @@ -0,0 +1,17 @@ +{ + "parent": "antarchy:block/duct_tape_layer1", + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 14, 16], + "faces": { + "down": {"texture": "#texture"}, + "up": {"texture": "#texture"}, + "north": {"texture": "#texture"}, + "south": {"texture": "#texture"}, + "west": {"texture": "#texture"}, + "east": {"texture": "#texture"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer8.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer8.json new file mode 100644 index 00000000..81f46c0a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_layer8.json @@ -0,0 +1,17 @@ +{ + "parent": "antarchy:block/duct_tape_layer1", + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": {"texture": "#texture"}, + "up": {"texture": "#texture"}, + "north": {"texture": "#texture"}, + "south": {"texture": "#texture"}, + "west": {"texture": "#texture"}, + "east": {"texture": "#texture"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use1.json new file mode 100644 index 00000000..0dd9dcb9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use1.json @@ -0,0 +1,24 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/duct_tape/duct_tape_top", + "top": "antarchy:block/duct_tape/duct_tape_top", + "side": "antarchy:block/duct_tape/duct_tape_side_2", + "side_2": "antarchy:block/duct_tape/duct_tape_side", + "side_3": "antarchy:block/duct_tape/duct_tape_side_3" + }, + "elements": [ + { + "from": [0, 0, 12], + "to": [16, 2, 16], + "faces": { + "down": {"texture": "#side"}, + "up": {"texture": "#top", "rotation": 90, "uv": [12, 0, 16, 16]}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side_2"}, + "east": {"texture": "#side_3"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use2.json new file mode 100644 index 00000000..7227bb05 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use2.json @@ -0,0 +1,24 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/duct_tape/duct_tape_top", + "top": "antarchy:block/duct_tape/duct_tape_top", + "side": "antarchy:block/duct_tape/duct_tape_side_2", + "side_2": "antarchy:block/duct_tape/duct_tape_side", + "side_3": "antarchy:block/duct_tape/duct_tape_side_3" + }, + "elements": [ + { + "from": [0, 0, 8], + "to": [16, 2, 16], + "faces": { + "down": {"texture": "#side"}, + "up": {"texture": "#top", "rotation": 90, "uv": [8, 0, 16, 16]}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side_2"}, + "east": {"texture": "#side_3"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use3.json new file mode 100644 index 00000000..63a51346 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use3.json @@ -0,0 +1,24 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/duct_tape/duct_tape_top", + "top": "antarchy:block/duct_tape/duct_tape_top", + "side": "antarchy:block/duct_tape/duct_tape_side_2", + "side_2": "antarchy:block/duct_tape/duct_tape_side", + "side_3": "antarchy:block/duct_tape/duct_tape_side_3" + }, + "elements": [ + { + "from": [0, 0, 4], + "to": [16, 2, 16], + "faces": { + "down": {"texture": "#side"}, + "up": {"texture": "#top", "rotation": 90, "uv": [4, 0, 16, 16]}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side_2"}, + "east": {"texture": "#side_3"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use4.json new file mode 100644 index 00000000..51d58498 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duct_tape_use4.json @@ -0,0 +1,24 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/duct_tape/duct_tape_top", + "top": "antarchy:block/duct_tape/duct_tape_top", + "side": "antarchy:block/duct_tape/duct_tape_side_2", + "side_2": "antarchy:block/duct_tape/duct_tape_side", + "side_3": "antarchy:block/duct_tape/duct_tape_side_3" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": {"texture": "#side"}, + "up": {"texture": "#top", "rotation": 90, "uv": [0, 0, 16, 16]}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side_2"}, + "east": {"texture": "#side_3"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duplicator_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duplicator_log.json new file mode 100644 index 00000000..00c2b61e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duplicator_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "minecraft:block/oak_log_top", + "side": "minecraft:block/oak_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duplicator_log_horizontal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duplicator_log_horizontal.json new file mode 100644 index 00000000..fa7c034f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duplicator_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "minecraft:block/oak_log_top", + "side": "minecraft:block/oak_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/duplicator_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duplicator_sapling.json new file mode 100644 index 00000000..3e69e42f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/duplicator_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "minecraft:block/oak_sapling" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/elythia_portal_x.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/elythia_portal_x.json new file mode 100644 index 00000000..b86b9cb8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/elythia_portal_x.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/elythia_portal", + "particle": "antarchy:block/elythia_portal" + }, + "elements": [ + { + "from": [0, 0, 7.5], + "to": [16, 16, 8.5], + "faces": { + "north": { "texture": "#portal" }, + "south": { "texture": "#portal" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/elythia_portal_z.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/elythia_portal_z.json new file mode 100644 index 00000000..a666ed72 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/elythia_portal_z.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/elythia_portal", + "particle": "antarchy:block/elythia_portal" + }, + "elements": [ + { + "from": [7.5, 0, 0], + "to": [8.5, 16, 16], + "faces": { + "west": { "texture": "#portal" }, + "east": { "texture": "#portal" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/fallen_king_crown.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/fallen_king_crown.json new file mode 100644 index 00000000..41c8d1c3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/fallen_king_crown.json @@ -0,0 +1,103 @@ +{ + "format_version": "1.21.11", + "render_type": "cutout", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "antarchy:block/fallen_king_crown", + "particle": "antarchy:block/fallen_king_crown" + }, + "elements": [ + { + "from": [3.5, 0, 12.5], + "to": [12.5, 9, 12.5], + "rotation": {"angle": 0, "axis": "y", "origin": [3.5, 0, 3.5]}, + "faces": { + "north": {"uv": [9, 0, 4.5, 4.5], "texture": "#0"}, + "east": {"uv": [4.5, 0, 9, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 0, 9, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 0, 9, 4.5], "texture": "#0"}, + "up": {"uv": [4.5, 0, 9, 4.5], "texture": "#0"}, + "down": {"uv": [4.5, 0, 9, 4.5], "texture": "#0"} + } + }, + { + "from": [3.5, 0, 3.5], + "to": [3.5, 9, 12.5], + "rotation": {"angle": 0, "axis": "y", "origin": [3.5, 0, 3.5]}, + "faces": { + "north": {"uv": [4.5, 4.5, 9, 9], "texture": "#0"}, + "east": {"uv": [9, 4.5, 4.5, 9], "texture": "#0"}, + "south": {"uv": [4.5, 4.5, 9, 9], "texture": "#0"}, + "west": {"uv": [4.5, 4.5, 9, 9], "texture": "#0"}, + "up": {"uv": [4.5, 4.5, 9, 9], "texture": "#0"}, + "down": {"uv": [4.5, 4.5, 9, 9], "texture": "#0"} + } + }, + { + "from": [12.5, 0, 3.5], + "to": [12.5, 9, 12.5], + "rotation": {"angle": 0, "axis": "y", "origin": [3.5, 0, 3.5]}, + "faces": { + "north": {"uv": [0, 4.5, 4.5, 9], "texture": "#0"}, + "east": {"uv": [0, 4.5, 4.5, 9], "texture": "#0"}, + "south": {"uv": [0, 4.5, 4.5, 9], "texture": "#0"}, + "west": {"uv": [4.5, 4.5, 0, 9], "texture": "#0"}, + "up": {"uv": [0, 4.5, 4.5, 9], "texture": "#0"}, + "down": {"uv": [0, 4.5, 4.5, 9], "texture": "#0"} + } + }, + { + "from": [3.5, 0, 3.5], + "to": [12.5, 9, 3.5], + "rotation": {"angle": 0, "axis": "y", "origin": [3.5, 0, 3.5]}, + "faces": { + "north": {"uv": [0, 0, 4.5, 4.5], "texture": "#0"}, + "east": {"uv": [0, 0, 4.5, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 0, 0, 4.5], "texture": "#0"}, + "west": {"uv": [0, 0, 4.5, 4.5], "texture": "#0"}, + "up": {"uv": [0, 0, 4.5, 4.5], "texture": "#0"}, + "down": {"uv": [0, 0, 4.5, 4.5], "texture": "#0"} + } + }, + { + "from": [7, 5.5, 3.4], + "to": [9, 8.5, 3.4], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 1.5, 3.4]}, + "faces": { + "north": {"uv": [15, 14.5, 16, 16], "texture": "#0"}, + "east": {"uv": [0, 7, 1, 8.5], "texture": "#0"}, + "south": {"uv": [1, 7, 0, 8.5], "texture": "#0"}, + "west": {"uv": [0, 7, 1, 8.5], "texture": "#0"}, + "up": {"uv": [0, 7, 1, 8.5], "texture": "#0"}, + "down": {"uv": [0, 7, 1, 8.5], "texture": "#0"} + } + } + ], + "display": { + "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, 2, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "translation": [0, 2, 0], + "scale": [0.4, 0.4, 0.4] + }, + "head": { + "translation": [0, 9.5, 0], + "scale": [1.7, 1.7, 1.7] + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad.json new file mode 100644 index 00000000..4d31b922 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad.json @@ -0,0 +1,25 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [0, 0, 16, 16], + "texture": "#top" + }, + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom" + } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/bottom_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/bottom_left.json new file mode 100644 index 00000000..db4c003e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/bottom_left.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/tiles/three_by_three/bottom_left", + "top": "antarchy:block/giant_lilypad/tiles/three_by_three/bottom_left", + "bottom": "antarchy:block/giant_lilypad/tiles/three_by_three/bottom_left" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 0.25, + 16 + ], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom" + } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/bottom_middle.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/bottom_middle.json new file mode 100644 index 00000000..c5fc2b62 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/bottom_middle.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/tiles/three_by_three/bottom_middle", + "top": "antarchy:block/giant_lilypad/tiles/three_by_three/bottom_middle", + "bottom": "antarchy:block/giant_lilypad/tiles/three_by_three/bottom_middle" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 0.25, + 16 + ], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom" + } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/bottom_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/bottom_right.json new file mode 100644 index 00000000..10215c22 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/bottom_right.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/tiles/three_by_three/bottom_right", + "top": "antarchy:block/giant_lilypad/tiles/three_by_three/bottom_right", + "bottom": "antarchy:block/giant_lilypad/tiles/three_by_three/bottom_right" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 0.25, + 16 + ], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom" + } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/center.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/center.json new file mode 100644 index 00000000..f9d9b040 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/center.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/tiles/three_by_three/center", + "top": "antarchy:block/giant_lilypad/tiles/three_by_three/center", + "bottom": "antarchy:block/giant_lilypad/tiles/three_by_three/center" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 0.25, + 16 + ], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom" + } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/middle_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/middle_left.json new file mode 100644 index 00000000..3f8abda0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/middle_left.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/tiles/three_by_three/middle_left", + "top": "antarchy:block/giant_lilypad/tiles/three_by_three/middle_left", + "bottom": "antarchy:block/giant_lilypad/tiles/three_by_three/middle_left" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 0.25, + 16 + ], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom" + } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/middle_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/middle_right.json new file mode 100644 index 00000000..c5057caa --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/middle_right.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/tiles/three_by_three/middle_right", + "top": "antarchy:block/giant_lilypad/tiles/three_by_three/middle_right", + "bottom": "antarchy:block/giant_lilypad/tiles/three_by_three/middle_right" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 0.25, + 16 + ], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom" + } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/top_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/top_left.json new file mode 100644 index 00000000..9c9d53b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/top_left.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/tiles/three_by_three/top_left", + "top": "antarchy:block/giant_lilypad/tiles/three_by_three/top_left", + "bottom": "antarchy:block/giant_lilypad/tiles/three_by_three/top_left" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 0.25, + 16 + ], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom" + } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/top_middle.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/top_middle.json new file mode 100644 index 00000000..8a53bf55 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/top_middle.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/tiles/three_by_three/top_middle", + "top": "antarchy:block/giant_lilypad/tiles/three_by_three/top_middle", + "bottom": "antarchy:block/giant_lilypad/tiles/three_by_three/top_middle" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 0.25, + 16 + ], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom" + } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/top_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/top_right.json new file mode 100644 index 00000000..61e88130 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/giant_lily_pad/top_right.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/tiles/three_by_three/top_right", + "top": "antarchy:block/giant_lilypad/tiles/three_by_three/top_right", + "bottom": "antarchy:block/giant_lilypad/tiles/three_by_three/top_right" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 0.25, + 16 + ], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom" + } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/glowcap_mushroom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/glowcap_mushroom.json new file mode 100644 index 00000000..3b29b312 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/glowcap_mushroom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/glowcap_mushroom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/glowcap_mushroom_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/glowcap_mushroom_block.json new file mode 100644 index 00000000..d565833e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/glowcap_mushroom_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_single_face", + "textures": { + "texture": "antarchy:block/glowcap_mushroom_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/hanging_creeproots.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/hanging_creeproots.json new file mode 100644 index 00000000..d0012113 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/hanging_creeproots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/hanging_creeproots" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/hanging_creeproots_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/hanging_creeproots_bottom.json new file mode 100644 index 00000000..0215ee15 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/hanging_creeproots_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/hanging_creeproots_bottom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/hanging_peach.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/hanging_peach.json new file mode 100644 index 00000000..240e552a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/hanging_peach.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/peach/peach_hanging" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/hushweed.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/hushweed.json new file mode 100644 index 00000000..ecda061c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/hushweed.json @@ -0,0 +1,195 @@ +{ + "format_version": "1.21.1", + "credit": "Made with Blockbench", + "parent": "block/block", + "texture_size": [64, 64], + "textures": { + "1": "antarchy:block/hushweed", + "particle": "antarchy:block/hushweed_particle" + }, + "elements": [ + { + "from": [4, 18, 4], + "to": [12, 22, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 6, 0]}, + "faces": { + "north": {"uv": [6, 7.25, 8, 8.25], "texture": "#1", "cullface": "up"}, + "east": {"uv": [6, 7.25, 8, 8.25], "texture": "#1", "cullface": "up"}, + "south": {"uv": [6, 7.25, 8, 8.25], "texture": "#1", "cullface": "up"}, + "west": {"uv": [6, 7.25, 8, 8.25], "texture": "#1", "cullface": "up"}, + "up": {"uv": [6, 9.25, 4, 7.25], "texture": "#1", "cullface": "up"} + } + }, + { + "from": [4, 18, 4], + "to": [4, 26, 12], + "rotation": {"angle": 22.5, "axis": "z", "origin": [4, 18, 8]}, + "faces": { + "north": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "east": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "south": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "west": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "up": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "down": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"} + } + }, + { + "from": [12, 18, 4], + "to": [12, 26, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [12, 18, 8]}, + "faces": { + "north": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "east": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "south": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "west": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "up": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "down": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"} + } + }, + { + "from": [8, 18, 0], + "to": [8, 26, 8], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 18, 4]}, + "faces": { + "north": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "east": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "south": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "west": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "up": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "down": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"} + } + }, + { + "from": [8, 18, 8], + "to": [8, 26, 16], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 18, 12]}, + "faces": { + "north": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "east": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "south": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "west": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "up": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"}, + "down": {"uv": [0, 7.75, 2, 9.75], "texture": "#1", "cullface": "up"} + } + }, + { + "from": [15.99, 5, 0], + "to": [16, 18, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]}, + "faces": { + "east": {"uv": [4, 4, 8, 7.25], "texture": "#1", "cullface": "east"}, + "west": {"uv": [0, 4.5, 4, 7.75], "texture": "#1"} + } + }, + { + "from": [0, 5, 0], + "to": [16, 18, 0.01], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]}, + "faces": { + "north": {"uv": [4, 4, 8, 7.25], "texture": "#1", "cullface": "north"}, + "south": {"uv": [0, 4.5, 4, 7.75], "texture": "#1"} + } + }, + { + "from": [0.1, 0, 8], + "to": [15.9, 17.9, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 10, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 4, 4.5], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 4.5], "texture": "#1"} + } + }, + { + "from": [8, 0, 0.1], + "to": [8, 17.9, 15.9], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 10, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 4, 4.5], "texture": "#1"}, + "west": {"uv": [0, 0, 4, 4.5], "texture": "#1"} + } + }, + { + "from": [0, 5, 15.99], + "to": [16, 18, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]}, + "faces": { + "north": {"uv": [0, 4.5, 4, 7.75], "texture": "#1"}, + "south": {"uv": [4, 4, 8, 7.25], "texture": "#1", "cullface": "south"} + } + }, + { + "from": [0, 5, 0], + "to": [0.01, 18, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]}, + "faces": { + "east": {"uv": [0, 4.5, 4, 7.75], "texture": "#1"}, + "west": {"uv": [4, 4, 8, 7.25], "texture": "#1", "cullface": "west"} + } + }, + { + "from": [0, 18, 0], + "to": [16, 18, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]}, + "faces": { + "up": {"uv": [8, 4, 4, 0], "texture": "#1", "cullface": "up"}, + "down": {"uv": [4, 0, 8, 4], "texture": "#1"} + } + } + ], + "display": { + "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], + "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], + "translation": [0, -2.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "hushweed", + "origin": [0, 6, 0], + "scope": 0, + "color": 0, + "children": [ + { + "name": "top_part", + "origin": [0, 6, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "base_tree", + "origin": [0, 2, 0], + "scope": 0, + "color": 0, + "children": [5, 6, 7, 8, 9, 10, 11] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/infested_coarse_dirt.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/infested_coarse_dirt.json new file mode 100644 index 00000000..3a6f548f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/infested_coarse_dirt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/coarse_dirt" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/infested_rooted_dirt.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/infested_rooted_dirt.json new file mode 100644 index 00000000..6b194564 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/infested_rooted_dirt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/rooted_dirt" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/jerry_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/jerry_egg.json new file mode 100644 index 00000000..08d5c1a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/jerry_egg.json @@ -0,0 +1,59 @@ +{ + "format_version": "1.9.0", + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "1": "antarchy:block/jerry_egg", + "particle": "antarchy:block/jerry_egg_break_particle" + }, + "elements": [ + { + "from": [2, 0, 1], + "to": [14, 16, 15], + "faces": { + "north": {"uv": [10.5, 0, 13.5, 4], "texture": "#1"}, + "east": {"uv": [7, 0, 10.5, 4], "texture": "#1"}, + "south": {"uv": [10.5, 4, 13.5, 8], "texture": "#1"}, + "west": {"uv": [7, 4, 10.5, 8], "texture": "#1"}, + "up": {"uv": [7, 3.5, 4, 0], "texture": "#1"}, + "down": {"uv": [6, 11.25, 3, 14.75], "texture": "#1"} + } + }, + { + "from": [4, 1, 3], + "to": [12, 9, 13], + "faces": { + "north": {"uv": [13.5, 0, 15.5, 2], "texture": "#1"}, + "east": {"uv": [6, 11.5, 8.5, 13.5], "texture": "#1"}, + "south": {"uv": [13.5, 2, 15.5, 4], "texture": "#1"}, + "west": {"uv": [8.5, 11.75, 11, 13.75], "texture": "#1"}, + "up": {"uv": [13, 14.25, 11, 11.75], "texture": "#1"}, + "down": {"uv": [15, 11.75, 13, 14.25], "texture": "#1"} + } + }, + { + "from": [8, 1, 1], + "to": [8, 16, 15], + "faces": { + "north": {"uv": [0, 0, 0, 3.75], "texture": "#1"}, + "east": {"uv": [0, 7.5, 3.5, 11.25], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 3.75], "texture": "#1"}, + "west": {"uv": [3.5, 7.5, 7, 11.25], "texture": "#1"}, + "up": {"uv": [0, 3.5, 0, 0], "texture": "#1"}, + "down": {"uv": [0, 0, 0, 3.5], "texture": "#1"} + } + }, + { + "from": [2, 1, 8], + "to": [14, 16, 8], + "faces": { + "north": {"uv": [10.5, 8, 13.5, 11.75], "texture": "#1"}, + "east": {"uv": [0, 0, 0, 3.75], "texture": "#1"}, + "south": {"uv": [0, 11.25, 3, 15], "texture": "#1"}, + "west": {"uv": [0, 0, 0, 3.75], "texture": "#1"}, + "up": {"uv": [3, 0, 0, 0], "texture": "#1"}, + "down": {"uv": [0, 0, 3, 0], "texture": "#1"} + } + } + ] +} 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 new file mode 100644 index 00000000..9e31e7c0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/jumpy_bug_egg.json @@ -0,0 +1,85 @@ +{ + "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/large_blood_crystal_bud.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/large_blood_crystal_bud.json new file mode 100644 index 00000000..51644653 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/large_blood_crystal_bud.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/blood_crystal_bud_stage2" + } +} + + 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 new file mode 100644 index 00000000..c98d6285 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/loam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/loam" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lotus.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lotus.json new file mode 100644 index 00000000..a1b802d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lotus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/lotus" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lotus_on_giant_lily_pad.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lotus_on_giant_lily_pad.json new file mode 100644 index 00000000..5f89b669 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lotus_on_giant_lily_pad.json @@ -0,0 +1,51 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/lotus", + "cross": "antarchy:block/lotus" + }, + "elements": [ + { + "from": [0.8, -0.25, 8.0], + "to": [15.2, 15.75, 8.0], + "rotation": { + "origin": [8.0, 8.0, 8.0], + "axis": "y", + "angle": 45, + "rescale": false + }, + "shade": false, + "faces": { + "north": { + "uv": [0.0, 0.0, 16.0, 16.0], + "texture": "#cross" + }, + "south": { + "uv": [16.0, 0.0, 0.0, 16.0], + "texture": "#cross" + } + } + }, + { + "from": [8.0, -0.25, 0.8], + "to": [8.0, 15.75, 15.2], + "rotation": { + "origin": [8.0, 8.0, 8.0], + "axis": "y", + "angle": 45, + "rescale": false + }, + "shade": false, + "faces": { + "west": { + "uv": [0.0, 0.0, 16.0, 16.0], + "texture": "#cross" + }, + "east": { + "uv": [16.0, 0.0, 0.0, 16.0], + "texture": "#cross" + } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lucid_anchor.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lucid_anchor.json new file mode 100644 index 00000000..7422ef8b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lucid_anchor.json @@ -0,0 +1,111 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "antarchy:block/lucid_anchor", + "particle": "antarchy:block/lucid_anchor" + }, + "elements": [ + { + "name": "core", + "from": [3, 3, 3], + "to": [13, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 3, 0]}, + "faces": { + "north": {"uv": [8, 7, 10.5, 9.5], "texture": "#0"}, + "east": {"uv": [8, 7, 10.5, 9.5], "texture": "#0"}, + "south": {"uv": [8, 7, 10.5, 9.5], "texture": "#0"}, + "west": {"uv": [8, 7, 10.5, 9.5], "texture": "#0"}, + "up": {"uv": [2.5, 14, 0, 11.5], "texture": "#0"}, + "down": {"uv": [5, 11.5, 2.5, 14], "texture": "#0"} + } + }, + { + "from": [0, 13, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 14, 0]}, + "faces": { + "north": {"uv": [12, 0, 16, 0.75], "texture": "#0"}, + "east": {"uv": [12, 0, 16, 0.75], "texture": "#0"}, + "south": {"uv": [12, 0, 16, 0.75], "texture": "#0"}, + "west": {"uv": [12, 0, 16, 0.75], "texture": "#0"}, + "up": {"uv": [4, 4, 0, 0], "texture": "#0"}, + "down": {"uv": [4, 0, 0, 4], "texture": "#0"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 8.25, 4, 11.5], "texture": "#0"}, + "east": {"uv": [0, 8.25, 4, 11.5], "texture": "#0"}, + "south": {"uv": [0, 8.25, 4, 11.5], "texture": "#0"}, + "west": {"uv": [0, 8.25, 4, 11.5], "texture": "#0"}, + "down": {"uv": [4, 0, 8, 4], "texture": "#0"} + } + } + ], + "display": { + "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], + "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": "lucid_anchor", + "origin": [0, 2, 0], + "scope": 0, + "color": 0, + "children": [ + { + "name": "core", + "origin": [0, 2, 0], + "scope": 0, + "color": 0, + "children": [0] + }, + { + "name": "base", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [1] + }, + { + "name": "glass", + "origin": [0, 2, 0], + "scope": 0, + "color": 0, + "children": [2] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/lumen_froglight.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lumen_froglight.json new file mode 100644 index 00000000..14e41e27 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lumen_froglight.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "antarchy:block/lumen_froglight_side", + "top": "antarchy:block/lumen_froglight_top", + "side": "antarchy:block/lumen_froglight_side" + } +} 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 new file mode 100644 index 00000000..a63af561 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_1.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..71eec9e4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_2.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..7e5d23e4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_3.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..30d35294 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_4.json @@ -0,0 +1,7 @@ +{ + "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/medium_blood_crystal_bud.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/medium_blood_crystal_bud.json new file mode 100644 index 00000000..890834ec --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/medium_blood_crystal_bud.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/blood_crystal_bud_stage1" + } +} + + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines.json new file mode 100644 index 00000000..3e865d32 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/molting_vines/molting_vines" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines_bottom.json new file mode 100644 index 00000000..0f0f7090 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/molting_vines/molting_vines_bottom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines_broodfruit.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines_broodfruit.json new file mode 100644 index 00000000..621ac434 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines_broodfruit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/molting_vines/molting_vines_broodfruit" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines_top.json new file mode 100644 index 00000000..ab6dbda9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/molting_vines_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/molting_vines/molting_vines_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_ouranwood_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_ouranwood_log.json new file mode 100644 index 00000000..11beeab7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_ouranwood_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_log", + "textures": { + "end": "antarchy:block/ouranwood/mossy_ouranwood_log_top", + "side": "antarchy:block/ouranwood/mossy_ouranwood_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_ouranwood_log_horizontal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_ouranwood_log_horizontal.json new file mode 100644 index 00000000..8e83345f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_ouranwood_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_log_horizontal", + "textures": { + "end": "antarchy:block/ouranwood/mossy_ouranwood_log_top", + "side": "antarchy:block/ouranwood/mossy_ouranwood_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_ouranwood_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_ouranwood_wood.json new file mode 100644 index 00000000..a776ef3b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_ouranwood_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_wood", + "textures": { + "end": "antarchy:block/ouranwood/mossy_ouranwood_log", + "side": "antarchy:block/ouranwood/mossy_ouranwood_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..7b951f97 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab_top.json new file mode 100644 index 00000000..e3d82f83 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..d550f3fa --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_inner.json new file mode 100644 index 00000000..c5bb60d0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_outer.json new file mode 100644 index 00000000..f45602bd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_inventory.json new file mode 100644 index 00000000..72bebf9f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_post.json new file mode 100644 index 00000000..007eebb3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side.json new file mode 100644 index 00000000..188a08c3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side_tall.json new file mode 100644 index 00000000..bd46666c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_bricks.json new file mode 100644 index 00000000..1a5fc80c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mossy_shellstone_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/mucus.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mucus.json new file mode 100644 index 00000000..ec82ae82 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/mucus.json @@ -0,0 +1,17 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/mucus", + "glow_lichen": "antarchy:block/mucus" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 16, 0.1], + "faces": { + "north": { "uv": [16, 0, 0, 16], "texture": "#glow_lichen" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#glow_lichen" } + } + } + ] +} 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 new file mode 100644 index 00000000..1c17e6da --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/myrmite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/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 new file mode 100644 index 00000000..47ee96fb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/myrmite_coal_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/myrmite_coal_ore" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_button.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_button.json new file mode 100644 index 00000000..5bfd3ec8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_button.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_button_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_button_inventory.json new file mode 100644 index 00000000..0e775f8f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_button_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_inventory", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_button_pressed.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_button_pressed.json new file mode 100644 index 00000000..95443327 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_button_pressed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_pressed", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left.json new file mode 100644 index 00000000..785bb99b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left_open.json new file mode 100644 index 00000000..9cd5767f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left_open", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right.json new file mode 100644 index 00000000..47c10ad9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right_open.json new file mode 100644 index 00000000..57ddb6d6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right_open", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left.json new file mode 100644 index 00000000..2a5485a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left_open.json new file mode 100644 index 00000000..d8fcc31d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left_open", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right.json new file mode 100644 index 00000000..6baceb0c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right_open.json new file mode 100644 index 00000000..1bcb3ae4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right_open", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate.json new file mode 100644 index 00000000..a6da433f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_open.json new file mode 100644 index 00000000..a817f67d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_open", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall.json new file mode 100644 index 00000000..68fb5f65 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall_open.json new file mode 100644 index 00000000..1d5532a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall_open", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_inventory.json new file mode 100644 index 00000000..752c9adc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_inventory", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_post.json new file mode 100644 index 00000000..1833b4b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_post", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_side.json new file mode 100644 index 00000000..597e7f6b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_fence_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_side", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_hanging_sign.json new file mode 100644 index 00000000..c101c4af --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/nadir/nadir_hanging" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_log.json new file mode 100644 index 00000000..07c99b32 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_log.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_log", + "textures": { + "end": "antarchy:block/nadir/nadir_log_top", + "side": "antarchy:block/nadir/nadir_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_log_horizontal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_log_horizontal.json new file mode 100644 index 00000000..fca2eb31 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_log_horizontal.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_log_horizontal", + "textures": { + "end": "antarchy:block/nadir/nadir_log_top", + "side": "antarchy:block/nadir/nadir_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_planks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_planks.json new file mode 100644 index 00000000..31fcbb9f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_planks.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate.json new file mode 100644 index 00000000..802073a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate_down.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate_down.json new file mode 100644 index 00000000..0be8bf8d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate_down.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate_down", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_sapling.json new file mode 100644 index 00000000..1c12fa69 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/nadir/nadir_sapling" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_sign.json new file mode 100644 index 00000000..f8966d14 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:item/nadir_sign" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_slab.json new file mode 100644 index 00000000..074cbc4d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_slab.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab", + "textures": { + "bottom": "antarchy:block/nadir/nadir_planks", + "side": "antarchy:block/nadir/nadir_planks", + "top": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_slab_top.json new file mode 100644 index 00000000..8fe74cdf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_slab_top.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab_top", + "textures": { + "bottom": "antarchy:block/nadir/nadir_planks", + "side": "antarchy:block/nadir/nadir_planks", + "top": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_stairs.json new file mode 100644 index 00000000..3b5f549b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_stairs.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs", + "textures": { + "bottom": "antarchy:block/nadir/nadir_planks", + "side": "antarchy:block/nadir/nadir_planks", + "top": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_inner.json new file mode 100644 index 00000000..8eceb6db --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_inner.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_inner", + "textures": { + "bottom": "antarchy:block/nadir/nadir_planks", + "side": "antarchy:block/nadir/nadir_planks", + "top": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_outer.json new file mode 100644 index 00000000..e6e0793d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_outer.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_outer", + "textures": { + "bottom": "antarchy:block/nadir/nadir_planks", + "side": "antarchy:block/nadir/nadir_planks", + "top": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_bottom.json new file mode 100644 index 00000000..1b6587f5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_bottom", + "textures": { + "texture": "antarchy:block/nadir/nadir_log_trapdoor" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_open.json new file mode 100644 index 00000000..500081cf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_open", + "textures": { + "texture": "antarchy:block/nadir/nadir_log_trapdoor" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_top.json new file mode 100644 index 00000000..09cabab6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_top", + "textures": { + "texture": "antarchy:block/nadir/nadir_log_trapdoor" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_veil.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_veil.json new file mode 100644 index 00000000..c3ec9718 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_veil.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/nadir/nadir_veil" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_wall_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_wall_hanging_sign.json new file mode 100644 index 00000000..c101c4af --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_wall_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/nadir/nadir_hanging" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_wall_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_wall_sign.json new file mode 100644 index 00000000..f8966d14 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_wall_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:item/nadir_sign" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_wood.json new file mode 100644 index 00000000..febfe2df --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nadir_wood.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_wood", + "textures": { + "end": "antarchy:block/nadir/nadir_log", + "side": "antarchy:block/nadir/nadir_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite.json new file mode 100644 index 00000000..6637759f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_slab.json new file mode 100644 index 00000000..42360568 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/nyxite_bricks", + "side": "antarchy:block/nyxite_bricks", + "top": "antarchy:block/nyxite_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_slab_top.json new file mode 100644 index 00000000..47f6963a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/nyxite_bricks", + "side": "antarchy:block/nyxite_bricks", + "top": "antarchy:block/nyxite_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_stairs.json new file mode 100644 index 00000000..5f73e857 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/nyxite_bricks", + "side": "antarchy:block/nyxite_bricks", + "top": "antarchy:block/nyxite_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_stairs_inner.json new file mode 100644 index 00000000..911e0f29 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/nyxite_bricks", + "side": "antarchy:block/nyxite_bricks", + "top": "antarchy:block/nyxite_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_stairs_outer.json new file mode 100644 index 00000000..6e82034c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/nyxite_bricks", + "side": "antarchy:block/nyxite_bricks", + "top": "antarchy:block/nyxite_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_inventory.json new file mode 100644 index 00000000..4d8717e8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/nyxite_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_post.json new file mode 100644 index 00000000..91848a19 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/nyxite_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_side.json new file mode 100644 index 00000000..4e199f7a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/nyxite_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_side_tall.json new file mode 100644 index 00000000..f4558564 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/nyxite_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_bricks.json new file mode 100644 index 00000000..dc538400 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/nyxite_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_pillar.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_pillar.json new file mode 100644 index 00000000..4f2de74e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_pillar.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/nyxite_pillar_top", + "side": "antarchy:block/nyxite_pillar" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_slab.json new file mode 100644 index 00000000..cc734146 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/nyxite", + "side": "antarchy:block/nyxite", + "top": "antarchy:block/nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_slab_top.json new file mode 100644 index 00000000..b23490da --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/nyxite", + "side": "antarchy:block/nyxite", + "top": "antarchy:block/nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_base.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_base.json new file mode 100644 index 00000000..324ad02a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_base.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/nyxite_spike/nyxite_spike_down_base" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_frustum.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_frustum.json new file mode 100644 index 00000000..33f7e49b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_frustum.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/nyxite_spike/nyxite_spike_down_frustum" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_middle.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_middle.json new file mode 100644 index 00000000..f680cf37 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_middle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/nyxite_spike/nyxite_spike_down_middle" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_tip.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_tip.json new file mode 100644 index 00000000..c52426e5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_tip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/nyxite_spike/nyxite_spike_down_tip" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_tip_merge.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_tip_merge.json new file mode 100644 index 00000000..3b870c2d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_down_tip_merge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/nyxite_spike/nyxite_spike_down_tip_merge" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_base.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_base.json new file mode 100644 index 00000000..f1622055 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_base.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/nyxite_spike/nyxite_spike_up_base" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_frustum.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_frustum.json new file mode 100644 index 00000000..bf5055d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_frustum.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/nyxite_spike/nyxite_spike_up_frustum" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_middle.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_middle.json new file mode 100644 index 00000000..93478e1a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_middle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/nyxite_spike/nyxite_spike_up_middle" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_tip.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_tip.json new file mode 100644 index 00000000..6ba2456d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_tip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/nyxite_spike/nyxite_spike_up_tip" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_tip_merge.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_tip_merge.json new file mode 100644 index 00000000..79ff8e5e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_spike_up_tip_merge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/nyxite_spike/nyxite_spike_up_tip_merge" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_stairs.json new file mode 100644 index 00000000..1ebc7b46 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/nyxite", + "side": "antarchy:block/nyxite", + "top": "antarchy:block/nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_stairs_inner.json new file mode 100644 index 00000000..7aff7e8c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/nyxite", + "side": "antarchy:block/nyxite", + "top": "antarchy:block/nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_stairs_outer.json new file mode 100644 index 00000000..9154c234 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/nyxite", + "side": "antarchy:block/nyxite", + "top": "antarchy:block/nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_inventory.json new file mode 100644 index 00000000..54cf0e66 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_post.json new file mode 100644 index 00000000..30d68af6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_side.json new file mode 100644 index 00000000..4b34ab08 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_side_tall.json new file mode 100644 index 00000000..925b97c9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/nyxite_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/orange_milkweed_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/orange_milkweed_bottom.json new file mode 100644 index 00000000..3cbf3ff0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/orange_milkweed_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/milkweed/orange_milkweed_bottom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/orange_milkweed_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/orange_milkweed_top.json new file mode 100644 index 00000000..0f8fda20 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/orange_milkweed_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/milkweed/orange_milkweed_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_acorn_hanging.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_acorn_hanging.json new file mode 100644 index 00000000..296460b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_acorn_hanging.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/ouranwood/ouranwood_acorn_hanging" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_button.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_button.json new file mode 100644 index 00000000..97df113b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_button", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_button_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_button_inventory.json new file mode 100644 index 00000000..a8de4c3c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_button_inventory", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_button_pressed.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_button_pressed.json new file mode 100644 index 00000000..4f6ef9fe --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_button_pressed", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_left.json new file mode 100644 index 00000000..d941bca9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_door_bottom", + "top": "antarchy:block/ouranwood/ouranwood_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_left_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_left_open.json new file mode 100644 index 00000000..f8cd5200 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left_open", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_door_bottom", + "top": "antarchy:block/ouranwood/ouranwood_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_right.json new file mode 100644 index 00000000..79b6d0b3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_door_bottom", + "top": "antarchy:block/ouranwood/ouranwood_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_right_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_right_open.json new file mode 100644 index 00000000..043a2ede --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_bottom_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right_open", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_door_bottom", + "top": "antarchy:block/ouranwood/ouranwood_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_left.json new file mode 100644 index 00000000..b4f3f38b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_left", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_door_bottom", + "top": "antarchy:block/ouranwood/ouranwood_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_left_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_left_open.json new file mode 100644 index 00000000..858bf9ae --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_left_open", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_door_bottom", + "top": "antarchy:block/ouranwood/ouranwood_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_right.json new file mode 100644 index 00000000..151d8b62 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_right", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_door_bottom", + "top": "antarchy:block/ouranwood/ouranwood_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_right_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_right_open.json new file mode 100644 index 00000000..c188f406 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_door_top_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_right_open", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_door_bottom", + "top": "antarchy:block/ouranwood/ouranwood_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate.json new file mode 100644 index 00000000..95ed974c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_fence_gate", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate_open.json new file mode 100644 index 00000000..d1b0f1a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_open", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate_wall.json new file mode 100644 index 00000000..e5694ff1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate_wall_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate_wall_open.json new file mode 100644 index 00000000..4f3aa7e6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall_open", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_inventory.json new file mode 100644 index 00000000..753fb466 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_fence_inventory", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_post.json new file mode 100644 index 00000000..c2790576 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_fence_post", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_side.json new file mode 100644 index 00000000..6c422b2e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_fence_side", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_hanging_sign.json new file mode 100644 index 00000000..6daa926e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_leaves.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_leaves.json new file mode 100644 index 00000000..0533c89f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_leaves.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "antarchy:block/ouranwood/ouranwood_leaves" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_log.json new file mode 100644 index 00000000..a0f32736 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_log", + "textures": { + "end": "antarchy:block/ouranwood/ouranwood_log_top", + "side": "antarchy:block/ouranwood/ouranwood_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_log_horizontal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_log_horizontal.json new file mode 100644 index 00000000..a4508f80 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_log_horizontal", + "textures": { + "end": "antarchy:block/ouranwood/ouranwood_log_top", + "side": "antarchy:block/ouranwood/ouranwood_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_planks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_planks.json new file mode 100644 index 00000000..fc7df4df --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_pressure_plate.json new file mode 100644 index 00000000..3a7daf8c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_pressure_plate_down.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_pressure_plate_down.json new file mode 100644 index 00000000..0e12de94 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate_down", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sapling_0.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sapling_0.json new file mode 100644 index 00000000..e02c3613 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sapling_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/ouranwood/ouranwood_sapling_0" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sapling_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sapling_1.json new file mode 100644 index 00000000..133cfeab --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sapling_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/ouranwood/ouranwood_sapling_1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sapling_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sapling_2.json new file mode 100644 index 00000000..772f5ff3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sapling_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/ouranwood/ouranwood_sapling_2" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sign.json new file mode 100644 index 00000000..6daa926e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_slab.json new file mode 100644 index 00000000..5ddb1ba4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_slab", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_planks", + "side": "antarchy:block/ouranwood/ouranwood_planks", + "top": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_slab_top.json new file mode 100644 index 00000000..26f29b0b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_slab_top", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_planks", + "side": "antarchy:block/ouranwood/ouranwood_planks", + "top": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_squirrel_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_squirrel_nest.json new file mode 100644 index 00000000..3a6f548f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_squirrel_nest.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "minecraft:block/coarse_dirt" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_stairs.json new file mode 100644 index 00000000..265f393e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_stairs", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_planks", + "side": "antarchy:block/ouranwood/ouranwood_planks", + "top": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_stairs_inner.json new file mode 100644 index 00000000..cf1003fc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_stairs_inner", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_planks", + "side": "antarchy:block/ouranwood/ouranwood_planks", + "top": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_stairs_outer.json new file mode 100644 index 00000000..dce6dad8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_stairs_outer", + "textures": { + "bottom": "antarchy:block/ouranwood/ouranwood_planks", + "side": "antarchy:block/ouranwood/ouranwood_planks", + "top": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_trapdoor_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_trapdoor_bottom.json new file mode 100644 index 00000000..42987311 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_bottom", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_trapdoor" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_trapdoor_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_trapdoor_open.json new file mode 100644 index 00000000..1f8066d3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_open", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_trapdoor" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_trapdoor_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_trapdoor_top.json new file mode 100644 index 00000000..47f4c80a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_top", + "textures": { + "texture": "antarchy:block/ouranwood/ouranwood_trapdoor" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_wall_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_wall_hanging_sign.json new file mode 100644 index 00000000..6daa926e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_wall_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_wall_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_wall_sign.json new file mode 100644 index 00000000..6daa926e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_wall_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/ouranwood/ouranwood_planks" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_wood.json new file mode 100644 index 00000000..67ddab40 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/ouranwood_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_wood", + "textures": { + "end": "antarchy:block/ouranwood/ouranwood_log", + "side": "antarchy:block/ouranwood/ouranwood_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/pale_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/pale_nyxite.json new file mode 100644 index 00000000..3ff553f5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/pale_nyxite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/pale_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_button.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_button.json new file mode 100644 index 00000000..77f042f7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_button.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_button_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_button_inventory.json new file mode 100644 index 00000000..c2a473ed --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_button_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_inventory", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_button_pressed.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_button_pressed.json new file mode 100644 index 00000000..886dde0f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_button_pressed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_pressed", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left.json new file mode 100644 index 00000000..6750e6ce --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left_open.json new file mode 100644 index 00000000..79bf6df4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left_open", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right.json new file mode 100644 index 00000000..ecc2ea76 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right_open.json new file mode 100644 index 00000000..1c9317d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right_open", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_left.json new file mode 100644 index 00000000..77956de2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_left_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_left_open.json new file mode 100644 index 00000000..ad865d33 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left_open", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_right.json new file mode 100644 index 00000000..3a5d342f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_right_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_right_open.json new file mode 100644 index 00000000..a3772f2c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_door_top_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right_open", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate.json new file mode 100644 index 00000000..0e6d3ad5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate_open.json new file mode 100644 index 00000000..7e9432ad --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_open", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall.json new file mode 100644 index 00000000..296b5a69 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall_open.json new file mode 100644 index 00000000..8bd8170c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall_open", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_inventory.json new file mode 100644 index 00000000..318d6270 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_inventory", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_post.json new file mode 100644 index 00000000..72b4d302 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_post", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_side.json new file mode 100644 index 00000000..9ee46975 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_fence_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_side", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_hanging_sign.json new file mode 100644 index 00000000..2717aebc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/peach/peach_hanging" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_leaves.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_leaves.json new file mode 100644 index 00000000..4b357a8e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_leaves.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/peach/peach_leaves" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_log.json new file mode 100644 index 00000000..c20762cc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_log.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_log", + "textures": { + "end": "antarchy:block/peach/peach_log_top", + "side": "antarchy:block/peach/peach_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_log_horizontal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_log_horizontal.json new file mode 100644 index 00000000..2d279990 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_log_horizontal.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_log_horizontal", + "textures": { + "end": "antarchy:block/peach/peach_log_top", + "side": "antarchy:block/peach/peach_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_planks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_planks.json new file mode 100644 index 00000000..db7c1f01 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_planks.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_pressure_plate.json new file mode 100644 index 00000000..fe224f3f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_pressure_plate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_pressure_plate_down.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_pressure_plate_down.json new file mode 100644 index 00000000..2af87b5f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_pressure_plate_down.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate_down", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_sapling.json new file mode 100644 index 00000000..11f97b6f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/peach/peach_sapling" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_sign.json new file mode 100644 index 00000000..3d19dc12 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:item/peach_sign" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_slab.json new file mode 100644 index 00000000..81588d4d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_slab.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab", + "textures": { + "bottom": "antarchy:block/peach/peach_planks", + "side": "antarchy:block/peach/peach_planks", + "top": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_slab_top.json new file mode 100644 index 00000000..01ee38e4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_slab_top.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab_top", + "textures": { + "bottom": "antarchy:block/peach/peach_planks", + "side": "antarchy:block/peach/peach_planks", + "top": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_stairs.json new file mode 100644 index 00000000..d4a28a68 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_stairs.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs", + "textures": { + "bottom": "antarchy:block/peach/peach_planks", + "side": "antarchy:block/peach/peach_planks", + "top": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_stairs_inner.json new file mode 100644 index 00000000..843cafd6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_stairs_inner.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_inner", + "textures": { + "bottom": "antarchy:block/peach/peach_planks", + "side": "antarchy:block/peach/peach_planks", + "top": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_stairs_outer.json new file mode 100644 index 00000000..545c33ba --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_stairs_outer.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_outer", + "textures": { + "bottom": "antarchy:block/peach/peach_planks", + "side": "antarchy:block/peach/peach_planks", + "top": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_trapdoor_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_trapdoor_bottom.json new file mode 100644 index 00000000..17f6d21a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_trapdoor_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_bottom", + "textures": { + "texture": "antarchy:block/peach/peach_trapdoor" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_trapdoor_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_trapdoor_open.json new file mode 100644 index 00000000..d29de2f6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_trapdoor_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_open", + "textures": { + "texture": "antarchy:block/peach/peach_trapdoor" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_trapdoor_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_trapdoor_top.json new file mode 100644 index 00000000..822ea421 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_trapdoor_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_top", + "textures": { + "texture": "antarchy:block/peach/peach_trapdoor" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_wall_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_wall_hanging_sign.json new file mode 100644 index 00000000..2717aebc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_wall_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/peach/peach_hanging" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_wall_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_wall_sign.json new file mode 100644 index 00000000..3d19dc12 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_wall_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:item/peach_sign" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_wood.json new file mode 100644 index 00000000..092ff7fc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/peach_wood.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_wood", + "textures": { + "end": "antarchy:block/peach/peach_log", + "side": "antarchy:block/peach/peach_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/pink_milkweed_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/pink_milkweed_bottom.json new file mode 100644 index 00000000..dabb59ce --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/pink_milkweed_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/milkweed/pink_milkweed_bottom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/pink_milkweed_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/pink_milkweed_top.json new file mode 100644 index 00000000..a1e120b5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/pink_milkweed_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/milkweed/pink_milkweed_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal.json new file mode 100644 index 00000000..3a85176d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_horizontal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_horizontal.json new file mode 100644 index 00000000..13832266 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab.json new file mode 100644 index 00000000..1a48a48b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block", + "top": "antarchy:block/antimetal/polished_antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab_top.json new file mode 100644 index 00000000..98a13d83 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block", + "top": "antarchy:block/antimetal/polished_antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs.json new file mode 100644 index 00000000..96e66937 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block", + "top": "antarchy:block/antimetal/polished_antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_inner.json new file mode 100644 index 00000000..fbdc320d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block", + "top": "antarchy:block/antimetal/polished_antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_outer.json new file mode 100644 index 00000000..e4abf85a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block", + "top": "antarchy:block/antimetal/polished_antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone.json new file mode 100644 index 00000000..bc17c241 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/broodstone/polished_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_slab.json new file mode 100644 index 00000000..b626cb78 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/broodstone/polished_broodstone", + "side": "antarchy:block/broodstone/polished_broodstone", + "top": "antarchy:block/broodstone/polished_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_slab_top.json new file mode 100644 index 00000000..ceb95562 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/broodstone/polished_broodstone", + "side": "antarchy:block/broodstone/polished_broodstone", + "top": "antarchy:block/broodstone/polished_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_stairs.json new file mode 100644 index 00000000..019f00b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/broodstone/polished_broodstone", + "side": "antarchy:block/broodstone/polished_broodstone", + "top": "antarchy:block/broodstone/polished_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_stairs_inner.json new file mode 100644 index 00000000..6f2c9a50 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/broodstone/polished_broodstone", + "side": "antarchy:block/broodstone/polished_broodstone", + "top": "antarchy:block/broodstone/polished_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_stairs_outer.json new file mode 100644 index 00000000..c18db6c3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/broodstone/polished_broodstone", + "side": "antarchy:block/broodstone/polished_broodstone", + "top": "antarchy:block/broodstone/polished_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_inventory.json new file mode 100644 index 00000000..17fdc24b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/broodstone/polished_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_post.json new file mode 100644 index 00000000..9a3eefa0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/broodstone/polished_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_side.json new file mode 100644 index 00000000..5fc981cc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/broodstone/polished_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_side_tall.json new file mode 100644 index 00000000..0a4206c3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_broodstone_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/broodstone/polished_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite.json new file mode 100644 index 00000000..9ec66591 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_button.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_button.json new file mode 100644 index 00000000..3e41553c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stone_button", + "textures": { + "texture": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_button_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_button_inventory.json new file mode 100644 index 00000000..6adeaaeb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stone_button_inventory", + "textures": { + "texture": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_button_pressed.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_button_pressed.json new file mode 100644 index 00000000..92ac7b73 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stone_button_pressed", + "textures": { + "texture": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_pressure_plate.json new file mode 100644 index 00000000..33d98943 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stone_pressure_plate", + "textures": { + "texture": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_pressure_plate_down.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_pressure_plate_down.json new file mode 100644 index 00000000..94e787b3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/stone_pressure_plate_down", + "textures": { + "texture": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_slab.json new file mode 100644 index 00000000..b75c949b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/polished_nyxite", + "side": "antarchy:block/polished_nyxite", + "top": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_slab_top.json new file mode 100644 index 00000000..056a5f57 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/polished_nyxite", + "side": "antarchy:block/polished_nyxite", + "top": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_stairs.json new file mode 100644 index 00000000..73de052b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/polished_nyxite", + "side": "antarchy:block/polished_nyxite", + "top": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_stairs_inner.json new file mode 100644 index 00000000..81450c7a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/polished_nyxite", + "side": "antarchy:block/polished_nyxite", + "top": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_stairs_outer.json new file mode 100644 index 00000000..adf0226f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/polished_nyxite", + "side": "antarchy:block/polished_nyxite", + "top": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_inventory.json new file mode 100644 index 00000000..03a24649 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_post.json new file mode 100644 index 00000000..9c58115f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_side.json new file mode 100644 index 00000000..87ddc5fd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_side_tall.json new file mode 100644 index 00000000..c2370e25 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_nyxite_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/polished_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone.json new file mode 100644 index 00000000..21712f8f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/shellstone/polished_shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_slab.json new file mode 100644 index 00000000..c974a013 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_slab.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/shellstone/polished_shellstone", + "side": "antarchy:block/shellstone/polished_shellstone", + "top": "antarchy:block/shellstone/polished_shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_slab_top.json new file mode 100644 index 00000000..5e388414 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_slab_top.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/shellstone/polished_shellstone", + "side": "antarchy:block/shellstone/polished_shellstone", + "top": "antarchy:block/shellstone/polished_shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_stairs.json new file mode 100644 index 00000000..754f7f6c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_stairs.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/shellstone/polished_shellstone", + "side": "antarchy:block/shellstone/polished_shellstone", + "top": "antarchy:block/shellstone/polished_shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_stairs_inner.json new file mode 100644 index 00000000..f47c51a0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_stairs_inner.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/polished_shellstone", + "side": "antarchy:block/shellstone/polished_shellstone", + "top": "antarchy:block/shellstone/polished_shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_stairs_outer.json new file mode 100644 index 00000000..0e1735e4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_stairs_outer.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/polished_shellstone", + "side": "antarchy:block/shellstone/polished_shellstone", + "top": "antarchy:block/shellstone/polished_shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_inventory.json new file mode 100644 index 00000000..10d53d53 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/shellstone/polished_shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_post.json new file mode 100644 index 00000000..e2273dd3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/shellstone/polished_shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_side.json new file mode 100644 index 00000000..4ee1d428 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/shellstone/polished_shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_side_tall.json new file mode 100644 index 00000000..c4f60b33 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/polished_shellstone_wall_side_tall.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/shellstone/polished_shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/potent_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potent_nyxite.json new file mode 100644 index 00000000..0498f802 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potent_nyxite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/potent_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_glowcap_mushroom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_glowcap_mushroom.json new file mode 100644 index 00000000..37a9978c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_glowcap_mushroom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "antarchy:block/glowcap_mushroom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_lotus.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_lotus.json new file mode 100644 index 00000000..d22bfa97 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_lotus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "antarchy:block/lotus" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_nadir_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_nadir_sapling.json new file mode 100644 index 00000000..2cf4f71a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_nadir_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "antarchy:block/nadir/nadir_sapling" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_ouranwood_acorn.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_ouranwood_acorn.json new file mode 100644 index 00000000..39679b37 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_ouranwood_acorn.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "antarchy:block/ouranwood/ouranwood_sapling_2" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_peach_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_peach_sapling.json new file mode 100644 index 00000000..ad52c649 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_peach_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "antarchy:block/peach/peach_sapling" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_spider_lily.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_spider_lily.json new file mode 100644 index 00000000..ac4ec554 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/potted_spider_lily.json @@ -0,0 +1,104 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "minecraft:block/flower_pot", + "flowerpot": "minecraft:block/flower_pot", + "dirt": "minecraft:block/dirt", + "stem": "antarchy:block/spider_lily_stem", + "flower": "antarchy:block/spider_lily_top" + }, + "elements": [ + { + "from": [5, 0, 5], + "to": [6, 6, 11], + "faces": { + "down": { "uv": [5, 5, 6, 11], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [5, 5, 6, 11], "texture": "#flowerpot" }, + "north": { "uv": [10, 10, 11, 16], "texture": "#flowerpot" }, + "south": { "uv": [5, 10, 6, 16], "texture": "#flowerpot" }, + "west": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" }, + "east": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" } + } + }, + { + "from": [10, 0, 5], + "to": [11, 6, 11], + "faces": { + "down": { "uv": [10, 5, 11, 11], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [10, 5, 11, 11], "texture": "#flowerpot" }, + "north": { "uv": [5, 10, 6, 16], "texture": "#flowerpot" }, + "south": { "uv": [10, 10, 11, 16], "texture": "#flowerpot" }, + "west": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" }, + "east": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 5], + "to": [10, 6, 6], + "faces": { + "down": { "uv": [6, 10, 10, 11], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [6, 5, 10, 6], "texture": "#flowerpot" }, + "north": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" }, + "south": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 10], + "to": [10, 6, 11], + "faces": { + "down": { "uv": [6, 5, 10, 6], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [6, 10, 10, 11], "texture": "#flowerpot" }, + "north": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" }, + "south": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 6], + "to": [10, 4, 10], + "faces": { + "down": { "uv": [6, 12, 10, 16], "texture": "#flowerpot", "cullface": "down" }, + "up": { "uv": [6, 6, 10, 10], "texture": "#dirt" } + } + }, + { + "from": [2.6, 4, 8], + "to": [13.4, 16, 8], + "rotation": { "origin": [8, 8, 8], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [8, 4, 2.6], + "to": [8, 16, 13.4], + "rotation": { "origin": [8, 8, 8], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [2.6, 4, 8], + "to": [13.4, 16, 8], + "rotation": { "origin": [8, 8, 8], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#flower" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#flower" } + } + }, + { + "from": [8, 4, 2.6], + "to": [8, 16, 13.4], + "rotation": { "origin": [8, 8, 8], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#flower" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#flower" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/rainbow_ant_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/rainbow_ant_nest.json new file mode 100644 index 00000000..a48c94b0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/rainbow_ant_nest.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "antarchy:block/rainbow_ant_nest/rainbow_ant_nest", + "down": "minecraft:block/coarse_dirt", + "up": "antarchy:block/rainbow_ant_nest/rainbow_ant_nest_top", + "north": "antarchy:block/rainbow_ant_nest/rainbow_ant_nest", + "south": "antarchy:block/rainbow_ant_nest/rainbow_ant_nest", + "west": "antarchy:block/rainbow_ant_nest/rainbow_ant_nest", + "east": "antarchy:block/rainbow_ant_nest/rainbow_ant_nest" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/raw_titanium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/raw_titanium_block.json new file mode 100644 index 00000000..0e9386f5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/raw_titanium_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/titanium/raw_titanium_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/raw_uranium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/raw_uranium_block.json new file mode 100644 index 00000000..741fa759 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/raw_uranium_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/uranium/raw_uranium_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/red_ant_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/red_ant_nest.json new file mode 100644 index 00000000..178432bd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/red_ant_nest.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "antarchy:block/red_ant_nest/red_ant_nest_side", + "down": "minecraft:block/magma", + "up": "antarchy:block/red_ant_nest/red_ant_nest_top", + "north": "antarchy:block/red_ant_nest/red_ant_nest_side", + "south": "antarchy:block/red_ant_nest/red_ant_nest_side", + "west": "antarchy:block/red_ant_nest/red_ant_nest_side", + "east": "antarchy:block/red_ant_nest/red_ant_nest_side" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/roseate_froglight.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/roseate_froglight.json new file mode 100644 index 00000000..116f3137 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/roseate_froglight.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "antarchy:block/roseate_froglight_side", + "top": "antarchy:block/roseate_froglight_top", + "side": "antarchy:block/roseate_froglight_side" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/seashell.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/seashell.json new file mode 100644 index 00000000..a92a0408 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/seashell.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/seashell" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/seashell_item.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/seashell_item.json new file mode 100644 index 00000000..07251b47 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/seashell_item.json @@ -0,0 +1,179 @@ +{ + "format_version": "1.21.11", + "parent": "minecraft:block/block", + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "antarchy:block/seashell", + "particle": "antarchy:block/seashell" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [15, 2, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, + "faces": { + "north": {"uv": [3.5, 3.5, 7, 4], "texture": "#0"}, + "east": {"uv": [0, 3.5, 3.5, 4], "texture": "#0"}, + "south": {"uv": [10.5, 3.5, 14, 4], "texture": "#0"}, + "west": {"uv": [7, 3.5, 10.5, 4], "texture": "#0"}, + "up": {"uv": [7, 3.5, 3.5, 0], "texture": "#0"}, + "down": {"uv": [10.5, 0, 7, 3.5], "texture": "#0"} + } + }, + { + "from": [1, 2, 1], + "to": [15, 3, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [3.5, 0.25, 7, 0.5], "texture": "#0"}, + "east": {"uv": [3.25, 0.25, 3.5, 0.5], "texture": "#0"}, + "south": {"uv": [7.25, 0.25, 10.75, 0.5], "texture": "#0"}, + "west": {"uv": [7, 0.25, 7.25, 0.5], "texture": "#0"}, + "up": {"uv": [7, 0.25, 3.5, 0], "texture": "#0"}, + "down": {"uv": [10.5, 0, 7, 0.25], "texture": "#0"} + } + }, + { + "from": [14, 2, 2], + "to": [15, 3, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 9]}, + "faces": { + "north": {"uv": [3.25, 3.25, 3.5, 3.5], "texture": "#0"}, + "east": {"uv": [0.25, 3.25, 3.25, 3.5], "texture": "#0"}, + "south": {"uv": [6.5, 3.25, 6.75, 3.5], "texture": "#0"}, + "west": {"uv": [3.5, 3.25, 6.5, 3.5], "texture": "#0"}, + "up": {"uv": [3.5, 3.25, 3.25, 0.25], "texture": "#0"}, + "down": {"uv": [3.75, 0.25, 3.5, 3.25], "texture": "#0"} + } + }, + { + "from": [1, 2, 2], + "to": [2, 3, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 1, 9]}, + "faces": { + "north": {"uv": [3.25, 3.25, 3.5, 3.5], "texture": "#0"}, + "east": {"uv": [0.25, 3.25, 3.25, 3.5], "texture": "#0"}, + "south": {"uv": [6.5, 3.25, 6.75, 3.5], "texture": "#0"}, + "west": {"uv": [3.5, 3.25, 6.5, 3.5], "texture": "#0"}, + "up": {"uv": [3.5, 3.25, 3.25, 0.25], "texture": "#0"}, + "down": {"uv": [3.75, 0.25, 3.5, 3.25], "texture": "#0"} + } + }, + { + "from": [1, 2, 14], + "to": [15, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 21]}, + "faces": { + "north": {"uv": [3.5, 0.25, 7, 0.5], "texture": "#0"}, + "east": {"uv": [3.25, 0.25, 3.5, 0.5], "texture": "#0"}, + "south": {"uv": [7.25, 0.25, 10.75, 0.5], "texture": "#0"}, + "west": {"uv": [7, 0.25, 7.25, 0.5], "texture": "#0"}, + "up": {"uv": [7, 0.25, 3.5, 0], "texture": "#0"}, + "down": {"uv": [10.5, 0, 7, 0.25], "texture": "#0"} + } + }, + { + "from": [5.99, 1.49, 14.99], + "to": [10.01, 3.51, 16.01], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 2.5, 16]}, + "faces": { + "north": {"uv": [0.5, 8.5, 1.5, 9], "texture": "#0"}, + "east": {"uv": [0.25, 8.5, 0.5, 9], "texture": "#0"}, + "south": {"uv": [1.75, 8.5, 2.75, 9], "texture": "#0"}, + "west": {"uv": [1.5, 8.5, 1.75, 9], "texture": "#0"}, + "up": {"uv": [1.5, 8.5, 0.5, 8.25], "texture": "#0"}, + "down": {"uv": [2.5, 8.25, 1.5, 8.5], "texture": "#0"} + } + }, + { + "from": [0.99, 3.49, 0.99], + "to": [15.01, 4.51, 15.01], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 2.5, 15]}, + "faces": { + "north": {"uv": [3.5, 7.75, 7, 8], "texture": "#0"}, + "east": {"uv": [0, 7.75, 3.5, 8], "texture": "#0"}, + "south": {"uv": [10.5, 7.75, 14, 8], "texture": "#0"}, + "west": {"uv": [7, 7.75, 10.5, 8], "texture": "#0"}, + "up": {"uv": [7, 7.75, 3.5, 4.25], "texture": "#0"}, + "down": {"uv": [10.5, 4.25, 7, 7.75], "texture": "#0"} + } + }, + { + "from": [0.99, 2.49, 13.99], + "to": [15.01, 3.51, 15.01], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1.5, 21]}, + "faces": { + "north": {"uv": [3.5, 0.25, 7, 0.5], "texture": "#0"}, + "east": {"uv": [3.25, 0.25, 3.5, 0.5], "texture": "#0"}, + "south": {"uv": [7.25, 0.25, 10.75, 0.5], "texture": "#0"}, + "west": {"uv": [7, 0.25, 7.25, 0.5], "texture": "#0"}, + "up": {"uv": [7, 0.25, 3.5, 0], "texture": "#0"}, + "down": {"uv": [10.5, 0, 7, 0.25], "texture": "#0"} + } + }, + { + "from": [0.99, 2.49, 1.99], + "to": [2.01, 3.51, 14.01], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 1.5, 9]}, + "faces": { + "north": {"uv": [3.25, 3.25, 3.5, 3.5], "texture": "#0"}, + "east": {"uv": [0.25, 3.25, 3.25, 3.5], "texture": "#0"}, + "south": {"uv": [6.5, 3.25, 6.75, 3.5], "texture": "#0"}, + "west": {"uv": [3.5, 3.25, 6.5, 3.5], "texture": "#0"}, + "up": {"uv": [3.5, 3.25, 3.25, 0.25], "texture": "#0"}, + "down": {"uv": [3.75, 0.25, 3.5, 3.25], "texture": "#0"} + } + }, + { + "from": [0.99, 2.49, 0.99], + "to": [15.01, 3.51, 2.01], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1.5, 8]}, + "faces": { + "north": {"uv": [3.5, 0.25, 7, 0.5], "texture": "#0"}, + "east": {"uv": [3.25, 0.25, 3.5, 0.5], "texture": "#0"}, + "south": {"uv": [7.25, 0.25, 10.75, 0.5], "texture": "#0"}, + "west": {"uv": [7, 0.25, 7.25, 0.5], "texture": "#0"}, + "up": {"uv": [7, 0.25, 3.5, 0], "texture": "#0"}, + "down": {"uv": [10.5, 0, 7, 0.25], "texture": "#0"} + } + }, + { + "from": [13.99, 2.49, 1.99], + "to": [15.01, 3.51, 14.01], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1.5, 9]}, + "faces": { + "north": {"uv": [3.25, 3.25, 3.5, 3.5], "texture": "#0"}, + "east": {"uv": [0.25, 3.25, 3.25, 3.5], "texture": "#0"}, + "south": {"uv": [6.5, 3.25, 6.75, 3.5], "texture": "#0"}, + "west": {"uv": [3.5, 3.25, 6.5, 3.5], "texture": "#0"}, + "up": {"uv": [3.5, 3.25, 3.25, 0.25], "texture": "#0"}, + "down": {"uv": [3.75, 0.25, 3.5, 3.25], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "seashell", + "origin": [8, 0, 8], + "scope": 0, + "color": 0, + "children": [ + { + "name": "lower", + "origin": [8, 0, 8], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "upper_moving", + "origin": [8, 2.5, 15], + "scope": 0, + "color": 0, + "children": [5, 6, 7, 8, 9, 10] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone.json new file mode 100644 index 00000000..655cc77a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/shellstone/shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_slab.json new file mode 100644 index 00000000..45e1115b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_slab.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/shellstone/shellstone_bricks", + "side": "antarchy:block/shellstone/shellstone_bricks", + "top": "antarchy:block/shellstone/shellstone_bricks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_slab_top.json new file mode 100644 index 00000000..79747e4e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_slab_top.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/shellstone/shellstone_bricks", + "side": "antarchy:block/shellstone/shellstone_bricks", + "top": "antarchy:block/shellstone/shellstone_bricks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_stairs.json new file mode 100644 index 00000000..b8fb8223 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_stairs.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/shellstone/shellstone_bricks", + "side": "antarchy:block/shellstone/shellstone_bricks", + "top": "antarchy:block/shellstone/shellstone_bricks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_stairs_inner.json new file mode 100644 index 00000000..41d2aa82 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_stairs_inner.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/shellstone_bricks", + "side": "antarchy:block/shellstone/shellstone_bricks", + "top": "antarchy:block/shellstone/shellstone_bricks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_stairs_outer.json new file mode 100644 index 00000000..8deb9266 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_stairs_outer.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/shellstone_bricks", + "side": "antarchy:block/shellstone/shellstone_bricks", + "top": "antarchy:block/shellstone/shellstone_bricks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_inventory.json new file mode 100644 index 00000000..2cf2aa35 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/shellstone/shellstone_bricks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_post.json new file mode 100644 index 00000000..079118fc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/shellstone/shellstone_bricks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_side.json new file mode 100644 index 00000000..41ba16ef --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/shellstone/shellstone_bricks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_side_tall.json new file mode 100644 index 00000000..55362e08 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_brick_wall_side_tall.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/shellstone/shellstone_bricks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_bricks.json new file mode 100644 index 00000000..b9273f08 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_bricks.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/shellstone/shellstone_bricks" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_pillar.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_pillar.json new file mode 100644 index 00000000..c4992307 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_pillar.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/shellstone/shellstone_pillar_top", + "side": "antarchy:block/shellstone/shellstone_pillar" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_slab.json new file mode 100644 index 00000000..f66b1574 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_slab.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/shellstone/shellstone", + "side": "antarchy:block/shellstone/shellstone", + "top": "antarchy:block/shellstone/shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_slab_top.json new file mode 100644 index 00000000..2ef11a12 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_slab_top.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/shellstone/shellstone", + "side": "antarchy:block/shellstone/shellstone", + "top": "antarchy:block/shellstone/shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_stairs.json new file mode 100644 index 00000000..7b855e7e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_stairs.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/shellstone/shellstone", + "side": "antarchy:block/shellstone/shellstone", + "top": "antarchy:block/shellstone/shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_stairs_inner.json new file mode 100644 index 00000000..51fd391f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_stairs_inner.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/shellstone", + "side": "antarchy:block/shellstone/shellstone", + "top": "antarchy:block/shellstone/shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_stairs_outer.json new file mode 100644 index 00000000..1263e29b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_stairs_outer.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/shellstone", + "side": "antarchy:block/shellstone/shellstone", + "top": "antarchy:block/shellstone/shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_inventory.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_inventory.json new file mode 100644 index 00000000..e4e1b6c0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/shellstone/shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_post.json new file mode 100644 index 00000000..25756c47 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/shellstone/shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_side.json new file mode 100644 index 00000000..8732d77b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/shellstone/shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_side_tall.json new file mode 100644 index 00000000..163d909f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/shellstone_wall_side_tall.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/shellstone/shellstone" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_1.json new file mode 100644 index 00000000..106515c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/bed_bug_egg_slightly_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_2.json new file mode 100644 index 00000000..18be8a68 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/bed_bug_egg_slightly_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_3.json new file mode 100644 index 00000000..94b5cf0a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/bed_bug_egg_slightly_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_4.json new file mode 100644 index 00000000..22bf085e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_bed_bug_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/bed_bug_egg_slightly_cracked", + "particle": "antarchy:block/bed_bug_egg_slightly_cracked" + } +} 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 new file mode 100644 index 00000000..20b6a8ae --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..cbfa51e2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..03be473f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..a3863d21 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..7c3dc843 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_1.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..5e296fad --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_2.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..7f1c780e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_3.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..884cc982 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_4.json @@ -0,0 +1,7 @@ +{ + "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/small_blood_crystal_bud.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/small_blood_crystal_bud.json new file mode 100644 index 00000000..d09e7079 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/small_blood_crystal_bud.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/blood_crystal_bud_stage0" + } +} + + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone.json new file mode 100644 index 00000000..6db80a35 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_slab.json new file mode 100644 index 00000000..45ebaa10 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/dream_sandstone_top", + "side": "antarchy:block/dream_sandstone_top", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_slab_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_slab_top.json new file mode 100644 index 00000000..118ff1c9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/dream_sandstone_top", + "side": "antarchy:block/dream_sandstone_top", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_stairs.json new file mode 100644 index 00000000..1a4221fe --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/dream_sandstone_top", + "side": "antarchy:block/dream_sandstone_top", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_stairs_inner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_stairs_inner.json new file mode 100644 index 00000000..5fd1d91c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/dream_sandstone_top", + "side": "antarchy:block/dream_sandstone_top", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_stairs_outer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_stairs_outer.json new file mode 100644 index 00000000..515dc0d5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/smooth_dream_sandstone_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/dream_sandstone_top", + "side": "antarchy:block/dream_sandstone_top", + "top": "antarchy:block/dream_sandstone_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/spider_lily.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/spider_lily.json new file mode 100644 index 00000000..48d63092 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/spider_lily.json @@ -0,0 +1,46 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/spider_lily_top", + "stem": "antarchy:block/spider_lily_stem", + "flower": "antarchy:block/spider_lily_top" + }, + "elements": [ + { + "from": [0.8, 0, 8], + "to": [15.2, 16, 8], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [16, 0, 0, 16], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [8, 0, 0.8], + "to": [8, 16, 15.2], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [16, 0, 0, 16], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [0.8, 0, 8], + "to": [15.2, 16, 8], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#flower" }, + "south": { "uv": [16, 0, 0, 16], "texture": "#flower" } + } + }, + { + "from": [8, 0, 0.8], + "to": [8, 16, 15.2], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#flower" }, + "east": { "uv": [16, 0, 0, 16], "texture": "#flower" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/spit_bug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/spit_bug_egg.json new file mode 100644 index 00000000..92ae529b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/spit_bug_egg.json @@ -0,0 +1,85 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "antarchy:block/spit_bug_egg", + "particle": "antarchy:block/spit_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/star_coral.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/star_coral.json new file mode 100644 index 00000000..e8c9751f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/star_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/star_coral/star_coral" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/star_coral_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/star_coral_block.json new file mode 100644 index 00000000..7285193c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/star_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/star_coral/star_coral_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/star_coral_fan.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/star_coral_fan.json new file mode 100644 index 00000000..f9921dbf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/star_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "antarchy:block/star_coral/star_coral_fan" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/star_coral_wall_fan.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/star_coral_wall_fan.json new file mode 100644 index 00000000..9db77296 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/star_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "antarchy:block/star_coral/star_coral_fan" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log.json new file mode 100644 index 00000000..d741caa2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_log", + "textures": { + "end": "antarchy:block/nadir/stripped_nadir_log_top", + "side": "antarchy:block/nadir/stripped_nadir_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log_horizontal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log_horizontal.json new file mode 100644 index 00000000..64be9139 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log_horizontal.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_log_horizontal", + "textures": { + "end": "antarchy:block/nadir/stripped_nadir_log_top", + "side": "antarchy:block/nadir/stripped_nadir_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_wood.json new file mode 100644 index 00000000..37668114 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_wood.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_wood", + "textures": { + "end": "antarchy:block/nadir/stripped_nadir_log", + "side": "antarchy:block/nadir/stripped_nadir_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_ouranwood_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_ouranwood_log.json new file mode 100644 index 00000000..af9e1090 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_ouranwood_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/stripped_jungle_log", + "textures": { + "end": "antarchy:block/ouranwood/stripped_ouranwood_log_top", + "side": "antarchy:block/ouranwood/stripped_ouranwood_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_ouranwood_log_horizontal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_ouranwood_log_horizontal.json new file mode 100644 index 00000000..8ad71fdb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_ouranwood_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/stripped_jungle_log_horizontal", + "textures": { + "end": "antarchy:block/ouranwood/stripped_ouranwood_log_top", + "side": "antarchy:block/ouranwood/stripped_ouranwood_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_ouranwood_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_ouranwood_wood.json new file mode 100644 index 00000000..7449b423 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_ouranwood_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/stripped_jungle_wood", + "textures": { + "end": "antarchy:block/ouranwood/stripped_ouranwood_log", + "side": "antarchy:block/ouranwood/stripped_ouranwood_log" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_peach_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_peach_log.json new file mode 100644 index 00000000..b0ade65e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_peach_log.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_log", + "textures": { + "end": "antarchy:block/peach/stripped_peach_log_top", + "side": "antarchy:block/peach/stripped_peach_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_peach_log_horizontal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_peach_log_horizontal.json new file mode 100644 index 00000000..98b68ebf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_peach_log_horizontal.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_log_horizontal", + "textures": { + "end": "antarchy:block/peach/stripped_peach_log_top", + "side": "antarchy:block/peach/stripped_peach_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_peach_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_peach_wood.json new file mode 100644 index 00000000..03406fca --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/stripped_peach_wood.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_wood", + "textures": { + "end": "antarchy:block/peach/stripped_peach_log", + "side": "antarchy:block/peach/stripped_peach_log" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/template_antimetal_rail_flat.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/template_antimetal_rail_flat.json new file mode 100644 index 00000000..67eddae9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/template_antimetal_rail_flat.json @@ -0,0 +1,14 @@ +{ + "ambientocclusion": false, + "textures": { "particle": "#rail" }, + "elements": [ + { + "from": [0, 15, 0], + "to": [16, 15, 16], + "faces": { + "down": { "uv": [0, 16, 16, 0], "texture": "#rail" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#rail" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/template_antimetal_rail_raised_ne.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/template_antimetal_rail_raised_ne.json new file mode 100644 index 00000000..a89efaa1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/template_antimetal_rail_raised_ne.json @@ -0,0 +1,20 @@ +{ + "ambientocclusion": false, + "textures": { "particle": "#rail" }, + "elements": [ + { + "from": [0, 7, 0], + "to": [16, 7, 16], + "rotation": { + "origin": [8, 7, 8], + "axis": "x", + "angle": 45, + "rescale": true + }, + "faces": { + "down": { "uv": [0, 16, 16, 0], "texture": "#rail" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#rail" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/template_antimetal_rail_raised_sw.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/template_antimetal_rail_raised_sw.json new file mode 100644 index 00000000..4e014807 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/template_antimetal_rail_raised_sw.json @@ -0,0 +1,20 @@ +{ + "ambientocclusion": false, + "textures": { "particle": "#rail" }, + "elements": [ + { + "from": [0, 7, 0], + "to": [16, 7, 16], + "rotation": { + "origin": [8, 7, 8], + "axis": "x", + "angle": -45, + "rescale": true + }, + "faces": { + "down": { "uv": [0, 16, 16, 0], "texture": "#rail" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#rail" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/termite_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/termite_nest.json new file mode 100644 index 00000000..3ae26d08 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/termite_nest.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "antarchy:block/termite_nest/termite_nest_side", + "down": "minecraft:block/rooted_dirt", + "up": "antarchy:block/termite_nest/termite_nest_top", + "north": "antarchy:block/termite_nest/termite_nest_side", + "south": "antarchy:block/termite_nest/termite_nest_side", + "west": "antarchy:block/termite_nest/termite_nest_side", + "east": "antarchy:block/termite_nest/termite_nest_side" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/thoraxis_portal_x.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/thoraxis_portal_x.json new file mode 100644 index 00000000..bdc9a94d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/thoraxis_portal_x.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/thoraxis_portal", + "particle": "antarchy:block/thoraxis_portal" + }, + "elements": [ + { + "from": [0, 0, 7.5], + "to": [16, 16, 8.5], + "faces": { + "north": { "texture": "#portal" }, + "south": { "texture": "#portal" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/thoraxis_portal_z.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/thoraxis_portal_z.json new file mode 100644 index 00000000..7e260fd7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/thoraxis_portal_z.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/thoraxis_portal", + "particle": "antarchy:block/thoraxis_portal" + }, + "elements": [ + { + "from": [7.5, 0, 0], + "to": [8.5, 16, 16], + "faces": { + "west": { "texture": "#portal" }, + "east": { "texture": "#portal" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_cap.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_cap.json new file mode 100644 index 00000000..159b628f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_cap.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_cap", + "textures": { + "bars": "antarchy:block/titanium/titanium_bars", + "edge": "antarchy:block/titanium/titanium_bars", + "particle": "antarchy:block/titanium/titanium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_cap_alt.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_cap_alt.json new file mode 100644 index 00000000..8aaad36e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_cap_alt.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_cap_alt", + "textures": { + "bars": "antarchy:block/titanium/titanium_bars", + "edge": "antarchy:block/titanium/titanium_bars", + "particle": "antarchy:block/titanium/titanium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_post.json new file mode 100644 index 00000000..209e0b8f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_post.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_post", + "textures": { + "bars": "antarchy:block/titanium/titanium_bars", + "edge": "antarchy:block/titanium/titanium_bars", + "particle": "antarchy:block/titanium/titanium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_post_ends.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_post_ends.json new file mode 100644 index 00000000..73f906e8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_post_ends.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_post_ends", + "textures": { + "bars": "antarchy:block/titanium/titanium_bars", + "edge": "antarchy:block/titanium/titanium_bars", + "particle": "antarchy:block/titanium/titanium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_side.json new file mode 100644 index 00000000..6dd94768 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_side.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_side", + "textures": { + "bars": "antarchy:block/titanium/titanium_bars", + "edge": "antarchy:block/titanium/titanium_bars", + "particle": "antarchy:block/titanium/titanium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_side_alt.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_side_alt.json new file mode 100644 index 00000000..effab662 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bars_side_alt.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_side_alt", + "textures": { + "bars": "antarchy:block/titanium/titanium_bars", + "edge": "antarchy:block/titanium/titanium_bars", + "particle": "antarchy:block/titanium/titanium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_block.json new file mode 100644 index 00000000..dbf9df5e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/titanium/titanium_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb.json new file mode 100644 index 00000000..f5cc892c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/titanium/titanium_bulb" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb_lit.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb_lit.json new file mode 100644 index 00000000..62b627b5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb_lit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/titanium/titanium_bulb_lit" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb_lit_powered.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb_lit_powered.json new file mode 100644 index 00000000..3080c7e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb_lit_powered.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/titanium/titanium_bulb_lit_powered" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb_powered.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb_powered.json new file mode 100644 index 00000000..53d6e70d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_bulb_powered.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/titanium/titanium_bulb_powered" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_left.json new file mode 100644 index 00000000..34c89261 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left", + "textures": { + "bottom": "antarchy:block/titanium/titanium_door_bottom", + "top": "antarchy:block/titanium/titanium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_left_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_left_open.json new file mode 100644 index 00000000..2a6489a0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left_open", + "textures": { + "bottom": "antarchy:block/titanium/titanium_door_bottom", + "top": "antarchy:block/titanium/titanium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_right.json new file mode 100644 index 00000000..e1e441ba --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right", + "textures": { + "bottom": "antarchy:block/titanium/titanium_door_bottom", + "top": "antarchy:block/titanium/titanium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_right_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_right_open.json new file mode 100644 index 00000000..f82ace17 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_bottom_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right_open", + "textures": { + "bottom": "antarchy:block/titanium/titanium_door_bottom", + "top": "antarchy:block/titanium/titanium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_left.json new file mode 100644 index 00000000..2ff36a4a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_left", + "textures": { + "bottom": "antarchy:block/titanium/titanium_door_bottom", + "top": "antarchy:block/titanium/titanium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_left_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_left_open.json new file mode 100644 index 00000000..1c110f59 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_left_open", + "textures": { + "bottom": "antarchy:block/titanium/titanium_door_bottom", + "top": "antarchy:block/titanium/titanium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_right.json new file mode 100644 index 00000000..977f13ff --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_right", + "textures": { + "bottom": "antarchy:block/titanium/titanium_door_bottom", + "top": "antarchy:block/titanium/titanium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_right_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_right_open.json new file mode 100644 index 00000000..9afdcc0d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_door_top_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_right_open", + "textures": { + "bottom": "antarchy:block/titanium/titanium_door_bottom", + "top": "antarchy:block/titanium/titanium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_ore.json new file mode 100644 index 00000000..32e65a27 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/titanium/titanium_ore" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_trapdoor_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_trapdoor_bottom.json new file mode 100644 index 00000000..9f4ad0dc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_bottom", + "textures": { + "texture": "antarchy:block/titanium/titanium_trapdoor" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_trapdoor_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_trapdoor_open.json new file mode 100644 index 00000000..3b405ba6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_open", + "textures": { + "texture": "antarchy:block/titanium/titanium_trapdoor" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_trapdoor_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_trapdoor_top.json new file mode 100644 index 00000000..a4173dbe --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/titanium_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_top", + "textures": { + "texture": "antarchy:block/titanium/titanium_trapdoor" + } +} 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 new file mode 100644 index 00000000..514540a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/triffid_goo_block.json @@ -0,0 +1,71 @@ +{ + "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/umbral_moss_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/umbral_moss_block.json new file mode 100644 index 00000000..cb1afbe3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/umbral_moss_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/umbral_moss/umbral_moss_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet.json new file mode 100644 index 00000000..81706524 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "antarchy:block/umbral_moss/umbral_moss_carpet" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_small.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_small.json new file mode 100644 index 00000000..7ab3586f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_small.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": true, + "textures": { + "particle": "#side", + "side": "antarchy:block/umbral_moss/umbral_moss_carpet_side_small" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 6, 0.1], + "shade": true, + "faces": { + "north": {"uv": [16, 0, 0, 6], "texture": "#side"}, + "south": {"uv": [0, 0, 16, 6], "texture": "#side"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_tall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_tall.json new file mode 100644 index 00000000..89b71d29 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_tall.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": true, + "textures": { + "particle": "#side", + "side": "antarchy:block/umbral_moss/umbral_moss_carpet_side_tall" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 16, 0.1], + "shade": true, + "faces": { + "north": {"uv": [16, 0, 0, 16], "texture": "#side"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#side"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper.json new file mode 100644 index 00000000..b9145cc2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper.json @@ -0,0 +1,126 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [64, 64], + "textures": { + "4": "antarchy:block/upper", + "particle": "antarchy:block/upper" + }, + "elements": [ + { + "from": [14, 11, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [8, 0, 7.5, 1.25], "texture": "#4", "cullface": "north"}, + "east": {"uv": [4, 0, 8, 1.25], "texture": "#4", "cullface": "east"}, + "south": {"uv": [4.5, 0, 4, 1.25], "texture": "#4", "cullface": "south"}, + "west": {"uv": [4, 0, 8, 1.25], "texture": "#4", "cullface": "up"}, + "up": {"uv": [4.5, 11, 4, 7], "texture": "#4", "cullface": "up"} + } + }, + { + "from": [0, 10, 0], + "to": [16, 11, 16], + "faces": { + "north": {"uv": [7.5, 5, 11.5, 5.25], "texture": "#4", "cullface": "north"}, + "east": {"uv": [7.5, 5, 11.5, 5.25], "texture": "#4", "cullface": "east"}, + "south": {"uv": [7.5, 5, 11.5, 5.25], "texture": "#4", "cullface": "south"}, + "west": {"uv": [7.5, 5, 11.5, 5.25], "texture": "#4", "cullface": "west"}, + "up": {"uv": [4, 4, 0, 0], "texture": "#4", "cullface": "up"}, + "down": {"uv": [4, 4, 0, 8], "texture": "#4"} + } + }, + { + "from": [0, 11, 0], + "to": [2, 16, 16], + "faces": { + "north": {"uv": [4.5, 0, 4, 1.25], "texture": "#4", "cullface": "north"}, + "east": {"uv": [4, 0, 8, 1.25], "texture": "#4", "cullface": "up"}, + "south": {"uv": [8, 1.25, 7.5, 0], "texture": "#4", "cullface": "south"}, + "west": {"uv": [4, 0, 8, 1.25], "texture": "#4", "cullface": "west"}, + "up": {"uv": [7.5, 8, 7, 4], "texture": "#4", "cullface": "up"} + } + }, + { + "from": [2, 11, 0], + "to": [14, 16, 2], + "faces": { + "north": {"uv": [7, 4.5, 4, 5.75], "texture": "#4", "cullface": "north"}, + "south": {"uv": [4, 4.5, 7, 5.75], "texture": "#4", "cullface": "up"}, + "up": {"uv": [10.5, 4.5, 7.5, 4], "texture": "#4", "cullface": "up"} + } + }, + { + "from": [2, 11, 14], + "to": [14, 16, 16], + "faces": { + "north": {"uv": [4, 4.5, 7, 5.75], "texture": "#4", "cullface": "up"}, + "south": {"uv": [7, 4.5, 4, 5.75], "texture": "#4", "cullface": "south"}, + "up": {"uv": [10.5, 5, 7.5, 4.5], "texture": "#4", "cullface": "up"} + } + }, + { + "from": [4, 4, 4], + "to": [12, 10, 12], + "faces": { + "north": {"uv": [6, 2.5, 8, 4], "texture": "#4"}, + "east": {"uv": [6, 2.5, 8, 4], "texture": "#4"}, + "south": {"uv": [6, 2.5, 8, 4], "texture": "#4"}, + "west": {"uv": [6, 2.5, 8, 4], "texture": "#4"}, + "down": {"uv": [6, 2.5, 4, 4.5], "texture": "#4"} + } + }, + { + "from": [6, 0, 6], + "to": [10, 4, 10], + "faces": { + "north": {"uv": [4.5, 7, 5.5, 8], "texture": "#4"}, + "east": {"uv": [4.5, 7, 5.5, 8], "texture": "#4"}, + "south": {"uv": [4.5, 7, 5.5, 8], "texture": "#4"}, + "west": {"uv": [4.5, 7, 5.5, 8], "texture": "#4"}, + "down": {"uv": [6.5, 7, 5.5, 8], "texture": "#4", "cullface": "down"} + } + } + ], + "display": { + "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], + "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": "group", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side.json new file mode 100644 index 00000000..34029065 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side.json @@ -0,0 +1,546 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [ + 64, + 64 + ], + "textures": { + "1": "antarchy:block/upper", + "particle": "antarchy:block/upper" + }, + "elements": [ + { + "from": [ + 0, + 5, + 0 + ], + "to": [ + 16, + 6, + 16 + ], + "faces": { + "north": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "west" + }, + "down": { + "uv": [ + 4, + 4, + 0, + 0 + ], + "texture": "#1", + "cullface": "down" + }, + "up": { + "uv": [ + 4, + 4, + 0, + 8 + ], + "rotation": 180, + "texture": "#1" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 2, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "south": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "down": { + "uv": [ + 4, + 11, + 4.5, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 14, + 0, + 0 + ], + "to": [ + 16, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 4.5, + 11, + 4, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 2, + 0, + 0 + ], + "to": [ + 14, + 5, + 2 + ], + "faces": { + "north": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "south": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 10.5, + 4.5, + 7.5, + 4 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 2, + 0, + 14 + ], + "to": [ + 14, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "south": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "down": { + "uv": [ + 10.5, + 5, + 7.5, + 4.5 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 4, + 6, + 4 + ], + "to": [ + 12, + 12, + 12 + ], + "faces": { + "north": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 2.5, + 6, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6, + 8, + 0 + ], + "to": [ + 10, + 12, + 4 + ], + "faces": { + "north": { + "uv": [ + 5.5, + 7, + 6.5, + 8 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 3.5, + 5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 5, + 9, + 4 + ], + "rotation": 90, + "texture": "#1" + } + } + } + ], + "display": { + "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 + ], + "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": "group", + "origin": [ + 0, + 0, + 0 + ], + "scope": 0, + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side_east.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side_east.json new file mode 100644 index 00000000..2a5c4017 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side_east.json @@ -0,0 +1,546 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [ + 64, + 64 + ], + "textures": { + "1": "antarchy:block/upper", + "particle": "antarchy:block/upper" + }, + "elements": [ + { + "from": [ + 0, + 5, + 0 + ], + "to": [ + 16, + 6, + 16 + ], + "faces": { + "east": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "north" + }, + "down": { + "uv": [ + 4, + 4, + 0, + 0 + ], + "texture": "#1", + "cullface": "down" + }, + "up": { + "uv": [ + 4, + 4, + 0, + 8 + ], + "rotation": 180, + "texture": "#1" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 5, + 2 + ], + "faces": { + "east": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "west": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "down": { + "uv": [ + 4, + 11, + 4.5, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 0, + 0, + 14 + ], + "to": [ + 16, + 5, + 16 + ], + "faces": { + "east": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 4.5, + 11, + 4, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 14, + 0, + 2 + ], + "to": [ + 16, + 5, + 14 + ], + "faces": { + "east": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "west": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 10.5, + 4.5, + 7.5, + 4 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 0, + 0, + 2 + ], + "to": [ + 2, + 5, + 14 + ], + "faces": { + "east": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "west": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "down": { + "uv": [ + 10.5, + 5, + 7.5, + 4.5 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 4, + 6, + 4 + ], + "to": [ + 12, + 12, + 12 + ], + "faces": { + "east": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "north": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 2.5, + 6, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 12, + 8, + 6 + ], + "to": [ + 16, + 12, + 10 + ], + "faces": { + "east": { + "uv": [ + 5.5, + 7, + 6.5, + 8 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "north": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 3.5, + 5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 5, + 9, + 4 + ], + "rotation": 90, + "texture": "#1" + } + } + } + ], + "display": { + "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 + ], + "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": "group", + "origin": [ + 0, + 0, + 0 + ], + "scope": 0, + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side_south.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side_south.json new file mode 100644 index 00000000..846e4cfa --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side_south.json @@ -0,0 +1,546 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [ + 64, + 64 + ], + "textures": { + "1": "antarchy:block/upper", + "particle": "antarchy:block/upper" + }, + "elements": [ + { + "from": [ + 0, + 5, + 0 + ], + "to": [ + 16, + 6, + 16 + ], + "faces": { + "south": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "east" + }, + "down": { + "uv": [ + 4, + 4, + 0, + 0 + ], + "texture": "#1", + "cullface": "down" + }, + "up": { + "uv": [ + 4, + 4, + 0, + 8 + ], + "rotation": 180, + "texture": "#1" + } + } + }, + { + "from": [ + 14, + 0, + 0 + ], + "to": [ + 16, + 5, + 16 + ], + "faces": { + "south": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "north": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "down": { + "uv": [ + 4, + 11, + 4.5, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 2, + 5, + 16 + ], + "faces": { + "south": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 4.5, + 11, + 4, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 2, + 0, + 14 + ], + "to": [ + 14, + 5, + 16 + ], + "faces": { + "south": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "north": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 10.5, + 4.5, + 7.5, + 4 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 2, + 0, + 0 + ], + "to": [ + 14, + 5, + 2 + ], + "faces": { + "south": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "north": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "down": { + "uv": [ + 10.5, + 5, + 7.5, + 4.5 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 4, + 6, + 4 + ], + "to": [ + 12, + 12, + 12 + ], + "faces": { + "south": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "north": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 2.5, + 6, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6, + 8, + 12 + ], + "to": [ + 10, + 12, + 16 + ], + "faces": { + "south": { + "uv": [ + 5.5, + 7, + 6.5, + 8 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 3.5, + 5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 5, + 9, + 4 + ], + "rotation": 90, + "texture": "#1" + } + } + } + ], + "display": { + "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 + ], + "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": "group", + "origin": [ + 0, + 0, + 0 + ], + "scope": 0, + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side_west.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side_west.json new file mode 100644 index 00000000..ac6e13e0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/upper_side_west.json @@ -0,0 +1,546 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [ + 64, + 64 + ], + "textures": { + "1": "antarchy:block/upper", + "particle": "antarchy:block/upper" + }, + "elements": [ + { + "from": [ + 0, + 5, + 0 + ], + "to": [ + 16, + 6, + 16 + ], + "faces": { + "west": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "south" + }, + "down": { + "uv": [ + 4, + 4, + 0, + 0 + ], + "texture": "#1", + "cullface": "down" + }, + "up": { + "uv": [ + 4, + 4, + 0, + 8 + ], + "rotation": 180, + "texture": "#1" + } + } + }, + { + "from": [ + 0, + 0, + 14 + ], + "to": [ + 16, + 5, + 16 + ], + "faces": { + "west": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "east": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "down": { + "uv": [ + 4, + 11, + 4.5, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 5, + 2 + ], + "faces": { + "west": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 4.5, + 11, + 4, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 0, + 0, + 2 + ], + "to": [ + 2, + 5, + 14 + ], + "faces": { + "west": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "east": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 10.5, + 4.5, + 7.5, + 4 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 14, + 0, + 2 + ], + "to": [ + 16, + 5, + 14 + ], + "faces": { + "west": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "east": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "down": { + "uv": [ + 10.5, + 5, + 7.5, + 4.5 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 4, + 6, + 4 + ], + "to": [ + 12, + 12, + 12 + ], + "faces": { + "west": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "north": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 2.5, + 6, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 0, + 8, + 6 + ], + "to": [ + 4, + 12, + 10 + ], + "faces": { + "west": { + "uv": [ + 5.5, + 7, + 6.5, + 8 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 3.5, + 5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 5, + 9, + 4 + ], + "rotation": 90, + "texture": "#1" + } + } + } + ], + "display": { + "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 + ], + "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": "group", + "origin": [ + 0, + 0, + 0 + ], + "scope": 0, + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_cap.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_cap.json new file mode 100644 index 00000000..496e78fd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_cap.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_cap", + "textures": { + "bars": "antarchy:block/uranium/uranium_bars", + "edge": "antarchy:block/uranium/uranium_bars", + "particle": "antarchy:block/uranium/uranium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_cap_alt.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_cap_alt.json new file mode 100644 index 00000000..2f7715c7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_cap_alt.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_cap_alt", + "textures": { + "bars": "antarchy:block/uranium/uranium_bars", + "edge": "antarchy:block/uranium/uranium_bars", + "particle": "antarchy:block/uranium/uranium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_post.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_post.json new file mode 100644 index 00000000..76d81070 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_post.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_post", + "textures": { + "bars": "antarchy:block/uranium/uranium_bars", + "edge": "antarchy:block/uranium/uranium_bars", + "particle": "antarchy:block/uranium/uranium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_post_ends.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_post_ends.json new file mode 100644 index 00000000..61474e07 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_post_ends.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_post_ends", + "textures": { + "bars": "antarchy:block/uranium/uranium_bars", + "edge": "antarchy:block/uranium/uranium_bars", + "particle": "antarchy:block/uranium/uranium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_side.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_side.json new file mode 100644 index 00000000..3f9eb6ae --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_side.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_side", + "textures": { + "bars": "antarchy:block/uranium/uranium_bars", + "edge": "antarchy:block/uranium/uranium_bars", + "particle": "antarchy:block/uranium/uranium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_side_alt.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_side_alt.json new file mode 100644 index 00000000..5483fd01 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bars_side_alt.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/iron_bars_side_alt", + "textures": { + "bars": "antarchy:block/uranium/uranium_bars", + "edge": "antarchy:block/uranium/uranium_bars", + "particle": "antarchy:block/uranium/uranium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_block.json new file mode 100644 index 00000000..c291e485 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/uranium/uranium_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb.json new file mode 100644 index 00000000..2d589a1d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/uranium/uranium_bulb" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb_lit.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb_lit.json new file mode 100644 index 00000000..7bf3f014 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb_lit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/uranium/uranium_bulb_lit" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb_lit_powered.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb_lit_powered.json new file mode 100644 index 00000000..d3c453cb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb_lit_powered.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/uranium/uranium_bulb_lit_powered" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb_powered.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb_powered.json new file mode 100644 index 00000000..33ffb62b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_bulb_powered.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/uranium/uranium_bulb_powered" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_left.json new file mode 100644 index 00000000..14ea5d43 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left", + "textures": { + "bottom": "antarchy:block/uranium/uranium_door_bottom", + "top": "antarchy:block/uranium/uranium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_left_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_left_open.json new file mode 100644 index 00000000..ff86e3b2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left_open", + "textures": { + "bottom": "antarchy:block/uranium/uranium_door_bottom", + "top": "antarchy:block/uranium/uranium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_right.json new file mode 100644 index 00000000..bddf23a4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right", + "textures": { + "bottom": "antarchy:block/uranium/uranium_door_bottom", + "top": "antarchy:block/uranium/uranium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_right_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_right_open.json new file mode 100644 index 00000000..8602489c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_bottom_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right_open", + "textures": { + "bottom": "antarchy:block/uranium/uranium_door_bottom", + "top": "antarchy:block/uranium/uranium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_left.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_left.json new file mode 100644 index 00000000..4049f25b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_left", + "textures": { + "bottom": "antarchy:block/uranium/uranium_door_bottom", + "top": "antarchy:block/uranium/uranium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_left_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_left_open.json new file mode 100644 index 00000000..7a1c43e4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_left_open", + "textures": { + "bottom": "antarchy:block/uranium/uranium_door_bottom", + "top": "antarchy:block/uranium/uranium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_right.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_right.json new file mode 100644 index 00000000..e78f84f1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_right", + "textures": { + "bottom": "antarchy:block/uranium/uranium_door_bottom", + "top": "antarchy:block/uranium/uranium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_right_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_right_open.json new file mode 100644 index 00000000..ef6dad63 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_door_top_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_door_top_right_open", + "textures": { + "bottom": "antarchy:block/uranium/uranium_door_bottom", + "top": "antarchy:block/uranium/uranium_door_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_ore.json new file mode 100644 index 00000000..f5442c95 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/uranium/uranium_ore" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_trapdoor_bottom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_trapdoor_bottom.json new file mode 100644 index 00000000..d88e0a20 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_bottom", + "textures": { + "texture": "antarchy:block/uranium/uranium_trapdoor" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_trapdoor_open.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_trapdoor_open.json new file mode 100644 index 00000000..431670f8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_open", + "textures": { + "texture": "antarchy:block/uranium/uranium_trapdoor" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_trapdoor_top.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_trapdoor_top.json new file mode 100644 index 00000000..ca9f0562 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/uranium_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_top", + "textures": { + "texture": "antarchy:block/uranium/uranium_trapdoor" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_1.json new file mode 100644 index 00000000..63a7cc48 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/bed_bug_egg_very_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_2.json new file mode 100644 index 00000000..932db7c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/bed_bug_egg_very_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_3.json new file mode 100644 index 00000000..bd9248a9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/bed_bug_egg_very_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_4.json new file mode 100644 index 00000000..4a9db1e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_bed_bug_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/bed_bug_egg_very_cracked", + "particle": "antarchy:block/bed_bug_egg_very_cracked" + } +} 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 new file mode 100644 index 00000000..4ccfd5ca --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..37334cc9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..824df80f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..71494d84 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..248b4d18 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_1.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..0ac42d62 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_2.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..40a9f01b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_3.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..c4e1dca5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_4.json @@ -0,0 +1,7 @@ +{ + "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/block/wasp_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/wasp_nest.json new file mode 100644 index 00000000..0fd16cdd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/wasp_nest.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "particle": "antarchy:block/wasp_nest/wasp_nest_side", + "front": "antarchy:block/wasp_nest/wasp_nest_front", + "side": "antarchy:block/wasp_nest/wasp_nest_side", + "top": "antarchy:block/wasp_nest/wasp_nest_top_bottom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/entity/krakens_grasp_entity.json b/common-1.20.1/src/main/resources/assets/antarchy/models/entity/krakens_grasp_entity.json new file mode 100644 index 00000000..2f22e2e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/entity/krakens_grasp_entity.json @@ -0,0 +1,239 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "antarchy:item/krakens_grasp/krakens_grasp", + "particle": "antarchy:item/krakens_grasp/krakens_grasp" + }, + "elements": [ + { + "from": [7.5, -8, 7.5], + "to": [8.5, 23, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [7, -8, 7]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 15.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0.5, 15.5], "texture": "#0"}, + "south": {"uv": [0, 0, 0.5, 15.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0.5, 15.5], "texture": "#0"}, + "up": {"uv": [0, 0, 0.5, 15.5], "texture": "#0"}, + "down": {"uv": [0, 15, 0.5, 15.5], "texture": "#0"} + } + }, + { + "from": [7.2, -7, 7.2], + "to": [8.8, 24, 8.8], + "rotation": {"angle": 0, "axis": "y", "origin": [7, -7, 7]}, + "faces": { + "north": {"uv": [14, 0, 15, 15.5], "texture": "#0"}, + "east": {"uv": [11, 0, 12, 15.5], "texture": "#0"}, + "south": {"uv": [13, 0.5, 14, 16], "texture": "#0"}, + "west": {"uv": [15, 0, 16, 15.5], "texture": "#0"}, + "up": {"uv": [12, 0, 13, 15.5], "texture": "#0"} + } + }, + { + "from": [9.825, 25.2, 7.5], + "to": [10.825, 29.2, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [9.325, -2.8, 7]}, + "faces": { + "north": {"uv": [5, 6, 5.5, 8], "texture": "#0"}, + "east": {"uv": [6, 5, 6.5, 7], "texture": "#0"}, + "south": {"uv": [5.5, 6, 6, 8], "texture": "#0"}, + "west": {"uv": [6.5, 0, 7, 2], "texture": "#0"}, + "up": {"uv": [8.5, 3.5, 8, 3], "texture": "#0"}, + "down": {"uv": [8.5, 3.5, 8, 4], "texture": "#0"} + } + }, + { + "from": [5.175, 25.2, 7.5], + "to": [6.175, 29.2, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [4.675, -2.8, 7]}, + "faces": { + "north": {"uv": [6.5, 2, 7, 4], "texture": "#0"}, + "east": {"uv": [6.5, 4, 7, 6], "texture": "#0"}, + "south": {"uv": [6.5, 6, 7, 8], "texture": "#0"}, + "west": {"uv": [7, 0, 7.5, 2], "texture": "#0"}, + "up": {"uv": [8.5, 4.5, 8, 4], "texture": "#0"}, + "down": {"uv": [8.5, 4.5, 8, 5], "texture": "#0"} + } + }, + { + "from": [7.3, 25.2, 7.5], + "to": [8.7, 30.2, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.8, -2.8, 7]}, + "faces": { + "north": {"uv": [6, 0, 6.5, 2.5], "texture": "#0"}, + "east": {"uv": [6, 2.5, 6.5, 5], "texture": "#0"}, + "south": {"uv": [4, 6, 4.5, 8.5], "texture": "#0"}, + "west": {"uv": [4.5, 6, 5, 8.5], "texture": "#0"}, + "up": {"uv": [5.5, 8.5, 5, 8], "texture": "#0"}, + "down": {"uv": [8.5, 5, 8, 5.5], "texture": "#0"} + } + }, + { + "from": [6.5, 23, 7], + "to": [7.5, 25, 9], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 24.5, 8.5]}, + "faces": { + "north": {"uv": [6, 7, 6.5, 8], "texture": "#0"}, + "east": {"uv": [7, 2, 8, 3], "texture": "#0"}, + "south": {"uv": [7.5, 0, 8, 1], "texture": "#0"}, + "west": {"uv": [7, 3, 8, 4], "texture": "#0"}, + "up": {"uv": [8, 2, 7.5, 1], "texture": "#0"}, + "down": {"uv": [8.5, 0, 8, 1], "texture": "#0"} + } + }, + { + "from": [5.5, 23, 7.5], + "to": [6.5, 24, 8.5], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 24.5, 8]}, + "faces": { + "north": {"uv": [5.5, 8, 6, 8.5], "texture": "#0"}, + "east": {"uv": [8, 5.5, 8.5, 6], "texture": "#0"}, + "south": {"uv": [6, 8, 6.5, 8.5], "texture": "#0"}, + "west": {"uv": [8, 6, 8.5, 6.5], "texture": "#0"}, + "up": {"uv": [7, 8.5, 6.5, 8], "texture": "#0"}, + "down": {"uv": [8.5, 6.5, 8, 7], "texture": "#0"} + } + }, + { + "from": [5.505, 27.005, 7.505], + "to": [6.495, 27.995, 8.495], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 28.5, 8]}, + "faces": { + "north": {"uv": [7, 8, 7.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 7, 8.5, 7.5], "texture": "#0"}, + "south": {"uv": [7.5, 8, 8, 8.5], "texture": "#0"}, + "west": {"uv": [8, 7.5, 8.5, 8], "texture": "#0"}, + "up": {"uv": [8.5, 8.5, 8, 8], "texture": "#0"}, + "down": {"uv": [9, 0, 8.5, 0.5], "texture": "#0"} + } + }, + { + "from": [8.5, 26, 7.5], + "to": [9.5, 27, 8.5], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 24.5, 8]}, + "faces": { + "north": {"uv": [8.5, 0.5, 9, 1], "texture": "#0"}, + "east": {"uv": [8.5, 1, 9, 1.5], "texture": "#0"}, + "south": {"uv": [8.5, 1.5, 9, 2], "texture": "#0"}, + "west": {"uv": [8.5, 2, 9, 2.5], "texture": "#0"}, + "up": {"uv": [9, 3, 8.5, 2.5], "texture": "#0"}, + "down": {"uv": [9, 3, 8.5, 3.5], "texture": "#0"} + } + }, + { + "from": [8.505, 30.005, 7.505], + "to": [9.495, 30.995, 8.495], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 28.5, 8]}, + "faces": { + "north": {"uv": [8.5, 3.5, 9, 4], "texture": "#0"}, + "east": {"uv": [4, 8.5, 4.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 4, 9, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 8.5, 5, 9], "texture": "#0"}, + "up": {"uv": [9, 5, 8.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 8.5, 5, 9], "texture": "#0"} + } + }, + { + "from": [6.38, 31.005, 7.505], + "to": [7.37, 31.995, 8.495], + "rotation": {"angle": -45, "axis": "z", "origin": [5.875, 29.5, 8]}, + "faces": { + "north": {"uv": [8.5, 5, 9, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 8.5, 6, 9], "texture": "#0"}, + "south": {"uv": [8.5, 5.5, 9, 6], "texture": "#0"}, + "west": {"uv": [6, 8.5, 6.5, 9], "texture": "#0"}, + "up": {"uv": [9, 6.5, 8.5, 6], "texture": "#0"}, + "down": {"uv": [7, 8.5, 6.5, 9], "texture": "#0"} + } + }, + { + "from": [7.5, 23, 7], + "to": [9.5, 26, 9], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 24.5, 8.5]}, + "faces": { + "north": {"uv": [5, 0, 6, 1.5], "texture": "#0"}, + "east": {"uv": [5, 1.5, 6, 3], "texture": "#0"}, + "south": {"uv": [5, 3, 6, 4.5], "texture": "#0"}, + "west": {"uv": [5, 4.5, 6, 6], "texture": "#0"}, + "up": {"uv": [8, 7, 7, 6], "texture": "#0"}, + "down": {"uv": [8, 7, 7, 8], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, 90, 0], + "translation": [0, 0, 1] + }, + "thirdperson_lefthand": { + "rotation": [0, 90, 0] + }, + "firstperson_righthand": { + "rotation": [0, -85, 10], + "translation": [3, -1.5, 1.1], + "scale": [0.68, 0.68, 0.68] + }, + "firstperson_lefthand": { + "rotation": [0, -85, 10], + "translation": [3, -1.5, 1.1], + "scale": [0.68, 0.68, 0.68] + }, + "ground": { + "translation": [0, 2, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [0, 0, -45], + "translation": [-1.25, -1.25, 0], + "scale": [0.5, 0.5, 0.5] + }, + "fixed": { + "rotation": [-180, 0, -135], + "translation": [-1.5, -1.25, 0], + "scale": [0.6, 0.6, 0.6] + }, + "on_shelf": { + "rotation": [0, -180, 0], + "scale": [0.68, 0.68, 0.68] + } + }, + "groups": [ + { + "name": "trident", + "origin": [7, -8, 7], + "scope": 0, + "color": 0, + "children": [ + { + "name": "handle", + "origin": [7, -8, 7], + "scope": 0, + "color": 0, + "children": [ + 0, + { + "name": "tentacle", + "origin": [7, -8, 7], + "scope": 0, + "color": 0, + "children": [1] + }, + 2, + 3, + 4 + ] + }, + { + "name": "tip_base", + "origin": [5, -4, 7], + "scope": 0, + "color": 0, + "children": [5, 6, 7, 8, 9, 10, 11] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/alpha_mantis_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/alpha_mantis_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/alpha_mantis_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/amber_lichen.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/amber_lichen.json new file mode 100644 index 00000000..809509a9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/amber_lichen.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/amber_moss/amber_lichen" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/amber_moss_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/amber_moss_block.json new file mode 100644 index 00000000..7507fc94 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/amber_moss_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/amber_moss_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/amber_moss_carpet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/amber_moss_carpet.json new file mode 100644 index 00000000..900da03b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/amber_moss_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/amber_moss_carpet" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/antigravel.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antigravel.json new file mode 100644 index 00000000..cdb3a1ea --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antigravel.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/antigravel" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal.json new file mode 100644 index 00000000..a0ddfbbd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/antimetal" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_activator_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_activator_rail.json new file mode 100644 index 00000000..d8c28f40 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_activator_rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/antimetal/antimetal_activator_rail" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_detector_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_detector_rail.json new file mode 100644 index 00000000..3a168fb7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_detector_rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/antimetal/antimetal_detector_rail" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_powered_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_powered_rail.json new file mode 100644 index 00000000..7d9d71d7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_powered_rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/antimetal/antimetal_powered_rail" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_rail.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_rail.json new file mode 100644 index 00000000..eb6f0422 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_rail.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/antimetal/antimetal_rail" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_scaffolding.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_scaffolding.json new file mode 100644 index 00000000..0e265e9c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_scaffolding.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/antimetal_scaffolding_stable" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_slab.json new file mode 100644 index 00000000..25d79bc8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/antimetal_slab" +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_stairs.json new file mode 100644 index 00000000..1bc22b9e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antimetal_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/antimetal_stairs" +} \ No newline at end of file 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 new file mode 100644 index 00000000..fbc1ddec --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/antiwater_bucket" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/apple_cow_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/apple_cow_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/apple_cow_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} 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 new file mode 100644 index 00000000..b4e824ad --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/attitude_adjuster_gui" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster_gui.json new file mode 100644 index 00000000..7ff9524f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/attitude_adjuster/attitude_adjuster_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster_held.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster_held.json new file mode 100644 index 00000000..6ed12ce5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster_held.json @@ -0,0 +1,312 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "antarchy:item/attitude_adjuster/attitude_adjuster", + "particle": "antarchy:item/attitude_adjuster/attitude_adjuster" + }, + "elements": [ + { + "from": [7, -12, 7], + "to": [9, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, -16, 7]}, + "faces": { + "north": {"uv": [1.5, 6, 2, 13], "texture": "#0"}, + "east": {"uv": [1.5, 6, 2, 13], "texture": "#0"}, + "south": {"uv": [1.5, 6, 2, 13], "texture": "#0"}, + "west": {"uv": [1.5, 6, 2, 13], "texture": "#0"}, + "up": {"uv": [8, 5.5, 7.5, 5], "texture": "#0"}, + "down": {"uv": [8.5, 7, 8, 7.5], "texture": "#0"} + } + }, + { + "from": [6, 15, 5], + "to": [10, 25, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]}, + "faces": { + "north": {"uv": [3, 9, 4, 11.5], "texture": "#0"}, + "east": {"uv": [0, 6, 1.5, 8.5], "texture": "#0"}, + "south": {"uv": [4, 9, 3, 11.5], "texture": "#0"}, + "west": {"uv": [6, 0, 7.5, 2.5], "texture": "#0"}, + "up": {"uv": [6, 12.5, 5, 11], "texture": "#0"}, + "down": {"uv": [6, 11, 5, 12.5], "texture": "#0"} + } + }, + { + "from": [7, 25, 7], + "to": [9, 29, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]}, + "faces": { + "north": {"uv": [1, 8.5, 1.5, 9.5], "texture": "#0"}, + "east": {"uv": [1, 9.5, 1.5, 10.5], "texture": "#0"}, + "south": {"uv": [6, 9.5, 6.5, 10.5], "texture": "#0"}, + "west": {"uv": [1, 10.5, 1.5, 11.5], "texture": "#0"}, + "up": {"uv": [10, 7, 9.5, 6.5], "texture": "#0"}, + "down": {"uv": [10.5, 6.5, 10, 7], "texture": "#0"} + } + }, + { + "from": [6, -16, 6], + "to": [10, -12, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [7, -20, 7]}, + "faces": { + "north": {"uv": [4, 11.5, 5, 12.5], "texture": "#0"}, + "east": {"uv": [4, 11.5, 5, 12.5], "texture": "#0"}, + "south": {"uv": [4, 11.5, 5, 12.5], "texture": "#0"}, + "west": {"uv": [4, 11.5, 5, 12.5], "texture": "#0"}, + "up": {"uv": [5, 14.25, 4, 13.25], "texture": "#0"}, + "down": {"uv": [5, 13.25, 4, 14.25], "texture": "#0"} + } + }, + { + "from": [15, 22.8, 6], + "to": [26, 25.8, 10], + "rotation": {"angle": 22.5, "axis": "z", "origin": [18, 23.3, 8]}, + "faces": { + "north": {"uv": [9, 1, 11.75, 1.75], "texture": "#0"}, + "east": {"uv": [12.25, 2.75, 13.25, 3.5], "texture": "#0"}, + "south": {"uv": [8.5, 9, 11.25, 9.75], "texture": "#0"}, + "west": {"uv": [12.25, 3.5, 13.25, 4.25], "texture": "#0"}, + "up": {"uv": [11.25, 5, 8.5, 4], "texture": "#0"}, + "down": {"uv": [11.25, 7, 8.5, 8], "texture": "#0"} + } + }, + { + "from": [15, 14.05, 6], + "to": [22, 17.05, 10], + "rotation": {"angle": -22.5, "axis": "z", "origin": [18, 14.55, 8]}, + "faces": { + "north": {"uv": [11.25, 4.25, 13, 5], "texture": "#0"}, + "east": {"uv": [12.25, 5, 13.25, 5.75], "texture": "#0"}, + "south": {"uv": [6, 11.5, 7.75, 12.25], "texture": "#0"}, + "west": {"uv": [12.25, 5.75, 13.25, 6.5], "texture": "#0"}, + "up": {"uv": [7.75, 11.5, 6, 10.5], "texture": "#0"}, + "down": {"uv": [12.25, 9.75, 10.5, 10.75], "texture": "#0"} + } + }, + { + "from": [20, 17.05, 7], + "to": [22, 19.05, 9], + "rotation": {"angle": -22.5, "axis": "z", "origin": [18, 14.55, 8]}, + "faces": { + "north": {"uv": [10.5, 6.5, 11, 7], "texture": "#0"}, + "east": {"uv": [12.75, 1.5, 13.25, 2], "texture": "#0"}, + "south": {"uv": [12.75, 2, 13.25, 2.5], "texture": "#0"}, + "west": {"uv": [7.5, 12.75, 8, 13.25], "texture": "#0"}, + "up": {"uv": [8.5, 13.25, 8, 12.75], "texture": "#0"}, + "down": {"uv": [9, 12.75, 8.5, 13.25], "texture": "#0"} + } + }, + { + "from": [14, 14, 2], + "to": [18, 26, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 0, 7]}, + "faces": { + "north": {"uv": [3, 6, 4, 9], "texture": "#0"}, + "east": {"uv": [0, 3, 3, 6], "texture": "#0"}, + "south": {"uv": [4, 6, 3, 9], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "up": {"uv": [4, 6, 3, 9], "texture": "#0"}, + "down": {"uv": [3, 9, 4, 6], "texture": "#0"} + } + }, + { + "from": [10, 16, 5], + "to": [14, 24, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 0, 7]}, + "faces": { + "north": {"uv": [5, 9, 6, 11], "texture": "#0"}, + "east": {"uv": [6.5, 5.5, 8, 7.5], "texture": "#0"}, + "south": {"uv": [5, 9, 6, 11], "texture": "#0"}, + "west": {"uv": [7.5, 0, 9, 2], "texture": "#0"}, + "up": {"uv": [1, 13, 0, 11.5], "texture": "#0"}, + "down": {"uv": [1, 11.5, 0, 13], "texture": "#0"} + } + }, + { + "from": [20, 20.8, 7], + "to": [22, 22.8, 9], + "rotation": {"angle": 22.5, "axis": "z", "origin": [18, 23.3, 8]}, + "faces": { + "north": {"uv": [9, 12.75, 9.5, 13.25], "texture": "#0"}, + "east": {"uv": [9.5, 12.75, 10, 13.25], "texture": "#0"}, + "south": {"uv": [10, 12.75, 10.5, 13.25], "texture": "#0"}, + "west": {"uv": [10.5, 12.75, 11, 13.25], "texture": "#0"}, + "up": {"uv": [11.5, 13.25, 11, 12.75], "texture": "#0"}, + "down": {"uv": [12, 12.75, 11.5, 13.25], "texture": "#0"} + } + }, + { + "from": [24, 19.8, 6], + "to": [26, 22.8, 10], + "rotation": {"angle": 22.5, "axis": "z", "origin": [18, 23.3, 8]}, + "faces": { + "north": {"uv": [4, 12.5, 4.5, 13.25], "texture": "#0"}, + "east": {"uv": [6, 12.25, 7, 13], "texture": "#0"}, + "south": {"uv": [4.5, 12.5, 5, 13.25], "texture": "#0"}, + "west": {"uv": [12.25, 6.5, 13.25, 7.25], "texture": "#0"}, + "up": {"uv": [8.25, 11.5, 7.75, 10.5], "texture": "#0"}, + "down": {"uv": [1.5, 11.5, 1, 12.5], "texture": "#0"} + } + }, + { + "from": [-10, 22.8, 6], + "to": [1, 25.8, 10], + "rotation": {"angle": -22.5, "axis": "z", "origin": [-2, 23.3, 8]}, + "faces": { + "north": {"uv": [9.5, 5, 12.25, 5.75], "texture": "#0"}, + "east": {"uv": [12.25, 7.25, 13.25, 8], "texture": "#0"}, + "south": {"uv": [9.5, 5.75, 12.25, 6.5], "texture": "#0"}, + "west": {"uv": [12.25, 8, 13.25, 8.75], "texture": "#0"}, + "up": {"uv": [11.25, 9, 8.5, 8], "texture": "#0"}, + "down": {"uv": [11.75, 0, 9, 1], "texture": "#0"} + } + }, + { + "from": [-6, 14.05, 6], + "to": [1, 17.05, 10], + "rotation": {"angle": 22.5, "axis": "z", "origin": [-2, 14.55, 8]}, + "faces": { + "north": {"uv": [11.75, 0, 13.5, 0.75], "texture": "#0"}, + "east": {"uv": [12.25, 8.75, 13.25, 9.5], "texture": "#0"}, + "south": {"uv": [11.75, 0.75, 13.5, 1.5], "texture": "#0"}, + "west": {"uv": [12.25, 9.5, 13.25, 10.25], "texture": "#0"}, + "up": {"uv": [12.25, 11.75, 10.5, 10.75], "texture": "#0"}, + "down": {"uv": [12.75, 1.75, 11, 2.75], "texture": "#0"} + } + }, + { + "from": [-6, 17.05, 7], + "to": [-4, 19.05, 9], + "rotation": {"angle": 22.5, "axis": "z", "origin": [-2, 14.55, 8]}, + "faces": { + "north": {"uv": [12.75, 11.75, 13.25, 12.25], "texture": "#0"}, + "east": {"uv": [12, 12.75, 12.5, 13.25], "texture": "#0"}, + "south": {"uv": [12.75, 12.25, 13.25, 12.75], "texture": "#0"}, + "west": {"uv": [12.5, 12.75, 13, 13.25], "texture": "#0"}, + "up": {"uv": [0.5, 13.5, 0, 13], "texture": "#0"}, + "down": {"uv": [1, 13, 0.5, 13.5], "texture": "#0"} + } + }, + { + "from": [-2, 14, 2], + "to": [2, 26, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 7]}, + "faces": { + "north": {"uv": [4, 6, 3, 9], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "south": {"uv": [4, 6, 3, 9], "texture": "#0"}, + "west": {"uv": [0, 3, 3, 6], "texture": "#0"}, + "up": {"uv": [4, 6, 3, 9], "texture": "#0"}, + "down": {"uv": [3, 9, 4, 6], "texture": "#0"} + } + }, + { + "from": [2, 16, 5], + "to": [6, 24, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 0, 7]}, + "faces": { + "north": {"uv": [6, 9, 5, 11], "texture": "#0"}, + "east": {"uv": [8, 5, 9.5, 7], "texture": "#0"}, + "south": {"uv": [5, 9, 6, 11], "texture": "#0"}, + "west": {"uv": [8.5, 2, 10, 4], "texture": "#0"}, + "up": {"uv": [1, 13, 0, 11.5], "texture": "#0"}, + "down": {"uv": [1, 11.5, 0, 13], "texture": "#0"} + } + }, + { + "from": [-6, 20.8, 7], + "to": [-4, 22.8, 9], + "rotation": {"angle": -22.5, "axis": "z", "origin": [-2, 23.3, 8]}, + "faces": { + "north": {"uv": [1.5, 13, 2, 13.5], "texture": "#0"}, + "east": {"uv": [2, 13, 2.5, 13.5], "texture": "#0"}, + "south": {"uv": [2.5, 13, 3, 13.5], "texture": "#0"}, + "west": {"uv": [3, 13, 3.5, 13.5], "texture": "#0"}, + "up": {"uv": [4, 13.5, 3.5, 13], "texture": "#0"}, + "down": {"uv": [13.5, 4.25, 13, 4.75], "texture": "#0"} + } + }, + { + "from": [-10, 19.8, 6], + "to": [-8, 22.8, 10], + "rotation": {"angle": -22.5, "axis": "z", "origin": [-2, 23.3, 8]}, + "faces": { + "north": {"uv": [5, 12.5, 5.5, 13.25], "texture": "#0"}, + "east": {"uv": [12.25, 10.25, 13.25, 11], "texture": "#0"}, + "south": {"uv": [5.5, 12.5, 6, 13.25], "texture": "#0"}, + "west": {"uv": [12.25, 11, 13.25, 11.75], "texture": "#0"}, + "up": {"uv": [7.5, 13.25, 7, 12.25], "texture": "#0"}, + "down": {"uv": [1.5, 12.5, 1, 13.5], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, 90, 0], + "translation": [0, 8, 1], + "scale": [0.8, 0.8, 0.8] + }, + "thirdperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 8, 1], + "scale": [0.8, 0.8, 0.8] + }, + "firstperson_righthand": { + "rotation": [0, -90, 10], + "translation": [1.63, 3.2, 1.13], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "rotation": [0, -90, 10], + "translation": [1.63, 3.2, 1.13], + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [0, 0, -45], + "translation": [-1.25, -1.25, 0], + "scale": [0.3, 0.3, 0.3] + }, + "fixed": { + "rotation": [0, 0, 45], + "translation": [1.25, -1.25, 0], + "scale": [0.35, 0.35, 0.35] + }, + "on_shelf": { + "scale": [0.7, 0.7, 0.7] + } + }, + "groups": [ + { + "name": "attitude_adjuster", + "origin": [18, 23.5, 8], + "scope": 0, + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + { + "name": "group", + "origin": [18, 23.5, 8], + "scope": 0, + "color": 0, + "children": [4, 5, 6, 7, 8, 9, 10] + }, + { + "name": "group", + "origin": [-2, 23.5, 8], + "scope": 0, + "color": 0, + "children": [11, 12, 13, 14, 15, 16, 17] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/basilisk_dagger.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/basilisk_dagger.json new file mode 100644 index 00000000..f4f11059 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/basilisk_dagger.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "antarchy:item/basilisk_dagger" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/basilisk_fang.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/basilisk_fang.json new file mode 100644 index 00000000..830e441b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/basilisk_fang.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/basilisk_fang" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/basilisk_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/basilisk_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/basilisk_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} 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 new file mode 100644 index 00000000..20b3907e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/battle_axe_gui" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe_gui.json new file mode 100644 index 00000000..01714e10 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/battle_axe/battle_axe_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe_held.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe_held.json new file mode 100644 index 00000000..1c467d5f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe_held.json @@ -0,0 +1,131 @@ +{ + "parent": "builtin/entity", + "texture_size": [ + 64, + 64 + ], + "gui_light": "front", + "display": { + "thirdperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0, + 9, + 1.5 + ], + "scale": [ + 0.7, + 0.7, + 0.7 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0, + 9, + 1.5 + ], + "scale": [ + 0.7, + 0.7, + 0.7 + ] + }, + "firstperson_righthand": { + "rotation": [ + -5, + -90, + 0 + ], + "translation": [ + 3.13, + 1.13, + -2.13 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "firstperson_lefthand": { + "rotation": [ + -5, + -90, + 0 + ], + "translation": [ + 3.13, + 1.13, + -2.13 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "ground": { + "rotation": [ + 90, + 0, + 0 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "gui": { + "rotation": [ + 0, + 0, + -45 + ], + "translation": [ + -0.25, + -0.25, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 45 + ], + "translation": [ + 0.75, + -0.25, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "on_shelf": { + "scale": [ + 0.5, + 0.5, + 0.5 + ] + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bed_bug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bed_bug_egg.json new file mode 100644 index 00000000..ac981006 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bed_bug_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/bed_bug_egg_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bed_bug_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bed_bug_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bed_bug_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} 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 new file mode 100644 index 00000000..b32b7ec9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/big_bertha_gui" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_blade.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_blade.json new file mode 100644 index 00000000..5beec95a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_blade.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/big_bertha/big_bertha_blade" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_gui.json new file mode 100644 index 00000000..05aa85a1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/big_bertha/big_bertha_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_handle.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_handle.json new file mode 100644 index 00000000..34232b7d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/big_bertha/big_bertha_handle" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_held.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_held.json new file mode 100644 index 00000000..57840f2e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_held.json @@ -0,0 +1,128 @@ +{ + "parent": "builtin/entity", + "texture_size": [ + 64, + 64 + ], + "gui_light": "front", + "display": { + "thirdperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0, + 21.5, + 1.5 + ], + "scale": [ + 2, + 2, + 2 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + -90, + 0 + ], + "translation": [ + 0, + 21.5, + 1.5 + ], + "scale": [ + 2, + 2, + 2 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -90, + 5 + ], + "translation": [ + 1.25, + 6.25, + 1.5 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 90, + -5 + ], + "translation": [ + 1.25, + 6.25, + 1.5 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "ground": { + "rotation": [ + -90, + 0, + 0 + ], + "scale": [ + 2, + 2, + 2 + ] + }, + "gui": { + "rotation": [ + 0, + 0, + -45 + ] + }, + "head": { + "translation": [ + 0, + 45.25, + 0 + ], + "scale": [ + 2, + 2, + 2 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 45 + ], + "scale": [ + 2, + 2, + 2 + ] + }, + "on_shelf": { + "scale": [ + 2, + 2, + 2 + ] + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_hilt.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_hilt.json new file mode 100644 index 00000000..49f95b03 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha_hilt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/big_bertha/big_bertha_guard" + } +} 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 new file mode 100644 index 00000000..30a26675 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/bile_bucket" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bile_vein.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bile_vein.json new file mode 100644 index 00000000..1a1067eb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bile_vein.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/bile_vein" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/biomite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/biomite.json new file mode 100644 index 00000000..1888b89d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/biomite.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/biomite" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/biomite_turf.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/biomite_turf.json new file mode 100644 index 00000000..edcbca4d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/biomite_turf.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/biomite_turf" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/biowart.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/biowart.json new file mode 100644 index 00000000..621c5c9f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/biowart.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/biowart" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/biowart_tendrils.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/biowart_tendrils.json new file mode 100644 index 00000000..220471b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/biowart_tendrils.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/biowart_tendrils" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_apple.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_apple.json new file mode 100644 index 00000000..b922eb72 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_apple.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/blood_crystal_apple" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_block.json new file mode 100644 index 00000000..654c18ae --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_block.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/blood_crystal_block" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_boots.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_boots.json new file mode 100644 index 00000000..e5cd0407 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/blood_crystal/blood_crystal_boots" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_chestplate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_chestplate.json new file mode 100644 index 00000000..953c5b96 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/blood_crystal/blood_crystal_chestplate" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_cluster.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_cluster.json new file mode 100644 index 00000000..7f30ee87 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_cluster.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/blood_crystal_cluster" + }, + "display": { + "head": { + "translation": [0, 14, -5] + } + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_helmet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_helmet.json new file mode 100644 index 00000000..a7cf7c1d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/blood_crystal/blood_crystal_helmet" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_katana.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_katana.json new file mode 100644 index 00000000..bc43f307 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_katana.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "antarchy:item/blood_crystal_katana" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_leggings.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_leggings.json new file mode 100644 index 00000000..428b3697 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/blood_crystal/blood_crystal_leggings" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_shard.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_shard.json new file mode 100644 index 00000000..a364ff9a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blood_crystal_shard.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/blood_crystal_shard" + } +} + + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone.json new file mode 100644 index 00000000..b4e90930 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/bluestone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_block.json new file mode 100644 index 00000000..6735591f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/bluestone_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_comparator.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_comparator.json new file mode 100644 index 00000000..fb5709d3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_comparator.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/bluestone/bluestone_comparator" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_dust.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_dust.json new file mode 100644 index 00000000..b4e90930 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/bluestone" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_lamp.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_lamp.json new file mode 100644 index 00000000..c46117ed --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/bluestone_lamp" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_ore.json new file mode 100644 index 00000000..16df4f89 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/bluestone_ore" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_repeater.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_repeater.json new file mode 100644 index 00000000..ab8aeb9e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_repeater.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/bluestone/bluestone_repeater" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_torch.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_torch.json new file mode 100644 index 00000000..5dd84bd1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/bluestone/bluestone_torch" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_wire.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_wire.json new file mode 100644 index 00000000..f6cd0b71 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bluestone_wire.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/bluestone/bluestone_dust_dot" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blush_moss_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blush_moss_block.json new file mode 100644 index 00000000..2d078db7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blush_moss_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/blush_moss_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/blush_moss_carpet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blush_moss_carpet.json new file mode 100644 index 00000000..3a315ab2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/blush_moss_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/blush_moss_carpet" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/bomber_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bomber_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/bomber_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodfruit.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodfruit.json new file mode 100644 index 00000000..d9340b3d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodfruit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/broodfruit" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone.json new file mode 100644 index 00000000..c212825a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_brick_slab.json new file mode 100644 index 00000000..ad43db08 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone_brick_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_brick_stairs.json new file mode 100644 index 00000000..59053652 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone_brick_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_brick_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_brick_wall.json new file mode 100644 index 00000000..65ea684e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone_brick_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_bricks.json new file mode 100644 index 00000000..58155c3e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone_bricks" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_pillar.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_pillar.json new file mode 100644 index 00000000..27fdad5f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone_pillar" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_slab.json new file mode 100644 index 00000000..9d7098fd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_stairs.json new file mode 100644 index 00000000..541ee0f2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_titanium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_titanium_ore.json new file mode 100644 index 00000000..a790703b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_titanium_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone_titanium_ore" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_uranium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_uranium_ore.json new file mode 100644 index 00000000..2fbadcc7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_uranium_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone_uranium_ore" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_wall.json new file mode 100644 index 00000000..8af1645e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/broodstone_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/brown_ant_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/brown_ant_nest.json new file mode 100644 index 00000000..b77e47f5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/brown_ant_nest.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/brown_ant_nest" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/brown_ant_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/brown_ant_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/brown_ant_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/brutalfly_elytra.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/brutalfly_elytra.json new file mode 100644 index 00000000..68051c43 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/brutalfly_elytra.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/brutalfly_wings_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/brutalfly_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/brutalfly_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/brutalfly_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/brutalfly_wing.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/brutalfly_wing.json new file mode 100644 index 00000000..a5a7d507 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/brutalfly_wing.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/brutalfly_wing" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/budding_blood_crystal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/budding_blood_crystal.json new file mode 100644 index 00000000..715f42eb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/budding_blood_crystal.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/budding_blood_crystal" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/butterfly_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/butterfly_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/butterfly_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/camellia.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/camellia.json new file mode 100644 index 00000000..7bc819fc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/camellia.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/camellia_bush_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/caterpillar_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/caterpillar_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/caterpillar_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cheep.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cheep.json new file mode 100644 index 00000000..4429a18f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cheep.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/cheep" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cheep_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cheep_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cheep_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_broodstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_broodstone.json new file mode 100644 index 00000000..38aa107e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_broodstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/chiseled_broodstone" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_dream_sandstone.json new file mode 100644 index 00000000..7f89ae92 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_dream_sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/chiseled_dream_sandstone" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_nyxite.json new file mode 100644 index 00000000..06c286c8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_nyxite.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/chiseled_nyxite" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_shellstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_shellstone.json new file mode 100644 index 00000000..dc2b1ee7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_shellstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/chiseled_shellstone" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_titanium.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_titanium.json new file mode 100644 index 00000000..a8f9d04d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_titanium.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/chiseled_titanium" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_uranium.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_uranium.json new file mode 100644 index 00000000..d2a62995 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chiseled_uranium.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/chiseled_uranium" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/chitin.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chitin.json new file mode 100644 index 00000000..8c0fb56b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chitin.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/chitin" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/chitin_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chitin_block.json new file mode 100644 index 00000000..af0eb6ea --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chitin_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/chitin_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/chitin_spike.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chitin_spike.json new file mode 100644 index 00000000..0204bc60 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/chitin_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/chitin_spike" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_block.json new file mode 100644 index 00000000..18406638 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cloud_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_bucket.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_bucket.json new file mode 100644 index 00000000..f048ab2a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/cloud_bucket" + } +} 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 new file mode 100644 index 00000000..69ceebda --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_fin.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..bec6b015 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_fin_soup.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cloud_shark_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cooked_bug_meat.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cooked_bug_meat.json new file mode 100644 index 00000000..7e018698 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cooked_bug_meat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/cooked_bug_meat" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cooked_corndog.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cooked_corndog.json new file mode 100644 index 00000000..1cea5262 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cooked_corndog.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/cooked_corndog" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cooked_venison.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cooked_venison.json new file mode 100644 index 00000000..de553e83 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cooked_venison.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/cooked_venison" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/corn.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/corn.json new file mode 100644 index 00000000..c8ff373d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/corn.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/corn" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/corn_seeds.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/corn_seeds.json new file mode 100644 index 00000000..20bee2b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/corn_seeds.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/corn_seeds" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cornbread.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cornbread.json new file mode 100644 index 00000000..36a51af9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cornbread.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/cornbread" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cornea_ear.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cornea_ear.json new file mode 100644 index 00000000..4b0d548e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cornea_ear.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/cornea" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cracked_shellstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cracked_shellstone_bricks.json new file mode 100644 index 00000000..cf653d0b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cracked_shellstone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cracked_shellstone_bricks" +} 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 new file mode 100644 index 00000000..09dddc04 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/creeping_horror_egg.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/creeping_horror_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/creepvine.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/creepvine.json new file mode 100644 index 00000000..bea911f8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/creepvine.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/creepvine" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/critter_cage.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/critter_cage.json new file mode 100644 index 00000000..c5b2c0f4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/critter_cage.json @@ -0,0 +1,20 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "antarchy:item/critter_cage_item" + }, + "overrides": [ + { + "predicate": { + "antarchy:critter_cage_state": 1.0 + }, + "model": "antarchy:item/critter_cage_filled_plain" + }, + { + "predicate": { + "antarchy:critter_cage_state": 2.0 + }, + "model": "antarchy:item/critter_cage_filled_colored" + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/critter_cage_filled_colored.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/critter_cage_filled_colored.json new file mode 100644 index 00000000..3c3be588 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/critter_cage_filled_colored.json @@ -0,0 +1,8 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "antarchy:item/critter_cage_item", + "layer1": "antarchy:item/critter_cage_item_overlay", + "layer2": "antarchy:item/critter_cage_item_overlay" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/critter_cage_filled_plain.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/critter_cage_filled_plain.json new file mode 100644 index 00000000..d842e86b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/critter_cage_filled_plain.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "antarchy:item/critter_cage_item", + "layer1": "antarchy:item/critter_cage_item_overlay" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_dream_sandstone.json new file mode 100644 index 00000000..003bad09 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_dream_sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cut_dream_sandstone" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_dream_sandstone_slab.json new file mode 100644 index 00000000..acb07d70 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_dream_sandstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cut_dream_sandstone_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium.json new file mode 100644 index 00000000..967d1e1a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cut_titanium" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium_slab.json new file mode 100644 index 00000000..8cf6c566 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cut_titanium_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium_stairs.json new file mode 100644 index 00000000..a00aa87a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cut_titanium_stairs" +} 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 new file mode 100644 index 00000000..c3db6023 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_titanium_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cut_titanium_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium.json new file mode 100644 index 00000000..cb652a83 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cut_uranium" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium_slab.json new file mode 100644 index 00000000..06df4236 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cut_uranium_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium_stairs.json new file mode 100644 index 00000000..e34545a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cut_uranium_stairs" +} 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 new file mode 100644 index 00000000..3bdb1efd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/cut_uranium_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/cut_uranium_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dead_star_coral.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dead_star_coral.json new file mode 100644 index 00000000..12f6c85b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dead_star_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/star_coral/dead_star_coral" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dead_star_coral_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dead_star_coral_block.json new file mode 100644 index 00000000..4867c42e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dead_star_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/dead_star_coral_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dead_star_coral_fan.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dead_star_coral_fan.json new file mode 100644 index 00000000..7802084f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dead_star_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/star_coral/dead_star_coral_fan" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/deepslate_titanium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/deepslate_titanium_ore.json new file mode 100644 index 00000000..29c1d14f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/deepslate_titanium_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/deepslate_titanium_ore" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/deepslate_uranium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/deepslate_uranium_ore.json new file mode 100644 index 00000000..1f26f6b5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/deepslate_uranium_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/deepslate_uranium_ore" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/diamond_minecart.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/diamond_minecart.json new file mode 100644 index 00000000..214aaab1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/diamond_minecart.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/diamond_minecart" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dorrie_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dorrie_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dorrie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dr_trayaurus_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dr_trayaurus_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dr_trayaurus_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_campfire.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_campfire.json new file mode 100644 index 00000000..10a0b548 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_campfire.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/dream_campfire" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_lantern.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_lantern.json new file mode 100644 index 00000000..2ddd07f4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_lantern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/dream_lantern" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sand.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sand.json new file mode 100644 index 00000000..1604fa70 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sand.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/dream_sand" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone.json new file mode 100644 index 00000000..2eeab9a1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/dream_sandstone" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone_slab.json new file mode 100644 index 00000000..9cbf5e62 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/dream_sandstone_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone_stairs.json new file mode 100644 index 00000000..a79fbc41 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/dream_sandstone_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone_wall.json new file mode 100644 index 00000000..1b4b6572 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_sandstone_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/dream_sandstone_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_torch.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_torch.json new file mode 100644 index 00000000..398b9e94 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/dream_torch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/dream_torch" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/duct_tape.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/duct_tape.json new file mode 100644 index 00000000..40518ca7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/duct_tape.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/duct_tape" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/duplicator_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/duplicator_log.json new file mode 100644 index 00000000..a8a297dd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/duplicator_log.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/duplicator_log" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/duplicator_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/duplicator_sapling.json new file mode 100644 index 00000000..e5da41a1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/duplicator_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:block/oak_sapling" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/easter_bunny_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/easter_bunny_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/easter_bunny_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/elka_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/elka_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/elka_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/emperor_scorpion_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/emperor_scorpion_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/emperor_scorpion_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/emperor_scorpion_stinger.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/emperor_scorpion_stinger.json new file mode 100644 index 00000000..b116689a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/emperor_scorpion_stinger.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/emperor_scorpion_stinger" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/enchanted_golden_apple_cow_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/enchanted_golden_apple_cow_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/enchanted_golden_apple_cow_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/fallen_king_crown.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/fallen_king_crown.json new file mode 100644 index 00000000..79ead02c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/fallen_king_crown.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/fallen_king_crown_item" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/fallen_king_crown_item.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/fallen_king_crown_item.json new file mode 100644 index 00000000..d7fcc5ca --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/fallen_king_crown_item.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/fallen_king_crown_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/fallen_king_crown_worn.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/fallen_king_crown_worn.json new file mode 100644 index 00000000..60cd37f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/fallen_king_crown_worn.json @@ -0,0 +1,83 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [32, 32], + "textures": { + "0": "antarchy:item/fallen_king_crown_item", + "particle": "antarchy:item/fallen_king_crown_item" + }, + "elements": [ + { + "from": [3.5, 0.0, 12.5], + "to": [12.5, 9.0, 12.5], + "rotation": { "angle": 0, "axis": "y", "origin": [3.5, 0.0, 3.5] }, + "faces": { + "north": { "uv": [9.0, 0.0, 4.5, 4.5], "texture": "#0" }, + "east": { "uv": [4.5, 0.0, 9.0, 4.5], "texture": "#0" }, + "south": { "uv": [4.5, 0.0, 9.0, 4.5], "texture": "#0" }, + "west": { "uv": [4.5, 0.0, 9.0, 4.5], "texture": "#0" }, + "up": { "uv": [4.5, 0.0, 9.0, 4.5], "texture": "#0" }, + "down": { "uv": [4.5, 0.0, 9.0, 4.5], "texture": "#0" } + } + }, + { + "from": [3.5, 0.0, 3.5], + "to": [3.5, 9.0, 12.5], + "rotation": { "angle": 0, "axis": "y", "origin": [3.5, 0.0, 3.5] }, + "faces": { + "north": { "uv": [4.5, 4.5, 9.0, 9.0], "texture": "#0" }, + "east": { "uv": [9.0, 4.5, 4.5, 9.0], "texture": "#0" }, + "south": { "uv": [4.5, 4.5, 9.0, 9.0], "texture": "#0" }, + "west": { "uv": [4.5, 4.5, 9.0, 9.0], "texture": "#0" }, + "up": { "uv": [4.5, 4.5, 9.0, 9.0], "texture": "#0" }, + "down": { "uv": [4.5, 4.5, 9.0, 9.0], "texture": "#0" } + } + }, + { + "from": [12.5, 0.0, 3.5], + "to": [12.5, 9.0, 12.5], + "rotation": { "angle": 0, "axis": "y", "origin": [3.5, 0.0, 3.5] }, + "faces": { + "north": { "uv": [0.0, 4.5, 4.5, 9.0], "texture": "#0" }, + "east": { "uv": [0.0, 4.5, 4.5, 9.0], "texture": "#0" }, + "south": { "uv": [0.0, 4.5, 4.5, 9.0], "texture": "#0" }, + "west": { "uv": [4.5, 4.5, 0.0, 9.0], "texture": "#0" }, + "up": { "uv": [0.0, 4.5, 4.5, 9.0], "texture": "#0" }, + "down": { "uv": [0.0, 4.5, 4.5, 9.0], "texture": "#0" } + } + }, + { + "from": [3.5, 0.0, 3.5], + "to": [12.5, 9.0, 3.5], + "rotation": { "angle": 0, "axis": "y", "origin": [3.5, 0.0, 3.5] }, + "faces": { + "north": { "uv": [0.0, 0.0, 4.5, 4.5], "texture": "#0" }, + "east": { "uv": [0.0, 0.0, 4.5, 4.5], "texture": "#0" }, + "south": { "uv": [4.5, 0.0, 0.0, 4.5], "texture": "#0" }, + "west": { "uv": [0.0, 0.0, 4.5, 4.5], "texture": "#0" }, + "up": { "uv": [0.0, 0.0, 4.5, 4.5], "texture": "#0" }, + "down": { "uv": [0.0, 0.0, 4.5, 4.5], "texture": "#0" } + } + }, + { + "from": [7.0, 5.5, 3.4], + "to": [9.0, 8.5, 3.4], + "rotation": { "angle": 0, "axis": "y", "origin": [7.0, 1.5, 3.4] }, + "faces": { + "north": { "uv": [15.0, 14.5, 16.0, 16.0], "texture": "#0" }, + "east": { "uv": [0.0, 7.0, 1.0, 8.5], "texture": "#0" }, + "south": { "uv": [1.0, 7.0, 0.0, 8.5], "texture": "#0" }, + "west": { "uv": [0.0, 7.0, 1.0, 8.5], "texture": "#0" }, + "up": { "uv": [0.0, 7.0, 1.0, 8.5], "texture": "#0" }, + "down": { "uv": [0.0, 7.0, 1.0, 8.5], "texture": "#0" } + } + } + ], + "gui_light": "front", + "display": { + "head": { + "translation": [0.0, 9.5, 0.0], + "scale": [1.7, 1.7, 1.7] + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/fire_dragon_pet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/fire_dragon_pet.json new file mode 100644 index 00000000..5e5b3c7f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/fire_dragon_pet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "iceandfire:item/fire_dragon_heart" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/flying_squirrel_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/flying_squirrel_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/flying_squirrel_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/giant_lily_pad.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/giant_lily_pad.json new file mode 100644 index 00000000..c325d587 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/giant_lily_pad.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/giant_lilypad/giant_lilypad_1x1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/glimmer_bottle.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/glimmer_bottle.json new file mode 100644 index 00000000..eb725288 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/glimmer_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/glimmer_bottle" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/glimmer_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/glimmer_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/glimmer_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/glowcap_mushroom.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/glowcap_mushroom.json new file mode 100644 index 00000000..f35a640f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/glowcap_mushroom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/glowcap_mushroom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/glowcap_mushroom_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/glowcap_mushroom_block.json new file mode 100644 index 00000000..9067ee9e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/glowcap_mushroom_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/glowcap_mushroom_block" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/golden_apple_cow_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/golden_apple_cow_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/golden_apple_cow_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} 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 new file mode 100644 index 00000000..878fe7bc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/gravity_gun_gui" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun_gui.json new file mode 100644 index 00000000..490e4726 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/gravity_gun_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun_held_geo.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun_held_geo.json new file mode 100644 index 00000000..5774eca1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun_held_geo.json @@ -0,0 +1,138 @@ +{ + "parent": "builtin/entity", + "display": { + "thirdperson_righthand": { + "rotation": [ + 0, + 0, + -90 + ], + "translation": [ + -5.25, + -1.85, + -5 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 0, + -90 + ], + "translation": [ + -5.25, + -1.85, + -5 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "firstperson_righthand": { + "rotation": [ + 10, + 0, + 0 + ], + "translation": [ + -1, + 0, + 0.5 + ], + "scale": [ + 0.6, + 0.6, + 0.6 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 10, + 0, + 0 + ], + "translation": [ + -1, + 0, + 0.5 + ], + "scale": [ + 0.6, + 0.6, + 0.6 + ] + }, + "ground": { + "translation": [ + 0, + 2, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "gui": { + "rotation": [ + 30, + -135, + 0 + ], + "translation": [ + 0.25, + -4.75, + 0 + ], + "scale": [ + 0.85, + 0.85, + 0.85 + ] + }, + "head": { + "translation": [ + 0, + 0, + -8.25 + ] + }, + "fixed": { + "rotation": [ + 90, + 45, + 90 + ], + "translation": [ + 5.25, + 3.75, + 0 + ] + }, + "on_shelf": { + "rotation": [ + 90, + 0, + 90 + ], + "translation": [ + 8.25, + 0, + 0 + ], + "scale": [ + 1.3, + 1.3, + 1.3 + ] + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/grow_ray_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/grow_ray_gui.json new file mode 100644 index 00000000..62d18ca9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/grow_ray_gui.json @@ -0,0 +1,7 @@ +{ + "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/grow_ray_held_geo.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/grow_ray_held_geo.json new file mode 100644 index 00000000..1e504bed --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/grow_ray_held_geo.json @@ -0,0 +1,37 @@ +{ + "parent": "builtin/entity", + "display": { + "thirdperson_righthand": { + "translation": [0, -2, -4], + "scale": [0.8, 0.8, 0.8] + }, + "thirdperson_lefthand": { + "translation": [0, -2, -4], + "scale": [0.8, 0.8, 0.8] + }, + "firstperson_righthand": { + "translation": [0, 1, -0.5], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "translation": [0, 1, -0.5], + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [30, -135, 0], + "translation": [-0.25, -4.75, 0], + "scale": [0.8, 0.8, 0.8] + }, + "fixed": { + "rotation": [90, -45, 90], + "translation": [6, -3.5, 0] + }, + "on_shelf": { + "rotation": [90, 0, 90], + "translation": [7, 0, 0] + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/growing_potion.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/growing_potion.json new file mode 100644 index 00000000..e22b7730 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/growing_potion.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/potion_overlay", + "layer1": "minecraft:item/potion" + } +} 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 new file mode 100644 index 00000000..62d18ca9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json @@ -0,0 +1,7 @@ +{ + "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/growth_ray_display.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray_display.json new file mode 100644 index 00000000..60990bf9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray_display.json @@ -0,0 +1,106 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 64, + 64 + ], + "display": { + "thirdperson_righthand": { + "translation": [ + 0, + -2, + -4 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "thirdperson_lefthand": { + "translation": [ + 0, + -2, + -4 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "firstperson_righthand": { + "translation": [ + 0, + 1, + -0.5 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "firstperson_lefthand": { + "translation": [ + 0, + 1, + -0.5 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "ground": { + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "gui": { + "rotation": [ + 30, + -135, + 0 + ], + "translation": [ + -0.25, + -4.75, + 0 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "fixed": { + "rotation": [ + 90, + -45, + 90 + ], + "translation": [ + 6, + -3.5, + 0 + ] + }, + "on_shelf": { + "rotation": [ + 90, + 0, + 90 + ], + "translation": [ + 7, + 0, + 0 + ] + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/hanging_creeproots.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/hanging_creeproots.json new file mode 100644 index 00000000..292043a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/hanging_creeproots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/hanging_creeproots_bottom" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/hercules_beetle_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/hercules_beetle_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/hercules_beetle_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/hercules_horn.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/hercules_horn.json new file mode 100644 index 00000000..b275e4f0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/hercules_horn.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hercules_horn" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/high_fructose_corn_syrup.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/high_fructose_corn_syrup.json new file mode 100644 index 00000000..b719b3f0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/high_fructose_corn_syrup.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/high_fructose_corn_syrup" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/honeyed_apple_cow_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/honeyed_apple_cow_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/honeyed_apple_cow_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/hushweed.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/hushweed.json new file mode 100644 index 00000000..ec31120b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/hushweed.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/hushweed" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ice_dragon_pet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ice_dragon_pet.json new file mode 100644 index 00000000..386807c9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ice_dragon_pet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "iceandfire:item/ice_dragon_heart" + } +} 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 new file mode 100644 index 00000000..c0eafeb0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ichor_bucket" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/infested_coarse_dirt.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/infested_coarse_dirt.json new file mode 100644 index 00000000..a0b08b1e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/infested_coarse_dirt.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/infested_coarse_dirt" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/infested_rooted_dirt.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/infested_rooted_dirt.json new file mode 100644 index 00000000..6b31de82 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/infested_rooted_dirt.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/infested_rooted_dirt" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/inversion_potion.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/inversion_potion.json new file mode 100644 index 00000000..e22b7730 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/inversion_potion.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/potion_overlay", + "layer1": "minecraft:item/potion" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/jerry_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jerry_egg.json new file mode 100644 index 00000000..cc407bf7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jerry_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/jerry_egg_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/jerry_nucleus.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jerry_nucleus.json new file mode 100644 index 00000000..e74f38c8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jerry_nucleus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/jerry_nucleus" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/jerry_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jerry_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jerry_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} 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 new file mode 100644 index 00000000..c7c80c03 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_boots.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..9d3bd18e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_egg.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..df0ed22b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_leg.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/jumpy_bug_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/king_scale.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/king_scale.json new file mode 100644 index 00000000..b338cb8e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/king_scale.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/king_scale" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_kalamari.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_kalamari.json new file mode 100644 index 00000000..49a6766e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_kalamari.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/kraken_kalamari" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_tentacle.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_tentacle.json new file mode 100644 index 00000000..a2303ac6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_tentacle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/kraken_tentacle" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_tooth.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_tooth.json new file mode 100644 index 00000000..aa4b4599 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/kraken_tooth.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/kraken_tooth" + } +} 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 new file mode 100644 index 00000000..4d8724c4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/krakens_grasp_gui" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp_gui.json new file mode 100644 index 00000000..8b08084b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/krakens_grasp/krakens_grasp_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp_held.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp_held.json new file mode 100644 index 00000000..f64e471f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp_held.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:entity/krakens_grasp_entity" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakling_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakling_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/krakling_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/large_blood_crystal_bud.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/large_blood_crystal_bud.json new file mode 100644 index 00000000..4b47777e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/large_blood_crystal_bud.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/blood_crystal_bud_stage2" + } +} + + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lightning_dragon_pet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lightning_dragon_pet.json new file mode 100644 index 00000000..52d52266 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lightning_dragon_pet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "iceandfire:item/lightning_dragon_heart" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/loam.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/loam.json new file mode 100644 index 00000000..3802ed1d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/loam.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/loam" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lotus.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lotus.json new file mode 100644 index 00000000..2e3e72b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lotus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/lotus" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_anchor.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_anchor.json new file mode 100644 index 00000000..00045879 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_anchor.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/lucid_anchor" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_eye.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_eye.json new file mode 100644 index 00000000..cbe7049c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_eye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/lucid_eye" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_pearl.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_pearl.json new file mode 100644 index 00000000..0302efdb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_pearl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/lucid_pearl" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lucid_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} 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 new file mode 100644 index 00000000..5b384dbc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/lumen_bucket" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_froglight.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_froglight.json new file mode 100644 index 00000000..6ba41b3b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_froglight.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/lumen_froglight" +} 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 new file mode 100644 index 00000000..42cebd01 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lurking_terror_egg.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/lurking_terror_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/mantis_claw.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mantis_claw.json new file mode 100644 index 00000000..52dba52f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mantis_claw.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/mantis_claw" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/mantis_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mantis_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mantis_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/medium_blood_crystal_bud.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/medium_blood_crystal_bud.json new file mode 100644 index 00000000..08c14eec --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/medium_blood_crystal_bud.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/blood_crystal_bud_stage1" + } +} + + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/miners_dream.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/miners_dream.json new file mode 100644 index 00000000..c7a0f166 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/miners_dream.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/miners_dream" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/missile_squid_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/missile_squid_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/missile_squid_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/moggles.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/moggles.json new file mode 100644 index 00000000..d87dc332 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/moggles.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/moggles_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/molevore_nose.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/molevore_nose.json new file mode 100644 index 00000000..27e1dc6f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/molevore_nose.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/molevore_nose" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/molevore_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/molevore_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/molevore_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/moleworm.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/moleworm.json new file mode 100644 index 00000000..482371a2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/moleworm.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/moleworm" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/moleworm_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/moleworm_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/moleworm_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/molting_vines.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/molting_vines.json new file mode 100644 index 00000000..f447ccbd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/molting_vines.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/molting_vines/molting_vines" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_ouranwood_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_ouranwood_log.json new file mode 100644 index 00000000..c18f3cac --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_ouranwood_log.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_ouranwood_log" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_ouranwood_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_ouranwood_wood.json new file mode 100644 index 00000000..34bc7938 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_ouranwood_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_ouranwood_wood" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..02deeac5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_shellstone_brick_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..2a147e6a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_shellstone_brick_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_wall.json new file mode 100644 index 00000000..a872a73b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_shellstone_brick_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_bricks.json new file mode 100644 index 00000000..7202dc1f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mossy_shellstone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_shellstone_bricks" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/mucus.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mucus.json new file mode 100644 index 00000000..6bb38c82 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mucus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/mucus" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/mud_pie.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mud_pie.json new file mode 100644 index 00000000..494f37cd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/mud_pie.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/mud_pie" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/myrmite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/myrmite.json new file mode 100644 index 00000000..9da582d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/myrmite.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/myrmite" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/myrmite_coal_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/myrmite_coal_ore.json new file mode 100644 index 00000000..5e50d09a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/myrmite_coal_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/myrmite_coal_ore" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_boat.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_boat.json new file mode 100644 index 00000000..e41d3884 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nadir_boat" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_button.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_button.json new file mode 100644 index 00000000..13b09f11 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_button.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_button_inventory" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_chest_boat.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_chest_boat.json new file mode 100644 index 00000000..83e1571f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_chest_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nadir_chest_boat" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_door.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_door.json new file mode 100644 index 00000000..34dc387d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_door.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nadir_door_icon" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_fence.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_fence.json new file mode 100644 index 00000000..fca9211f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_fence.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_fence_inventory" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_fence_gate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_fence_gate.json new file mode 100644 index 00000000..19eb4e75 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_fence_gate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_fence_gate" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_hanging_sign.json new file mode 100644 index 00000000..7c152d8e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nadir_hanging_sign" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_log.json new file mode 100644 index 00000000..84722c4d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_log" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_planks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_planks.json new file mode 100644 index 00000000..b119279a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_planks.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_planks" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_pressure_plate.json new file mode 100644 index 00000000..35fdfe68 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_pressure_plate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_pressure_plate" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_sapling.json new file mode 100644 index 00000000..cff3d3e7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/nadir/nadir_sapling" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_sign.json new file mode 100644 index 00000000..95cd0c1e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nadir_sign" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_slab.json new file mode 100644 index 00000000..01771cbf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_slab.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_slab" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_stairs.json new file mode 100644 index 00000000..ab456b02 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_stairs.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_stairs" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_trapdoor.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_trapdoor.json new file mode 100644 index 00000000..25ec532f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_trapdoor.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_trapdoor_bottom" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_veil.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_veil.json new file mode 100644 index 00000000..18509de7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_veil.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_veil" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_wood.json new file mode 100644 index 00000000..10f53e80 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nadir_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_wood" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_boots.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_boots.json new file mode 100644 index 00000000..f34d2af4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nightmare/nightmare_boots" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_chestplate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_chestplate.json new file mode 100644 index 00000000..88e57020 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nightmare/nightmare_chestplate" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_helmet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_helmet.json new file mode 100644 index 00000000..9f42a497 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nightmare/nightmare_helmet" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_leggings.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_leggings.json new file mode 100644 index 00000000..d5fed862 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nightmare/nightmare_leggings" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_scale.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_scale.json new file mode 100644 index 00000000..d76c15be --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_scale.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nightmare/nightmare_scale" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_sword.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_sword.json new file mode 100644 index 00000000..be9bcde4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nightmare_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "antarchy:item/nightmare/nightmare_sword" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite.json new file mode 100644 index 00000000..143f41fe --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/nyxite" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_brick_slab.json new file mode 100644 index 00000000..3a2eee64 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/nyxite_brick_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_brick_stairs.json new file mode 100644 index 00000000..4b95bf08 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/nyxite_brick_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_brick_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_brick_wall.json new file mode 100644 index 00000000..a8b060b1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/nyxite_brick_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_bricks.json new file mode 100644 index 00000000..edaf5b9c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/nyxite_bricks" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_pillar.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_pillar.json new file mode 100644 index 00000000..e599dd1c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/nyxite_pillar" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_slab.json new file mode 100644 index 00000000..02063f17 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/nyxite_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_spike.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_spike.json new file mode 100644 index 00000000..b21e8895 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nyxite_spike" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_stairs.json new file mode 100644 index 00000000..c6ef36bf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/nyxite_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_wall.json new file mode 100644 index 00000000..b2373575 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/nyxite_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/nyxite_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/octopus_bomb_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/octopus_bomb_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/octopus_bomb_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/orange_milkweed.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/orange_milkweed.json new file mode 100644 index 00000000..a8a862f5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/orange_milkweed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/milkweed/orange_milkweed_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_acorn.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_acorn.json new file mode 100644 index 00000000..7466a16d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_acorn.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ouranwood_acorn" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_boat.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_boat.json new file mode 100644 index 00000000..8461b879 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_boat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ouranwood_boat" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_button.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_button.json new file mode 100644 index 00000000..46875e86 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_button.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/ouranwood_button_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_chest_boat.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_chest_boat.json new file mode 100644 index 00000000..df53d85d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_chest_boat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ouranwood_chest_boat" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_deer_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_deer_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_deer_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_door.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_door.json new file mode 100644 index 00000000..357826b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ouranwood_door_icon" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_fence.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_fence.json new file mode 100644 index 00000000..fa5a875c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/ouranwood_fence_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_fence_gate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_fence_gate.json new file mode 100644 index 00000000..d6018c89 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/ouranwood_fence_gate" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_hanging_sign.json new file mode 100644 index 00000000..46e39e62 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_hanging_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ouranwood_hanging_sign" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_leaves.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_leaves.json new file mode 100644 index 00000000..592028d9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/ouranwood_leaves" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_log.json new file mode 100644 index 00000000..ab44955a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_log.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/ouranwood_log" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_planks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_planks.json new file mode 100644 index 00000000..de54bdcb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_planks.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/ouranwood_planks" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_pressure_plate.json new file mode 100644 index 00000000..ccaf6d42 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/ouranwood_pressure_plate" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_sign.json new file mode 100644 index 00000000..6501299d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ouranwood_sign" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_slab.json new file mode 100644 index 00000000..3173397e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/ouranwood_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_stairs.json new file mode 100644 index 00000000..347994d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/ouranwood_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_trapdoor.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_trapdoor.json new file mode 100644 index 00000000..4b6d352b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/ouranwood_trapdoor_bottom" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_wood.json new file mode 100644 index 00000000..18127c36 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ouranwood_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/ouranwood_wood" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/pale_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/pale_nyxite.json new file mode 100644 index 00000000..aad650fe --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/pale_nyxite.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/pale_nyxite" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach.json new file mode 100644 index 00000000..1f1914ef --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_boat.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_boat.json new file mode 100644 index 00000000..ce8a29a3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach_boat" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_button.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_button.json new file mode 100644 index 00000000..b6539669 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_button.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_button_inventory" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_chest_boat.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_chest_boat.json new file mode 100644 index 00000000..4aa30319 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_chest_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach_chest_boat" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_door.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_door.json new file mode 100644 index 00000000..7f6da626 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_door.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach_door_icon" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_fence.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_fence.json new file mode 100644 index 00000000..38f63661 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_fence.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_fence_inventory" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_fence_gate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_fence_gate.json new file mode 100644 index 00000000..8601b7e8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_fence_gate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_fence_gate" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_hanging_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_hanging_sign.json new file mode 100644 index 00000000..adc4be1f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach_hanging_sign" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_leaves.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_leaves.json new file mode 100644 index 00000000..bbadf8b9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_leaves.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_leaves" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_log.json new file mode 100644 index 00000000..cc668db3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_log" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_pie.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_pie.json new file mode 100644 index 00000000..80c8ee63 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_pie.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach_pie" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_planks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_planks.json new file mode 100644 index 00000000..712b1147 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_planks.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_planks" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_pressure_plate.json new file mode 100644 index 00000000..0f392d10 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_pressure_plate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_pressure_plate" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_sapling.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_sapling.json new file mode 100644 index 00000000..1aeac284 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/peach/peach_sapling" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_sign.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_sign.json new file mode 100644 index 00000000..977817ee --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach_sign" + } +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_slab.json new file mode 100644 index 00000000..69cec5cf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_slab.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_slab" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_stairs.json new file mode 100644 index 00000000..da2ce419 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_stairs.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_stairs" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_trapdoor.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_trapdoor.json new file mode 100644 index 00000000..991cc7ab --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_trapdoor.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_trapdoor_bottom" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_wood.json new file mode 100644 index 00000000..e4b6c7c0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/peach_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_wood" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/pink_milkweed.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/pink_milkweed.json new file mode 100644 index 00000000..dbb92f79 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/pink_milkweed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/milkweed/pink_milkweed_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_antimetal.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_antimetal.json new file mode 100644 index 00000000..31ae901e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_antimetal.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_antimetal" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_slab.json new file mode 100644 index 00000000..a99ca02d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_antimetal_slab" +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_stairs.json new file mode 100644 index 00000000..333e5189 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_antimetal_stairs" +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone.json new file mode 100644 index 00000000..c64fc88f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_broodstone" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone_slab.json new file mode 100644 index 00000000..9944ca9e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_broodstone_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone_stairs.json new file mode 100644 index 00000000..151eb15b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_broodstone_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone_wall.json new file mode 100644 index 00000000..bc85f80d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_broodstone_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_broodstone_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite.json new file mode 100644 index 00000000..6eb892c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_nyxite" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_button.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_button.json new file mode 100644 index 00000000..3cdf70da --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_button.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_nyxite_button_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_pressure_plate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_pressure_plate.json new file mode 100644 index 00000000..c9dbefb5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_nyxite_pressure_plate" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_slab.json new file mode 100644 index 00000000..e9ac5cde --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_nyxite_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_stairs.json new file mode 100644 index 00000000..2d866ab6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_nyxite_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_wall.json new file mode 100644 index 00000000..bef1b1c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_nyxite_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_nyxite_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone.json new file mode 100644 index 00000000..1a14b9b2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_shellstone" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone_slab.json new file mode 100644 index 00000000..604a9081 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_shellstone_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone_stairs.json new file mode 100644 index 00000000..6b970b8c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_shellstone_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone_wall.json new file mode 100644 index 00000000..d05565f2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/polished_shellstone_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_shellstone_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/popcorn.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/popcorn.json new file mode 100644 index 00000000..7702406c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/popcorn.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/popcorn" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/potent_nyxite.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/potent_nyxite.json new file mode 100644 index 00000000..2cb4c1e5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/potent_nyxite.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/potent_nyxite" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_boots.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_boots.json new file mode 100644 index 00000000..becde834 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/primordial/primordial_boots" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_chestplate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_chestplate.json new file mode 100644 index 00000000..88601be1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/primordial/primordial_chestplate" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_helmet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_helmet.json new file mode 100644 index 00000000..fd3ffc56 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/primordial/primordial_helmet" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_leggings.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_leggings.json new file mode 100644 index 00000000..62fd2486 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/primordial/primordial_leggings" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_scute.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_scute.json new file mode 100644 index 00000000..44529169 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/primordial_scute.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/primordial_scute" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/queen_scale.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/queen_scale.json new file mode 100644 index 00000000..50abbda8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/queen_scale.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/queen_scale" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/rainbow_ant_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rainbow_ant_nest.json new file mode 100644 index 00000000..3889a452 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rainbow_ant_nest.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/rainbow_ant_nest" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/rainbow_ant_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rainbow_ant_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rainbow_ant_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/rainbow_sugar.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rainbow_sugar.json new file mode 100644 index 00000000..0d13bcff --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rainbow_sugar.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/rainbow_sugar" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_bug_meat.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_bug_meat.json new file mode 100644 index 00000000..12e4b164 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_bug_meat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/raw_bug_meat" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_corndog.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_corndog.json new file mode 100644 index 00000000..837b733d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_corndog.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/raw_corndog" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_titanium.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_titanium.json new file mode 100644 index 00000000..06d3d1a2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_titanium.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/titanium/raw_titanium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_titanium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_titanium_block.json new file mode 100644 index 00000000..90cc500b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_titanium_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/raw_titanium_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_titanium_scrap.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_titanium_scrap.json new file mode 100644 index 00000000..d10dfe76 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_titanium_scrap.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/titanium/raw_titanium_scrap" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_uranium.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_uranium.json new file mode 100644 index 00000000..5e8d0b54 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_uranium.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/uranium/raw_uranium" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_uranium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_uranium_block.json new file mode 100644 index 00000000..872cb976 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_uranium_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/raw_uranium_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_uranium_scrap.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_uranium_scrap.json new file mode 100644 index 00000000..96d12a71 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_uranium_scrap.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/uranium/raw_uranium_scrap" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_venison.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_venison.json new file mode 100644 index 00000000..7d4db7cd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/raw_venison.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/raw_venison" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/red_ant_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/red_ant_nest.json new file mode 100644 index 00000000..530d6c7a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/red_ant_nest.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/red_ant_nest" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/red_ant_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/red_ant_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/red_ant_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/reverie_bottle.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/reverie_bottle.json new file mode 100644 index 00000000..e65d83e5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/reverie_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/reverie_bottle" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/reverie_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/reverie_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/reverie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/rolly_polly_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rolly_polly_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rolly_polly_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/root_beer.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/root_beer.json new file mode 100644 index 00000000..f02e8fba --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/root_beer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/root_beer" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/roseate_froglight.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/roseate_froglight.json new file mode 100644 index 00000000..e9d680ab --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/roseate_froglight.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/roseate_froglight" +} 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 new file mode 100644 index 00000000..f5320061 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/rpo_launcher_gui" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher_gui.json new file mode 100644 index 00000000..035aa419 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/rpo_launcher_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher_held_geo.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher_held_geo.json new file mode 100644 index 00000000..b624f476 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher_held_geo.json @@ -0,0 +1,98 @@ +{ + "parent": "builtin/entity", + "texture_size": [ + 256, + 256 + ], + "display": { + "thirdperson_righthand": { + "translation": [ + 4, + 0, + 0 + ] + }, + "firstperson_righthand": { + "translation": [ + 1.5, + -1, + 3 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "firstperson_lefthand": { + "translation": [ + 1.5, + -1, + 3 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "ground": { + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "gui": { + "rotation": [ + 30, + -135, + 0 + ], + "translation": [ + 0.4, + -1, + 0 + ], + "scale": [ + 0.175, + 0.175, + 0.175 + ] + }, + "fixed": { + "rotation": [ + 90, + -45, + 90 + ], + "translation": [ + 0.5, + -2, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "on_shelf": { + "rotation": [ + 90, + 0, + 90 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/scorpion_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/scorpion_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/scorpion_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/scorpion_whip.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/scorpion_whip.json new file mode 100644 index 00000000..2bfc9027 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/scorpion_whip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/scorpion_whip" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/seashell.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/seashell.json new file mode 100644 index 00000000..09685dfa --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/seashell.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/seashell_item" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone.json new file mode 100644 index 00000000..3c47248c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/shellstone" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_brick_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_brick_slab.json new file mode 100644 index 00000000..6838b0ca --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/shellstone_brick_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_brick_stairs.json new file mode 100644 index 00000000..ed38caae --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/shellstone_brick_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_brick_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_brick_wall.json new file mode 100644 index 00000000..0ff10c95 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/shellstone_brick_wall_inventory" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_bricks.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_bricks.json new file mode 100644 index 00000000..c7c4998c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/shellstone_bricks" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_pillar.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_pillar.json new file mode 100644 index 00000000..cefafce9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/shellstone_pillar" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_slab.json new file mode 100644 index 00000000..70d26b0a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/shellstone_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_stairs.json new file mode 100644 index 00000000..c2362b7b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/shellstone_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_wall.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_wall.json new file mode 100644 index 00000000..a7ecaa8b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shellstone_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/shellstone_wall_inventory" +} 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 new file mode 100644 index 00000000..3fea735a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/shrink_ray_gui" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray_display.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray_display.json new file mode 100644 index 00000000..65b5da85 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray_display.json @@ -0,0 +1,106 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 64, + 64 + ], + "display": { + "thirdperson_righthand": { + "translation": [ + 0, + -2, + -4 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "thirdperson_lefthand": { + "translation": [ + 0, + -2, + -4 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "firstperson_righthand": { + "translation": [ + 0, + 1, + -0.5 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "firstperson_lefthand": { + "translation": [ + 0, + 1, + -0.5 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "ground": { + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "gui": { + "rotation": [ + 30, + -135, + 0 + ], + "translation": [ + 0.5, + -5.25, + 0 + ], + "scale": [ + 0.8, + 0.8, + 0.8 + ] + }, + "fixed": { + "rotation": [ + 90, + -45, + 90 + ], + "translation": [ + 6.25, + -3, + 0 + ] + }, + "on_shelf": { + "rotation": [ + 90, + 0, + 90 + ], + "translation": [ + 7, + 0, + 0 + ] + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray_gui.json new file mode 100644 index 00000000..39a330b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/shrink_ray_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray_held_geo.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray_held_geo.json new file mode 100644 index 00000000..9bd96f63 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray_held_geo.json @@ -0,0 +1,37 @@ +{ + "parent": "builtin/entity", + "display": { + "thirdperson_righthand": { + "translation": [0, -2, -4], + "scale": [0.8, 0.8, 0.8] + }, + "thirdperson_lefthand": { + "translation": [0, -2, -4], + "scale": [0.8, 0.8, 0.8] + }, + "firstperson_righthand": { + "translation": [0, 1, -0.5], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "translation": [0, 1, -0.5], + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [30, -135, 0], + "translation": [0.5, -5.25, 0], + "scale": [0.8, 0.8, 0.8] + }, + "fixed": { + "rotation": [90, -45, 90], + "translation": [6.25, -3, 0] + }, + "on_shelf": { + "rotation": [90, 0, 90], + "translation": [7, 0, 0] + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrinking_potion.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrinking_potion.json new file mode 100644 index 00000000..e22b7730 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/shrinking_potion.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/potion_overlay", + "layer1": "minecraft:item/potion" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/small_blood_crystal_bud.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/small_blood_crystal_bud.json new file mode 100644 index 00000000..9a1ba6a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/small_blood_crystal_bud.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/blood_crystal_bud_stage0" + } +} + + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/smooth_dream_sandstone.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/smooth_dream_sandstone.json new file mode 100644 index 00000000..7e418a11 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/smooth_dream_sandstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/smooth_dream_sandstone" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/smooth_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/smooth_dream_sandstone_slab.json new file mode 100644 index 00000000..b53f4f81 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/smooth_dream_sandstone_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/smooth_dream_sandstone_slab" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/smooth_dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/smooth_dream_sandstone_stairs.json new file mode 100644 index 00000000..ddd8fc2c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/smooth_dream_sandstone_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/smooth_dream_sandstone_stairs" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/spider_lily.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/spider_lily.json new file mode 100644 index 00000000..f76fa4db --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/spider_lily.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/spider_lily_stem", + "layer1": "antarchy:block/spider_lily_top" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/spirit_apple.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/spirit_apple.json new file mode 100644 index 00000000..34602711 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/spirit_apple.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/spirit_apple" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/spit_bug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/spit_bug_egg.json new file mode 100644 index 00000000..14efc944 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/spit_bug_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/spit_bug_egg_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/spit_bug_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/spit_bug_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/spit_bug_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} 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 new file mode 100644 index 00000000..5370df2a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/squidzooka_gui" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka_gui.json new file mode 100644 index 00000000..3adda5ae --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/squidzooka_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka_held_geo.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka_held_geo.json new file mode 100644 index 00000000..c3e68d42 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka_held_geo.json @@ -0,0 +1,39 @@ +{ + "parent": "builtin/entity", + "display": { + "thirdperson_righthand": { + "translation": [0.5, -5.25, 1.5] + }, + "thirdperson_lefthand": { + "translation": [0.5, -5.25, 1.5] + }, + "firstperson_righthand": { + "rotation": [5, 0, 0], + "translation": [0, -1, 0], + "scale": [0.6, 0.6, 0.6] + }, + "firstperson_lefthand": { + "rotation": [5, 0, 0], + "translation": [0, -1, 0], + "scale": [0.6, 0.6, 0.6] + }, + "ground": { + "scale": [0.4, 0.4, 0.4] + }, + "gui": { + "rotation": [30, -135, 0], + "translation": [0.25, -3.5, 0], + "scale": [0.37, 0.37, 0.37] + }, + "fixed": { + "rotation": [90, 45, -90], + "translation": [-3, -1.5, 0], + "scale": [0.4, 0.4, 0.4] + }, + "on_shelf": { + "rotation": [90, 0, 0], + "translation": [0, 2.75, -4.5], + "scale": [0.6, 0.6, 0.6] + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/star_coral.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/star_coral.json new file mode 100644 index 00000000..a1caf1d1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/star_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/star_coral/star_coral" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/star_coral_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/star_coral_block.json new file mode 100644 index 00000000..a8f8a15d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/star_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/star_coral_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/star_coral_fan.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/star_coral_fan.json new file mode 100644 index 00000000..4659f552 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/star_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/star_coral/star_coral_fan" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/stink_bug.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stink_bug.json new file mode 100644 index 00000000..c2cde591 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stink_bug.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/stink_bug" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/stink_bug_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stink_bug_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stink_bug_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_log.json new file mode 100644 index 00000000..f60e2c43 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_nadir_log" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_wood.json new file mode 100644 index 00000000..ba7349c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_nadir_wood" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_ouranwood_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_ouranwood_log.json new file mode 100644 index 00000000..eb3bce7e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_ouranwood_log.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/stripped_ouranwood_log" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_ouranwood_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_ouranwood_wood.json new file mode 100644 index 00000000..7e5466ea --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_ouranwood_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/stripped_ouranwood_wood" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_peach_log.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_peach_log.json new file mode 100644 index 00000000..5ab747f0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_peach_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_peach_log" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_peach_wood.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_peach_wood.json new file mode 100644 index 00000000..908f1210 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stripped_peach_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_peach_wood" +} + diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/termite_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/termite_nest.json new file mode 100644 index 00000000..0f2c65eb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/termite_nest.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/termite_nest" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/termite_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/termite_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/termite_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye.json new file mode 100644 index 00000000..a3eb2d1b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_boots.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_boots.json new file mode 100644 index 00000000..d7e69c26 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_boots" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_chestplate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_chestplate.json new file mode 100644 index 00000000..32f5bdf2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_chestplate" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_helmet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_helmet.json new file mode 100644 index 00000000..6bd539db --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_helmet" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_leggings.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_leggings.json new file mode 100644 index 00000000..bb9a8c56 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/tigers_eye_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_leggings" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_bars.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_bars.json new file mode 100644 index 00000000..4dedfb42 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_bars.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/titanium/titanium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_block.json new file mode 100644 index 00000000..30c83766 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/titanium_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_bulb.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_bulb.json new file mode 100644 index 00000000..039263ca --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_bulb.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/titanium_bulb" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_door.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_door.json new file mode 100644 index 00000000..6c35f3c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/titanium/titanium_door" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_ingot.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_ingot.json new file mode 100644 index 00000000..ca9c9979 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/titanium/titanium_ingot" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_nugget.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_nugget.json new file mode 100644 index 00000000..02f4def2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/titanium/titanium_nugget" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_ore.json new file mode 100644 index 00000000..d5913296 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/titanium_ore" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_trapdoor.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_trapdoor.json new file mode 100644 index 00000000..a1729414 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/titanium_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/titanium_trapdoor_bottom" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/toreterror_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/toreterror_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/toreterror_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} 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 new file mode 100644 index 00000000..fd896a63 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_goo.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 00000000..2651ef66 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_goo_block.json @@ -0,0 +1,3 @@ +{ + "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 new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/triffid_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_bow_pull0.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_bow_pull0.json new file mode 100644 index 00000000..bcd0b0ab --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_bow_pull0.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:item/ultimate_bow", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_bow_pull0" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_bow_pull1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_bow_pull1.json new file mode 100644 index 00000000..4c815ca7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_bow_pull1.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:item/ultimate_bow", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_bow_pull1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_bow_pull2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_bow_pull2.json new file mode 100644 index 00000000..aeef5a18 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_bow_pull2.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:item/ultimate_bow", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_bow_pull2" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_arrow.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_arrow.json new file mode 100644 index 00000000..afc81f8f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_arrow.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:item/ultimate_crossbow", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_crossbow_arrow" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_pull1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_pull1.json new file mode 100644 index 00000000..488e4c4c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_pull1.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:item/ultimate_crossbow", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_crossbow_pull1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_pull2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_pull2.json new file mode 100644 index 00000000..cf2676f5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_pull2.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:item/ultimate_crossbow", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_crossbow_pull2" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_pull3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_pull3.json new file mode 100644 index 00000000..66d94796 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate/ultimate_crossbow_pull3.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:item/ultimate_crossbow", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_crossbow_pull3" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_axe.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_axe.json new file mode 100644 index 00000000..ca1c2c5f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_axe" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_boots.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_boots.json new file mode 100644 index 00000000..fc36406b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_boots" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow.json new file mode 100644 index 00000000..a4c7700c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow.json @@ -0,0 +1,50 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_bow" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13 ], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13 ], + "scale": [ 0.68, 0.68, 0.68 ] + } + }, + "overrides": [ + { + "predicate": { + "pulling": 1 + }, + "model": "antarchy:item/ultimate/ultimate_bow_pull0" + }, + { + "predicate": { + "pulling": 1, + "pull": 0.65 + }, + "model": "antarchy:item/ultimate/ultimate_bow_pull1" + }, + { + "predicate": { + "pulling": 1, + "pull": 0.9 + }, + "model": "antarchy:item/ultimate/ultimate_bow_pull2" + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow_pull0.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow_pull0.json new file mode 100644 index 00000000..2b5c4593 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow_pull0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/bow", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_bow_pull0" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow_pull1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow_pull1.json new file mode 100644 index 00000000..a6ad07eb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow_pull1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/bow", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_bow_pull1" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow_pull2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow_pull2.json new file mode 100644 index 00000000..c7b99057 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_bow_pull2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/bow", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_bow_pull2" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_chestplate.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_chestplate.json new file mode 100644 index 00000000..831d79b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_chestplate" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_crossbow.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_crossbow.json new file mode 100644 index 00000000..c2ff93b0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_crossbow.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:item/crossbow", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_crossbow_standby" + }, + "overrides": [ + { + "predicate": { + "pulling": 1, + "pull": 0.0 + }, + "model": "antarchy:item/ultimate/ultimate_crossbow_pull1" + }, + { + "predicate": { + "pulling": 1, + "pull": 0.58 + }, + "model": "antarchy:item/ultimate/ultimate_crossbow_pull2" + }, + { + "predicate": { + "pulling": 1, + "pull": 1.0 + }, + "model": "antarchy:item/ultimate/ultimate_crossbow_pull3" + }, + { + "predicate": { + "charged": 1, + "firework": 0 + }, + "model": "antarchy:item/ultimate/ultimate_crossbow_arrow" + }, + { + "predicate": { + "charged": 1, + "firework": 1 + }, + "model": "antarchy:item/ultimate/ultimate_crossbow_arrow" + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_helmet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_helmet.json new file mode 100644 index 00000000..0f874191 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_helmet" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_hoe.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_hoe.json new file mode 100644 index 00000000..154fd293 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_hoe" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_leggings.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_leggings.json new file mode 100644 index 00000000..039b2efa --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_leggings" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_mace.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_mace.json new file mode 100644 index 00000000..3e49cdce --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_mace.json @@ -0,0 +1,223 @@ +{ + "textures": { + "1": "antarchy:block/ultimate_core", + "layer0": "antarchy:item/ultimate/ultimate_mace_handle", + "particle": "antarchy:block/ultimate_core" + }, + "elements": [ + { + "from": [7, 7, 4], + "to": [15, 15, 12], + "rotation": {"angle": -45, "axis": "z", "origin": [11, 11, 8]}, + "faces": { + "north": {"uv": [8, 8, 0, 16], "texture": "#1"}, + "east": {"uv": [0, 8, 8, 16], "texture": "#1"}, + "south": {"uv": [0, 8, 8, 16], "texture": "#1"}, + "west": {"uv": [0, 8, 8, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 8, 8], "rotation": 270, "texture": "#1"}, + "down": {"uv": [8, 0, 16, 8], "texture": "#1"} + } + }, + { + "from": [0, 0, 7.5], + "to": [3, 3, 8.5], + "faces": { + "north": {"uv": [3, 13, 0, 16], "texture": "#layer0"}, + "east": {"uv": [2, 13, 3, 16], "texture": "#layer0"}, + "south": {"uv": [0, 13, 3, 16], "texture": "#layer0"}, + "west": {"uv": [0, 13, 1, 16], "texture": "#layer0"}, + "up": {"uv": [0, 13, 3, 14], "texture": "#layer0"}, + "down": {"uv": [0, 15, 3, 16], "texture": "#layer0"} + } + }, + { + "from": [2, 2, 7.5], + "to": [4, 4, 8.5], + "faces": { + "north": {"uv": [4, 12, 2, 14], "texture": "#layer0"}, + "east": {"uv": [3, 12, 4, 14], "texture": "#layer0"}, + "south": {"uv": [2, 12, 4, 14], "texture": "#layer0"}, + "west": {"uv": [2, 12, 3, 14], "texture": "#layer0"}, + "up": {"uv": [2, 12, 4, 13], "texture": "#layer0"}, + "down": {"uv": [2, 13, 4, 14], "texture": "#layer0"} + } + }, + { + "from": [3, 3, 7.5], + "to": [5, 5, 8.5], + "faces": { + "north": {"uv": [5, 11, 3, 13], "texture": "#layer0"}, + "east": {"uv": [4, 11, 5, 13], "texture": "#layer0"}, + "south": {"uv": [3, 11, 5, 13], "texture": "#layer0"}, + "west": {"uv": [3, 11, 4, 13], "texture": "#layer0"}, + "up": {"uv": [3, 11, 5, 12], "texture": "#layer0"}, + "down": {"uv": [3, 12, 5, 13], "texture": "#layer0"} + } + }, + { + "from": [4, 4, 7.5], + "to": [6, 6, 8.5], + "faces": { + "north": {"uv": [6, 10, 4, 12], "texture": "#layer0"}, + "east": {"uv": [5, 10, 6, 12], "texture": "#layer0"}, + "south": {"uv": [4, 10, 6, 12], "texture": "#layer0"}, + "west": {"uv": [4, 10, 5, 12], "texture": "#layer0"}, + "up": {"uv": [4, 10, 6, 11], "texture": "#layer0"}, + "down": {"uv": [4, 11, 6, 12], "texture": "#layer0"} + } + }, + { + "from": [5, 5, 7.5], + "to": [7, 7, 8.5], + "faces": { + "north": {"uv": [7, 9, 5, 11], "texture": "#layer0"}, + "east": {"uv": [6, 9, 7, 11], "texture": "#layer0"}, + "south": {"uv": [5, 9, 7, 11], "texture": "#layer0"}, + "west": {"uv": [5, 9, 6, 11], "texture": "#layer0"}, + "up": {"uv": [5, 9, 7, 10], "texture": "#layer0"}, + "down": {"uv": [5, 10, 7, 11], "texture": "#layer0"} + } + }, + { + "from": [8, 8, 7.5], + "to": [10, 10, 8.5], + "faces": { + "north": {"uv": [10, 6, 8, 8], "texture": "#layer0"}, + "east": {"uv": [9, 6, 10, 8], "texture": "#layer0"}, + "south": {"uv": [8, 6, 10, 8], "texture": "#layer0"}, + "west": {"uv": [8, 6, 9, 8], "texture": "#layer0"}, + "up": {"uv": [8, 6, 10, 7], "texture": "#layer0"}, + "down": {"uv": [8, 7, 10, 8], "texture": "#layer0"} + } + }, + { + "from": [9, 9, 7.5], + "to": [11, 11, 8.5], + "faces": { + "north": {"uv": [11, 5, 9, 7], "texture": "#layer0"}, + "east": {"uv": [10, 5, 11, 7], "texture": "#layer0"}, + "south": {"uv": [9, 5, 11, 7], "texture": "#layer0"}, + "west": {"uv": [9, 5, 10, 7], "texture": "#layer0"}, + "up": {"uv": [9, 5, 11, 6], "texture": "#layer0"}, + "down": {"uv": [9, 6, 11, 7], "texture": "#layer0"} + } + }, + { + "from": [6, 6, 7.5], + "to": [8, 8, 8.5], + "faces": { + "north": {"uv": [8, 8, 6, 10], "texture": "#layer0"}, + "east": {"uv": [7, 8, 8, 10], "texture": "#layer0"}, + "south": {"uv": [6, 8, 8, 10], "texture": "#layer0"}, + "west": {"uv": [6, 8, 7, 10], "texture": "#layer0"}, + "up": {"uv": [6, 8, 8, 9], "texture": "#layer0"}, + "down": {"uv": [6, 9, 8, 10], "texture": "#layer0"} + } + }, + { + "from": [7, 7, 7.5], + "to": [9, 9, 8.5], + "faces": { + "north": {"uv": [9, 7, 7, 9], "texture": "#layer0"}, + "east": {"uv": [8, 7, 9, 9], "texture": "#layer0"}, + "south": {"uv": [7, 7, 9, 9], "texture": "#layer0"}, + "west": {"uv": [7, 7, 8, 9], "texture": "#layer0"}, + "up": {"uv": [7, 7, 9, 8], "texture": "#layer0"}, + "down": {"uv": [7, 8, 9, 9], "texture": "#layer0"} + } + }, + { + "from": [12, 12, 7.5], + "to": [14, 14, 8.5], + "faces": { + "north": {"uv": [14, 2, 12, 4], "texture": "#layer0"}, + "east": {"uv": [13, 2, 14, 4], "texture": "#layer0"}, + "south": {"uv": [12, 2, 14, 4], "texture": "#layer0"}, + "west": {"uv": [12, 2, 13, 4], "texture": "#layer0"}, + "up": {"uv": [12, 2, 14, 3], "texture": "#layer0"}, + "down": {"uv": [12, 3, 14, 4], "texture": "#layer0"} + } + }, + { + "from": [13, 13, 7.5], + "to": [15, 15, 8.5], + "faces": { + "north": {"uv": [15, 1, 13, 3], "texture": "#layer0"}, + "east": {"uv": [14, 1, 15, 3], "texture": "#layer0"}, + "south": {"uv": [13, 1, 15, 3], "texture": "#layer0"}, + "west": {"uv": [13, 1, 14, 3], "texture": "#layer0"}, + "up": {"uv": [13, 1, 15, 2], "texture": "#layer0"}, + "down": {"uv": [13, 2, 15, 3], "texture": "#layer0"} + } + }, + { + "from": [14, 14, 7.5], + "to": [16, 16, 8.5], + "faces": { + "north": {"uv": [16, 0, 14, 2], "texture": "#layer0"}, + "east": {"uv": [15, 0, 16, 2], "texture": "#layer0"}, + "south": {"uv": [14, 0, 16, 2], "texture": "#layer0"}, + "west": {"uv": [14, 0, 15, 2], "texture": "#layer0"}, + "up": {"uv": [14, 0, 16, 1], "texture": "#layer0"}, + "down": {"uv": [14, 1, 16, 2], "texture": "#layer0"} + } + }, + { + "from": [10, 10, 7.5], + "to": [12, 12, 8.5], + "faces": { + "north": {"uv": [12, 4, 10, 6], "texture": "#layer0"}, + "east": {"uv": [11, 4, 12, 6], "texture": "#layer0"}, + "south": {"uv": [10, 4, 12, 6], "texture": "#layer0"}, + "west": {"uv": [10, 4, 11, 6], "texture": "#layer0"}, + "up": {"uv": [10, 4, 12, 5], "texture": "#layer0"}, + "down": {"uv": [10, 5, 12, 6], "texture": "#layer0"} + } + }, + { + "from": [11, 11, 7.5], + "to": [13, 13, 8.5], + "faces": { + "north": {"uv": [13, 3, 11, 5], "texture": "#layer0"}, + "east": {"uv": [12, 3, 13, 5], "texture": "#layer0"}, + "south": {"uv": [11, 3, 13, 5], "texture": "#layer0"}, + "west": {"uv": [11, 3, 12, 5], "texture": "#layer0"}, + "up": {"uv": [11, 3, 13, 4], "texture": "#layer0"}, + "down": {"uv": [11, 4, 13, 5], "texture": "#layer0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, -90, 55], + "translation": [0, 4, 0.5], + "scale": [0.85, 0.85, 0.85] + }, + "thirdperson_lefthand": { + "rotation": [0, 90, -55], + "translation": [0, 4, 0.5], + "scale": [0.85, 0.85, 0.85] + }, + "firstperson_righthand": { + "rotation": [0, -90, 25], + "translation": [1.13, 3.2, 1.13], + "scale": [0.68, 0.68, 0.68] + }, + "firstperson_lefthand": { + "rotation": [0, 90, -25], + "translation": [1.13, 3.2, 1.13], + "scale": [0.68, 0.68, 0.68] + }, + "ground": { + "translation": [0, 2, 0], + "scale": [0.5, 0.5, 0.5] + }, + "head": { + "rotation": [0, 180, 0], + "translation": [0, 13, 7] + }, + "fixed": { + "rotation": [0, 180, 0] + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_pickaxe.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_pickaxe.json new file mode 100644 index 00000000..7e0545bb --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_pickaxe" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_shovel.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_shovel.json new file mode 100644 index 00000000..159ed99c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_shovel" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_sword.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_sword.json new file mode 100644 index 00000000..edd38f82 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/ultimate_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "antarchy:item/ultimate/ultimate_sword" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/umbral_moss_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/umbral_moss_block.json new file mode 100644 index 00000000..52c1dd23 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/umbral_moss_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/umbral_moss_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/umbral_moss_carpet.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/umbral_moss_carpet.json new file mode 100644 index 00000000..04dd4270 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/umbral_moss_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/umbral_moss_carpet" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/upper.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/upper.json new file mode 100644 index 00000000..2b8d2758 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/upper.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/upper" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_bars.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_bars.json new file mode 100644 index 00000000..b41681dd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_bars.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/uranium/uranium_bars" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_block.json new file mode 100644 index 00000000..c5b33413 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/uranium_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_bulb.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_bulb.json new file mode 100644 index 00000000..6c392282 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_bulb.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/uranium_bulb" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_door.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_door.json new file mode 100644 index 00000000..c9b6da17 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/uranium/uranium_door" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_ingot.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_ingot.json new file mode 100644 index 00000000..8e7908b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/uranium/uranium_ingot" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_nugget.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_nugget.json new file mode 100644 index 00000000..dc91c3b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/uranium/uranium_nugget" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_ore.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_ore.json new file mode 100644 index 00000000..6bd58a5b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/uranium_ore" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_trapdoor.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_trapdoor.json new file mode 100644 index 00000000..7e5df134 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/uranium_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/uranium_trapdoor_bottom" +} 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 new file mode 100644 index 00000000..c27e160e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/vortex_eye.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/vortex_eye" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/wasp_nest.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/wasp_nest.json new file mode 100644 index 00000000..e425fc70 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/wasp_nest.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/wasp_nest" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/wasp_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/wasp_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/wasp_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} 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 new file mode 100644 index 00000000..3ed815ff --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/water_cannon_gui" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon_gui.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon_gui.json new file mode 100644 index 00000000..91aa0a67 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/water_cannon_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon_held_geo.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon_held_geo.json new file mode 100644 index 00000000..e4c3cca8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon_held_geo.json @@ -0,0 +1,37 @@ +{ + "parent": "builtin/entity", + "display": { + "thirdperson_righthand": { + "translation": [0, -6, 5], + "scale": [0.7, 0.7, 0.7] + }, + "thirdperson_lefthand": { + "translation": [0, -6, 5], + "scale": [0.7, 0.7, 0.7] + }, + "firstperson_righthand": { + "rotation": [10, 0, -2], + "translation": [0, 0, 2], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "rotation": [10, 0, -2], + "translation": [0, 0, 2], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [30, -135, 0], + "translation": [-1, -1.5, 0], + "scale": [0.425, 0.425, 0.425] + }, + "fixed": { + "rotation": [90, -45, 90], + "translation": [0, -1.25, 0], + "scale": [0.4, 0.4, 0.4] + }, + "on_shelf": { + "rotation": [90, 0, 0], + "scale": [0.7, 0.7, 0.7] + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/dream_fire_flame.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/dream_fire_flame.json new file mode 100644 index 00000000..1418b317 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/dream_fire_flame.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "antarchy:dream_fire_flame" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/firefly.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/firefly.json new file mode 100644 index 00000000..e3d38dbf --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/firefly.json @@ -0,0 +1,3 @@ +{ + "textures": ["antarchy:firefly"] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/hypnotic_gas.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/hypnotic_gas.json new file mode 100644 index 00000000..b5d27db5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/hypnotic_gas.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "antarchy:hypnotic_gas/hypnotic_gas_01", + "antarchy:hypnotic_gas/hypnotic_gas_02", + "antarchy:hypnotic_gas/hypnotic_gas_03", + "antarchy:hypnotic_gas/hypnotic_gas_04", + "antarchy:hypnotic_gas/hypnotic_gas_05", + "antarchy:hypnotic_gas/hypnotic_gas_06", + "antarchy:hypnotic_gas/hypnotic_gas_07", + "antarchy:hypnotic_gas/hypnotic_gas_08" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/hypnotic_gas_cloud_down.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/hypnotic_gas_cloud_down.json new file mode 100644 index 00000000..b5d27db5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/hypnotic_gas_cloud_down.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "antarchy:hypnotic_gas/hypnotic_gas_01", + "antarchy:hypnotic_gas/hypnotic_gas_02", + "antarchy:hypnotic_gas/hypnotic_gas_03", + "antarchy:hypnotic_gas/hypnotic_gas_04", + "antarchy:hypnotic_gas/hypnotic_gas_05", + "antarchy:hypnotic_gas/hypnotic_gas_06", + "antarchy:hypnotic_gas/hypnotic_gas_07", + "antarchy:hypnotic_gas/hypnotic_gas_08" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/hypnotic_gas_down.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/hypnotic_gas_down.json new file mode 100644 index 00000000..b5d27db5 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/hypnotic_gas_down.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "antarchy:hypnotic_gas/hypnotic_gas_01", + "antarchy:hypnotic_gas/hypnotic_gas_02", + "antarchy:hypnotic_gas/hypnotic_gas_03", + "antarchy:hypnotic_gas/hypnotic_gas_04", + "antarchy:hypnotic_gas/hypnotic_gas_05", + "antarchy:hypnotic_gas/hypnotic_gas_06", + "antarchy:hypnotic_gas/hypnotic_gas_07", + "antarchy:hypnotic_gas/hypnotic_gas_08" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/inverted_geyser_base.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/inverted_geyser_base.json new file mode 100644 index 00000000..0ce3af96 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/inverted_geyser_base.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "antarchy:inverted_geyser/inverted_geyser_base_01", + "antarchy:inverted_geyser/inverted_geyser_base_02", + "antarchy:inverted_geyser/inverted_geyser_base_03", + "antarchy:inverted_geyser/inverted_geyser_base_04", + "antarchy:inverted_geyser/inverted_geyser_base_05", + "antarchy:inverted_geyser/inverted_geyser_base_06", + "antarchy:inverted_geyser/inverted_geyser_base_07", + "antarchy:inverted_geyser/inverted_geyser_base_08" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/inverted_geyser_plume.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/inverted_geyser_plume.json new file mode 100644 index 00000000..2c050d4c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/inverted_geyser_plume.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "antarchy:inverted_geyser/inverted_geyser_plume_01", + "antarchy:inverted_geyser/inverted_geyser_plume_02", + "antarchy:inverted_geyser/inverted_geyser_plume_03", + "antarchy:inverted_geyser/inverted_geyser_plume_04", + "antarchy:inverted_geyser/inverted_geyser_plume_05", + "antarchy:inverted_geyser/inverted_geyser_plume_06", + "antarchy:inverted_geyser/inverted_geyser_plume_07", + "antarchy:inverted_geyser/inverted_geyser_plume_08" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/inverted_geyser_poof.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/inverted_geyser_poof.json new file mode 100644 index 00000000..a2dbf068 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/inverted_geyser_poof.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "antarchy:inverted_geyser/inverted_geyser_poof_01", + "antarchy:inverted_geyser/inverted_geyser_poof_02", + "antarchy:inverted_geyser/inverted_geyser_poof_03", + "antarchy:inverted_geyser/inverted_geyser_poof_04", + "antarchy:inverted_geyser/inverted_geyser_poof_05", + "antarchy:inverted_geyser/inverted_geyser_poof_06", + "antarchy:inverted_geyser/inverted_geyser_poof_07", + "antarchy:inverted_geyser/inverted_geyser_poof_08" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/lotus_pollen.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/lotus_pollen.json new file mode 100644 index 00000000..2732837e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/lotus_pollen.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:drip_fall" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/nightmare_fire_flame.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/nightmare_fire_flame.json new file mode 100644 index 00000000..0d74ac08 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/nightmare_fire_flame.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "antarchy:nightmare_fire_flame" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/orange_ash.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/orange_ash.json new file mode 100644 index 00000000..ca698ca4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/orange_ash.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/peach_leaves_particle.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/peach_leaves_particle.json new file mode 100644 index 00000000..2c124f3e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/peach_leaves_particle.json @@ -0,0 +1,16 @@ +{ + "textures": [ + "antarchy:peach/peach_0", + "antarchy:peach/peach_1", + "antarchy:peach/peach_2", + "antarchy:peach/peach_3", + "antarchy:peach/peach_4", + "antarchy:peach/peach_5", + "antarchy:peach/peach_6", + "antarchy:peach/peach_7", + "antarchy:peach/peach_8", + "antarchy:peach/peach_9", + "antarchy:peach/peach_10", + "antarchy:peach/peach_11" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/stinky_fly.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/stinky_fly.json new file mode 100644 index 00000000..516d8df2 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/stinky_fly.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "antarchy:stinky_fly" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/stinky_gas.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/stinky_gas.json new file mode 100644 index 00000000..67beb202 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/stinky_gas.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "antarchy:stinky_gas/stinky_gas_01", + "antarchy:stinky_gas/stinky_gas_02", + "antarchy:stinky_gas/stinky_gas_03", + "antarchy:stinky_gas/stinky_gas_04", + "antarchy:stinky_gas/stinky_gas_05", + "antarchy:stinky_gas/stinky_gas_06", + "antarchy:stinky_gas/stinky_gas_07", + "antarchy:stinky_gas/stinky_gas_08" + ] +} 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 new file mode 100644 index 00000000..3b9c5815 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/sounds.json @@ -0,0 +1,2277 @@ +{ + "ambient.elythia.ouranwood_forest": { + "subtitle": "subtitles.antarchy.ambient_elythia_ouranwood_forest", + "sounds": [ + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest1", + "stream": true + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest2", + "stream": true + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest3", + "stream": true + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest4", + "stream": true + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest5", + "stream": true + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest6", + "stream": true + } + ] + }, + "thoraxis_nightmare_wastes_biome_additions": { + "sounds": [ + { "name": "antarchy:thoraxis_nightmare_wastes_ambient", "type": "event", "weight": 5 }, + { "name": "antarchy:thoraxis_nightmare_wastes_additions", "type": "event" } + ] + }, + "thoraxis_dream_dunes_biome_additions": { + "sounds": [ + { "name": "antarchy:thoraxis_dream_dunes_ambient", "type": "event", "weight": 5 }, + { "name": "antarchy:thoraxis_dream_dunes_additions", "type": "event" } + ] + }, + "thoraxis_lucid_pools_biome_additions": { + "sounds": [ + { "name": "antarchy:thoraxis_lucid_pools_ambient", "type": "event", "weight": 5 }, + { "name": "antarchy:thoraxis_lucid_pools_additions", "type": "event" } + ] + }, + "squidzooka_fire": { + "subtitle": "subtitles.antarchy.squidzooka_fire", + "sounds": [ + { + "name": "antarchy:squidzooka/squizooka1" + }, + { + "name": "antarchy:squidzooka/squizooka2" + }, + { + "name": "antarchy:squidzooka/squizooka3" + }, + { + "name": "antarchy:squidzooka/squizooka4" + } + ] + }, + "shrink_ray": { + "subtitle": "subtitles.antarchy.shrink_ray", + "sounds": [ + { + "name": "antarchy:size_ray/shrink_ray" + } + ] + }, + "growth_ray": { + "subtitle": "subtitles.antarchy.growth_ray", + "sounds": [ + { + "name": "antarchy:size_ray/growth_ray" + } + ] + }, + "size_ray_charge": { + "subtitle": "subtitles.antarchy.size_ray_charge", + "sounds": [ + { + "name": "antarchy:size_ray/size_ray_charge" + } + ] + }, + "ant_ambient": { + "subtitle": "subtitles.antarchy.ant_ambient", + "sounds": [ + { + "name": "antarchy:mob/ant/ant_ambient" + } + ] + }, + "ant_idle": { + "subtitle": "subtitles.antarchy.ant_idle", + "sounds": [ + { + "name": "antarchy:mob/ant/ant_idle1" + }, + { + "name": "antarchy:mob/ant/ant_idle2" + }, + { + "name": "antarchy:mob/ant/ant_idle3" + }, + { + "name": "antarchy:mob/ant/ant_idle4" + }, + { + "name": "antarchy:mob/ant/ant_idle5" + }, + { + "name": "antarchy:mob/ant/ant_idle6" + } + ] + }, + "ant_hurt": { + "subtitle": "subtitles.antarchy.ant_hurt", + "sounds": [ + { + "name": "antarchy:mob/ant/ant_hurt" + } + ] + }, + "ant_bite": { + "subtitle": "subtitles.antarchy.ant_bite", + "sounds": [ + { + "name": "antarchy:mob/ant/ant_bite" + } + ] + }, + "ant_gather": { + "subtitle": "subtitles.antarchy.ant_gather", + "sounds": [ + { + "name": "antarchy:mob/ant/ant_gather1" + }, + { + "name": "antarchy:mob/ant/ant_gather2" + } + ] + }, + "ant_nest": { + "subtitle": "subtitles.antarchy.ant_nest", + "sounds": [ + { + "name": "antarchy:block/ant_nest_exit" + } + ] + }, + "cloud_shark_bite": { + "subtitle": "subtitles.antarchy.cloud_shark_bite", + "sounds": [ + { + "name": "antarchy:mob/cloud_shark/cloud_shark_bite" + } + ] + }, + "cloud_shark_idle": { + "subtitle": "subtitles.antarchy.cloud_shark_idle", + "sounds": [ + { + "name": "antarchy:mob/cloud_shark/cloud_shark_idle1" + }, + { + "name": "antarchy:mob/cloud_shark/cloud_shark_idle2" + }, + { + "name": "antarchy:mob/cloud_shark/cloud_shark_idle3" + }, + { + "name": "antarchy:mob/cloud_shark/cloud_shark_idle4" + } + ] + }, + "cloud_shark_hurt": { + "subtitle": "subtitles.antarchy.cloud_shark_hurt", + "sounds": [ + { + "name": "antarchy:mob/cloud_shark/cloud_shark_hurt" + } + ] + }, + "cloud_shark_death": { + "subtitle": "subtitles.antarchy.cloud_shark_death", + "sounds": [ + { + "name": "antarchy:mob/cloud_shark/cloud_shark_death" + } + ] + }, + "cloud_shark_fly": { + "subtitle": "subtitles.antarchy.cloud_shark_fly", + "sounds": [ + { + "name": "antarchy:mob/cloud_shark/cloud_shark_fly1" + } + ] + }, + "caterpillar_idle": { + "subtitle": "subtitles.antarchy.caterpillar_idle", + "sounds": [ + { + "name": "antarchy:mob/caterpillar/caterpillar_idle1" + }, + { + "name": "antarchy:mob/caterpillar/caterpillar_idle2" + } + ] + }, + "caterpillar_hurt": { + "subtitle": "subtitles.antarchy.caterpillar_hurt", + "sounds": [ + { + "name": "antarchy:mob/caterpillar/caterpillar_hurt1" + }, + { + "name": "antarchy:mob/caterpillar/caterpillar_hurt2" + }, + { + "name": "antarchy:mob/caterpillar/caterpillar_hurt3" + } + ] + }, + "caterpillar_crawl": { + "subtitle": "subtitles.antarchy.caterpillar_crawl", + "sounds": [ + { + "name": "antarchy:mob/caterpillar/caterpillar_crawl1" + }, + { + "name": "antarchy:mob/caterpillar/caterpillar_crawl2" + }, + { + "name": "antarchy:mob/caterpillar/caterpillar_crawl3" + }, + { + "name": "antarchy:mob/caterpillar/caterpillar_crawl4" + }, + { + "name": "antarchy:mob/caterpillar/caterpillar_crawl5" + }, + { + "name": "antarchy:mob/caterpillar/caterpillar_crawl6" + } + ] + }, + "butterfly_hurt": { + "subtitle": "subtitles.antarchy.butterfly_hurt", + "sounds": [ + { + "name": "antarchy:mob/caterpillar/caterpillar_hurt1" + }, + { + "name": "antarchy:mob/caterpillar/caterpillar_hurt2" + }, + { + "name": "antarchy:mob/caterpillar/caterpillar_hurt3" + } + ] + }, + "brutalfly_idle": { + "subtitle": "subtitles.antarchy.brutalfly_idle", + "sounds": [ + { + "name": "antarchy:mob/brutalfly/brutalfly_idle1" + }, + { + "name": "antarchy:mob/brutalfly/brutalfly_idle2" + }, + { + "name": "antarchy:mob/brutalfly/brutalfly_idle3" + } + ] + }, + "brutalfly_death": { + "subtitle": "subtitles.antarchy.brutalfly_death", + "sounds": [ + { + "name": "antarchy:mob/brutalfly/brutalfly_death1" + } + ] + }, + "missile_squid_ambient": { + "subtitle": "subtitles.antarchy.missile_squid_ambient", + "sounds": [ + { + "name": "entity.squid.ambient", + "type": "event" + } + ] + }, + "missile_squid_hurt": { + "subtitle": "subtitles.antarchy.missile_squid_hurt", + "sounds": [ + { + "name": "entity.squid.hurt", + "type": "event" + } + ] + }, + "missile_squid_death": { + "subtitle": "subtitles.antarchy.missile_squid_death", + "sounds": [ + { + "name": "entity.squid.death", + "type": "event" + } + ] + }, + "missile_squid_attack": { + "subtitle": "subtitles.antarchy.missile_squid_attack", + "sounds": [ + { + "name": "antarchy:mob/missile_squid/missile_squid_attack1" + }, + { + "name": "antarchy:mob/missile_squid/missile_squid_attack2" + }, + { + "name": "antarchy:mob/missile_squid/missile_squid_attack3" + } + ] + }, + "kraken_flying_loop": { + "subtitle": "subtitles.antarchy.kraken_flying_loop", + "sounds": [ + { + "name": "antarchy:mob/kraken/kraken_flying_loop1", + "stream": true + }, + { + "name": "antarchy:mob/kraken/kraken_flying_loop2", + "stream": true + } + ] + }, + "kraken_flying_sideways_loop": { + "subtitle": "subtitles.antarchy.kraken_flying_sideways_loop", + "sounds": [ + { + "name": "antarchy:mob/kraken/kraken_flying_sideways_loop1", + "stream": true + }, + { + "name": "antarchy:mob/kraken/kraken_flying_sideways_loop2", + "stream": true + } + ] + }, + "kraken_attack": { + "subtitle": "subtitles.antarchy.kraken_attack", + "sounds": [ + { + "name": "antarchy:mob/kraken/kraken_attack1" + } + ] + }, + "kraken_spin": { + "subtitle": "subtitles.antarchy.kraken_spin", + "sounds": [ + { + "name": "antarchy:mob/kraken/kraken_spin" + } + ] + }, + "kraken_roar": { + "subtitle": "subtitles.antarchy.kraken_roar", + "sounds": [ + { + "name": "antarchy:mob/kraken/kraken_roar" + } + ] + }, + "kraken_summon": { + "subtitle": "subtitles.antarchy.kraken_summon", + "sounds": [ + { + "name": "antarchy:mob/kraken/kraken_spawn" + } + ] + }, + "kraken_hurt": { + "subtitle": "subtitles.antarchy.kraken_hurt", + "sounds": [ + { + "name": "antarchy:mob/kraken/kraken_hurt1" + }, + { + "name": "antarchy:mob/kraken/kraken_hurt2" + } + ] + }, + "kraken_death": { + "subtitle": "subtitles.antarchy.kraken_death", + "sounds": [ + { + "name": "antarchy:mob/kraken/kraken_death" + } + ] + }, + "basilisk_idle_loop": { + "subtitle": "subtitles.antarchy.basilisk_idle_loop", + "sounds": [ + { + "name": "antarchy:mob/basilisk/basilisk_idle_loop1", + "stream": true + }, + { + "name": "antarchy:mob/basilisk/basilisk_idle_loop2", + "stream": true + } + ] + }, + "basilisk_slither_loop": { + "subtitle": "subtitles.antarchy.basilisk_slither_loop", + "sounds": [ + { + "name": "antarchy:mob/basilisk/basilisk_slither_loop1", + "stream": true + }, + { + "name": "antarchy:mob/basilisk/basilisk_slither_loop2", + "stream": true + } + ] + }, + "basilisk_bite": { + "subtitle": "subtitles.antarchy.basilisk_bite", + "sounds": [ + { + "name": "antarchy:mob/basilisk/basilisk_bite" + } + ] + }, + "basilisk_hiss": { + "subtitle": "subtitles.antarchy.basilisk_hiss", + "sounds": [ + { + "name": "antarchy:mob/basilisk/basilisk_hiss" + } + ] + }, + "basilisk_hurt": { + "subtitle": "subtitles.antarchy.basilisk_hurt", + "sounds": [ + { + "name": "antarchy:mob/basilisk/basilisk_hurt1" + }, + { + "name": "antarchy:mob/basilisk/basilisk_hurt2" + } + ] + }, + "basilisk_death": { + "subtitle": "subtitles.antarchy.basilisk_death", + "sounds": [ + { + "name": "antarchy:mob/basilisk/basilisk_death" + } + ] + }, + "bomber_walk": { + "subtitle": "subtitles.antarchy.bomber_walk", + "sounds": [ + { + "name": "antarchy:mob/bomber/walk1" + }, + { + "name": "antarchy:mob/bomber/walk2" + }, + { + "name": "antarchy:mob/bomber/walk3" + }, + { + "name": "antarchy:mob/bomber/walk4" + } + ] + }, + "bomber_knock": { + "subtitle": "subtitles.antarchy.bomber_knock", + "sounds": [ + { + "name": "antarchy:mob/bomber/knock1" + }, + { + "name": "antarchy:mob/bomber/knock2" + }, + { + "name": "antarchy:mob/bomber/knock3" + }, + { + "name": "antarchy:mob/bomber/knock4" + }, + { + "name": "antarchy:mob/bomber/knock5" + } + ] + }, + "bomber_explode": { + "subtitle": "subtitles.antarchy.bomber_explode", + "sounds": [ + { + "name": "antarchy:mob/bomber/explode1" + }, + { + "name": "antarchy:mob/bomber/explode2" + } + ] + }, + "toreterror_idle": { + "subtitle": "subtitles.antarchy.toreterror_idle", + "sounds": [ + { + "name": "antarchy:mob/toreterror/idle1" + }, + { + "name": "antarchy:mob/toreterror/idle2" + }, + { + "name": "antarchy:mob/toreterror/idle3" + } + ] + }, + "toreterror_hurt": { + "subtitle": "subtitles.antarchy.toreterror_hurt", + "sounds": [ + { + "name": "antarchy:mob/toreterror/hurt1" + }, + { + "name": "antarchy:mob/toreterror/hurt2" + }, + { + "name": "antarchy:mob/toreterror/hurt3" + } + ] + }, + "toreterror_death": { + "subtitle": "subtitles.antarchy.toreterror_death", + "sounds": [ + { + "name": "antarchy:mob/toreterror/death" + } + ] + }, + "toreterror_bomber_fire": { + "subtitle": "subtitles.antarchy.toreterror_bomber_fire", + "sounds": [ + { + "name": "antarchy:mob/toreterror/bomber_fire1" + }, + { + "name": "antarchy:mob/toreterror/bomber_fire2" + } + ] + }, + "toreterror_spin": { + "subtitle": "subtitles.antarchy.toreterror_spin", + "sounds": [ + { + "name": "antarchy:mob/toreterror/spin" + } + ] + }, + "toreterror_ricochet": { + "subtitle": "subtitles.antarchy.toreterror_ricochet", + "sounds": [ + { + "name": "antarchy:mob/toreterror/richochet1" + }, + { + "name": "antarchy:mob/toreterror/richochet2" + }, + { + "name": "antarchy:mob/toreterror/richochet3" + } + ] + }, + "water_cannon_fire": { + "subtitle": "subtitles.antarchy.water_cannon_fire", + "sounds": [ + { + "name": "antarchy:mob/toreterror/water_cannon1", + "attenuation_distance": 28 + }, + { + "name": "antarchy:mob/toreterror/water_cannon2", + "attenuation_distance": 28 + }, + { + "name": "antarchy:mob/toreterror/water_cannon3", + "attenuation_distance": 28 + }, + { + "name": "antarchy:mob/toreterror/water_cannon4", + "attenuation_distance": 28 + } + ] + }, + "toreterror_jump_up": { + "subtitle": "subtitles.antarchy.toreterror_jump_up", + "sounds": [ + { + "name": "antarchy:mob/toreterror/jump_up1" + }, + { + "name": "antarchy:mob/toreterror/jump_up2" + } + ] + }, + "toreterror_jump_land": { + "subtitle": "subtitles.antarchy.toreterror_jump_land", + "sounds": [ + { + "name": "antarchy:mob/toreterror/jump_land1" + }, + { + "name": "antarchy:mob/toreterror/jump_land2" + } + ] + }, + "stinky_fly": { + "subtitle": "subtitles.antarchy.stinky_fly", + "sounds": [ + { + "name": "antarchy:effect/stinky/stinky_flies1" + }, + { + "name": "antarchy:effect/stinky/stinky_flies2" + }, + { + "name": "antarchy:effect/stinky/stinky_flies3" + }, + { + "name": "antarchy:effect/stinky/stinky_flies4" + }, + { + "name": "antarchy:effect/stinky/stinky_flies5" + }, + { + "name": "antarchy:effect/stinky/stinky_flies6" + }, + { + "name": "antarchy:effect/stinky/stinky_flies7" + }, + { + "name": "antarchy:effect/stinky/stinky_flies8" + } + ] + }, + "stink_bug_fart": { + "subtitle": "subtitles.antarchy.stink_bug_fart", + "sounds": [ + { + "name": "antarchy:mob/stink_bug/fart1" + }, + { + "name": "antarchy:mob/stink_bug/fart2" + }, + { + "name": "antarchy:mob/stink_bug/fart3" + }, + { + "name": "antarchy:mob/stink_bug/fart4" + } + ] + }, + "stink_bug_idle": { + "subtitle": "subtitles.antarchy.stink_bug_idle", + "sounds": [ + { + "name": "antarchy:mob/stink_bug/idle1" + }, + { + "name": "antarchy:mob/stink_bug/idle2" + }, + { + "name": "antarchy:mob/stink_bug/idle3" + }, + { + "name": "antarchy:mob/stink_bug/idle4" + }, + { + "name": "antarchy:mob/stink_bug/idle5" + } + ] + }, + "rolly_polly_idle": { + "subtitle": "subtitles.antarchy.rolly_polly_idle", + "sounds": [ + { + "name": "antarchy:mob/rolly_polly/idle1" + }, + { + "name": "antarchy:mob/rolly_polly/idle2" + }, + { + "name": "antarchy:mob/rolly_polly/idle3" + }, + { + "name": "antarchy:mob/rolly_polly/idle4" + }, + { + "name": "antarchy:mob/rolly_polly/idle5" + } + ] + }, + "rolly_polly_wheel_mode": { + "subtitle": "subtitles.antarchy.rolly_polly_wheel_mode", + "sounds": [ + { + "name": "antarchy:mob/rolly_polly/wheel_mode" + } + ] + }, + "rolly_polly_normal_mode": { + "subtitle": "subtitles.antarchy.rolly_polly_normal_mode", + "sounds": [ + { + "name": "antarchy:mob/rolly_polly/nromal_mode" + } + ] + }, + "rolly_polly_roll": { + "subtitle": "subtitles.antarchy.rolly_polly_roll", + "sounds": [ + { + "name": "antarchy:mob/rolly_polly/roll1" + } + ] + }, + "thoraxis_nightmare_wastes_ambient": { + "subtitle": "subtitles.antarchy.thoraxis_nightmare_wastes_ambient", + "sounds": [ + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/ambience_reversed", + "volume": 0.28, + "weight": 4 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/dark1_reversed", + "volume": 0.24, + "weight": 2 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/dark2_reversed", + "volume": 0.24, + "weight": 2 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/ground1_reversed", + "volume": 0.2, + "weight": 1 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/ground2_reversed", + "volume": 0.2, + "weight": 1 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/ground3_reversed", + "volume": 0.2, + "weight": 1 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/ground4_reversed", + "volume": 0.2, + "weight": 1 + } + ] + }, + "thoraxis_nightmare_wastes_additions": { + "subtitle": "subtitles.antarchy.thoraxis_nightmare_wastes_additions", + "sounds": [ + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/addition1_reversed", + "volume": 0.6 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/addition2_reversed", + "volume": 0.6 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/addition3_reversed", + "volume": 0.6 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/addition4_reversed", + "volume": 0.6 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/addition5_reversed", + "volume": 0.6 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/addition6_reversed", + "volume": 0.6 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/addition7_reversed", + "volume": 0.6 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/addition8_reversed", + "volume": 0.6 + } + ] + }, + "thoraxis_nightmare_wastes_mood": { + "subtitle": "subtitles.antarchy.thoraxis_nightmare_wastes_mood", + "sounds": [ + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/mood1_reversed", + "volume": 0.5 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/mood2_reversed", + "volume": 0.5 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/mood3_reversed", + "volume": 0.5 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/mood4_reversed", + "volume": 0.5 + }, + { + "name": "antarchy:ambient/thoraxis/nightmare_wastes/mood5_reversed", + "volume": 0.5 + } + ] + }, + "thoraxis_dream_dunes_ambient": { + "subtitle": "subtitles.antarchy.thoraxis_dream_dunes_ambient", + "sounds": [ + { + "name": "antarchy:ambient/thoraxis/dream_dunes/wind1_reversed", + "volume": 0.3, + "weight": 3 + }, + { + "name": "antarchy:ambient/thoraxis/dream_dunes/wind2_reversed", + "volume": 0.3, + "weight": 3 + }, + { + "name": "antarchy:ambient/thoraxis/dream_dunes/wind3_reversed", + "volume": 0.3, + "weight": 3 + }, + { + "name": "antarchy:ambient/thoraxis/dream_dunes/wind4_reversed", + "volume": 0.3, + "weight": 3 + }, + { + "name": "antarchy:ambient/thoraxis/dream_dunes/with1_reversed", + "volume": 0.24, + "weight": 2 + } + ] + }, + "thoraxis_dream_dunes_additions": { + "subtitle": "subtitles.antarchy.thoraxis_dream_dunes_additions", + "sounds": [ + { + "name": "ambient/nether/soulsand_valley/sand1", + "volume": 0.65, + "weight": 3 + }, + { + "name": "ambient/nether/soulsand_valley/sand2", + "volume": 0.65, + "weight": 3 + }, + { + "name": "ambient/nether/soulsand_valley/sand3", + "volume": 0.65, + "weight": 3 + }, + { + "name": "ambient/nether/soulsand_valley/ambience", + "volume": 0.5, + "weight": 2 + }, + { + "name": "ambient/nether/soulsand_valley/mood1", + "volume": 0.45, + "weight": 1 + }, + { + "name": "ambient/nether/soulsand_valley/mood2", + "volume": 0.45, + "weight": 1 + } + ] + }, + "thoraxis_dream_dunes_mood": { + "subtitle": "subtitles.antarchy.thoraxis_dream_dunes_mood", + "sounds": [ + { + "name": "ambient/nether/soulsand_valley/mood1", + "volume": 0.45, + "weight": 2 + }, + { + "name": "ambient/nether/soulsand_valley/mood2", + "volume": 0.45, + "weight": 2 + } + ] + }, + "thoraxis_lucid_pools_ambient": { + "subtitle": "subtitles.antarchy.thoraxis_lucid_pools_ambient", + "sounds": [ + { + "name": "antarchy:ambient/thoraxis/lucid_pools/ambient", + "volume": 0.26, + "weight": 4 + } + ] + }, + "thoraxis_lucid_pools_additions": { + "subtitle": "subtitles.antarchy.thoraxis_lucid_pools_additions", + "sounds": [ + { + "name": "antarchy:ambient/thoraxis/lucid_pools/curse1", + "volume": 0.48 + }, + { + "name": "antarchy:ambient/thoraxis/lucid_pools/curse2", + "volume": 0.48 + }, + { + "name": "antarchy:ambient/thoraxis/lucid_pools/curse3", + "volume": 0.48 + }, + { + "name": "antarchy:ambient/thoraxis/lucid_pools/curse4", + "volume": 0.48 + } + ] + }, + "thoraxis_lucid_pools_mood": { + "subtitle": "subtitles.antarchy.thoraxis_lucid_pools_mood", + "sounds": [ + { + "name": "ambient/nether/soulsand_valley/mood1", + "volume": 0.45, + "weight": 2 + }, + { + "name": "ambient/nether/soulsand_valley/mood2", + "volume": 0.45, + "weight": 2 + } + ] + }, + "lucid_ambient": { + "subtitle": "subtitles.antarchy.lucid_ambient", + "sounds": [ + { + "name": "antarchy:mob/lucid/lucid_ambience", + "stream": true + } + ] + }, + "lucid_flying": { + "subtitle": "subtitles.antarchy.lucid_flying", + "sounds": [ + { + "name": "antarchy:mob/lucid/lucid_flying", + "stream": true + } + ] + }, + "lucid_attack": { + "subtitle": "subtitles.antarchy.lucid_attack", + "sounds": [ + { + "name": "antarchy:mob/lucid/lucid_attack" + } + ] + }, + "lucid_bolt": { + "subtitle": "subtitles.antarchy.lucid_bolt", + "sounds": [ + { + "name": "antarchy:mob/lucid/lucid_bolt" + } + ] + }, + "lucid_hurt": { + "subtitle": "subtitles.antarchy.lucid_hurt", + "sounds": [ + { + "name": "antarchy:mob/lucid/lucid_hurt1" + }, + { + "name": "antarchy:mob/lucid/lucid_hurt2" + } + ] + }, + "lucid_death": { + "subtitle": "subtitles.antarchy.lucid_death", + "sounds": [ + { + "name": "antarchy:mob/lucid/lucid_death" + } + ] + }, + "reverie_idle": { + "subtitle": "subtitles.antarchy.reverie_idle", + "sounds": [ + { + "name": "antarchy:mob/reverie/reverie_idle1", + "volume": 0.5 + }, + { + "name": "antarchy:mob/reverie/reverie_idle2", + "volume": 0.5 + }, + { + "name": "antarchy:mob/reverie/reverie_idle3", + "volume": 0.5 + } + ] + }, + "reverie_hurt": { + "subtitle": "subtitles.antarchy.reverie_hurt", + "sounds": [ + { + "name": "antarchy:mob/reverie/reverie_hurt1", + "volume": 0.5 + }, + { + "name": "antarchy:mob/reverie/reverie_hurt2", + "volume": 0.5 + }, + { + "name": "antarchy:mob/reverie/reverie_hurt3", + "volume": 0.5 + } + ] + }, + "reverie_worry": { + "subtitle": "subtitles.antarchy.reverie_worry", + "sounds": [ + { + "name": "antarchy:mob/reverie/reverie_worry1", + "volume": 0.5 + }, + { + "name": "antarchy:mob/reverie/reverie_worry2", + "volume": 0.5 + } + ] + }, + "reverie_save": { + "subtitle": "subtitles.antarchy.reverie_save", + "sounds": [ + { + "name": "antarchy:mob/reverie/reverie_save1", + "volume": 0.5 + }, + { + "name": "antarchy:mob/reverie/reverie_save2", + "volume": 0.5 + }, + { + "name": "antarchy:mob/reverie/reverie_save3", + "volume": 0.5 + } + ] + }, + "reverie_join_player": { + "subtitle": "subtitles.antarchy.reverie_join_player", + "sounds": [ + { + "name": "antarchy:mob/reverie/reverie_joinplayer1", + "volume": 0.5 + }, + { + "name": "antarchy:mob/reverie/reverie_joinplayer2", + "volume": 0.5 + }, + { + "name": "antarchy:mob/reverie/reverie_joinplayer3", + "volume": 0.5 + } + ] + }, + "reverie_alert": { + "subtitle": "subtitles.antarchy.reverie_alert", + "sounds": [ + { + "name": "antarchy:mob/reverie/reverie_alert1", + "volume": 0.5 + }, + { + "name": "antarchy:mob/reverie/reverie_alert2", + "volume": 0.5 + }, + { + "name": "antarchy:mob/reverie/reverie_alert3", + "volume": 0.5 + } + ] + }, + "flying_squirrel_idle": { + "subtitle": "subtitles.antarchy.flying_squirrel_idle", + "sounds": [ + { + "name": "antarchy:mob/flying_squirrel/flying_squirrel_idle1" + }, + { + "name": "minecraft:mob/fox/sniff1" + }, + { + "name": "minecraft:mob/fox/sniff2" + }, + { + "name": "minecraft:mob/fox/sniff4" + } + ] + }, + "flying_squirrel_beg": { + "subtitle": "subtitles.antarchy.flying_squirrel_beg", + "sounds": [ + { + "name": "entity.cat.beg_for_food", + "type": "event" + } + ] + }, + "flying_squirrel_nut": { + "subtitle": "subtitles.antarchy.flying_squirrel_nut", + "sounds": [ + { + "name": "minecraft:mob/fox/eat1" + }, + { + "name": "minecraft:mob/fox/eat2" + }, + { + "name": "minecraft:mob/fox/eat3" + } + ] + }, + "flying_squirrel_glide_loop": { + "subtitle": "subtitles.antarchy.flying_squirrel_glide_loop", + "sounds": [ + { + "name": "antarchy:mob/flying_squirrel/flying_squirrel_glide_loop" + } + ] + }, + "flying_squirrel_hurt": { + "subtitle": "subtitles.antarchy.flying_squirrel_hurt", + "sounds": [ + { + "name": "minecraft:mob/fox/hurt1" + }, + { + "name": "minecraft:mob/fox/hurt2" + }, + { + "name": "minecraft:mob/fox/hurt3" + }, + { + "name": "minecraft:mob/fox/hurt4" + } + ] + }, + "flying_squirrel_death": { + "subtitle": "subtitles.antarchy.flying_squirrel_death", + "sounds": [ + { + "name": "minecraft:mob/fox/death1" + }, + { + "name": "minecraft:mob/fox/death2" + } + ] + }, + "nightmare_idle": { + "subtitle": "subtitles.antarchy.nightmare_idle", + "sounds": [ + { + "name": "antarchy:mob/nightmare/nightmare_idle1" + }, + { + "name": "antarchy:mob/nightmare/nightmare_idle2" + }, + { + "name": "antarchy:mob/nightmare/nightmare_idle3" + }, + { + "name": "antarchy:mob/nightmare/nightmare_idle4" + } + ] + }, + "nightmare_hurt": { + "subtitle": "subtitles.antarchy.nightmare_hurt", + "sounds": [ + { + "name": "antarchy:mob/nightmare/nightmare_hurt1" + } + ] + }, + "nightmare_roar": { + "subtitle": "subtitles.antarchy.nightmare_roar", + "sounds": [ + { + "name": "antarchy:mob/nightmare/nightmare_roar1" + }, + { + "name": "antarchy:mob/nightmare/nightmare_roar2" + } + ] + }, + "nightmare_death": { + "subtitle": "subtitles.antarchy.nightmare_death", + "sounds": [ + { + "name": "antarchy:mob/nightmare/nightmare_death" + } + ] + }, + "nightmare_bite": { + "subtitle": "subtitles.antarchy.nightmare_bite", + "sounds": [ + { + "name": "minecraft:mob/phantom/bite1" + }, + { + "name": "minecraft:mob/phantom/bite2" + } + ] + }, + "nightmare_flap": { + "subtitle": "subtitles.antarchy.nightmare_flap", + "sounds": [ + { + "name": "minecraft:mob/enderdragon/wings1" + }, + { + "name": "minecraft:mob/enderdragon/wings2" + }, + { + "name": "minecraft:mob/enderdragon/wings3" + }, + { + "name": "minecraft:mob/enderdragon/wings4" + }, + { + "name": "minecraft:mob/enderdragon/wings5" + }, + { + "name": "minecraft:mob/enderdragon/wings6" + } + ] + }, + "mantis_ambient": { + "subtitle": "subtitles.antarchy.mantis_ambient", + "sounds": [ + { + "name": "antarchy:mob/mantis/mantis_idle1" + }, + { + "name": "antarchy:mob/mantis/mantis_idle2" + }, + { + "name": "antarchy:mob/mantis/mantis_idle3" + }, + { + "name": "antarchy:mob/mantis/mantis_idle4" + }, + { + "name": "antarchy:mob/mantis/mantis_idle5" + }, + { + "name": "antarchy:mob/mantis/mantis_idle6" + }, + { + "name": "antarchy:mob/mantis/mantis_idle7" + } + ] + }, + "mantis_hurt": { + "subtitle": "subtitles.antarchy.mantis_hurt", + "sounds": [ + { + "name": "antarchy:mob/mantis/mantis_hurt1" + }, + { + "name": "antarchy:mob/mantis/mantis_hurt2" + }, + { + "name": "antarchy:mob/mantis/mantis_hurt3" + } + ] + }, + "mantis_attack": { + "subtitle": "subtitles.antarchy.mantis_attack", + "sounds": [ + { + "name": "antarchy:mob/mantis/mantis_attack1" + }, + { + "name": "antarchy:mob/mantis/mantis_attack2" + }, + { + "name": "antarchy:mob/mantis/mantis_attack3" + }, + { + "name": "antarchy:mob/mantis/mantis_attack4" + } + ] + }, + "mantis_fly_loop": { + "subtitle": "subtitles.antarchy.mantis_fly_loop", + "sounds": [ + { + "name": "antarchy:mob/mantis/mantis_fly_loop", + "stream": true + } + ] + }, + "gravity_gun_pickup": { + "subtitle": "subtitles.antarchy.gravity_gun_pickup", + "sounds": [ + { + "name": "antarchy:gravity_gun/gravity_gun_pickup" + } + ] + }, + "gravity_gun_drop": { + "subtitle": "subtitles.antarchy.gravity_gun_drop", + "sounds": [ + { + "name": "antarchy:gravity_gun/gravity_gun_drop" + } + ] + }, + "gravity_gun_hold_loop": { + "subtitle": "subtitles.antarchy.gravity_gun_hold_loop", + "sounds": [ + { + "name": "antarchy:gravity_gun/gravity_gun_hold_loop" + } + ] + }, + "gravity_gun_launch": { + "subtitle": "subtitles.antarchy.gravity_gun_launch", + "sounds": [ + { + "name": "antarchy:gravity_gun/gravity_gun_launch1" + }, + { + "name": "antarchy:gravity_gun/gravity_gun_launch2" + }, + { + "name": "antarchy:gravity_gun/gravity_gun_launch3" + }, + { + "name": "antarchy:gravity_gun/gravity_gun_launch4" + } + ] + }, + "gravity_gun_dryfire": { + "subtitle": "subtitles.antarchy.gravity_gun_dryfire", + "sounds": [ + { + "name": "antarchy:gravity_gun/gravity_gun_dryfire" + } + ] + }, + "bed_bug_ambient": { + "subtitle": "subtitles.antarchy.bed_bug_ambient", + "sounds": [ + { + "name": "antarchy:mob/bed_bug/bed_bug_ambient1" + }, + { + "name": "antarchy:mob/bed_bug/bed_bug_ambient2" + } + ] + }, + "bed_bug_hurt": { + "subtitle": "subtitles.antarchy.bed_bug_hurt", + "sounds": [ + { + "name": "antarchy:mob/bed_bug/bed_bug_hurt1" + }, + { + "name": "antarchy:mob/bed_bug/bed_bug_hurt2" + } + ] + }, + "bed_bug_attack": { + "subtitle": "subtitles.antarchy.bed_bug_attack", + "sounds": [ + { + "name": "antarchy:mob/bed_bug/bed_bug_attack1" + } + ] + }, + "wasp_idle": { + "subtitle": "subtitles.antarchy.wasp_idle", + "sounds": [ + { + "name": "antarchy:mob/wasp/buzz1" + }, + { + "name": "antarchy:mob/wasp/buzz2" + } + ] + }, + "wasp_hurt": { + "subtitle": "subtitles.antarchy.wasp_hurt", + "sounds": [ + { + "name": "antarchy:mob/wasp/hurt1" + }, + { + "name": "antarchy:mob/wasp/hurt2" + }, + { + "name": "antarchy:mob/wasp/hurt3" + } + ] + }, + "wasp_attack": { + "subtitle": "subtitles.antarchy.wasp_attack", + "sounds": [ + { + "name": "antarchy:mob/wasp/attack1" + }, + { + "name": "antarchy:mob/wasp/attack2" + }, + { + "name": "antarchy:mob/wasp/attack3" + }, + { + "name": "antarchy:mob/wasp/attack4" + }, + { + "name": "antarchy:mob/wasp/attack5" + } + ] + }, + "wasp_death": { + "subtitle": "subtitles.antarchy.wasp_death", + "sounds": [ + { + "name": "antarchy:mob/wasp/death1" + }, + { + "name": "antarchy:mob/wasp/death2" + } + ] + }, + "scorpion_ambient": { + "subtitle": "subtitles.antarchy.scorpion_ambient", + "sounds": [ + { + "name": "antarchy:mob/scorpion/scorpion_ambient1" + } + ] + }, + "scorpion_hurt": { + "subtitle": "subtitles.antarchy.scorpion_hurt", + "sounds": [ + { + "name": "antarchy:mob/scorpion/scorpion_hurt1" + }, + { + "name": "antarchy:mob/scorpion/scorpion_hurt2" + }, + { + "name": "antarchy:mob/scorpion/scorpion_hurt3" + } + ] + }, + "scorpion_attack": { + "subtitle": "subtitles.antarchy.scorpion_attack", + "sounds": [ + { + "name": "antarchy:mob/scorpion/scorpion_attack1" + }, + { + "name": "antarchy:mob/scorpion/scorpion_attack2" + } + ] + }, + "emperor_scorpion_ambient": { + "subtitle": "subtitles.antarchy.emperor_scorpion_ambient", + "sounds": [ + { + "name": "antarchy:mob/emperor_scorpion/emperor_scorpion_ambient1" + } + ] + }, + "emperor_scorpion_hurt": { + "subtitle": "subtitles.antarchy.emperor_scorpion_hurt", + "sounds": [ + { + "name": "antarchy:mob/emperor_scorpion/emperor_scorpion_hurt1" + }, + { + "name": "antarchy:mob/emperor_scorpion/emperor_scorpion_hurt2" + }, + { + "name": "antarchy:mob/emperor_scorpion/emperor_scorpion_hurt3" + } + ] + }, + "emperor_scorpion_attack": { + "subtitle": "subtitles.antarchy.emperor_scorpion_attack", + "sounds": [ + { + "name": "antarchy:mob/emperor_scorpion/emperor_scorpion_attack1" + } + ] + }, + "emperor_scorpion_roar": { + "subtitle": "subtitles.antarchy.emperor_scorpion_roar", + "sounds": [ + { + "name": "antarchy:mob/emperor_scorpion/emperor_scorpion_roar1" + } + ] + }, + "moleworm_ambient": { + "subtitle": "subtitles.antarchy.moleworm_ambient", + "sounds": [ + { + "name": "antarchy:mob/moleworm/moleworm_idle1" + }, + { + "name": "antarchy:mob/moleworm/moleworm_idle2" + }, + { + "name": "antarchy:mob/moleworm/moleworm_idle3" + }, + { + "name": "antarchy:mob/moleworm/moleworm_idle4" + }, + { + "name": "antarchy:mob/moleworm/moleworm_idle5" + }, + { + "name": "antarchy:mob/moleworm/moleworm_idle6" + }, + { + "name": "antarchy:mob/moleworm/moleworm_idle7" + } + ] + }, + "moleworm_hurt": { + "subtitle": "subtitles.antarchy.moleworm_hurt", + "sounds": [ + { + "name": "antarchy:mob/moleworm/moleworm_hurt1" + }, + { + "name": "antarchy:mob/moleworm/moleworm_hurt2" + }, + { + "name": "antarchy:mob/moleworm/moleworm_hurt3" + } + ] + }, + "moleworm_attack": { + "subtitle": "subtitles.antarchy.moleworm_attack", + "sounds": [ + { + "name": "antarchy:mob/moleworm/moleworm_attack1" + }, + { + "name": "antarchy:mob/moleworm/moleworm_attack2" + } + ] + }, + "moleworm_dig": { + "subtitle": "subtitles.antarchy.moleworm_dig", + "sounds": [ + { + "name": "antarchy:mob/moleworm/moleworm_dig1" + }, + { + "name": "antarchy:mob/moleworm/moleworm_dig2" + }, + { + "name": "antarchy:mob/moleworm/moleworm_dig3" + } + ] + }, + "molevore_ambient": { + "subtitle": "subtitles.antarchy.molevore_ambient", + "sounds": [ + { + "name": "antarchy:mob/molevore/molevore_idle1" + }, + { + "name": "antarchy:mob/molevore/molevore_idle2" + }, + { + "name": "antarchy:mob/molevore/molevore_idle3" + } + ] + }, + "molevore_hurt": { + "subtitle": "subtitles.antarchy.molevore_hurt", + "sounds": [ + { + "name": "antarchy:mob/molevore/molevore_hurt1" + }, + { + "name": "antarchy:mob/molevore/molevore_hurt2" + }, + { + "name": "antarchy:mob/molevore/molevore_hurt3" + } + ] + }, + "molevore_attack": { + "subtitle": "subtitles.antarchy.molevore_attack", + "sounds": [ + { + "name": "antarchy:mob/molevore/molevore_attack1" + }, + { + "name": "antarchy:mob/molevore/molevore_attack2" + }, + { + "name": "antarchy:mob/molevore/molevore_attack3" + } + ] + }, + "molevore_dig": { + "subtitle": "subtitles.antarchy.molevore_dig", + "sounds": [ + { + "name": "antarchy:mob/molevore/molevore_dig1" + } + ] + }, + "duct_tape_use": { + "subtitle": "subtitles.antarchy.duct_tape_use", + "sounds": [ + { + "name": "antarchy:block/duct_tape/duct_tape1" + }, + { + "name": "antarchy:block/duct_tape/duct_tape2" + }, + { + "name": "antarchy:block/duct_tape/duct_tape3" + }, + { + "name": "antarchy:block/duct_tape/duct_tape4" + }, + { + "name": "antarchy:block/duct_tape/duct_tape5" + }, + { + "name": "antarchy:block/duct_tape/duct_tape6" + }, + { + "name": "antarchy:block/duct_tape/duct_tape7" + }, + { + "name": "antarchy:block/duct_tape/duct_tape8" + } + ] + }, + "potent_nyxite_hypnotic_gas": { + "subtitle": "subtitles.antarchy.potent_nyxite_hypnotic_gas", + "sounds": [ + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient1" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient2" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient3" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient4" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient5" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient6" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient7" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient8" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient9" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient10" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient11" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient12" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient13" + }, + { + "name": "antarchy:block/potent_nyxite/hypnotic_gas/ambient14" + } + ] + }, + "potent_nyxite_geyser_eruption_start": { + "subtitle": "subtitles.antarchy.potent_nyxite_geyser_eruption", + "sounds": [ + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption1" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption2" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption3" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption4" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption5" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption6" + } + ] + }, + "potent_nyxite_geyser_eruption_active": { + "subtitle": "subtitles.antarchy.potent_nyxite_geyser_eruption", + "sounds": [ + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active1" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active2" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active3" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active4" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active5" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active6" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active7" + } + ] + }, + "potent_nyxite_geyser_continuous_start": { + "subtitle": "subtitles.antarchy.potent_nyxite_geyser_continuous", + "sounds": [ + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption1" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption2" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption3" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption4" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption5" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption6" + } + ] + }, + "potent_nyxite_geyser_continuous_active": { + "subtitle": "subtitles.antarchy.potent_nyxite_geyser_continuous", + "sounds": [ + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active1" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active2" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active3" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active4" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active5" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active6" + }, + { + "name": "antarchy:block/potent_nyxite/geyser_continuous/eruption_active7" + } + ] + }, + "ambient.elythia.firefly": { + "sounds": [ + { + "name": "antarchy:ambient/elythia/firefly/firefly_bush1", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/firefly/firefly_bush2", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/firefly/firefly_bush3", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/firefly/firefly_bush4", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/firefly/firefly_bush5", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/firefly/firefly_bush6", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/firefly/firefly_bush7", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/firefly/firefly_bush8", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/firefly/firefly_bush9", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/firefly/firefly_bush10", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/firefly/firefly_bush11", + "stream": false + } + ] + }, + "cavaryn_heartbeat": { + "subtitle": "subtitles.antarchy.cavaryn_heartbeat", + "sounds": [ + { + "name": "antarchy:ambient/cavaryn/heartbeat" + } + ] + }, + "triffid_attack": { + "subtitle": "subtitles.antarchy.triffid_attack", + "sounds": [ + { + "name": "antarchy:mob/triffid/triffid_attack1" + } + ] + }, + "triffid_grab": { + "subtitle": "subtitles.antarchy.triffid_grab", + "sounds": [ + { + "name": "antarchy:mob/triffid/triffid_grab1" + } + ] + }, + "triffid_hurt": { + "subtitle": "subtitles.antarchy.triffid_hurt", + "sounds": [ + { + "name": "antarchy:mob/triffid/triffid_hurt1" + }, + { + "name": "antarchy:mob/triffid/triffid_hurt2" + }, + { + "name": "antarchy:mob/triffid/triffid_hurt3" + } + ] + }, + "triffid_death": { + "subtitle": "subtitles.antarchy.triffid_death", + "sounds": [ + { + "name": "antarchy:mob/triffid/triffid_hurt3" + } + ] + }, + "triffid_hiss": { + "subtitle": "subtitles.antarchy.triffid_hiss", + "sounds": [ + { + "name": "antarchy:mob/triffid/triffid_hiss1" + } + ] + }, + "triffid_growl": { + "subtitle": "subtitles.antarchy.triffid_growl", + "sounds": [ + { + "name": "antarchy:mob/triffid/triffid_growl1" + }, + { + "name": "antarchy:mob/triffid/triffid_growl2" + } + ] + }, + "creeping_horror_bite": { + "subtitle": "subtitles.antarchy.creeping_horror_bite", + "sounds": [ + { + "name": "antarchy:mob/creeping_horror/creeping_horror_bite1" + }, + { + "name": "antarchy:mob/creeping_horror/creeping_horror_bite2" + }, + { + "name": "antarchy:mob/creeping_horror/creeping_horror_bite3" + }, + { + "name": "antarchy:mob/creeping_horror/creeping_horror_bite4" + } + ] + }, + "creeping_horror_growl": { + "subtitle": "subtitles.antarchy.creeping_horror_growl", + "sounds": [ + { + "name": "antarchy:mob/creeping_horror/creeping_horror_growl1" + }, + { + "name": "antarchy:mob/creeping_horror/creeping_horror_growl2" + } + ] + }, + "creeping_horror_hurt": { + "subtitle": "subtitles.antarchy.creeping_horror_hurt", + "sounds": [ + { + "name": "antarchy:mob/creeping_horror/creeping_horror_hurt1" + }, + { + "name": "antarchy:mob/creeping_horror/creeping_horror_hurt2" + } + ] + }, + "lurking_terror_bite": { + "subtitle": "subtitles.antarchy.lurking_terror_bite", + "sounds": [ + { + "name": "antarchy:mob/lurking_terror/lurking_terror_bite1" + } + ] + }, + "lurking_terror_fly_loop": { + "subtitle": "subtitles.antarchy.lurking_terror_fly_loop", + "sounds": [ + { + "name": "antarchy:mob/lurking_terror/lurking_terror_fly_loop" + } + ] + }, + "lurking_terror_hurt": { + "subtitle": "subtitles.antarchy.lurking_terror_hurt", + "sounds": [ + { + "name": "antarchy:mob/lurking_terror/lurking_terror_hurt1" + }, + { + "name": "antarchy:mob/lurking_terror/lurking_terror_hurt2" + } + ] + }, + "lurking_terror_snarl": { + "subtitle": "subtitles.antarchy.lurking_terror_snarl", + "sounds": [ + { + "name": "antarchy:mob/lurking_terror/lurking_terror_snarl1" + }, + { + "name": "antarchy:mob/lurking_terror/lurking_terror_snarl2" + } + ] + }, + "hercules_beetle_idle": { + "subtitle": "subtitles.antarchy.hercules_beetle_idle", + "sounds": [ + { + "name": "antarchy:mob/hercules_beetle/idle1" + }, + { + "name": "antarchy:mob/hercules_beetle/idle2" + }, + { + "name": "antarchy:mob/hercules_beetle/idle3" + }, + { + "name": "antarchy:mob/hercules_beetle/idle4" + } + ] + }, + "hercules_beetle_hurt": { + "subtitle": "subtitles.antarchy.hercules_beetle_hurt", + "sounds": [ + { + "name": "antarchy:mob/hercules_beetle/hurt1" + } + ] + }, + "hercules_beetle_attack": { + "subtitle": "subtitles.antarchy.hercules_beetle_attack", + "sounds": [ + { + "name": "antarchy:mob/hercules_beetle/attack1" + }, + { + "name": "antarchy:mob/hercules_beetle/attack2" + }, + { + "name": "antarchy:mob/hercules_beetle/attack3" + }, + { + "name": "antarchy:mob/hercules_beetle/attack4" + } + ] + }, + "hercules_beetle_cry": { + "subtitle": "subtitles.antarchy.hercules_beetle_cry", + "sounds": [ + { + "name": "antarchy:mob/hercules_beetle/cry1" + } + ] + }, + "hercules_beetle_charge_start": { + "subtitle": "subtitles.antarchy.hercules_beetle_charge_start", + "sounds": [ + { + "name": "antarchy:mob/hercules_beetle/charge_start" + } + ] + }, + "hercules_beetle_knocked_down": { + "subtitle": "subtitles.antarchy.hercules_beetle_knocked_down", + "sounds": [ + { + "name": "antarchy:mob/hercules_beetle/knocked_down1" + } + ] + }, + "jumpy_bug_idle": { + "subtitle": "subtitles.antarchy.jumpy_bug_idle", + "sounds": [ + { + "name": "antarchy:mob/jumpy_bug/idle1" + }, + { + "name": "antarchy:mob/jumpy_bug/idle2" + }, + { + "name": "antarchy:mob/jumpy_bug/idle3" + }, + { + "name": "antarchy:mob/jumpy_bug/idle4" + } + ] + }, + "spit_bug_idle": { + "subtitle": "subtitles.antarchy.spit_bug_idle", + "sounds": [ + { + "name": "antarchy:mob/spit_bug/idle1" + }, + { + "name": "antarchy:mob/spit_bug/idle2" + } + ] + }, + "jumpy_bug_hurt": { + "subtitle": "subtitles.antarchy.jumpy_bug_hurt", + "sounds": [ + { + "name": "antarchy:mob/jumpy_bug/hurt1" + }, + { + "name": "antarchy:mob/jumpy_bug/hurt2" + } + ] + }, + "jumpy_bug_jump": { + "subtitle": "subtitles.antarchy.jumpy_bug_jump", + "sounds": [ + { + "name": "antarchy:mob/jumpy_bug/jump1" + }, + { + "name": "antarchy:mob/jumpy_bug/jump2" + }, + { + "name": "antarchy:mob/jumpy_bug/jump3" + } + ] + }, + "spit_bug_hurt": { + "subtitle": "subtitles.antarchy.spit_bug_hurt", + "sounds": [ + { + "name": "antarchy:mob/spit_bug/hurt1" + }, + { + "name": "antarchy:mob/spit_bug/hurt2" + } + ] + }, + "spit_bug_spit": { + "subtitle": "subtitles.antarchy.spit_bug_spit", + "sounds": [ + { + "name": "antarchy:mob/spit_bug/spit1" + }, + { + "name": "antarchy:mob/spit_bug/spit2" + }, + { + "name": "antarchy:mob/spit_bug/spit3" + }, + { + "name": "antarchy:mob/spit_bug/spit4" + } + ] + }, + "brutalfly_spit": { + "subtitle": "subtitles.antarchy.brutalfly_spit", + "sounds": [ + { + "name": "antarchy:mob/brutalfly/spit1" + }, + { + "name": "antarchy:mob/brutalfly/spit2" + }, + { + "name": "antarchy:mob/brutalfly/spit3" + }, + { + "name": "antarchy:mob/brutalfly/spit4" + } + ] + }, + "jerry_young_idle": { + "subtitle": "subtitles.antarchy.jerry_idle", + "sounds": [ + { + "name": "antarchy:mob/jerry/young_idle1" + }, + { + "name": "antarchy:mob/jerry/young_idle2" + }, + { + "name": "antarchy:mob/jerry/young_idle3" + } + ] + }, + "jerry_young_hurt": { + "subtitle": "subtitles.antarchy.jerry_hurt", + "sounds": [ + { + "name": "antarchy:mob/jerry/young_hurt1" + } + ] + }, + "jerry_young_death": { + "subtitle": "subtitles.antarchy.jerry_death", + "sounds": [ + { + "name": "antarchy:mob/jerry/young_death1" + } + ] + }, + "jerry_young_attack": { + "subtitle": "subtitles.antarchy.jerry_attack", + "sounds": [ + { + "name": "antarchy:mob/jerry/young_attack1" + }, + { + "name": "antarchy:mob/jerry/young_attack2" + } + ] + }, + "jerry_adult_idle": { + "subtitle": "subtitles.antarchy.jerry_idle", + "sounds": [ + { + "name": "antarchy:mob/jerry/adult_idle1" + }, + { + "name": "antarchy:mob/jerry/adult_idle2" + }, + { + "name": "antarchy:mob/jerry/adult_idle3" + }, + { + "name": "antarchy:mob/jerry/adult_idle4" + } + ] + }, + "jerry_adult_hurt": { + "subtitle": "subtitles.antarchy.jerry_hurt", + "sounds": [ + { + "name": "antarchy:mob/jerry/adult_hurt1" + } + ] + }, + "jerry_adult_death": { + "subtitle": "subtitles.antarchy.jerry_death", + "sounds": [ + { + "name": "antarchy:mob/jerry/adult_death1" + }, + { + "name": "antarchy:mob/jerry/adult_death2" + } + ] + }, + "jerry_adult_attack": { + "subtitle": "subtitles.antarchy.jerry_attack", + "sounds": [ + { + "name": "antarchy:mob/jerry/adult_attack1" + }, + { + "name": "antarchy:mob/jerry/adult_attack2" + }, + { + "name": "antarchy:mob/jerry/adult_attack3" + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/cavaryn/heartbeat.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/cavaryn/heartbeat.ogg new file mode 100644 index 00000000..4b73fceb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/cavaryn/heartbeat.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush1.ogg new file mode 100644 index 00000000..7864296a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush10.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush10.ogg new file mode 100644 index 00000000..ecb4aa92 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush10.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush11.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush11.ogg new file mode 100644 index 00000000..acf00eff Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush11.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush2.ogg new file mode 100644 index 00000000..d2ffa071 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush3.ogg new file mode 100644 index 00000000..ac3fc89b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush4.ogg new file mode 100644 index 00000000..3d8a94ca Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush5.ogg new file mode 100644 index 00000000..2514cba6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush6.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush6.ogg new file mode 100644 index 00000000..19a5e7b7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush6.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush7.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush7.ogg new file mode 100644 index 00000000..515ca29a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush7.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush8.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush8.ogg new file mode 100644 index 00000000..e1ca3b19 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush8.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush9.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush9.ogg new file mode 100644 index 00000000..ed35ad01 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/firefly/firefly_bush9.ogg differ 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 new file mode 100644 index 00000000..c982f935 Binary files /dev/null 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 new file mode 100644 index 00000000..6ed074ec Binary files /dev/null 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 new file mode 100644 index 00000000..b81cc221 Binary files /dev/null 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 new file mode 100644 index 00000000..20079552 Binary files /dev/null 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 new file mode 100644 index 00000000..44c1df3f Binary files /dev/null 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 new file mode 100644 index 00000000..85bd20e3 Binary files /dev/null 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/ambient/thoraxis/dream_dunes/wind1_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/wind1_reversed.ogg new file mode 100644 index 00000000..25de1a31 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/wind1_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/wind2_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/wind2_reversed.ogg new file mode 100644 index 00000000..051e833c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/wind2_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/wind3_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/wind3_reversed.ogg new file mode 100644 index 00000000..03a4683c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/wind3_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/wind4_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/wind4_reversed.ogg new file mode 100644 index 00000000..cbc1777b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/wind4_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/with1_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/with1_reversed.ogg new file mode 100644 index 00000000..ed599893 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/dream_dunes/with1_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/ambient.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/ambient.ogg new file mode 100644 index 00000000..3f5a53b9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/ambient.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse1.ogg new file mode 100644 index 00000000..da20b7f6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse2.ogg new file mode 100644 index 00000000..3d9804ad Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse3.ogg new file mode 100644 index 00000000..5a0b4431 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse4.ogg new file mode 100644 index 00000000..9f22b0c1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/lucid_pools/curse4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition1_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition1_reversed.ogg new file mode 100644 index 00000000..010b6b92 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition1_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition2_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition2_reversed.ogg new file mode 100644 index 00000000..5432faf6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition2_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition3_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition3_reversed.ogg new file mode 100644 index 00000000..1dceff57 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition3_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition4_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition4_reversed.ogg new file mode 100644 index 00000000..655bdcf7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition4_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition5_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition5_reversed.ogg new file mode 100644 index 00000000..a9c9dfad Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition5_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition6_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition6_reversed.ogg new file mode 100644 index 00000000..339be3ad Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition6_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition7_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition7_reversed.ogg new file mode 100644 index 00000000..c0de6ded Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition7_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition8_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition8_reversed.ogg new file mode 100644 index 00000000..7245ccdd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/addition8_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ambience_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ambience_reversed.ogg new file mode 100644 index 00000000..7fb5cf48 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ambience_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/dark1_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/dark1_reversed.ogg new file mode 100644 index 00000000..3dcc50a2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/dark1_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/dark2_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/dark2_reversed.ogg new file mode 100644 index 00000000..330c03d2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/dark2_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground1_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground1_reversed.ogg new file mode 100644 index 00000000..902f30c6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground1_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground2_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground2_reversed.ogg new file mode 100644 index 00000000..fa14737c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground2_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground3_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground3_reversed.ogg new file mode 100644 index 00000000..b517dd05 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground3_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground4_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground4_reversed.ogg new file mode 100644 index 00000000..ce4b4e16 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/ground4_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood1_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood1_reversed.ogg new file mode 100644 index 00000000..40878ca3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood1_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood2_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood2_reversed.ogg new file mode 100644 index 00000000..5bbe4a56 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood2_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood3_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood3_reversed.ogg new file mode 100644 index 00000000..f5d2f944 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood3_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood4_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood4_reversed.ogg new file mode 100644 index 00000000..d2b4b314 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood4_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood5_reversed.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood5_reversed.ogg new file mode 100644 index 00000000..baf38314 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/ambient/thoraxis/nightmare_wastes/mood5_reversed.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/ant_nest_exit.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/ant_nest_exit.ogg new file mode 100644 index 00000000..fcdc940b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/ant_nest_exit.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape1.ogg new file mode 100644 index 00000000..3709f857 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape2.ogg new file mode 100644 index 00000000..4b4d6173 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape3.ogg new file mode 100644 index 00000000..31b02740 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape4.ogg new file mode 100644 index 00000000..a0649221 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape5.ogg new file mode 100644 index 00000000..e87c6c34 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape6.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape6.ogg new file mode 100644 index 00000000..5e40474a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape6.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape7.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape7.ogg new file mode 100644 index 00000000..a912882d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape7.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape8.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape8.ogg new file mode 100644 index 00000000..d6cff8e6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/duct_tape/duct_tape8.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption1.ogg new file mode 100644 index 00000000..db211e8c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption2.ogg new file mode 100644 index 00000000..784248ea Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption3.ogg new file mode 100644 index 00000000..6b90f774 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption4.ogg new file mode 100644 index 00000000..6357455c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption5.ogg new file mode 100644 index 00000000..f0ef4d92 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption6.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption6.ogg new file mode 100644 index 00000000..2bae79db Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption6.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active1.ogg new file mode 100644 index 00000000..7b135e70 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active2.ogg new file mode 100644 index 00000000..7ff94e79 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active3.ogg new file mode 100644 index 00000000..c696d11b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active4.ogg new file mode 100644 index 00000000..93670f58 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active5.ogg new file mode 100644 index 00000000..dc5c793c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active6.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active6.ogg new file mode 100644 index 00000000..05db972b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active6.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active7.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active7.ogg new file mode 100644 index 00000000..717df1ba Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/geyser_continuous/eruption_active7.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient1.ogg new file mode 100644 index 00000000..4b566583 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient10.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient10.ogg new file mode 100644 index 00000000..81c66172 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient10.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient11.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient11.ogg new file mode 100644 index 00000000..650c1c4a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient11.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient12.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient12.ogg new file mode 100644 index 00000000..a302cd54 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient12.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient13.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient13.ogg new file mode 100644 index 00000000..0e81d716 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient13.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient14.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient14.ogg new file mode 100644 index 00000000..acbf727e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient14.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient2.ogg new file mode 100644 index 00000000..7a2e2a23 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient3.ogg new file mode 100644 index 00000000..e5ed92f7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient4.ogg new file mode 100644 index 00000000..cce3e51b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient5.ogg new file mode 100644 index 00000000..9e2f45f0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient6.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient6.ogg new file mode 100644 index 00000000..395ea845 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient6.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient7.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient7.ogg new file mode 100644 index 00000000..f51954d1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient7.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient8.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient8.ogg new file mode 100644 index 00000000..bd1faf6d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient8.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient9.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient9.ogg new file mode 100644 index 00000000..d4dc1e60 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/block/potent_nyxite/hypnotic_gas/ambient9.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies1.ogg new file mode 100644 index 00000000..7f0e4752 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies2.ogg new file mode 100644 index 00000000..aedbdfd1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies3.ogg new file mode 100644 index 00000000..a7eab4a5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies4.ogg new file mode 100644 index 00000000..999c8b5f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies5.ogg new file mode 100644 index 00000000..4d744f46 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies6.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies6.ogg new file mode 100644 index 00000000..19c373b1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies6.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies7.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies7.ogg new file mode 100644 index 00000000..add34ab4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies7.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies8.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies8.ogg new file mode 100644 index 00000000..16fad7fd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies8.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 new file mode 100644 index 00000000..daa4b7d5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_drop.ogg 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 new file mode 100644 index 00000000..e8a23b91 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_dryfire.ogg 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 new file mode 100644 index 00000000..2ff3f3cb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_hold_loop.ogg 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 new file mode 100644 index 00000000..71fca081 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch1.ogg 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 new file mode 100644 index 00000000..601f54ad Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch2.ogg 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 new file mode 100644 index 00000000..6f6b9876 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch3.ogg 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 new file mode 100644 index 00000000..50b2c4b1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_launch4.ogg 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 new file mode 100644 index 00000000..36cffa73 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/gravity_gun/gravity_gun_pickup.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_ambient.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_ambient.ogg new file mode 100644 index 00000000..d6cab4c4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_ambient.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_bite.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_bite.ogg new file mode 100644 index 00000000..0891cd41 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_bite.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_gather1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_gather1.ogg new file mode 100644 index 00000000..c1e24d3b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_gather1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_gather2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_gather2.ogg new file mode 100644 index 00000000..7cb2e5e6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_gather2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_hurt.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_hurt.ogg new file mode 100644 index 00000000..c18c0fe1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_hurt.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle1.ogg new file mode 100644 index 00000000..274cf1f1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle2.ogg new file mode 100644 index 00000000..a3032f38 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle3.ogg new file mode 100644 index 00000000..44f2f812 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle4.ogg new file mode 100644 index 00000000..80364c85 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle5.ogg new file mode 100644 index 00000000..d1e0c5f8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle6.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle6.ogg new file mode 100644 index 00000000..71e76cbb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/ant/ant_idle6.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_bite.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_bite.ogg new file mode 100644 index 00000000..c4594751 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_bite.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_death.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_death.ogg new file mode 100644 index 00000000..abdd3290 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_death.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_hiss.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_hiss.ogg new file mode 100644 index 00000000..4c07273c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_hiss.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_hurt1.ogg new file mode 100644 index 00000000..769d5f41 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_hurt2.ogg new file mode 100644 index 00000000..e36c953e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_idle_loop1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_idle_loop1.ogg new file mode 100644 index 00000000..20cf7145 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_idle_loop1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_idle_loop2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_idle_loop2.ogg new file mode 100644 index 00000000..e55c01ca Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_idle_loop2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_slither_loop1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_slither_loop1.ogg new file mode 100644 index 00000000..bf6e48d5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_slither_loop1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_slither_loop2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_slither_loop2.ogg new file mode 100644 index 00000000..080c317e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/basilisk/basilisk_slither_loop2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_ambient1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_ambient1.ogg new file mode 100644 index 00000000..98cd4c20 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_ambient1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_ambient2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_ambient2.ogg new file mode 100644 index 00000000..c4cb713b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_ambient2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_attack1.ogg new file mode 100644 index 00000000..5c0d655f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_hurt1.ogg new file mode 100644 index 00000000..1ad6f0ec Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_hurt2.ogg new file mode 100644 index 00000000..e1f10239 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bed_bug/bed_bug_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg new file mode 100644 index 00000000..1e9320a8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.ogg new file mode 100644 index 00000000..82fa12a4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.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 new file mode 100644 index 00000000..4086db9d Binary files /dev/null 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 new file mode 100644 index 00000000..dd5fd457 Binary files /dev/null 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 new file mode 100644 index 00000000..5174c62b Binary files /dev/null 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 new file mode 100644 index 00000000..3837027f Binary files /dev/null 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 new file mode 100644 index 00000000..39ab66d1 Binary files /dev/null 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/bomber/walk1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/walk1.ogg new file mode 100644 index 00000000..a8dc5b89 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/walk1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/walk2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/walk2.ogg new file mode 100644 index 00000000..81bb99b9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/walk2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/walk3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/walk3.ogg new file mode 100644 index 00000000..fb114262 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/walk3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/walk4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/walk4.ogg new file mode 100644 index 00000000..31578763 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/bomber/walk4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_death1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_death1.ogg new file mode 100644 index 00000000..808d57a8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_death1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_idle1.ogg new file mode 100644 index 00000000..9bf90b8e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_idle2.ogg new file mode 100644 index 00000000..12986f5a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_idle3.ogg new file mode 100644 index 00000000..7533a040 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/brutalfly_idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit1.ogg new file mode 100644 index 00000000..b5733a2e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit2.ogg new file mode 100644 index 00000000..da80ea23 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit3.ogg new file mode 100644 index 00000000..ca5e4de6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit4.ogg new file mode 100644 index 00000000..063c6f91 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/brutalfly/spit4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl1.ogg new file mode 100644 index 00000000..6fe75c33 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl2.ogg new file mode 100644 index 00000000..e7310473 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl3.ogg new file mode 100644 index 00000000..6ab04a47 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl4.ogg new file mode 100644 index 00000000..3574490f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl5.ogg new file mode 100644 index 00000000..ac576cb2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl6.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl6.ogg new file mode 100644 index 00000000..8a75bdaf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_crawl6.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_hurt1.ogg new file mode 100644 index 00000000..2f66b0f4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_hurt2.ogg new file mode 100644 index 00000000..054d4283 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_hurt3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_hurt3.ogg new file mode 100644 index 00000000..b79e416b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_hurt3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_idle1.ogg new file mode 100644 index 00000000..fabba96b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_idle2.ogg new file mode 100644 index 00000000..88868dd4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/caterpillar/caterpillar_idle2.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 new file mode 100644 index 00000000..c8857578 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_bite.ogg 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 new file mode 100644 index 00000000..569c17de Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_death.ogg 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 new file mode 100644 index 00000000..76920276 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_fly1.ogg 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 new file mode 100644 index 00000000..7afa99cf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_hurt.ogg 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 new file mode 100644 index 00000000..7c97457d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle1.ogg 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 new file mode 100644 index 00000000..c6f6ea1d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle2.ogg 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 new file mode 100644 index 00000000..381b77c3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle3.ogg 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 new file mode 100644 index 00000000..e4896b6b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/cloud_shark/cloud_shark_idle4.ogg 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 new file mode 100644 index 00000000..fd89b048 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite1.ogg 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 new file mode 100644 index 00000000..1993fb69 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite2.ogg 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 new file mode 100644 index 00000000..1f44cc93 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite3.ogg 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 new file mode 100644 index 00000000..3fa77eaa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite4.ogg 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 new file mode 100644 index 00000000..746f4f3a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl1.ogg 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 new file mode 100644 index 00000000..a60677ea Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl2.ogg 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 new file mode 100644 index 00000000..1ad6f0ec Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt1.ogg 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 new file mode 100644 index 00000000..e1f10239 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_ambient1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_ambient1.ogg new file mode 100644 index 00000000..88d92252 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_ambient1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_attack1.ogg new file mode 100644 index 00000000..3b2e1d66 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_hurt1.ogg new file mode 100644 index 00000000..06573ff9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_hurt2.ogg new file mode 100644 index 00000000..88a4f341 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_hurt3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_hurt3.ogg new file mode 100644 index 00000000..0299850e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_hurt3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_roar1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_roar1.ogg new file mode 100644 index 00000000..25cda264 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/emperor_scorpion/emperor_scorpion_roar1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flying_squirrel/flying_squirrel_glide_loop.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flying_squirrel/flying_squirrel_glide_loop.ogg new file mode 100644 index 00000000..fe12615b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flying_squirrel/flying_squirrel_glide_loop.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flying_squirrel/flying_squirrel_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flying_squirrel/flying_squirrel_idle1.ogg new file mode 100644 index 00000000..7b10f402 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flying_squirrel/flying_squirrel_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack1.ogg new file mode 100644 index 00000000..7df8dcd5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack2.ogg new file mode 100644 index 00000000..2f7ba9eb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack3.ogg new file mode 100644 index 00000000..799889bb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack4.ogg new file mode 100644 index 00000000..f84db417 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/attack4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/charge_start.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/charge_start.ogg new file mode 100644 index 00000000..7a46a7de Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/charge_start.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/cry1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/cry1.ogg new file mode 100644 index 00000000..a6d1e8be Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/cry1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/hurt1.ogg new file mode 100644 index 00000000..4075732d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle1.ogg new file mode 100644 index 00000000..f40e7680 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle2.ogg new file mode 100644 index 00000000..b9ae3bf7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle3.ogg new file mode 100644 index 00000000..bd24a5a3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle4.ogg new file mode 100644 index 00000000..ad8a97fd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/idle4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/knocked_down1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/knocked_down1.ogg new file mode 100644 index 00000000..130c2101 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/hercules_beetle/knocked_down1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_attack1.ogg new file mode 100644 index 00000000..4d089019 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_attack2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_attack2.ogg new file mode 100644 index 00000000..332b90aa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_attack2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_attack3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_attack3.ogg new file mode 100644 index 00000000..4d91a765 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_attack3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_death1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_death1.ogg new file mode 100644 index 00000000..5a6a336b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_death1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_death2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_death2.ogg new file mode 100644 index 00000000..465a4c07 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_death2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_hurt1.ogg new file mode 100644 index 00000000..a14a5bcc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle1.ogg new file mode 100644 index 00000000..50b72063 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle2.ogg new file mode 100644 index 00000000..0edab0b5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle3.ogg new file mode 100644 index 00000000..31c62cec Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle4.ogg new file mode 100644 index 00000000..5a8a53c7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/adult_idle4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_attack1.ogg new file mode 100644 index 00000000..3aef7b21 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_attack2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_attack2.ogg new file mode 100644 index 00000000..edff5df5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_attack2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_death1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_death1.ogg new file mode 100644 index 00000000..bbb2ef82 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_death1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_hurt1.ogg new file mode 100644 index 00000000..63e72099 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_idle1.ogg new file mode 100644 index 00000000..ed16b6a3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_idle2.ogg new file mode 100644 index 00000000..08492c09 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_idle3.ogg new file mode 100644 index 00000000..8d230a68 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jerry/young_idle3.ogg 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 new file mode 100644 index 00000000..1ad6f0ec Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/hurt1.ogg 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 new file mode 100644 index 00000000..e1f10239 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/hurt2.ogg 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 new file mode 100644 index 00000000..4bfd3c19 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle1.ogg 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 new file mode 100644 index 00000000..6585e6a3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle2.ogg 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 new file mode 100644 index 00000000..1e110266 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle3.ogg 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 new file mode 100644 index 00000000..95df5d7f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/idle4.ogg 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 new file mode 100644 index 00000000..168605ab Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump1.ogg 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 new file mode 100644 index 00000000..5e130d7e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump2.ogg 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 new file mode 100644 index 00000000..12d986e3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/jumpy_bug/jump3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_attack1.ogg new file mode 100644 index 00000000..dc7e1307 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_death.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_death.ogg new file mode 100644 index 00000000..c61bc2a4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_death.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_loop1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_loop1.ogg new file mode 100644 index 00000000..ff0fbb9b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_loop1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_loop2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_loop2.ogg new file mode 100644 index 00000000..46d3b186 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_loop2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_sideways_loop1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_sideways_loop1.ogg new file mode 100644 index 00000000..080bd3a6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_sideways_loop1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_sideways_loop2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_sideways_loop2.ogg new file mode 100644 index 00000000..3ac77da3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_flying_sideways_loop2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_hurt1.ogg new file mode 100644 index 00000000..1348d45b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_hurt2.ogg new file mode 100644 index 00000000..2675dde6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_roar.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_roar.ogg new file mode 100644 index 00000000..62674907 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_roar.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_spawn.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_spawn.ogg new file mode 100644 index 00000000..02ae56ff Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_spawn.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_spin.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_spin.ogg new file mode 100644 index 00000000..fdb8f612 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/kraken/kraken_spin.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_ambience.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_ambience.ogg new file mode 100644 index 00000000..5a75cbdb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_ambience.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_attack.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_attack.ogg new file mode 100644 index 00000000..75802e96 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_attack.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_bolt.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_bolt.ogg new file mode 100644 index 00000000..69f0949a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_bolt.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_death.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_death.ogg new file mode 100644 index 00000000..aea300cf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_death.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_flying.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_flying.ogg new file mode 100644 index 00000000..b8555130 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_flying.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_hurt1.ogg new file mode 100644 index 00000000..69218369 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_hurt2.ogg new file mode 100644 index 00000000..8038b879 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lucid/lucid_hurt2.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 new file mode 100644 index 00000000..a72b530e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_bite1.ogg 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 new file mode 100644 index 00000000..7204c176 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_fly_loop.ogg 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 new file mode 100644 index 00000000..1ad6f0ec Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt1.ogg 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 new file mode 100644 index 00000000..e1f10239 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt2.ogg 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 new file mode 100644 index 00000000..669bbdc8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl1.ogg 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 new file mode 100644 index 00000000..1305bb04 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack1.ogg new file mode 100644 index 00000000..61864aec Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack2.ogg new file mode 100644 index 00000000..5b44db74 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack3.ogg new file mode 100644 index 00000000..5f2bb2e3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack4.ogg new file mode 100644 index 00000000..2d28e6ea Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_attack4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_fly_loop.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_fly_loop.ogg new file mode 100644 index 00000000..7204c176 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_fly_loop.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_hurt1.ogg new file mode 100644 index 00000000..06573ff9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_hurt2.ogg new file mode 100644 index 00000000..88a4f341 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_hurt3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_hurt3.ogg new file mode 100644 index 00000000..0299850e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_hurt3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle1.ogg new file mode 100644 index 00000000..fbab3bf2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle2.ogg new file mode 100644 index 00000000..5d66b98b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle3.ogg new file mode 100644 index 00000000..7ea5b2f9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle4.ogg new file mode 100644 index 00000000..0d8aa5ab Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle5.ogg new file mode 100644 index 00000000..862c6cdd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle6.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle6.ogg new file mode 100644 index 00000000..1bb457ab Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle6.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle7.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle7.ogg new file mode 100644 index 00000000..d98aa46a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/mantis/mantis_idle7.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/missile_squid/missile_squid_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/missile_squid/missile_squid_attack1.ogg new file mode 100644 index 00000000..e4803676 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/missile_squid/missile_squid_attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/missile_squid/missile_squid_attack2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/missile_squid/missile_squid_attack2.ogg new file mode 100644 index 00000000..38aad46d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/missile_squid/missile_squid_attack2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/missile_squid/missile_squid_attack3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/missile_squid/missile_squid_attack3.ogg new file mode 100644 index 00000000..46a468fd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/missile_squid/missile_squid_attack3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_attack1.ogg new file mode 100644 index 00000000..74e8e592 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_attack2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_attack2.ogg new file mode 100644 index 00000000..687cfda1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_attack2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_attack3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_attack3.ogg new file mode 100644 index 00000000..dfab2afa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_attack3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_dig1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_dig1.ogg new file mode 100644 index 00000000..71b33858 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_dig1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_hurt1.ogg new file mode 100644 index 00000000..3792efed Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_hurt2.ogg new file mode 100644 index 00000000..6a2073fb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_hurt3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_hurt3.ogg new file mode 100644 index 00000000..d8f7cdcd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_hurt3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_idle1.ogg new file mode 100644 index 00000000..1da7ad6f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_idle2.ogg new file mode 100644 index 00000000..c850be25 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_idle3.ogg new file mode 100644 index 00000000..ef7d32d2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/molevore/molevore_idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_attack1.ogg new file mode 100644 index 00000000..c61ac155 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_attack2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_attack2.ogg new file mode 100644 index 00000000..42120140 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_attack2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_dig1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_dig1.ogg new file mode 100644 index 00000000..cfd76526 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_dig1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_dig2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_dig2.ogg new file mode 100644 index 00000000..5bac0092 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_dig2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_dig3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_dig3.ogg new file mode 100644 index 00000000..0a8ca0d5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_dig3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_hurt1.ogg new file mode 100644 index 00000000..36e3521e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_hurt2.ogg new file mode 100644 index 00000000..b719ae14 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_hurt3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_hurt3.ogg new file mode 100644 index 00000000..583f9ecd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_hurt3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle1.ogg new file mode 100644 index 00000000..c02558ff Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle2.ogg new file mode 100644 index 00000000..b6b7693c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle3.ogg new file mode 100644 index 00000000..daded55b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle4.ogg new file mode 100644 index 00000000..5e7e4861 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle5.ogg new file mode 100644 index 00000000..c3eeb8e3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle6.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle6.ogg new file mode 100644 index 00000000..cac33b4d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle6.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle7.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle7.ogg new file mode 100644 index 00000000..2f66bd7f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/moleworm/moleworm_idle7.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_death.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_death.ogg new file mode 100644 index 00000000..4ce6ba58 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_death.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_hurt1.ogg new file mode 100644 index 00000000..a4234ef2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle1.ogg new file mode 100644 index 00000000..6003e33a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle2.ogg new file mode 100644 index 00000000..36629ac5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle3.ogg new file mode 100644 index 00000000..33518fdf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle4.ogg new file mode 100644 index 00000000..20bb6780 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_idle4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_roar1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_roar1.ogg new file mode 100644 index 00000000..1adffcaa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_roar1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_roar2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_roar2.ogg new file mode 100644 index 00000000..def0e1e1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/nightmare/nightmare_roar2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_alert1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_alert1.ogg new file mode 100644 index 00000000..a99660cc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_alert1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_alert2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_alert2.ogg new file mode 100644 index 00000000..ea01bc88 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_alert2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_alert3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_alert3.ogg new file mode 100644 index 00000000..8fab7d11 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_alert3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_hurt1.ogg new file mode 100644 index 00000000..e59c1ac4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_hurt2.ogg new file mode 100644 index 00000000..db983cad Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_hurt3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_hurt3.ogg new file mode 100644 index 00000000..687e1f98 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_hurt3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_idle1.ogg new file mode 100644 index 00000000..102cf762 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_idle2.ogg new file mode 100644 index 00000000..232e540a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_idle3.ogg new file mode 100644 index 00000000..3bdafad1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_joinplayer1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_joinplayer1.ogg new file mode 100644 index 00000000..d179c883 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_joinplayer1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_joinplayer2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_joinplayer2.ogg new file mode 100644 index 00000000..a0d487a9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_joinplayer2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_joinplayer3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_joinplayer3.ogg new file mode 100644 index 00000000..f37cc2a7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_joinplayer3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_save1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_save1.ogg new file mode 100644 index 00000000..3e6963a9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_save1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_save2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_save2.ogg new file mode 100644 index 00000000..2267fb21 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_save2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_save3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_save3.ogg new file mode 100644 index 00000000..621a9fcf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_save3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_worry1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_worry1.ogg new file mode 100644 index 00000000..7d79bcda Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_worry1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_worry2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_worry2.ogg new file mode 100644 index 00000000..231b4039 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/reverie/reverie_worry2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle1.ogg new file mode 100644 index 00000000..03b86aec Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle2.ogg new file mode 100644 index 00000000..aadd96cb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle3.ogg new file mode 100644 index 00000000..a68531ac Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle4.ogg new file mode 100644 index 00000000..c3457122 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle5.ogg new file mode 100644 index 00000000..12c6da14 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/idle5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/nromal_mode.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/nromal_mode.ogg new file mode 100644 index 00000000..a4bc0a66 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/nromal_mode.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/roll1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/roll1.ogg new file mode 100644 index 00000000..cb2bb41b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/roll1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/wheel_mode.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/wheel_mode.ogg new file mode 100644 index 00000000..746adfb8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/wheel_mode.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_ambient1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_ambient1.ogg new file mode 100644 index 00000000..625962d4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_ambient1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_attack1.ogg new file mode 100644 index 00000000..e526ca74 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_attack2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_attack2.ogg new file mode 100644 index 00000000..33452b64 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_attack2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_hurt1.ogg new file mode 100644 index 00000000..de7ea472 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_hurt2.ogg new file mode 100644 index 00000000..547a2733 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_hurt3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_hurt3.ogg new file mode 100644 index 00000000..6f55250d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/scorpion/scorpion_hurt3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/hurt1.ogg new file mode 100644 index 00000000..1ad6f0ec Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/hurt2.ogg new file mode 100644 index 00000000..e1f10239 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/idle1.ogg new file mode 100644 index 00000000..7da30656 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/idle2.ogg new file mode 100644 index 00000000..ac519a59 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit1.ogg new file mode 100644 index 00000000..b5733a2e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit2.ogg new file mode 100644 index 00000000..da80ea23 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit3.ogg new file mode 100644 index 00000000..ca5e4de6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit4.ogg new file mode 100644 index 00000000..063c6f91 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/spit_bug/spit4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart1.ogg new file mode 100644 index 00000000..7a8d3c2b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart2.ogg new file mode 100644 index 00000000..d2642924 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart3.ogg new file mode 100644 index 00000000..fa5abd6b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart4.ogg new file mode 100644 index 00000000..b0e8f579 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/fart4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle1.ogg new file mode 100644 index 00000000..fa5cf155 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle2.ogg new file mode 100644 index 00000000..0fba63d8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle3.ogg new file mode 100644 index 00000000..25480696 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle4.ogg new file mode 100644 index 00000000..21026cb8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle5.ogg new file mode 100644 index 00000000..d89ac002 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stink_bug/idle5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire1.ogg new file mode 100644 index 00000000..7a62426e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire2.ogg new file mode 100644 index 00000000..102048ad Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/death.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/death.ogg new file mode 100644 index 00000000..0962e82b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/death.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt1.ogg new file mode 100644 index 00000000..88a539fb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt2.ogg new file mode 100644 index 00000000..32da1952 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt3.ogg new file mode 100644 index 00000000..9b4a58f6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle1.ogg new file mode 100644 index 00000000..83e11c5b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle2.ogg new file mode 100644 index 00000000..c31227ff Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle3.ogg new file mode 100644 index 00000000..6011bf32 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle3.ogg 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 new file mode 100644 index 00000000..55a6aacc Binary files /dev/null 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 new file mode 100644 index 00000000..dcea190a Binary files /dev/null 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 new file mode 100644 index 00000000..d2ec4575 Binary files /dev/null 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 new file mode 100644 index 00000000..17dc6058 Binary files /dev/null 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 new file mode 100644 index 00000000..0edf0d91 Binary files /dev/null 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 new file mode 100644 index 00000000..07adebac Binary files /dev/null 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 new file mode 100644 index 00000000..330d217e Binary files /dev/null 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 new file mode 100644 index 00000000..6a40acf4 Binary files /dev/null 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 new file mode 100644 index 00000000..e67b59bf Binary files /dev/null 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 new file mode 100644 index 00000000..8d815b66 Binary files /dev/null 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 new file mode 100644 index 00000000..ece40272 Binary files /dev/null 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 new file mode 100644 index 00000000..922db688 Binary files /dev/null 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 new file mode 100644 index 00000000..6674f8ef Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_attack1.ogg 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 new file mode 100644 index 00000000..b18d0e34 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_grab1.ogg 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 new file mode 100644 index 00000000..ba078a20 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_growl1.ogg 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 new file mode 100644 index 00000000..4191a285 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_growl2.ogg 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 new file mode 100644 index 00000000..0cdeb61d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hiss1.ogg 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 new file mode 100644 index 00000000..f5a311d8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt1.ogg 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 new file mode 100644 index 00000000..3b823754 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt2.ogg 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 new file mode 100644 index 00000000..0b347842 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/triffid/triffid_hurt3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack1.ogg new file mode 100644 index 00000000..f28802ca Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack2.ogg new file mode 100644 index 00000000..402e288c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack3.ogg new file mode 100644 index 00000000..febf178e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack4.ogg new file mode 100644 index 00000000..450de27a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack5.ogg new file mode 100644 index 00000000..8cb69273 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/attack5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/buzz1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/buzz1.ogg new file mode 100644 index 00000000..43fb534d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/buzz1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/buzz2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/buzz2.ogg new file mode 100644 index 00000000..15756212 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/buzz2.ogg 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 new file mode 100644 index 00000000..e17cf7d4 Binary files /dev/null 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 new file mode 100644 index 00000000..974a0662 Binary files /dev/null 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 new file mode 100644 index 00000000..6d5d0a04 Binary files /dev/null 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 new file mode 100644 index 00000000..8559f964 Binary files /dev/null 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 new file mode 100644 index 00000000..b779d8ce Binary files /dev/null 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/mob/wasp/idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/idle1.ogg new file mode 100644 index 00000000..eb5c5937 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/idle2.ogg new file mode 100644 index 00000000..c1897bed Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/wasp/idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/cavaryn/venenatus.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/cavaryn/venenatus.ogg new file mode 100644 index 00000000..8819768a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/cavaryn/venenatus.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/elythia/wistful_wanderings.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/elythia/wistful_wanderings.ogg new file mode 100644 index 00000000..6ce14c9c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/elythia/wistful_wanderings.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/lucid_lullaby.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/lucid_lullaby.ogg new file mode 100644 index 00000000..a1c8448f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/lucid_lullaby.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/whistling_void.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/whistling_void.ogg new file mode 100644 index 00000000..0c9e4d2e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/whistling_void.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 new file mode 100644 index 00000000..14de0b37 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot1.ogg 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 new file mode 100644 index 00000000..253a27a5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot2.ogg 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 new file mode 100644 index 00000000..28c64d62 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot3.ogg 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 new file mode 100644 index 00000000..26141c45 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growraycharge.ogg 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 new file mode 100644 index 00000000..16f54232 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growrayloop.ogg 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 new file mode 100644 index 00000000..32add080 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/growth_ray.ogg 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 new file mode 100644 index 00000000..34d0456a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot1.ogg 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 new file mode 100644 index 00000000..a1920058 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot2.ogg 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 new file mode 100644 index 00000000..037e4a8d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot3.ogg 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 new file mode 100644 index 00000000..58828e75 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrink_ray.ogg 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 new file mode 100644 index 00000000..9534da3a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkraycharge.ogg 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 new file mode 100644 index 00000000..8fe2682a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkrayloop.ogg 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 new file mode 100644 index 00000000..2ff3f3cb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/size_ray_charge.ogg 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 new file mode 100644 index 00000000..15740ce5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot1.ogg 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 new file mode 100644 index 00000000..ee2023a3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot2.ogg 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 new file mode 100644 index 00000000..3fdcbffa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot3.ogg 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 new file mode 100644 index 00000000..21ef89d4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka1.ogg 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 new file mode 100644 index 00000000..e4e60fda Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka2.ogg 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 new file mode 100644 index 00000000..15a12ac9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka3.ogg 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 new file mode 100644 index 00000000..6f93376b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/squidzooka/squizooka4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_lichen.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_lichen.png new file mode 100644 index 00000000..cb7a9d84 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_lichen.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_block.png new file mode 100644 index 00000000..4ec05b6b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_carpet.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_carpet.png new file mode 100644 index 00000000..4ec05b6b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_carpet.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antigravel.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antigravel.png new file mode 100644 index 00000000..44c8a2e3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antigravel.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_activator_rail.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_activator_rail.png new file mode 100644 index 00000000..26df1140 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_activator_rail.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_activator_rail_on.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_activator_rail_on.png new file mode 100644 index 00000000..d37e41e6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_activator_rail_on.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_block.png new file mode 100644 index 00000000..f07b43f2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_block_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_block_top.png new file mode 100644 index 00000000..5d21455b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_block_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_detector_rail.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_detector_rail.png new file mode 100644 index 00000000..c85d39e3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_detector_rail.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_detector_rail_on.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_detector_rail_on.png new file mode 100644 index 00000000..fda5dffd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_detector_rail_on.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_powered_rail.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_powered_rail.png new file mode 100644 index 00000000..9b5f8a95 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_powered_rail.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_powered_rail_on.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_powered_rail_on.png new file mode 100644 index 00000000..92e7d9ef Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_powered_rail_on.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_rail.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_rail.png new file mode 100644 index 00000000..315b86ea Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_rail.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_rail_corner.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_rail_corner.png new file mode 100644 index 00000000..791ae977 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_rail_corner.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_scaffolding_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_scaffolding_bottom.png new file mode 100644 index 00000000..992a28de Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_scaffolding_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_scaffolding_side.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_scaffolding_side.png new file mode 100644 index 00000000..7c2275aa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_scaffolding_side.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_scaffolding_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_scaffolding_top.png new file mode 100644 index 00000000..76379dac Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/antimetal_scaffolding_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/polished_antimetal_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/polished_antimetal_block.png new file mode 100644 index 00000000..8be7a9ba Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/polished_antimetal_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/polished_antimetal_block_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/polished_antimetal_block_top.png new file mode 100644 index 00000000..a2a46069 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antimetal/polished_antimetal_block_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_flow.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_flow.png new file mode 100644 index 00000000..f4dbd821 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_flow.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_flow.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_flow.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_still.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_still.png new file mode 100644 index 00000000..276e8a2f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_still.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_still.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_still.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/antiwater_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bed_bug_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bed_bug_egg.png new file mode 100644 index 00000000..25915455 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bed_bug_egg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bed_bug_egg_slightly_cracked.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bed_bug_egg_slightly_cracked.png new file mode 100644 index 00000000..5550ac1d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bed_bug_egg_slightly_cracked.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bed_bug_egg_very_cracked.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bed_bug_egg_very_cracked.png new file mode 100644 index 00000000..46976ff0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bed_bug_egg_very_cracked.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png new file mode 100644 index 00000000..68f48de7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png.mcmeta new file mode 100644 index 00000000..1e3d6590 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.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/block/bile/bile_still.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png new file mode 100644 index 00000000..1c5d447a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png.mcmeta new file mode 100644 index 00000000..432a3845 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 4, + "interpolate": true + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png new file mode 100644 index 00000000..02397070 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta new file mode 100644 index 00000000..6714e205 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 16, + "interpolate": true + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_vein_long.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_vein_long.png new file mode 100644 index 00000000..d085b074 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bile/bile_vein_long.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biomite.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biomite.png new file mode 100644 index 00000000..db068cdf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biomite.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png new file mode 100644 index 00000000..7ed82ebc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png.mcmeta new file mode 100644 index 00000000..6714e205 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 16, + "interpolate": true + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart.png new file mode 100644 index 00000000..a1a388af Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart.png.mcmeta new file mode 100644 index 00000000..e96a96aa --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 20, + "interpolate": true + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png new file mode 100644 index 00000000..818afa2b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png.mcmeta new file mode 100644 index 00000000..6714e205 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 16, + "interpolate": true + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_block.png new file mode 100644 index 00000000..7e7d6229 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_bud_stage0.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_bud_stage0.png new file mode 100644 index 00000000..3ae22a7e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_bud_stage0.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_bud_stage1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_bud_stage1.png new file mode 100644 index 00000000..e15574b9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_bud_stage1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_bud_stage2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_bud_stage2.png new file mode 100644 index 00000000..5827563e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_bud_stage2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_cluster.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_cluster.png new file mode 100644 index 00000000..d73397be Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blood_crystal_cluster.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_block.png new file mode 100644 index 00000000..c1fbf9da Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_comparator.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_comparator.png new file mode 100644 index 00000000..ae17005a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_comparator.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_comparator_on.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_comparator_on.png new file mode 100644 index 00000000..e272944b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_comparator_on.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_dot.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_dot.png new file mode 100644 index 00000000..f5f0970c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_dot.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_dot.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_dot.png.mcmeta new file mode 100644 index 00000000..5cb0fb73 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_dot.png.mcmeta @@ -0,0 +1,5 @@ +{ + "texture": { + "mipmap_strategy": "mean" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line0.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line0.png new file mode 100644 index 00000000..09f28657 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line0.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line0.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line0.png.mcmeta new file mode 100644 index 00000000..5cb0fb73 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line0.png.mcmeta @@ -0,0 +1,5 @@ +{ + "texture": { + "mipmap_strategy": "mean" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line1.png new file mode 100644 index 00000000..7eaff5a7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line1.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line1.png.mcmeta new file mode 100644 index 00000000..5cb0fb73 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_line1.png.mcmeta @@ -0,0 +1,5 @@ +{ + "texture": { + "mipmap_strategy": "mean" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_overlay.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_overlay.png new file mode 100644 index 00000000..8230e883 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_overlay.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_overlay.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_overlay.png.mcmeta new file mode 100644 index 00000000..5cb0fb73 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_dust_overlay.png.mcmeta @@ -0,0 +1,5 @@ +{ + "texture": { + "mipmap_strategy": "mean" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp.png new file mode 100644 index 00000000..473db731 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp_on.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp_on.png new file mode 100644 index 00000000..04d450ce Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp_on.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_ore.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_ore.png new file mode 100644 index 00000000..376985c5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_ore.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_repeater.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_repeater.png new file mode 100644 index 00000000..1209edde Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_repeater.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_repeater_on.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_repeater_on.png new file mode 100644 index 00000000..2cf5231f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_repeater_on.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_torch.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_torch.png new file mode 100644 index 00000000..56371114 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_torch.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_torch_off.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_torch_off.png new file mode 100644 index 00000000..dae132d7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_torch_off.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_block.png new file mode 100644 index 00000000..cf5c5e99 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_carpet.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_carpet.png new file mode 100644 index 00000000..cf5c5e99 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_carpet.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone.png new file mode 100644 index 00000000..4ecd6bbe Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_bricks.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_bricks.png new file mode 100644 index 00000000..0664322f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_bricks.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar.png new file mode 100644 index 00000000..34150b59 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar_top.png new file mode 100644 index 00000000..34ce52c3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/chiseled_broodstone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/chiseled_broodstone.png new file mode 100644 index 00000000..29bac91c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/chiseled_broodstone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/polished_broodstone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/polished_broodstone.png new file mode 100644 index 00000000..1087e4a4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/broodstone/polished_broodstone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest.png new file mode 100644 index 00000000..602237d0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest.png.mcmeta new file mode 100644 index 00000000..1fd02729 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 9 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest_top.png new file mode 100644 index 00000000..5de444e6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest_top.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest_top.png.mcmeta new file mode 100644 index 00000000..1fd02729 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/brown_ant_nest_top.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 9 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/empty_brown_ant_nest_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/empty_brown_ant_nest_block.png new file mode 100644 index 00000000..50a968ba Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/empty_brown_ant_nest_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/empty_brown_ant_nest_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/empty_brown_ant_nest_top.png new file mode 100644 index 00000000..f9c16691 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest/empty_brown_ant_nest_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest_top.png new file mode 100644 index 00000000..e9ee71db Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/brown_ant_nest_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/budding_blood_crystal_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/budding_blood_crystal_block.png new file mode 100644 index 00000000..c29ec146 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/budding_blood_crystal_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/camellia_bush_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/camellia_bush_bottom.png new file mode 100644 index 00000000..d2bdb55f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/camellia_bush_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/camellia_bush_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/camellia_bush_top.png new file mode 100644 index 00000000..0b77f1ab Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/camellia_bush_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png new file mode 100644 index 00000000..55cd182a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chiseled_dream_sandstone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chiseled_dream_sandstone.png new file mode 100644 index 00000000..41b1f425 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chiseled_dream_sandstone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chiseled_nyxite.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chiseled_nyxite.png new file mode 100644 index 00000000..463a04bf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chiseled_nyxite.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_block.png new file mode 100644 index 00000000..bee3628b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_base.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_base.png new file mode 100644 index 00000000..4a459d32 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_base.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_frustum.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_frustum.png new file mode 100644 index 00000000..fa765c5a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_frustum.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_middle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_middle.png new file mode 100644 index 00000000..5566fa80 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_middle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip.png new file mode 100644 index 00000000..c307e641 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip_merge.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip_merge.png new file mode 100644 index 00000000..54d2b8b8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip_merge.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_base.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_base.png new file mode 100644 index 00000000..41feb815 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_base.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_frustum.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_frustum.png new file mode 100644 index 00000000..3c44b5fb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_frustum.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_middle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_middle.png new file mode 100644 index 00000000..9377a313 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_middle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip.png new file mode 100644 index 00000000..3f058ad5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip_merge.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip_merge.png new file mode 100644 index 00000000..8b5e6659 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip_merge.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cloud_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cloud_block.png new file mode 100644 index 00000000..595010ee Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cloud_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_0.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_0.png new file mode 100644 index 00000000..5a285cb4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_0.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_1.png new file mode 100644 index 00000000..9eb94b8c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_bottom.png new file mode 100644 index 00000000..3635e3a3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_top.png new file mode 100644 index 00000000..5f173158 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_bottom.png new file mode 100644 index 00000000..572d562d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_top.png new file mode 100644 index 00000000..1bdde9d1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage0.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage0.png new file mode 100644 index 00000000..ef1f96cd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage0.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage1.png new file mode 100644 index 00000000..f17e0b3f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2.png new file mode 100644 index 00000000..f3990230 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2.png.mcmeta new file mode 100644 index 00000000..bbd61c1f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 7 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2_emissive.png new file mode 100644 index 00000000..69ddcc72 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2_emissive.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2_emissive.png.mcmeta new file mode 100644 index 00000000..bbd61c1f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cornea/cornea_stalk_stage2_emissive.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 7 + } +} 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 new file mode 100644 index 00000000..905c49c9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg.png 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 new file mode 100644 index 00000000..0a4765be Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_slightly_cracked.png 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 new file mode 100644 index 00000000..9040f255 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_very_cracked.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creepvine.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creepvine.png new file mode 100644 index 00000000..b578b4fa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/creepvine.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/critter_cage.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/critter_cage.png new file mode 100644 index 00000000..bdbb7c5c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/critter_cage.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cut_dream_sandstone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cut_dream_sandstone.png new file mode 100644 index 00000000..96381891 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/cut_dream_sandstone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_fire.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_fire.png new file mode 100644 index 00000000..cc28f8b6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_fire.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_fire.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_fire.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_fire.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_log_lit.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_log_lit.png new file mode 100644 index 00000000..be9b7862 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_log_lit.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_log_lit.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_log_lit.png.mcmeta new file mode 100644 index 00000000..bb2e173f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_campfire_log_lit.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 20 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_0.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_0.png new file mode 100644 index 00000000..b90f1257 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_0.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_0.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_0.png.mcmeta new file mode 100644 index 00000000..76446714 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_0.png.mcmeta @@ -0,0 +1,38 @@ +{ + "animation": { + "frames": [ + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ] + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_1.png new file mode 100644 index 00000000..ef49e34d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_1.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_1.png.mcmeta new file mode 100644 index 00000000..dd1bedb1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_fire_1.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_lantern.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_lantern.png new file mode 100644 index 00000000..280e4b35 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_lantern.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_lantern.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_lantern.png.mcmeta new file mode 100644 index 00000000..3de4a0bd --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_lantern.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 8 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sand.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sand.png new file mode 100644 index 00000000..e096183d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sand.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sandstone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sandstone.png new file mode 100644 index 00000000..d395c17d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sandstone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sandstone_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sandstone_bottom.png new file mode 100644 index 00000000..5f15a270 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sandstone_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sandstone_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sandstone_top.png new file mode 100644 index 00000000..00cbc1a0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_sandstone_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_torch.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_torch.png new file mode 100644 index 00000000..b2b9df72 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/dream_torch.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_side.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_side.png new file mode 100644 index 00000000..2857679b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_side.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_side_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_side_2.png new file mode 100644 index 00000000..5a4ee689 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_side_2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_side_3.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_side_3.png new file mode 100644 index 00000000..c14d8b44 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_side_3.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_top.png new file mode 100644 index 00000000..1d09bd52 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/duct_tape/duct_tape_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/elythia_portal.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/elythia_portal.png new file mode 100644 index 00000000..aa38fc9f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/elythia_portal.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/elythia_portal.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/elythia_portal.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/elythia_portal.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/fallen_king_crown.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/fallen_king_crown.png new file mode 100644 index 00000000..e6159677 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/fallen_king_crown.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_1x1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_1x1.png new file mode 100644 index 00000000..f9d4c1e8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_1x1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_3x3.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_3x3.png new file mode 100644 index 00000000..60f667b9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_3x3.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/bottom_left.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/bottom_left.png new file mode 100644 index 00000000..961e903d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/bottom_left.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/bottom_middle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/bottom_middle.png new file mode 100644 index 00000000..75a3585d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/bottom_middle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/bottom_right.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/bottom_right.png new file mode 100644 index 00000000..e8c13631 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/bottom_right.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/center.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/center.png new file mode 100644 index 00000000..b13055d0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/center.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/middle_left.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/middle_left.png new file mode 100644 index 00000000..6e050e7b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/middle_left.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/middle_right.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/middle_right.png new file mode 100644 index 00000000..29babf2d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/middle_right.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/top_left.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/top_left.png new file mode 100644 index 00000000..8c00536c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/top_left.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/top_middle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/top_middle.png new file mode 100644 index 00000000..ebfcfcfe Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/top_middle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/top_right.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/top_right.png new file mode 100644 index 00000000..12b2e140 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/giant_lilypad/tiles/three_by_three/top_right.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/glowcap_mushroom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/glowcap_mushroom.png new file mode 100644 index 00000000..4bd7cd82 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/glowcap_mushroom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/glowcap_mushroom_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/glowcap_mushroom_block.png new file mode 100644 index 00000000..d482265a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/glowcap_mushroom_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hanging_creeproots.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hanging_creeproots.png new file mode 100644 index 00000000..06e66294 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hanging_creeproots.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hanging_creeproots_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hanging_creeproots_bottom.png new file mode 100644 index 00000000..c3eb46d1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hanging_creeproots_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hushweed.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hushweed.png new file mode 100644 index 00000000..75013dd0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hushweed.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hushweed_particle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hushweed_particle.png new file mode 100644 index 00000000..c887769c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/hushweed_particle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jerry_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jerry_egg.png new file mode 100644 index 00000000..a9a3220f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jerry_egg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jerry_egg_break_particle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jerry_egg_break_particle.png new file mode 100644 index 00000000..db2054c4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jerry_egg_break_particle.png differ 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 new file mode 100644 index 00000000..18f0f294 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jumpy_bug_egg.png 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 new file mode 100644 index 00000000..4a8bdc48 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/jumpy_bug_egg.png.mcmeta @@ -0,0 +1,12 @@ +{ + "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 new file mode 100644 index 00000000..3bfd1130 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/loam.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lotus.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lotus.png new file mode 100644 index 00000000..370266d7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lotus.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lucid_anchor.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lucid_anchor.png new file mode 100644 index 00000000..f5a07eaa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lucid_anchor.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flow.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flow.png new file mode 100644 index 00000000..4fe95180 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flow.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flow.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flow.png.mcmeta new file mode 100644 index 00000000..3479f1d8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flow.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 1, + "interpolate": true + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png new file mode 100644 index 00000000..4fe95180 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png.mcmeta new file mode 100644 index 00000000..cb44715a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 5, + "interpolate": true + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_froglight_side.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_froglight_side.png new file mode 100644 index 00000000..4a01510a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_froglight_side.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_froglight_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_froglight_top.png new file mode 100644 index 00000000..36ce869b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_froglight_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_still.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_still.png new file mode 100644 index 00000000..1b35db30 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_still.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_still.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_still.png.mcmeta new file mode 100644 index 00000000..cb44715a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lumen_still.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 5, + "interpolate": true + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..10089a41 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg.png 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 new file mode 100644 index 00000000..ac965ebb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_slightly_cracked.png 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 new file mode 100644 index 00000000..10cf9dd9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_very_cracked.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/orange_milkweed_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/orange_milkweed_bottom.png new file mode 100644 index 00000000..a515f571 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/orange_milkweed_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/orange_milkweed_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/orange_milkweed_top.png new file mode 100644 index 00000000..2c1694fc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/orange_milkweed_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/pink_milkweed_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/pink_milkweed_bottom.png new file mode 100644 index 00000000..7796b963 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/pink_milkweed_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/pink_milkweed_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/pink_milkweed_top.png new file mode 100644 index 00000000..8913e972 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/milkweed/pink_milkweed_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines.png new file mode 100644 index 00000000..a3019358 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines_bottom.png new file mode 100644 index 00000000..a667ff08 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines_broodfruit.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines_broodfruit.png new file mode 100644 index 00000000..a4b35c09 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines_broodfruit.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines_top.png new file mode 100644 index 00000000..5fa3ca49 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/molting_vines/molting_vines_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/mucus.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/mucus.png new file mode 100644 index 00000000..2541a82c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/mucus.png 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 new file mode 100644 index 00000000..1a74738a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/myrmite.png 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 new file mode 100644 index 00000000..a2c6baed Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log.png new file mode 100644 index 00000000..e734fbb2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_bottom.png new file mode 100644 index 00000000..16840501 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_top.png new file mode 100644 index 00000000..2d04781e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_top.png new file mode 100644 index 00000000..6ea31397 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_trapdoor.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_trapdoor.png new file mode 100644 index 00000000..6422ae65 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_trapdoor.png 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 new file mode 100644 index 00000000..d5951e95 Binary files /dev/null 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 new file mode 100644 index 00000000..2a5f6933 Binary files /dev/null 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/nadir_veil.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_veil.png new file mode 100644 index 00000000..bebd40ad Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_veil.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_veil.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_veil.png.mcmeta new file mode 100644 index 00000000..557410d3 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_veil.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 10, + "interpolate": true + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..9683447a Binary files /dev/null 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/nadir/stripped_nadir_log_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log_top.png new file mode 100644 index 00000000..197a69cc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite.png new file mode 100644 index 00000000..c2b1022a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_bricks.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_bricks.png new file mode 100644 index 00000000..477bdefe Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_bricks.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar.png new file mode 100644 index 00000000..e7d5f68a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar_top.png new file mode 100644 index 00000000..b91a3a97 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar_top.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 new file mode 100644 index 00000000..a3fa35a5 Binary files /dev/null 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 new file mode 100644 index 00000000..4872f6ca Binary files /dev/null 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 new file mode 100644 index 00000000..2fe94789 Binary files /dev/null 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 new file mode 100644 index 00000000..e540bc19 Binary files /dev/null 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 new file mode 100644 index 00000000..9212ef77 Binary files /dev/null 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 new file mode 100644 index 00000000..16fb2fbd Binary files /dev/null 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 new file mode 100644 index 00000000..043470fd Binary files /dev/null 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 new file mode 100644 index 00000000..f3c751b9 Binary files /dev/null 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 new file mode 100644 index 00000000..47a77740 Binary files /dev/null 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 new file mode 100644 index 00000000..386ddb6e Binary files /dev/null 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/ouranwood/mossy_ouranwood_log.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/mossy_ouranwood_log.png new file mode 100644 index 00000000..54059d3f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/mossy_ouranwood_log.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/mossy_ouranwood_log_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/mossy_ouranwood_log_top.png new file mode 100644 index 00000000..312b4352 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/mossy_ouranwood_log_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_acorn_hanging.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_acorn_hanging.png new file mode 100644 index 00000000..aaba9038 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_acorn_hanging.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_door_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_door_bottom.png new file mode 100644 index 00000000..cfd22a6c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_door_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_door_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_door_top.png new file mode 100644 index 00000000..02868c13 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_door_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_leaves.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_leaves.png new file mode 100644 index 00000000..5b6290b0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_leaves.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_log.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_log.png new file mode 100644 index 00000000..cb3fcaf9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_log.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_log_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_log_top.png new file mode 100644 index 00000000..60177a81 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_log_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_planks.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_planks.png new file mode 100644 index 00000000..643dd7b3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_planks.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_sapling_0.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_sapling_0.png new file mode 100644 index 00000000..c232eaf2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_sapling_0.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_sapling_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_sapling_1.png new file mode 100644 index 00000000..ca02b758 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_sapling_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_sapling_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_sapling_2.png new file mode 100644 index 00000000..ac43819c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_sapling_2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_trapdoor.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_trapdoor.png new file mode 100644 index 00000000..5ff7f017 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_trapdoor.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/stripped_ouranwood_log.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/stripped_ouranwood_log.png new file mode 100644 index 00000000..c5276727 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/stripped_ouranwood_log.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/stripped_ouranwood_log_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/stripped_ouranwood_log_top.png new file mode 100644 index 00000000..1d0907d6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ouranwood/stripped_ouranwood_log_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/pale_nyxite.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/pale_nyxite.png new file mode 100644 index 00000000..2c6a2834 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/pale_nyxite.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_door_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_door_bottom.png new file mode 100644 index 00000000..7edbab7e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_door_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_door_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_door_top.png new file mode 100644 index 00000000..2773d585 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_door_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_hanging.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_hanging.png new file mode 100644 index 00000000..cae2364a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_hanging.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_leaves.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_leaves.png new file mode 100644 index 00000000..f71691f4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_leaves.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_log.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_log.png new file mode 100644 index 00000000..519ec0fb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_log.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_log_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_log_top.png new file mode 100644 index 00000000..4c5215c8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_log_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_planks.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_planks.png new file mode 100644 index 00000000..a8072afd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_planks.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_sapling.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_sapling.png new file mode 100644 index 00000000..9908bdc9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_sapling.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_trapdoor.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_trapdoor.png new file mode 100644 index 00000000..50cf8b95 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/peach_trapdoor.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log.png new file mode 100644 index 00000000..9590b8e2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log_top.png new file mode 100644 index 00000000..821a0f79 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/polished_nyxite.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/polished_nyxite.png new file mode 100644 index 00000000..cf06e8f5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/polished_nyxite.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png new file mode 100644 index 00000000..6a029a2b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png.mcmeta new file mode 100644 index 00000000..39e48b93 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png.mcmeta @@ -0,0 +1,12 @@ +{ + "animation": { + "frametime": 25, + "interpolate": true, + "frames": [ + 0, + 1, + 2, + 3 + ] + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/empty_rainbow_ant_nest_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/empty_rainbow_ant_nest_block.png new file mode 100644 index 00000000..50a968ba Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/empty_rainbow_ant_nest_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/empty_rainbow_ant_nest_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/empty_rainbow_ant_nest_top.png new file mode 100644 index 00000000..f9c16691 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/empty_rainbow_ant_nest_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest.png new file mode 100644 index 00000000..4e10e095 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest.png.mcmeta new file mode 100644 index 00000000..1fd02729 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 9 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest_top.png new file mode 100644 index 00000000..ad126e45 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest_top.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest_top.png.mcmeta new file mode 100644 index 00000000..1fd02729 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/rainbow_ant_nest/rainbow_ant_nest_top.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 9 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png new file mode 100644 index 00000000..2307b613 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png.mcmeta new file mode 100644 index 00000000..1fd02729 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 9 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png new file mode 100644 index 00000000..73985873 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png.mcmeta new file mode 100644 index 00000000..1fd02729 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 9 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/roseate_froglight_side.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/roseate_froglight_side.png new file mode 100644 index 00000000..d555f8a6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/roseate_froglight_side.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/roseate_froglight_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/roseate_froglight_top.png new file mode 100644 index 00000000..e7de3a5b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/roseate_froglight_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/seashell.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/seashell.png new file mode 100644 index 00000000..4c957b83 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/seashell.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/chiseled_shellstone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/chiseled_shellstone.png new file mode 100644 index 00000000..0ce86402 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/chiseled_shellstone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/chiseled_shellstone_bricks.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/chiseled_shellstone_bricks.png new file mode 100644 index 00000000..0ce86402 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/chiseled_shellstone_bricks.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/cracked_shellstone_bricks.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/cracked_shellstone_bricks.png new file mode 100644 index 00000000..a7034f72 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/cracked_shellstone_bricks.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/mossy_shellstone_bricks.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/mossy_shellstone_bricks.png new file mode 100644 index 00000000..cf3e2dd1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/mossy_shellstone_bricks.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/polished_shellstone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/polished_shellstone.png new file mode 100644 index 00000000..663d8f9d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/polished_shellstone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone.png new file mode 100644 index 00000000..b4b3c1e6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_bricks.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_bricks.png new file mode 100644 index 00000000..e430d0ef Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_bricks.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar.png new file mode 100644 index 00000000..ba45df9f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar_top.png new file mode 100644 index 00000000..50eabf7f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spider_lily_stem.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spider_lily_stem.png new file mode 100644 index 00000000..62dd4892 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spider_lily_stem.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spider_lily_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spider_lily_top.png new file mode 100644 index 00000000..ec51cf7b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spider_lily_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spit_bug_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spit_bug_egg.png new file mode 100644 index 00000000..638afdbf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spit_bug_egg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spit_bug_egg.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spit_bug_egg.png.mcmeta new file mode 100644 index 00000000..4a8bdc48 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/spit_bug_egg.png.mcmeta @@ -0,0 +1,12 @@ +{ + "animation": { + "frametime": 140, + "interpolate": true, + "frames": [ + 0, + 1, + 0, + 2 + ] + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral.png new file mode 100644 index 00000000..c457c8a4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_block.png new file mode 100644 index 00000000..82670cf5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_fan.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_fan.png new file mode 100644 index 00000000..b2384f70 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_fan.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png new file mode 100644 index 00000000..a6ca10b4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png.mcmeta new file mode 100644 index 00000000..3d71a468 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 16, + "interpolate": true + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_block.png new file mode 100644 index 00000000..4df432c4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_block.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_block.png.mcmeta new file mode 100644 index 00000000..3d71a468 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_block.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 16, + "interpolate": true + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_fan.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_fan.png new file mode 100644 index 00000000..2cfec079 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_fan.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_fan.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_fan.png.mcmeta new file mode 100644 index 00000000..3d71a468 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_fan.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 16, + "interpolate": true + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_side.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_side.png new file mode 100644 index 00000000..42088094 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_side.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_side.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_side.png.mcmeta new file mode 100644 index 00000000..1fd02729 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_side.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 9 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_top.png new file mode 100644 index 00000000..0ec0664b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_top.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_top.png.mcmeta new file mode 100644 index 00000000..1fd02729 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/termite_nest/termite_nest_top.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 9 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png new file mode 100644 index 00000000..b6e9be40 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/broodstone_titanium_ore.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/broodstone_titanium_ore.png new file mode 100644 index 00000000..6cffd7e2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/broodstone_titanium_ore.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/chiseled_titanium.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/chiseled_titanium.png new file mode 100644 index 00000000..28b9ce32 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/chiseled_titanium.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/cut_titanium.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/cut_titanium.png new file mode 100644 index 00000000..db8f2b86 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/cut_titanium.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/raw_titanium_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/raw_titanium_block.png new file mode 100644 index 00000000..16cf0452 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/raw_titanium_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bars.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bars.png new file mode 100644 index 00000000..bffb9257 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bars.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_block.png new file mode 100644 index 00000000..62c5aa36 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb.png new file mode 100644 index 00000000..74a602b8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb_lit.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb_lit.png new file mode 100644 index 00000000..fce7f47b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb_lit.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb_lit_powered.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb_lit_powered.png new file mode 100644 index 00000000..3fb4adb3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb_lit_powered.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb_powered.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb_powered.png new file mode 100644 index 00000000..ca7b665b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_bulb_powered.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_deepslate_ore.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_deepslate_ore.png new file mode 100644 index 00000000..7452c652 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_deepslate_ore.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_door_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_door_bottom.png new file mode 100644 index 00000000..ae1512cc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_door_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_door_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_door_top.png new file mode 100644 index 00000000..6b7acc32 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_door_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_ore.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_ore.png new file mode 100644 index 00000000..09b9680e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_ore.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_trapdoor.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_trapdoor.png new file mode 100644 index 00000000..17b09ed5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/titanium/titanium_trapdoor.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 new file mode 100644 index 00000000..1b40756a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/triffid_goo_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ultimate_core.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ultimate_core.png new file mode 100644 index 00000000..143f1cf4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/ultimate_core.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_hanging_moss.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_hanging_moss.png new file mode 100644 index 00000000..2cd78248 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_hanging_moss.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_hanging_moss_tip.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_hanging_moss_tip.png new file mode 100644 index 00000000..2cb25bd5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_hanging_moss_tip.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_block.png new file mode 100644 index 00000000..ec85776f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_carpet.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_carpet.png new file mode 100644 index 00000000..ec85776f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_carpet.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_carpet_side_small.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_carpet_side_small.png new file mode 100644 index 00000000..a48bc74b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_carpet_side_small.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_carpet_side_tall.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_carpet_side_tall.png new file mode 100644 index 00000000..2ec5ac28 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/umbral_moss/umbral_moss_carpet_side_tall.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_side.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_side.png new file mode 100644 index 00000000..2307b613 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_side.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_side.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_side.png.mcmeta new file mode 100644 index 00000000..1fd02729 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_side.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 9 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_top.png new file mode 100644 index 00000000..73985873 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_top.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_top.png.mcmeta new file mode 100644 index 00000000..1fd02729 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/unstable_ant_nest/unstable_ant_nest_top.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 9 + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/upper.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/upper.png new file mode 100644 index 00000000..ebcce044 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/upper.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/broodstone_uranium_ore.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/broodstone_uranium_ore.png new file mode 100644 index 00000000..6eeba5b3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/broodstone_uranium_ore.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/chiseled_uranium.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/chiseled_uranium.png new file mode 100644 index 00000000..4c400d62 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/chiseled_uranium.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/cut_uranium.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/cut_uranium.png new file mode 100644 index 00000000..ea0696cf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/cut_uranium.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/raw_uranium_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/raw_uranium_block.png new file mode 100644 index 00000000..f52a8fb3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/raw_uranium_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bars.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bars.png new file mode 100644 index 00000000..8efc22c1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bars.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_block.png new file mode 100644 index 00000000..4e687585 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb.png new file mode 100644 index 00000000..e9ddba6f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb_lit.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb_lit.png new file mode 100644 index 00000000..8279fffe Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb_lit.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb_lit_powered.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb_lit_powered.png new file mode 100644 index 00000000..25a00609 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb_lit_powered.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb_powered.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb_powered.png new file mode 100644 index 00000000..082b07e2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_bulb_powered.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_deepslate_ore.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_deepslate_ore.png new file mode 100644 index 00000000..3e3f46f2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_deepslate_ore.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_door_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_door_bottom.png new file mode 100644 index 00000000..540c650e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_door_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_door_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_door_top.png new file mode 100644 index 00000000..9513bcf6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_door_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_ore.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_ore.png new file mode 100644 index 00000000..41966b36 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_ore.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_trapdoor.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_trapdoor.png new file mode 100644 index 00000000..7a058ea9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/uranium/uranium_trapdoor.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/wasp_nest/wasp_nest_front.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/wasp_nest/wasp_nest_front.png new file mode 100644 index 00000000..88c40843 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/wasp_nest/wasp_nest_front.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/wasp_nest/wasp_nest_side.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/wasp_nest/wasp_nest_side.png new file mode 100644 index 00000000..844163d6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/wasp_nest/wasp_nest_side.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/wasp_nest/wasp_nest_top_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/wasp_nest/wasp_nest_top_bottom.png new file mode 100644 index 00000000..e41e1f1c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/wasp_nest/wasp_nest_top_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/apple_cow.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/apple_cow.png new file mode 100644 index 00000000..e74e4e5e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/apple_cow.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/apple_cow_sheared.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/apple_cow_sheared.png new file mode 100644 index 00000000..06031dbe Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/apple_cow_sheared.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/baby_apple_cow.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/baby_apple_cow.png new file mode 100644 index 00000000..517b4843 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/baby_apple_cow.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/baby_golden_apple_cow.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/baby_golden_apple_cow.png new file mode 100644 index 00000000..be4dc5ed Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/baby_golden_apple_cow.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/enchanted_golden_apple_cow.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/enchanted_golden_apple_cow.png new file mode 100644 index 00000000..c6b9222d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/enchanted_golden_apple_cow.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/enchanted_golden_apple_cow_sheared.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/enchanted_golden_apple_cow_sheared.png new file mode 100644 index 00000000..739c2483 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/enchanted_golden_apple_cow_sheared.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/golden_apple_cow.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/golden_apple_cow.png new file mode 100644 index 00000000..acdecaa7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/golden_apple_cow.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/golden_apple_cow_sheared.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/golden_apple_cow_sheared.png new file mode 100644 index 00000000..7581fd6b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/apple_cow/golden_apple_cow_sheared.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/basilisk.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/basilisk.png new file mode 100644 index 00000000..877f6c16 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/basilisk.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/basilisk_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/basilisk_emissive.png new file mode 100644 index 00000000..d87039b1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/basilisk_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/bed_bug.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/bed_bug.png new file mode 100644 index 00000000..6196ab6e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/bed_bug.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/bed_bug_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/bed_bug_emissive.png new file mode 100644 index 00000000..d2f1e3f2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/bed_bug_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/blood_crystal_leggings_layer.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/blood_crystal_leggings_layer.png new file mode 100644 index 00000000..820e1750 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/blood_crystal_leggings_layer.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/blood_crystal_main_layer.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/blood_crystal_main_layer.png new file mode 100644 index 00000000..5b3d5191 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/blood_crystal_main_layer.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/boat/nadir.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/boat/nadir.png new file mode 100644 index 00000000..ba77380e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/boat/nadir.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/boat/ouranwood.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/boat/ouranwood.png new file mode 100644 index 00000000..66b0a4b0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/boat/ouranwood.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/boat/peach.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/boat/peach.png new file mode 100644 index 00000000..8dabe8ce Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/boat/peach.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/bomber.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/bomber.png new file mode 100644 index 00000000..b8e96c7b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/bomber.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/brown_ant.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/brown_ant.png new file mode 100644 index 00000000..62aa57a6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/brown_ant.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/brutalfly.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/brutalfly.png new file mode 100644 index 00000000..ee6f809b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/brutalfly.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/brutalfly_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/brutalfly_emissive.png new file mode 100644 index 00000000..dfc92bee Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/brutalfly_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_blue.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_blue.png new file mode 100644 index 00000000..e17e1ce8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_blue.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_brown.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_brown.png new file mode 100644 index 00000000..d2103b27 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_brown.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_cyan.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_cyan.png new file mode 100644 index 00000000..7bd05c3b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_cyan.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_green.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_green.png new file mode 100644 index 00000000..dbed5252 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_green.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_lavender.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_lavender.png new file mode 100644 index 00000000..c80cfca1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_lavender.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_light_blue.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_light_blue.png new file mode 100644 index 00000000..c2cafdae Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_light_blue.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_magenta.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_magenta.png new file mode 100644 index 00000000..492eab57 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_magenta.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_orange.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_orange.png new file mode 100644 index 00000000..fca7baa7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_orange.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_purple.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_purple.png new file mode 100644 index 00000000..cbbc049c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_purple.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_yellow.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_yellow.png new file mode 100644 index 00000000..5d8ff8b0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/butterfly/butterfly_yellow.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/caterpillar.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/caterpillar.png new file mode 100644 index 00000000..d63b8276 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/caterpillar.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/cheep/cheep_magenta.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/cheep/cheep_magenta.png new file mode 100644 index 00000000..40b5f5c7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/cheep/cheep_magenta.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/nadir.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/nadir.png new file mode 100644 index 00000000..ffd68a70 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/nadir.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/ouranwood.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/ouranwood.png new file mode 100644 index 00000000..e66c5831 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/ouranwood.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/peach.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/peach.png new file mode 100644 index 00000000..df8d0dc8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/peach.png 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 new file mode 100644 index 00000000..45f4ba5a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark.png 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 new file mode 100644 index 00000000..3b8c88e8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark_emissive.png 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 new file mode 100644 index 00000000..60c1aeea Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/creeping_horror.png 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 new file mode 100644 index 00000000..b905c937 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/creeping_horror_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/diamond_minecart.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/diamond_minecart.png new file mode 100644 index 00000000..4f08c8e0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/diamond_minecart.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dorrie.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dorrie.png new file mode 100644 index 00000000..34eded06 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dorrie.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dorrie_saddle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dorrie_saddle.png new file mode 100644 index 00000000..810382c4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dorrie_saddle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dr_trayaurus.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dr_trayaurus.png new file mode 100644 index 00000000..e2f90ba8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dr_trayaurus.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dr_trayaurus_old.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dr_trayaurus_old.png new file mode 100644 index 00000000..747c0c86 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/dr_trayaurus_old.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/easter_bunny.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/easter_bunny.png new file mode 100644 index 00000000..9e82710b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/easter_bunny.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/elka.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/elka.png new file mode 100644 index 00000000..27a2d587 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/elka.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/elka_baby.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/elka_baby.png new file mode 100644 index 00000000..23c415a8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/elka_baby.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion.png new file mode 100644 index 00000000..c4a6004f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion_emissive.png new file mode 100644 index 00000000..60e5914d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion_harden.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion_harden.png new file mode 100644 index 00000000..51d8cd61 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion_harden.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel.png new file mode 100644 index 00000000..1b4ac52e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_albino.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_albino.png new file mode 100644 index 00000000..8ef321c8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_albino.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_brown.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_brown.png new file mode 100644 index 00000000..3957ca29 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_brown.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/squirrel_collar.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/squirrel_collar.png new file mode 100644 index 00000000..26a08e3e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/squirrel_collar.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/frog/frog_elythia.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/frog/frog_elythia.png new file mode 100644 index 00000000..25f9f839 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/frog/frog_elythia.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer.png new file mode 100644 index 00000000..eaf426f3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_emissive.png new file mode 100644 index 00000000..92ac0396 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared.png new file mode 100644 index 00000000..c84c8e16 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared_emissive.png new file mode 100644 index 00000000..81144589 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer.png new file mode 100644 index 00000000..22851d37 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer_emissive.png new file mode 100644 index 00000000..22851d37 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer.png new file mode 100644 index 00000000..0d83677c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer_emissive.png new file mode 100644 index 00000000..8bdbbeaf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer.png new file mode 100644 index 00000000..abb1d8f4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer_emissive.png new file mode 100644 index 00000000..54570e63 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant.png new file mode 100644 index 00000000..0c15178e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant_emissive.png new file mode 100644 index 00000000..0c15178e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer.png new file mode 100644 index 00000000..9ba7dade Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer_emissive.png new file mode 100644 index 00000000..9ba7dade Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/grim/grim_spotted.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/grim/grim_spotted.png new file mode 100644 index 00000000..8829e90f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/grim/grim_spotted.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/grim/grim_spotted_angry.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/grim/grim_spotted_angry.png new file mode 100644 index 00000000..e3c5f747 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/grim/grim_spotted_angry.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/grim/grim_spotted_tame.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/grim/grim_spotted_tame.png new file mode 100644 index 00000000..8829e90f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/grim/grim_spotted_tame.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle.png new file mode 100644 index 00000000..cb882a96 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_emissive.png new file mode 100644 index 00000000..6052ddde Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_saddle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_saddle.png new file mode 100644 index 00000000..7f78b794 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_saddle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/alpha_jerry.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/alpha_jerry.png new file mode 100644 index 00000000..217eb832 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/alpha_jerry.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/gamma_jerry.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/gamma_jerry.png new file mode 100644 index 00000000..042689e6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/gamma_jerry.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/infant_jerry.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/infant_jerry.png new file mode 100644 index 00000000..b4e4d99f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/infant_jerry.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/mature_jerry.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/mature_jerry.png new file mode 100644 index 00000000..ab1dbc7e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jerry/mature_jerry.png 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 new file mode 100644 index 00000000..1f33c503 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jumpy_bug.png 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 new file mode 100644 index 00000000..0fdb420d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/jumpy_bug_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/kraken.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/kraken.png new file mode 100644 index 00000000..b39b621c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/kraken.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/kraken_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/kraken_emissive.png new file mode 100644 index 00000000..dc644648 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/kraken_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/lucid.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/lucid.png new file mode 100644 index 00000000..f6eff03b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/lucid.png 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 new file mode 100644 index 00000000..ce78a925 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/lurking_terror.png 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 new file mode 100644 index 00000000..e17f59df Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/lurking_terror_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/mantis.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/mantis.png new file mode 100644 index 00000000..cdde9855 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/mantis.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/mantis_alpha.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/mantis_alpha.png new file mode 100644 index 00000000..fdc492d3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/mantis_alpha.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/missile_squid.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/missile_squid.png new file mode 100644 index 00000000..0d285ff0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/missile_squid.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/molevore.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/molevore.png new file mode 100644 index 00000000..342f0794 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/molevore.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/moleworm.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/moleworm.png new file mode 100644 index 00000000..f2919742 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/moleworm.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare.png new file mode 100644 index 00000000..e8030976 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare.png new file mode 100644 index 00000000..a7d64671 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_emissive.png new file mode 100644 index 00000000..018fd40c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2.png new file mode 100644 index 00000000..f355e1b1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2_emissive.png new file mode 100644 index 00000000..800e7e96 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare_emissive.png new file mode 100644 index 00000000..018fd40c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/nightmare_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/octopus_bomb.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/octopus_bomb.png new file mode 100644 index 00000000..f653c09f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/octopus_bomb.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_buck.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_buck.png new file mode 100644 index 00000000..e46e0af4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_buck.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_doe.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_doe.png new file mode 100644 index 00000000..d68e79dc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_doe.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_stag.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_stag.png new file mode 100644 index 00000000..651c3e49 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_stag.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/rainbow_ant.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/rainbow_ant.png new file mode 100644 index 00000000..b55ca31e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/rainbow_ant.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/red_ant.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/red_ant.png new file mode 100644 index 00000000..519d2a91 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/red_ant.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie.png new file mode 100644 index 00000000..87f56ddd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie.png.mcmeta new file mode 100644 index 00000000..78df88c4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 1 + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_blue.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_blue.png new file mode 100644 index 00000000..b186e4be Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_blue.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_blue.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_blue.png.mcmeta new file mode 100644 index 00000000..eb42938f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_blue.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 4, + "interpolate": true + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_purple.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_purple.png new file mode 100644 index 00000000..1469aa6f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_purple.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_purple.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_purple.png.mcmeta new file mode 100644 index 00000000..eb42938f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_purple.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 4, + "interpolate": true + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_red.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_red.png new file mode 100644 index 00000000..c8cd7237 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_red.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_red.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_red.png.mcmeta new file mode 100644 index 00000000..eb42938f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_red.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 4, + "interpolate": true + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_white.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_white.png new file mode 100644 index 00000000..2c82c97d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_white.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_white.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_white.png.mcmeta new file mode 100644 index 00000000..eb42938f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_white.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 4, + "interpolate": true + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_yellow.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_yellow.png new file mode 100644 index 00000000..7c45512c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_yellow.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_yellow.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_yellow.png.mcmeta new file mode 100644 index 00000000..eb42938f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/reverie/reverie_yellow.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 4, + "interpolate": true + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/rolly_polly/rolly_polly.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/rolly_polly/rolly_polly.png new file mode 100644 index 00000000..4cbbcf26 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/rolly_polly/rolly_polly.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue.png new file mode 100644 index 00000000..658b7180 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue_emissive.png new file mode 100644 index 00000000..a7ee1708 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green.png new file mode 100644 index 00000000..8737db9b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green_emissive.png new file mode 100644 index 00000000..03dc179d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/nadir.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/nadir.png new file mode 100644 index 00000000..bd6dbdc3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/nadir.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/ouranwood.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/ouranwood.png new file mode 100644 index 00000000..7903f083 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/ouranwood.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/peach.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/peach.png new file mode 100644 index 00000000..3c735251 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/peach.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/nadir.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/nadir.png new file mode 100644 index 00000000..c16d3b33 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/nadir.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/ouranwood.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/ouranwood.png new file mode 100644 index 00000000..b134ba8c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/ouranwood.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/peach.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/peach.png new file mode 100644 index 00000000..46c2e786 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/signs/peach.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/spit_bug.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/spit_bug.png new file mode 100644 index 00000000..895cd975 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/spit_bug.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/spit_bug_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/spit_bug_emissive.png new file mode 100644 index 00000000..3fef0fb8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/spit_bug_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/stink_bug.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/stink_bug.png new file mode 100644 index 00000000..09c3cec9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/stink_bug.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/tentacle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/tentacle.png new file mode 100644 index 00000000..8c1f1187 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/tentacle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/termite.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/termite.png new file mode 100644 index 00000000..38fa7035 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/termite.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/toreterror.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/toreterror.png new file mode 100644 index 00000000..179df7c9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/toreterror.png 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 new file mode 100644 index 00000000..00ee04a0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/triffid.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ultimate_armor_leggings.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ultimate_armor_leggings.png new file mode 100644 index 00000000..39bf843d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ultimate_armor_leggings.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ultimate_armor_main.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ultimate_armor_main.png new file mode 100644 index 00000000..f219dc6d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/ultimate_armor_main.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/unstable_ant.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/unstable_ant.png new file mode 100644 index 00000000..9f12cfc8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/unstable_ant.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/wasp.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/wasp.png new file mode 100644 index 00000000..68017546 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/wasp.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/wasp_panda.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/wasp_panda.png new file mode 100644 index 00000000..43a10191 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/wasp_panda.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/worm/worm_large.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/worm/worm_large.png new file mode 100644 index 00000000..a00c505a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/worm/worm_large.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/alpha_mantis.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/alpha_mantis.png new file mode 100644 index 00000000..2e8fc5ea Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/alpha_mantis.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/brutalfly.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/brutalfly.png new file mode 100644 index 00000000..df38548a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/brutalfly.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/beetle_background.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/beetle_background.png new file mode 100644 index 00000000..2c5d01c6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/beetle_background.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/beetle_progress.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/beetle_progress.png new file mode 100644 index 00000000..d29ee2ea Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/beetle_progress.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/blue_background.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/blue_background.png new file mode 100644 index 00000000..1816fe8b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/blue_background.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/blue_progress.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/blue_progress.png new file mode 100644 index 00000000..2c084740 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/blue_progress.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/brutalfly_background.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/brutalfly_background.png new file mode 100644 index 00000000..0c623a87 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/brutalfly_background.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/brutalfly_progress.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/brutalfly_progress.png new file mode 100644 index 00000000..2139e76f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/brutalfly_progress.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/green_background.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/green_background.png new file mode 100644 index 00000000..c70c5402 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/green_background.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/green_progress.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/green_progress.png new file mode 100644 index 00000000..2f6aff89 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/green_progress.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/purple_background.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/purple_background.png new file mode 100644 index 00000000..9f2be61b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/purple_background.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/purple_progress.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/purple_progress.png new file mode 100644 index 00000000..54b993e4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/healthbars/purple_progress.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/hercules_beetle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/hercules_beetle.png new file mode 100644 index 00000000..ac9ce74c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/hercules_beetle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/kraken.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/kraken.png new file mode 100644 index 00000000..cbce9159 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/kraken.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/scorpion.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/scorpion.png new file mode 100644 index 00000000..3be621ba Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/scorpion.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/toreterror.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/toreterror.png new file mode 100644 index 00000000..905e4f10 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/toreterror.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/nadir.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/nadir.png new file mode 100644 index 00000000..1c8f6167 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/nadir.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/ouranwood.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/ouranwood.png new file mode 100644 index 00000000..030fada5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/ouranwood.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/peach.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/peach.png new file mode 100644 index 00000000..5e5d565e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/peach.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/sprites/hud/bloodglass_heart.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/sprites/hud/bloodglass_heart.png new file mode 100644 index 00000000..fb2becad Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/sprites/hud/bloodglass_heart.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/sprites/hud/bloodglass_heart_cracked.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/sprites/hud/bloodglass_heart_cracked.png new file mode 100644 index 00000000..10117296 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/gui/sprites/hud/bloodglass_heart_cracked.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/antiwater_bucket.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/antiwater_bucket.png new file mode 100644 index 00000000..b8ef2c75 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/antiwater_bucket.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/attitude_adjuster/attitude_adjuster.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/attitude_adjuster/attitude_adjuster.png new file mode 100644 index 00000000..a34444eb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/attitude_adjuster/attitude_adjuster.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/attitude_adjuster/attitude_adjuster_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/attitude_adjuster/attitude_adjuster_item.png new file mode 100644 index 00000000..9203bd0b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/attitude_adjuster/attitude_adjuster_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/basilisk_dagger.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/basilisk_dagger.png new file mode 100644 index 00000000..ec01cb3b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/basilisk_dagger.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/basilisk_fang.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/basilisk_fang.png new file mode 100644 index 00000000..d4ba374b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/basilisk_fang.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/battle_axe/battle_axe.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/battle_axe/battle_axe.png new file mode 100644 index 00000000..cbfc6aa6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/battle_axe/battle_axe.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/battle_axe/battle_axe_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/battle_axe/battle_axe_item.png new file mode 100644 index 00000000..cdcd57a9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/battle_axe/battle_axe_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bed_bug_egg_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bed_bug_egg_item.png new file mode 100644 index 00000000..f8bb52b8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bed_bug_egg_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha.png new file mode 100644 index 00000000..e6ef226a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_blade.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_blade.png new file mode 100644 index 00000000..6c2e0777 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_blade.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_guard.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_guard.png new file mode 100644 index 00000000..b6921fae Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_guard.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_handle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_handle.png new file mode 100644 index 00000000..8043ee3b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_handle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_item.png new file mode 100644 index 00000000..67ddda7d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/big_bertha/big_bertha_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bile_bucket.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bile_bucket.png new file mode 100644 index 00000000..39f853fb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bile_bucket.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_boots.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_boots.png new file mode 100644 index 00000000..6db77c99 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_boots.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_chestplate.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_chestplate.png new file mode 100644 index 00000000..59d25593 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_chestplate.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_helmet.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_helmet.png new file mode 100644 index 00000000..4e108e63 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_helmet.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_leggings.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_leggings.png new file mode 100644 index 00000000..8a279c73 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal/blood_crystal_leggings.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal_apple.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal_apple.png new file mode 100644 index 00000000..f4bd37e6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal_apple.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal_katana.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal_katana.png new file mode 100644 index 00000000..97e26383 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal_katana.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal_shard.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal_shard.png new file mode 100644 index 00000000..af1ec998 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/blood_crystal_shard.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone.png new file mode 100644 index 00000000..d0983226 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone/bluestone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone/bluestone.png new file mode 100644 index 00000000..d0983226 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone/bluestone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone/bluestone_comparator.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone/bluestone_comparator.png new file mode 100644 index 00000000..4425cbaf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone/bluestone_comparator.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone/bluestone_repeater.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone/bluestone_repeater.png new file mode 100644 index 00000000..71efd93e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/bluestone/bluestone_repeater.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/broodfruit.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/broodfruit.png new file mode 100644 index 00000000..f9de2213 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/broodfruit.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/brutalfly_wing.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/brutalfly_wing.png new file mode 100644 index 00000000..5537396a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/brutalfly_wing.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/brutalfly_wings_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/brutalfly_wings_item.png new file mode 100644 index 00000000..91f5a649 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/brutalfly_wings_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cheep.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cheep.png new file mode 100644 index 00000000..39b5499a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cheep.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 new file mode 100644 index 00000000..39b5499a Binary files /dev/null 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/chitin.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/chitin.png new file mode 100644 index 00000000..ff0ea5bf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/chitin.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/chitin_spike.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/chitin_spike.png new file mode 100644 index 00000000..3f058ad5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/chitin_spike.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cloud_bucket.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cloud_bucket.png new file mode 100644 index 00000000..309b1d2f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cloud_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 new file mode 100644 index 00000000..e8f50269 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cloud_shark_fin.png 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 new file mode 100644 index 00000000..2cba050e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cloud_shark_fin_soup.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cooked_bug_meat.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cooked_bug_meat.png new file mode 100644 index 00000000..1a3c222c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cooked_bug_meat.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cooked_corndog.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cooked_corndog.png new file mode 100644 index 00000000..3a1a67b3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cooked_corndog.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cooked_venison.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cooked_venison.png new file mode 100644 index 00000000..f0a7a31f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cooked_venison.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/corn.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/corn.png new file mode 100644 index 00000000..ff703392 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/corn.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/corn_seeds.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/corn_seeds.png new file mode 100644 index 00000000..bea63bd9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/corn_seeds.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cornbread.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cornbread.png new file mode 100644 index 00000000..304f70c4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cornbread.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cornea.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cornea.png new file mode 100644 index 00000000..c762320f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/cornea.png 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 new file mode 100644 index 00000000..3f83ab76 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/creeping_horror_egg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item.png new file mode 100644 index 00000000..ff3e575d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item_overlay.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item_overlay.png new file mode 100644 index 00000000..aabed591 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item_overlay.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/diamond_minecart.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/diamond_minecart.png new file mode 100644 index 00000000..6d25517b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/diamond_minecart.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/dream_campfire.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/dream_campfire.png new file mode 100644 index 00000000..f0ebd9cc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/dream_campfire.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/dream_lantern.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/dream_lantern.png new file mode 100644 index 00000000..f90a41e6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/dream_lantern.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/duct_tape.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/duct_tape.png new file mode 100644 index 00000000..bb4c087d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/duct_tape.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/emperor_scorpion_stinger.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/emperor_scorpion_stinger.png new file mode 100644 index 00000000..4fad805f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/emperor_scorpion_stinger.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/fallen_king_crown_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/fallen_king_crown_item.png new file mode 100644 index 00000000..b73a5b56 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/fallen_king_crown_item.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 new file mode 100644 index 00000000..f9c4da5c Binary files /dev/null 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/gravity_gun_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/gravity_gun_item.png new file mode 100644 index 00000000..b50c212b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/gravity_gun_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/growth_ray_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/growth_ray_item.png new file mode 100644 index 00000000..b6cd7548 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/growth_ray_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/hercules_horn.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/hercules_horn.png new file mode 100644 index 00000000..52474a1e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/hercules_horn.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/high_fructose_corn_syrup.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/high_fructose_corn_syrup.png new file mode 100644 index 00000000..1e0da1b2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/high_fructose_corn_syrup.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ichor_bucket.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ichor_bucket.png new file mode 100644 index 00000000..16c8c10a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ichor_bucket.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jerry_egg_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jerry_egg_item.png new file mode 100644 index 00000000..d6774bac Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jerry_egg_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jerry_nucleus.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jerry_nucleus.png new file mode 100644 index 00000000..689c8f82 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jerry_nucleus.png differ 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 new file mode 100644 index 00000000..8a3fd730 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_boots.png 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 new file mode 100644 index 00000000..820c86db Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_bug_egg_item.png 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 new file mode 100644 index 00000000..f517ba33 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/jumpy_bug_leg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/king_scale.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/king_scale.png new file mode 100644 index 00000000..6ebc208b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/king_scale.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/kraken_kalamari.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/kraken_kalamari.png new file mode 100644 index 00000000..9478451d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/kraken_kalamari.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/kraken_tentacle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/kraken_tentacle.png new file mode 100644 index 00000000..25ff5880 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/kraken_tentacle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/kraken_tooth.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/kraken_tooth.png new file mode 100644 index 00000000..c1a119d3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/kraken_tooth.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp.png new file mode 100644 index 00000000..1b802a2c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp_item.png new file mode 100644 index 00000000..55a3bb7b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lucid_eye.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lucid_eye.png new file mode 100644 index 00000000..3e25968b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lucid_eye.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lucid_pearl.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lucid_pearl.png new file mode 100644 index 00000000..e075e709 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lucid_pearl.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lumen_bucket.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lumen_bucket.png new file mode 100644 index 00000000..4bfd1f2a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lumen_bucket.png 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 new file mode 100644 index 00000000..6a372140 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/lurking_terror_egg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/mantis_claw.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/mantis_claw.png new file mode 100644 index 00000000..d0c99633 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/mantis_claw.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/miners_dream.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/miners_dream.png new file mode 100644 index 00000000..d8371b7b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/miners_dream.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/moggles_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/moggles_item.png new file mode 100644 index 00000000..c27cbc8d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/moggles_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/molevore_nose.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/molevore_nose.png new file mode 100644 index 00000000..63b2deca Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/molevore_nose.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/moleworm.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/moleworm.png new file mode 100644 index 00000000..3cf841d6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/moleworm.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/mud_pie.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/mud_pie.png new file mode 100644 index 00000000..63dfcad7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/mud_pie.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_boat.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_boat.png new file mode 100644 index 00000000..1926a011 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_boat.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_chest_boat.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_chest_boat.png new file mode 100644 index 00000000..55ecd547 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_chest_boat.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_door_icon.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_door_icon.png new file mode 100644 index 00000000..2dd5cf19 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_door_icon.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_hanging_sign.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_hanging_sign.png new file mode 100644 index 00000000..c1c86721 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_hanging_sign.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_sign.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_sign.png new file mode 100644 index 00000000..ac538554 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nadir_sign.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_boots.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_boots.png new file mode 100644 index 00000000..1ead3d95 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_boots.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_chestplate.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_chestplate.png new file mode 100644 index 00000000..b4886f09 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_chestplate.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_helmet.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_helmet.png new file mode 100644 index 00000000..c9d98899 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_helmet.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_leggings.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_leggings.png new file mode 100644 index 00000000..4b0bbc7a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_leggings.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_scale.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_scale.png new file mode 100644 index 00000000..1ef3135a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_scale.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_sword.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_sword.png new file mode 100644 index 00000000..4323a4af Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nightmare/nightmare_sword.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nyxite_spike.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nyxite_spike.png new file mode 100644 index 00000000..83307aee Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/nyxite_spike.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_acorn.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_acorn.png new file mode 100644 index 00000000..edcac9fc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_acorn.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_boat.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_boat.png new file mode 100644 index 00000000..8571bf53 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_boat.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_chest_boat.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_chest_boat.png new file mode 100644 index 00000000..082ffad4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_chest_boat.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_door_icon.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_door_icon.png new file mode 100644 index 00000000..6b12b6b8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_door_icon.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_hanging_sign.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_hanging_sign.png new file mode 100644 index 00000000..f717332a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_hanging_sign.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_sign.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_sign.png new file mode 100644 index 00000000..ac116e29 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ouranwood_sign.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach.png new file mode 100644 index 00000000..02c9e1dd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_boat.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_boat.png new file mode 100644 index 00000000..320204cf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_boat.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_chest_boat.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_chest_boat.png new file mode 100644 index 00000000..c3c4d905 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_chest_boat.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_door_icon.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_door_icon.png new file mode 100644 index 00000000..a734788f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_door_icon.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_hanging_sign.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_hanging_sign.png new file mode 100644 index 00000000..e1f0f03e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_hanging_sign.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_pie.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_pie.png new file mode 100644 index 00000000..31cf56fb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_pie.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_sign.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_sign.png new file mode 100644 index 00000000..17d927dc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/peach_sign.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/popcorn.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/popcorn.png new file mode 100644 index 00000000..a7130653 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/popcorn.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_boots.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_boots.png new file mode 100644 index 00000000..3ddfcc0f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_boots.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_chestplate.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_chestplate.png new file mode 100644 index 00000000..4ccff195 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_chestplate.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_helmet.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_helmet.png new file mode 100644 index 00000000..e4587733 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_helmet.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_leggings.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_leggings.png new file mode 100644 index 00000000..01a3dc58 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial/primordial_leggings.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial_scute.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial_scute.png new file mode 100644 index 00000000..086e0fa2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/primordial_scute.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/queen_scale.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/queen_scale.png new file mode 100644 index 00000000..24e44c01 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/queen_scale.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/rainbow_sugar.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/rainbow_sugar.png new file mode 100644 index 00000000..9b602ff6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/rainbow_sugar.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/raw_bug_meat.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/raw_bug_meat.png new file mode 100644 index 00000000..60d444d1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/raw_bug_meat.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/raw_corndog.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/raw_corndog.png new file mode 100644 index 00000000..a8e5749e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/raw_corndog.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/raw_venison.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/raw_venison.png new file mode 100644 index 00000000..3bf72b68 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/raw_venison.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/reverie_bottle.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/reverie_bottle.png new file mode 100644 index 00000000..462a2706 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/reverie_bottle.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/root_beer.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/root_beer.png new file mode 100644 index 00000000..63024ad4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/root_beer.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/rpo_launcher_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/rpo_launcher_item.png new file mode 100644 index 00000000..e6999aed Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/rpo_launcher_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/scorpion_whip.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/scorpion_whip.png new file mode 100644 index 00000000..b81b8611 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/scorpion_whip.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/shrink_ray_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/shrink_ray_item.png new file mode 100644 index 00000000..2e9f8c0d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/shrink_ray_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 new file mode 100644 index 00000000..118f47e5 Binary files /dev/null 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/spit_bug_egg_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/spit_bug_egg_item.png new file mode 100644 index 00000000..ca4e7424 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/spit_bug_egg_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/squidzooka_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/squidzooka_item.png new file mode 100644 index 00000000..9f2870eb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/squidzooka_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/stink_bug.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/stink_bug.png new file mode 100644 index 00000000..f73695ab Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/stink_bug.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye.png new file mode 100644 index 00000000..6f7f1fd5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_boots.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_boots.png new file mode 100644 index 00000000..bef99e4e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_boots.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_chestplate.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_chestplate.png new file mode 100644 index 00000000..3958a042 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_chestplate.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_helmet.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_helmet.png new file mode 100644 index 00000000..0bbc4fc5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_helmet.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_leggings.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_leggings.png new file mode 100644 index 00000000..52df66a8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_leggings.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/raw_titanium.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/raw_titanium.png new file mode 100644 index 00000000..e64812ef Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/raw_titanium.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/raw_titanium_scrap.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/raw_titanium_scrap.png new file mode 100644 index 00000000..f814b4c3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/raw_titanium_scrap.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/titanium_door.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/titanium_door.png new file mode 100644 index 00000000..0a2f1d5b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/titanium_door.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/titanium_ingot.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/titanium_ingot.png new file mode 100644 index 00000000..b2970f78 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/titanium_ingot.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/titanium_nugget.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/titanium_nugget.png new file mode 100644 index 00000000..f9ab0c9c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/titanium/titanium_nugget.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 new file mode 100644 index 00000000..c815e500 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/triffid_goo.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_axe.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_axe.png new file mode 100644 index 00000000..360792f6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_axe.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_boots.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_boots.png new file mode 100644 index 00000000..f540ca28 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_boots.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow.png new file mode 100644 index 00000000..e1534cb1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow_pull0.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow_pull0.png new file mode 100644 index 00000000..50d91e52 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow_pull0.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow_pull1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow_pull1.png new file mode 100644 index 00000000..10b292c7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow_pull1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow_pull2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow_pull2.png new file mode 100644 index 00000000..9492a03e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_bow_pull2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_chestplate.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_chestplate.png new file mode 100644 index 00000000..3c74cb56 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_chestplate.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_arrow.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_arrow.png new file mode 100644 index 00000000..8dc0017e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_arrow.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_pull1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_pull1.png new file mode 100644 index 00000000..d78bc9b1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_pull1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_pull2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_pull2.png new file mode 100644 index 00000000..91dcb9de Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_pull2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_pull3.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_pull3.png new file mode 100644 index 00000000..0fc69f23 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_pull3.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_standby.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_standby.png new file mode 100644 index 00000000..8c3403e8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_crossbow_standby.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_helmet.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_helmet.png new file mode 100644 index 00000000..37b693fa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_helmet.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_hoe.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_hoe.png new file mode 100644 index 00000000..4b8071a2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_hoe.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_leggings.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_leggings.png new file mode 100644 index 00000000..ce566861 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_leggings.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_mace.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_mace.png new file mode 100644 index 00000000..37378d54 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_mace.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_pickaxe.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_pickaxe.png new file mode 100644 index 00000000..5a4d37ae Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_pickaxe.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_pickaxe_old.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_pickaxe_old.png new file mode 100644 index 00000000..7fe59bb1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_pickaxe_old.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_shovel.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_shovel.png new file mode 100644 index 00000000..799e175d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_shovel.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_sword.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_sword.png new file mode 100644 index 00000000..62439b98 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_sword.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/upper.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/upper.png new file mode 100644 index 00000000..2b8e53c2 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/upper.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/raw_uranium.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/raw_uranium.png new file mode 100644 index 00000000..96914edb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/raw_uranium.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/raw_uranium_scrap.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/raw_uranium_scrap.png new file mode 100644 index 00000000..bc8d9efb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/raw_uranium_scrap.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_bars.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_bars.png new file mode 100644 index 00000000..8efc22c1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_bars.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_door.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_door.png new file mode 100644 index 00000000..91f2c53b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_door.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_ingot.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_ingot.png new file mode 100644 index 00000000..62640d49 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_ingot.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_nugget.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_nugget.png new file mode 100644 index 00000000..f1f1857f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/uranium/uranium_nugget.png 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 new file mode 100644 index 00000000..70a00987 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/vortex_eye.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/water_cannon_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/water_cannon_item.png new file mode 100644 index 00000000..8dc1d3d4 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/water_cannon_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/bloodglass_ward.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/bloodglass_ward.png new file mode 100644 index 00000000..1f6cf4fd Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/bloodglass_ward.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/dread.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/dread.png new file mode 100644 index 00000000..5eaa1735 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/dread.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/glimmering.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/glimmering.png new file mode 100644 index 00000000..21567e89 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/glimmering.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/gooped.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/gooped.png new file mode 100644 index 00000000..c815e500 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/gooped.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/growing.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/growing.png new file mode 100644 index 00000000..b758401d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/growing.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/growth.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/growth.png new file mode 100644 index 00000000..b758401d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/growth.png 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 new file mode 100644 index 00000000..77d8ce5f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/inverted.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/paralyzed.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/paralyzed.png new file mode 100644 index 00000000..b4fcebeb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/paralyzed.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/shrinking.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/shrinking.png new file mode 100644 index 00000000..d2064f8b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/shrinking.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/stinky.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/stinky.png new file mode 100644 index 00000000..316e3b2c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/mob_effect/stinky.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/blood_crystal_layer_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/blood_crystal_layer_1.png new file mode 100644 index 00000000..5b3d5191 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/blood_crystal_layer_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/blood_crystal_layer_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/blood_crystal_layer_2.png new file mode 100644 index 00000000..820e1750 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/blood_crystal_layer_2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/brutalfly_wings.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/brutalfly_wings.png new file mode 100644 index 00000000..b9e1ed06 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/brutalfly_wings.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/fallen_king_crown.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/fallen_king_crown.png new file mode 100644 index 00000000..e6159677 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/fallen_king_crown.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/fallen_king_crown_layer_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/fallen_king_crown_layer_1.png new file mode 100644 index 00000000..c0086c10 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/fallen_king_crown_layer_1.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 new file mode 100644 index 00000000..81496667 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/jumpy_boots_layer_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/moggles.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/moggles.png new file mode 100644 index 00000000..9c92e31b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/moggles.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/moggles_layer_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/moggles_layer_1.png new file mode 100644 index 00000000..9c92e31b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/moggles_layer_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/nightmare_armor_layer_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/nightmare_armor_layer_1.png new file mode 100644 index 00000000..3d3b64e6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/nightmare_armor_layer_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/nightmare_armor_layer_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/nightmare_armor_layer_2.png new file mode 100644 index 00000000..9d2a567a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/nightmare_armor_layer_2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/primordial_layer_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/primordial_layer_1.png new file mode 100644 index 00000000..1047d1ea Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/primordial_layer_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/primordial_layer_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/primordial_layer_2.png new file mode 100644 index 00000000..f2eabad6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/primordial_layer_2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_1.png new file mode 100644 index 00000000..a313310c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_2.png new file mode 100644 index 00000000..e9933ad6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/ultimate_armor_layer_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/ultimate_armor_layer_1.png new file mode 100644 index 00000000..f219dc6d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/ultimate_armor_layer_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/ultimate_armor_layer_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/ultimate_armor_layer_2.png new file mode 100644 index 00000000..39bf843d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/ultimate_armor_layer_2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/gravity_gun.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/gravity_gun.png new file mode 100644 index 00000000..a5e31390 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/gravity_gun.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/growth_ray.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/growth_ray.png new file mode 100644 index 00000000..66b73e01 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/growth_ray.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/rpo_launcher.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/rpo_launcher.png new file mode 100644 index 00000000..72bee15e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/rpo_launcher.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/shrink_ray.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/shrink_ray.png new file mode 100644 index 00000000..c698de60 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/shrink_ray.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/squidzooka.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/squidzooka.png new file mode 100644 index 00000000..898f3a39 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/squidzooka.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/water_cannon.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/water_cannon.png new file mode 100644 index 00000000..3978fa8b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/item/water_cannon.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_boat.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_boat.png new file mode 100644 index 00000000..66b0a4b0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_boat.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_chest_boat.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_chest_boat.png new file mode 100644 index 00000000..e66c5831 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_chest_boat.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_hanging_sign.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_hanging_sign.png new file mode 100644 index 00000000..7903f083 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_hanging_sign.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_sign.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_sign.png new file mode 100644 index 00000000..b134ba8c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/ouranwood/ouranwood_sign.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/dream_fire_flame.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/dream_fire_flame.png new file mode 100644 index 00000000..53f5f536 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/dream_fire_flame.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/firefly.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/firefly.png new file mode 100644 index 00000000..bb42ea9d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/firefly.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_01.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_01.png new file mode 100644 index 00000000..ea548c36 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_01.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_02.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_02.png new file mode 100644 index 00000000..35d8a887 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_02.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_03.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_03.png new file mode 100644 index 00000000..d498ac47 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_03.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_04.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_04.png new file mode 100644 index 00000000..fec24009 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_04.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_05.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_05.png new file mode 100644 index 00000000..c359d647 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_05.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_06.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_06.png new file mode 100644 index 00000000..d808b029 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_06.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_07.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_07.png new file mode 100644 index 00000000..5820e540 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_07.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_08.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_08.png new file mode 100644 index 00000000..a11ce9a1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/hypnotic_gas/hypnotic_gas_08.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_01.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_01.png new file mode 100644 index 00000000..403483ff Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_01.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_02.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_02.png new file mode 100644 index 00000000..6758f218 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_02.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_03.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_03.png new file mode 100644 index 00000000..47e2a20c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_03.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_04.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_04.png new file mode 100644 index 00000000..d9c8d570 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_04.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_05.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_05.png new file mode 100644 index 00000000..ffa8b3c1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_05.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_06.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_06.png new file mode 100644 index 00000000..66ce50ac Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_06.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_07.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_07.png new file mode 100644 index 00000000..b366c041 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_07.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_08.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_08.png new file mode 100644 index 00000000..c0e241a1 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_base_08.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_01.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_01.png new file mode 100644 index 00000000..011f0067 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_01.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_02.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_02.png new file mode 100644 index 00000000..b2a8a9c7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_02.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_03.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_03.png new file mode 100644 index 00000000..89a75e5f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_03.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_04.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_04.png new file mode 100644 index 00000000..349fa405 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_04.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_05.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_05.png new file mode 100644 index 00000000..5f94ada5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_05.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_06.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_06.png new file mode 100644 index 00000000..d59425df Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_06.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_07.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_07.png new file mode 100644 index 00000000..eebe8653 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_07.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_08.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_08.png new file mode 100644 index 00000000..7a80a32f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_plume_08.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_01.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_01.png new file mode 100644 index 00000000..0cde5885 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_01.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_02.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_02.png new file mode 100644 index 00000000..d29e256c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_02.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_03.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_03.png new file mode 100644 index 00000000..bf6a1d9e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_03.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_04.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_04.png new file mode 100644 index 00000000..8857bbb5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_04.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_05.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_05.png new file mode 100644 index 00000000..9be1f5b0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_05.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_06.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_06.png new file mode 100644 index 00000000..c1250907 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_06.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_07.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_07.png new file mode 100644 index 00000000..a6b415c8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_07.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_08.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_08.png new file mode 100644 index 00000000..84e8736f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/inverted_geyser/inverted_geyser_poof_08.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_large.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_large.png new file mode 100644 index 00000000..703f2ff7 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_large.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_small.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_small.png new file mode 100644 index 00000000..28606503 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_small.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/nightmare_fire_flame.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/nightmare_fire_flame.png new file mode 100644 index 00000000..e6b8c156 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/nightmare_fire_flame.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/orange_ash.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/orange_ash.png new file mode 100644 index 00000000..f3cdf989 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/orange_ash.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_0.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_0.png new file mode 100644 index 00000000..242fa84b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_0.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_1.png new file mode 100644 index 00000000..961d31f0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_10.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_10.png new file mode 100644 index 00000000..5c64f4a9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_10.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_11.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_11.png new file mode 100644 index 00000000..4eb7df29 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_11.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_2.png new file mode 100644 index 00000000..31216de6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_3.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_3.png new file mode 100644 index 00000000..de88560a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_3.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_4.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_4.png new file mode 100644 index 00000000..62f51e91 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_4.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_5.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_5.png new file mode 100644 index 00000000..fba2d3c6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_5.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_6.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_6.png new file mode 100644 index 00000000..bb9a5465 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_6.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_7.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_7.png new file mode 100644 index 00000000..c7681755 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_7.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_8.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_8.png new file mode 100644 index 00000000..e9085c2b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_8.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_9.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_9.png new file mode 100644 index 00000000..28fb3bb3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/peach/peach_9.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/reverie.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/reverie.png new file mode 100644 index 00000000..3b03d8ea Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/reverie.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_fly.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_fly.png new file mode 100644 index 00000000..cad03adc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_fly.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_01.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_01.png new file mode 100644 index 00000000..75a86faf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_01.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_02.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_02.png new file mode 100644 index 00000000..30786e99 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_02.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_03.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_03.png new file mode 100644 index 00000000..7436c983 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_03.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_04.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_04.png new file mode 100644 index 00000000..a939c750 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_04.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_05.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_05.png new file mode 100644 index 00000000..69abb186 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_05.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_06.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_06.png new file mode 100644 index 00000000..7e0a9852 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_06.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_07.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_07.png new file mode 100644 index 00000000..fc0a8aaa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_07.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_08.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_08.png new file mode 100644 index 00000000..eb668602 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_08.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/blood_crystal.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/blood_crystal.png new file mode 100644 index 00000000..1ccdd7e8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/blood_crystal.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/bluestone.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/bluestone.png new file mode 100644 index 00000000..08515ed3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/bluestone.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/nightmare_scale.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/nightmare_scale.png new file mode 100644 index 00000000..195b6979 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/nightmare_scale.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/tigers_eye.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/tigers_eye.png new file mode 100644 index 00000000..e99d57c6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/tigers_eye.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/titanium.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/titanium.png new file mode 100644 index 00000000..be2819df Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/titanium.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/uranium.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/uranium.png new file mode 100644 index 00000000..b92e8344 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/uranium.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/dimensional_tear.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/dimensional_tear.png new file mode 100644 index 00000000..ec0cb4e0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/dimensional_tear.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt.png new file mode 100644 index 00000000..80473780 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt_impact.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt_impact.png new file mode 100644 index 00000000..66f828dc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt_impact.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite.png new file mode 100644 index 00000000..251a222d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite_phase_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite_phase_2.png new file mode 100644 index 00000000..1699b1de Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite_phase_2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_portal.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_portal.png new file mode 100644 index 00000000..622bcab5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_portal.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/water_bomb.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/water_bomb.png new file mode 100644 index 00000000..ea97a29b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/vfx/water_bomb.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 new file mode 100644 index 00000000..8c1050d9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/minecraft/atlases/armor_trims.json @@ -0,0 +1,53 @@ +{ + "sources": [ + { + "type": "paletted_permutations", + "textures": [ + "trims/models/armor/coast", + "trims/models/armor/coast_leggings", + "trims/models/armor/sentry", + "trims/models/armor/sentry_leggings", + "trims/models/armor/dune", + "trims/models/armor/dune_leggings", + "trims/models/armor/wild", + "trims/models/armor/wild_leggings", + "trims/models/armor/ward", + "trims/models/armor/ward_leggings", + "trims/models/armor/eye", + "trims/models/armor/eye_leggings", + "trims/models/armor/vex", + "trims/models/armor/vex_leggings", + "trims/models/armor/tide", + "trims/models/armor/tide_leggings", + "trims/models/armor/snout", + "trims/models/armor/snout_leggings", + "trims/models/armor/rib", + "trims/models/armor/rib_leggings", + "trims/models/armor/spire", + "trims/models/armor/spire_leggings", + "trims/models/armor/wayfinder", + "trims/models/armor/wayfinder_leggings", + "trims/models/armor/shaper", + "trims/models/armor/shaper_leggings", + "trims/models/armor/silence", + "trims/models/armor/silence_leggings", + "trims/models/armor/raiser", + "trims/models/armor/raiser_leggings", + "trims/models/armor/host", + "trims/models/armor/host_leggings", + "trims/models/armor/flow", + "trims/models/armor/flow_leggings", + "trims/models/armor/bolt", + "trims/models/armor/bolt_leggings" + ], + "palette_key": "trims/color_palettes/trim_palette", + "permutations": { + "bluestone": "antarchy:trims/color_palettes/bluestone", + "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" + } + } + ] +} 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 new file mode 100644 index 00000000..b19a835a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/a_lovely_world.json @@ -0,0 +1,42 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/apple_of_my_eye.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/apple_of_my_eye.json new file mode 100644 index 00000000..35a26734 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/apple_of_my_eye.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.apple_of_my_eye.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "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/advancements/beetle_buddies.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/beetle_buddies.json new file mode 100644 index 00000000..bf7d6726 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/beetle_buddies.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/behavioral_correction.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/behavioral_correction.json new file mode 100644 index 00000000..aa67cc55 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/behavioral_correction.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "antarchy:attitude_adjuster" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.behavioral_correction.title" + } + }, + "requirements": [ + [ + "obtain_attitude_adjuster" + ] + ], + "sends_telemetry_event": true +} 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 new file mode 100644 index 00000000..51ec2363 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/brutalfly.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/bug_apetit.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/bug_apetit.json new file mode 100644 index 00000000..461208ff --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/bug_apetit.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/bugged_out.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/bugged_out.json new file mode 100644 index 00000000..150a72fc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/bugged_out.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/cancel_out.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/cancel_out.json new file mode 100644 index 00000000..8acb0711 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/cancel_out.json @@ -0,0 +1,35 @@ +{ + "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, + "item": "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/advancements/challenge_games.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/challenge_games.json new file mode 100644 index 00000000..5abaf450 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/challenge_games.json @@ -0,0 +1,42 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "discover_ruined_arena": { + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "antarchy:ruined_arena" + } + } + } + ] + }, + "trigger": "minecraft:location" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.challenge_games.description" + }, + "frame": "challenge", + "icon": { + "count": 1, + "item": "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/advancements/davy_jones_locker.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/davy_jones_locker.json new file mode 100644 index 00000000..c733f016 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/davy_jones_locker.json @@ -0,0 +1,34 @@ +{ + "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, + "item": "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/advancements/deerly_beloved.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/deerly_beloved.json new file mode 100644 index 00000000..d00cd4b2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/deerly_beloved.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.deerly_beloved.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "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/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 new file mode 100644 index 00000000..a5f32fe8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/dont_let_the_bed_bugs_bite.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/duct_tape.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/duct_tape.json new file mode 100644 index 00000000..5d7718f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/duct_tape.json @@ -0,0 +1,29 @@ +{ + "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, + "item": "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/advancements/elkcellent_choice.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/elkcellent_choice.json new file mode 100644 index 00000000..bfb4c209 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/elkcellent_choice.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.elkcellent_choice.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "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/advancements/fallen_king_crown.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_king_crown.json new file mode 100644 index 00000000..4cafa2c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_king_crown.json @@ -0,0 +1,36 @@ +{ + "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, + "item": "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/advancements/fallen_kingdom_castle.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_kingdom_castle.json new file mode 100644 index 00000000..3b60df5d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/fallen_kingdom_castle.json @@ -0,0 +1,42 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "discover_castle": { + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "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, + "item": "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/advancements/gravity_gun_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/gravity_gun_craft.json new file mode 100644 index 00000000..d64f87d6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/gravity_gun_craft.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/growth_ray_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/growth_ray_craft.json new file mode 100644 index 00000000..182fda3f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/growth_ray_craft.json @@ -0,0 +1,36 @@ +{ + "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, + "item": "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/advancements/herculean_task.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/herculean_task.json new file mode 100644 index 00000000..af364028 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/herculean_task.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/hey_listen.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/hey_listen.json new file mode 100644 index 00000000..175d8d96 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/hey_listen.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.hey_listen.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "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/advancements/hoppy_together.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/hoppy_together.json new file mode 100644 index 00000000..9170835f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/hoppy_together.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.hoppy_together.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "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/advancements/in_the_upside_down.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/in_the_upside_down.json new file mode 100644 index 00000000..f0b5c7d8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/in_the_upside_down.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "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": { + "item": "minecraft:potion", + "nbt": "{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/advancements/kill_toreterror.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/kill_toreterror.json new file mode 100644 index 00000000..d922c426 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/kill_toreterror.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/lucid_dreams.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/lucid_dreams.json new file mode 100644 index 00000000..c53f1091 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/lucid_dreams.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/moley_poley.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/moley_poley.json new file mode 100644 index 00000000..e2d5308a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/moley_poley.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/mucus_obtained.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/mucus_obtained.json new file mode 100644 index 00000000..2f6def5c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/mucus_obtained.json @@ -0,0 +1,36 @@ +{ + "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, + "item": "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/advancements/now_watch_me_whip.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/now_watch_me_whip.json new file mode 100644 index 00000000..d1c45ae1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/now_watch_me_whip.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/rocket_powered_octopus.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/rocket_powered_octopus.json new file mode 100644 index 00000000..c0ea338c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/rocket_powered_octopus.json @@ -0,0 +1,36 @@ +{ + "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, + "item": "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/advancements/shark_weak.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/shark_weak.json new file mode 100644 index 00000000..d3f57aab --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/shark_weak.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "kill_cloud_shark": { + "conditions": { + "entity": { + "type": "antarchy:cloud_shark" + } + }, + "trigger": "minecraft:player_killed_entity" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.shark_weak.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "antarchy:cloud_shark_fin" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.shark_weak.title" + } + }, + "requirements": [ + [ + "kill_cloud_shark" + ] + ], + "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 new file mode 100644 index 00000000..63b7ac20 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/shrink_ray_craft.json @@ -0,0 +1,36 @@ +{ + "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, + "item": "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/advancements/soups_up.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/soups_up.json new file mode 100644 index 00000000..45a0350d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/soups_up.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "eat_soup": { + "conditions": { + "item": { + "items": [ + "antarchy:cloud_shark_fin_soup" + ] + } + }, + "trigger": "minecraft:consume_item" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.soups_up.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "antarchy:cloud_shark_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/advancements/spirant_animal.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/spirant_animal.json new file mode 100644 index 00000000..7017fbe2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/spirant_animal.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.spirant_animal.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "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/advancements/squidzooka_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/squidzooka_craft.json new file mode 100644 index 00000000..4a84eeda --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/squidzooka_craft.json @@ -0,0 +1,36 @@ +{ + "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, + "item": "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/advancements/stone_cold.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/stone_cold.json new file mode 100644 index 00000000..95e28122 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/stone_cold.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "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, + "item": "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/advancements/sweater_dreams.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/sweater_dreams.json new file mode 100644 index 00000000..76ee0e19 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/sweater_dreams.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "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": { + "item": "minecraft:potion", + "nbt": "{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/advancements/the_lab.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/the_lab.json new file mode 100644 index 00000000..8efd5f4e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/the_lab.json @@ -0,0 +1,42 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "discover_lab": { + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "antarchy:trayaurus_lab" + } + } + } + ] + }, + "trigger": "minecraft:location" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.the_lab.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "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/advancements/ultimate_armor.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_armor.json new file mode 100644 index 00000000..4c13c53e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_armor.json @@ -0,0 +1,75 @@ +{ + "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, + "item": "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/advancements/ultimate_bow.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_bow.json new file mode 100644 index 00000000..81191aea --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/ultimate_bow.json @@ -0,0 +1,36 @@ +{ + "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, + "item": "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/advancements/upper_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/upper_craft.json new file mode 100644 index 00000000..7f225a28 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/upper_craft.json @@ -0,0 +1,36 @@ +{ + "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, + "item": "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/advancements/very_hungry_caterpillar.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/very_hungry_caterpillar.json new file mode 100644 index 00000000..dfd78588 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/very_hungry_caterpillar.json @@ -0,0 +1,29 @@ +{ + "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, + "item": "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/advancements/visit_cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_cavaryn.json new file mode 100644 index 00000000..95bb4c95 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_cavaryn.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "entered_cavaryn": { + "conditions": { + "to": "antarchy:cavaryn" + }, + "trigger": "minecraft:changed_dimension" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.visit_cavaryn.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "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/advancements/visit_elythia.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_elythia.json new file mode 100644 index 00000000..931c9035 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_elythia.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "entered_elythia": { + "conditions": { + "to": "antarchy:elythia" + }, + "trigger": "minecraft:changed_dimension" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.visit_elythia.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "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/advancements/visit_thoraxis.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_thoraxis.json new file mode 100644 index 00000000..73f3bc6c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/visit_thoraxis.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "entered_thoraxis": { + "conditions": { + "to": "antarchy:thoraxis" + }, + "trigger": "minecraft:changed_dimension" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.visit_thoraxis.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "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/advancements/water_cannon_craft.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/water_cannon_craft.json new file mode 100644 index 00000000..1005b7d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/water_cannon_craft.json @@ -0,0 +1,36 @@ +{ + "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, + "item": "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/advancements/whoever_smelt_it_dealt_it.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/whoever_smelt_it_dealt_it.json new file mode 100644 index 00000000..49a617f4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/whoever_smelt_it_dealt_it.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "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": { + "item": "minecraft:potion", + "nbt": "{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/cavaryn_hordes/awakening.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/awakening.json new file mode 100644 index 00000000..191bcc1a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/awakening.json @@ -0,0 +1,17 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_common", + "weight": 1, + "base_count": 2, + "per_player_count": 1 + }, + { + "entity_tag": "antarchy:horde_spitters", + "weight": 1, + "base_count": 0, + "per_player_count": 1, + "min_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/awakening.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/awakening.json new file mode 100644 index 00000000..a191c280 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/awakening.json @@ -0,0 +1,17 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_jerry", + "jerry_stage": "random_young", + "base_count": 3, + "per_player_count": 1 + }, + { + "entity_tag": "antarchy:horde_jerry", + "jerry_stage": "alpha", + "base_count": 0, + "per_player_count": 1, + "min_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/dormant.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/dormant.json new file mode 100644 index 00000000..75a75853 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/dormant.json @@ -0,0 +1,17 @@ +{ + "max_active": 8, + "entries": [ + { + "entity_tag": "antarchy:horde_jerry", + "jerry_stage": "infant", + "base_count": 1, + "high_attention_base_count": 2 + }, + { + "entity_tag": "antarchy:horde_jerry", + "jerry_stage": "mature", + "base_count": 0, + "high_attention_base_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/final.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/final.json new file mode 100644 index 00000000..b6566d5c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/final.json @@ -0,0 +1,20 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_bosses", + "base_count": 1, + "per_players": 3, + "per_players_count": 1, + "max_count": 3, + "warning": true, + "track_completion": true, + "heavy_arrival_effect": true + }, + { + "entity_tag": "antarchy:horde_jerry", + "jerry_stage": "random", + "base_count": 8, + "per_player_count": 2 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_1.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_1.json new file mode 100644 index 00000000..bcffac46 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_1.json @@ -0,0 +1,10 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_jerry", + "jerry_stage": "random_young", + "base_count": 12, + "per_player_count": 3 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_2.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_2.json new file mode 100644 index 00000000..4818f30a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_2.json @@ -0,0 +1,16 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_jerry", + "jerry_stage": "random_young", + "base_count": 12, + "per_player_count": 3 + }, + { + "entity_tag": "antarchy:horde_jerry", + "jerry_stage": "alpha", + "base_count": 3, + "per_player_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_3.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_3.json new file mode 100644 index 00000000..6967d0ae --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_3.json @@ -0,0 +1,22 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_jerry", + "jerry_stage": "random_young", + "base_count": 12, + "per_player_count": 3 + }, + { + "entity_tag": "antarchy:horde_jerry", + "jerry_stage": "alpha", + "base_count": 4, + "per_player_count": 1 + }, + { + "entity_tag": "antarchy:horde_jerry", + "jerry_stage": "gamma", + "base_count": 2, + "per_player_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/awakening.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/awakening.json new file mode 100644 index 00000000..82ae7c0e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/awakening.json @@ -0,0 +1,16 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 3, + "per_player_count": 1 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 1, + "per_players": 2, + "per_players_count": 1, + "min_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/dormant.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/dormant.json new file mode 100644 index 00000000..8096d520 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/dormant.json @@ -0,0 +1,16 @@ +{ + "max_active": 8, + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 1, + "high_attention_base_count": 2 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 0, + "high_attention_base_count": 1, + "max_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/final.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/final.json new file mode 100644 index 00000000..24d1395b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/final.json @@ -0,0 +1,16 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 14, + "per_player_count": 3 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 4, + "per_players": 2, + "per_players_count": 1, + "max_count": 6 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_1.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_1.json new file mode 100644 index 00000000..f178ea41 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_1.json @@ -0,0 +1,15 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 8, + "per_player_count": 2 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 1, + "per_players": 2, + "per_players_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_2.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_2.json new file mode 100644 index 00000000..4ce192f8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_2.json @@ -0,0 +1,15 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 10, + "per_player_count": 2 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 2, + "per_players": 2, + "per_players_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_3.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_3.json new file mode 100644 index 00000000..0f757113 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_3.json @@ -0,0 +1,15 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 12, + "per_player_count": 3 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 3, + "per_players": 2, + "per_players_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/dormant.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/dormant.json new file mode 100644 index 00000000..7e4904c5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/dormant.json @@ -0,0 +1,11 @@ +{ + "max_active": 8, + "entries": [ + { + "entity_tag": "antarchy:horde_common", + "weight": 1, + "base_count": 1, + "high_attention_base_count": 2 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/final.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/final.json new file mode 100644 index 00000000..8256f994 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/final.json @@ -0,0 +1,21 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_bosses", + "weight": 1, + "base_count": 1, + "per_players": 3, + "per_players_count": 1, + "max_count": 3, + "warning": true, + "track_completion": true, + "heavy_arrival_effect": true + }, + { + "entity_tag": "antarchy:horde_common", + "weight": 1, + "base_count": 8, + "per_player_count": 2 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/wave_1.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/wave_1.json new file mode 100644 index 00000000..cc3c987b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/wave_1.json @@ -0,0 +1,10 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_common", + "weight": 1, + "base_count": 12, + "per_player_count": 3 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/wave_2.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/wave_2.json new file mode 100644 index 00000000..8f1be480 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/wave_2.json @@ -0,0 +1,16 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_common", + "weight": 1, + "base_count": 14, + "per_player_count": 3 + }, + { + "entity_tag": "antarchy:horde_spitters", + "weight": 1, + "base_count": 2, + "per_player_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/wave_3.json b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/wave_3.json new file mode 100644 index 00000000..99ab3991 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/cavaryn_hordes/wave_3.json @@ -0,0 +1,22 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_common", + "weight": 1, + "base_count": 16, + "per_player_count": 4 + }, + { + "entity_tag": "antarchy:horde_spitters", + "weight": 1, + "base_count": 3, + "per_player_count": 1 + }, + { + "entity_tag": "antarchy:horde_jumpers", + "weight": 1, + "base_count": 1, + "per_player_count": 1 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_type/basilisk_bite.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/basilisk_bite.json new file mode 100644 index 00000000..9b392a44 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/basilisk_bite.json @@ -0,0 +1,7 @@ +{ + "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_type/bed_bug_bite.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/bed_bug_bite.json new file mode 100644 index 00000000..74c22eed --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/bed_bug_bite.json @@ -0,0 +1,7 @@ +{ + "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_type/cornea_stalk_prick.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/cornea_stalk_prick.json new file mode 100644 index 00000000..9259a978 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/cornea_stalk_prick.json @@ -0,0 +1,7 @@ +{ + "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_type/emperor_scorpion_sting.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/emperor_scorpion_sting.json new file mode 100644 index 00000000..d74a6fae --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/emperor_scorpion_sting.json @@ -0,0 +1,7 @@ +{ + "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_type/hercules_beetle_obliteration.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/hercules_beetle_obliteration.json new file mode 100644 index 00000000..e9fba373 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/hercules_beetle_obliteration.json @@ -0,0 +1,7 @@ +{ + "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_type/jumpy_bug_jump.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/jumpy_bug_jump.json new file mode 100644 index 00000000..e6c918fb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/jumpy_bug_jump.json @@ -0,0 +1,7 @@ +{ + "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/kraken_lightning.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/kraken_lightning.json new file mode 100644 index 00000000..6feb4b40 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/kraken_lightning.json @@ -0,0 +1,7 @@ +{ + "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_type/kraken_mauling.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/kraken_mauling.json new file mode 100644 index 00000000..2728d507 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/kraken_mauling.json @@ -0,0 +1,7 @@ +{ + "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_type/nightmare_mauling.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/nightmare_mauling.json new file mode 100644 index 00000000..833b7379 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/nightmare_mauling.json @@ -0,0 +1,7 @@ +{ + "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_type/rpo_launcher_blast.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/rpo_launcher_blast.json new file mode 100644 index 00000000..b5051cc9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/rpo_launcher_blast.json @@ -0,0 +1,7 @@ +{ + "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_type/spit_bug_disrespect.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/spit_bug_disrespect.json new file mode 100644 index 00000000..69faaa7a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/spit_bug_disrespect.json @@ -0,0 +1,7 @@ +{ + "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_type/toreterror_jump.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/toreterror_jump.json new file mode 100644 index 00000000..e860a89c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/toreterror_jump.json @@ -0,0 +1,7 @@ +{ + "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_type/toreterror_spin.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/toreterror_spin.json new file mode 100644 index 00000000..4a6afd29 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/toreterror_spin.json @@ -0,0 +1,7 @@ +{ + "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_type/triffid_mauling.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/triffid_mauling.json new file mode 100644 index 00000000..6cf0af8f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/triffid_mauling.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..e3e25b12 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/triffid_swallow.json @@ -0,0 +1,7 @@ +{ + "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_type/water_soaked.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/water_soaked.json new file mode 100644 index 00000000..56c1f742 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/water_soaked.json @@ -0,0 +1,7 @@ +{ + "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/damage_types/basilisk_bite.json b/common-1.20.1/src/main/resources/data/antarchy/damage_types/basilisk_bite.json new file mode 100644 index 00000000..9b392a44 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/basilisk_bite.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..74c22eed --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/bed_bug_bite.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..9259a978 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/cornea_stalk_prick.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..d74a6fae --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/emperor_scorpion_sting.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..e9fba373 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/hercules_beetle_obliteration.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..e6c918fb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/jumpy_bug_jump.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..6feb4b40 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/kraken_lightning.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..2728d507 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/kraken_mauling.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..833b7379 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/nightmare_mauling.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..b5051cc9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/rpo_launcher_blast.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..69faaa7a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/spit_bug_disrespect.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..e860a89c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/toreterror_jump.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..4a6afd29 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/toreterror_spin.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..6cf0af8f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/triffid_mauling.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..e3e25b12 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/triffid_swallow.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..56c1f742 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_types/water_soaked.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 00000000..2e514481 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/dimension/cavaryn.json @@ -0,0 +1,132 @@ +{ + "type": "antarchy:cavaryn", + "generator": { + "type": "minecraft:noise", + "settings": "antarchy:cavaryn", + "biome_source": { + "type": "minecraft:multi_noise", + "biomes": [ + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 0.55 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + -2.0, + -0.1 + ], + "offset": 0.0 + }, + "biome": "antarchy:cavaryn" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + 0.5, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -0.45, + 0.45 + ], + "depth": [ + -2.0, + -0.1 + ], + "offset": 0.0 + }, + "biome": "antarchy:glowcap_caves" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + 0.15, + 0.85 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + 0.45, + 1.0 + ], + "depth": [ + -2.0, + -0.1 + ], + "offset": 0.0 + }, + "biome": "antarchy:biowart_caves" + }, + { + "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.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 new file mode 100644 index 00000000..0ee2aed4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/dimension/elythia.json @@ -0,0 +1,539 @@ +{ + "type": "antarchy:elythia", + "generator": { + "type": "minecraft:noise", + "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, + "biomes": [ + { + "biome": "antarchy:moleworm_caves", + "parameters": { + "temperature": 0.69, + "humidity": 0.95, + "continentalness": 0.56, + "erosion": 0.2, + "weirdness": 0.16, + "depth": 0.3, + "offset": 0.27 + } + }, + { + "biome": "antarchy:moleworm_caves", + "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, + "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, + "offset": 0.0 + } + }, + { + "biome": "antarchy:peach_forest", + "parameters": { + "temperature": 0.67, + "humidity": 0.91, + "continentalness": 0.54, + "erosion": 0.16, + "weirdness": -0.42, + "depth": 0.45, + "offset": 0.0 + } + }, + { + "biome": "antarchy:peach_forest", + "parameters": { + "temperature": 0.66, + "humidity": 0.89, + "continentalness": 0.54, + "erosion": 0.38, + "weirdness": -0.42, + "depth": 0.45, + "offset": 0.0 + } + }, + { + "biome": "antarchy:peach_forest", + "parameters": { + "temperature": 0.68, + "humidity": 0.93, + "continentalness": 0.54, + "erosion": 0.16, + "weirdness": -0.74, + "depth": 0.45, + "offset": 0.0 + } + }, + { + "biome": "antarchy:peach_forest", + "parameters": { + "temperature": 0.65, + "humidity": 0.87, + "continentalness": 0.55, + "erosion": 0.38, + "weirdness": -0.74, + "depth": 0.45, + "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, + "offset": 0.0 + } + }, + { + "biome": "antarchy:ouranwood_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, + "offset": 0.0 + } + }, + { + "biome": "antarchy:cloud_sea", + "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.999 + } + } + ], + "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 new file mode 100644 index 00000000..03c8f802 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/dimension/thoraxis.json @@ -0,0 +1,255 @@ +{ + "type": "antarchy:thoraxis", + "generator": { + "type": "minecraft:noise", + "settings": "antarchy:thoraxis", + "biome_source": { + "type": "antarchy:thoraxis_biome_source", + "dream_dunes_max_y": 96, + "umbral_hills_max_y": 100, + "lucid_pools_min_y": 116, + "biomes": [ + { + "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: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.02 + }, + "biome": "antarchy:umbral_hills" + }, + { + "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:nightmare_wastes" + }, + { + "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.04 + }, + "biome": "antarchy:nightmare_wastes" + }, + { + "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.12 + }, + "biome": "antarchy:nightmare_wastes" + }, + { + "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.18 + }, + "biome": "antarchy:nightmare_wastes" + }, + { + "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.24 + }, + "biome": "antarchy:nightmare_wastes" + }, + { + "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.6 + }, + "biome": "antarchy:lucid_pools" + } + ] + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/dimension_type/cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/dimension_type/cavaryn.json new file mode 100644 index 00000000..5aed0ffe --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/dimension_type/cavaryn.json @@ -0,0 +1,20 @@ +{ + "ultrawarm": true, + "natural": false, + "coordinate_scale": 64.0, + "bed_works": false, + "respawn_anchor_works": false, + "min_y": 0, + "height": 208, + "logical_height": 192, + "infiniburn": "#minecraft:infiniburn_overworld", + "effects": "minecraft:overworld", + "ambient_light": 0.015, + "piglin_safe": false, + "has_raids": false, + "monster_spawn_light_level": 0, + "monster_spawn_block_light_limit": 0, + "has_skylight": false, + "has_ceiling": true, + "fixed_time": 18000 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/dimension_type/elythia.json b/common-1.20.1/src/main/resources/data/antarchy/dimension_type/elythia.json new file mode 100644 index 00000000..9a6f326d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/dimension_type/elythia.json @@ -0,0 +1,25 @@ +{ + "ultrawarm": false, + "natural": true, + "coordinate_scale": 1.0, + "bed_works": true, + "respawn_anchor_works": false, + "min_y": -64, + "height": 512, + "logical_height": 512, + "infiniburn": "#minecraft:infiniburn_overworld", + "effects": "minecraft:overworld", + "ambient_light": 0.0, + "piglin_safe": false, + "has_raids": false, + "monster_spawn_light_level": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 0, + "max_inclusive": 7 + } + }, + "monster_spawn_block_light_limit": 0, + "has_skylight": true, + "has_ceiling": false +} 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 new file mode 100644 index 00000000..368ef383 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/dimension_type/thoraxis.json @@ -0,0 +1,20 @@ +{ + "ultrawarm": true, + "natural": false, + "coordinate_scale": 8.0, + "bed_works": false, + "respawn_anchor_works": true, + "min_y": 0, + "height": 256, + "logical_height": 220, + "infiniburn": "#minecraft:infiniburn_nether", + "effects": "minecraft:the_nether", + "ambient_light": 0.08, + "piglin_safe": true, + "has_raids": false, + "monster_spawn_light_level": 7, + "monster_spawn_block_light_limit": 0, + "has_skylight": false, + "has_ceiling": true, + "fixed_time": 18000 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/amber_lichen.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/amber_lichen.json new file mode 100644 index 00000000..dfba2794 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/amber_lichen.json @@ -0,0 +1,25 @@ +{ + "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_tables/blocks/amber_moss_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/amber_moss_block.json new file mode 100644 index 00000000..a8bfc055 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/amber_moss_block.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/amber_moss_carpet.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/amber_moss_carpet.json new file mode 100644 index 00000000..7e68cad1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/amber_moss_carpet.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/antigravel.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antigravel.json new file mode 100644 index 00000000..b89e352a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antigravel.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/antimetal.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal.json new file mode 100644 index 00000000..3ed331e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/antimetal_activator_rail.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_activator_rail.json new file mode 100644 index 00000000..f91df6d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_activator_rail.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/antimetal_detector_rail.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_detector_rail.json new file mode 100644 index 00000000..a6101057 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_detector_rail.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/antimetal_powered_rail.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_powered_rail.json new file mode 100644 index 00000000..eed683c6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_powered_rail.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/antimetal_rail.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_rail.json new file mode 100644 index 00000000..e58e371f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_rail.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/antimetal_scaffolding.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_scaffolding.json new file mode 100644 index 00000000..abcd187f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_scaffolding.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/antimetal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_slab.json new file mode 100644 index 00000000..959fbd3c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_slab.json @@ -0,0 +1,44 @@ +{ + "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_tables/blocks/antimetal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_stairs.json new file mode 100644 index 00000000..f81249ea --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/antimetal_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/bed_bug_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bed_bug_egg.json new file mode 100644 index 00000000..d16d9f39 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bed_bug_egg.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/bile_vein.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bile_vein.json new file mode 100644 index 00000000..32eb33c8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bile_vein.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/biomite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/biomite.json new file mode 100644 index 00000000..ac5e40b9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/biomite.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/biomite_turf.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/biomite_turf.json new file mode 100644 index 00000000..9980b91f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/biomite_turf.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/biowart.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/biowart.json new file mode 100644 index 00000000..38860771 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/biowart.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/biowart_tendrils.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/biowart_tendrils.json new file mode 100644 index 00000000..416d7142 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/biowart_tendrils.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/blood_crystal_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blood_crystal_block.json new file mode 100644 index 00000000..d59363a9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blood_crystal_block.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/blood_crystal_cluster.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blood_crystal_cluster.json new file mode 100644 index 00000000..3f5b2e29 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blood_crystal_cluster.json @@ -0,0 +1,79 @@ +{ + "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_tables/blocks/bluestone_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_block.json new file mode 100644 index 00000000..1e8f11e6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_block.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/bluestone_comparator.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_comparator.json new file mode 100644 index 00000000..26d77722 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_comparator.json @@ -0,0 +1,14 @@ +{ + "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_tables/blocks/bluestone_lamp.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_lamp.json new file mode 100644 index 00000000..050e8523 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_lamp.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/bluestone_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_ore.json new file mode 100644 index 00000000..b7f5736d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_ore.json @@ -0,0 +1,52 @@ +{ + "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_tables/blocks/bluestone_repeater.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_repeater.json new file mode 100644 index 00000000..dc3e4d9f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_repeater.json @@ -0,0 +1,14 @@ +{ + "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_tables/blocks/bluestone_torch.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_torch.json new file mode 100644 index 00000000..1181c0aa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_torch.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/bluestone_wire.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_wire.json new file mode 100644 index 00000000..b49ab6cb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/bluestone_wire.json @@ -0,0 +1,14 @@ +{ + "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_tables/blocks/blush_moss_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blush_moss_block.json new file mode 100644 index 00000000..566101fa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blush_moss_block.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/blush_moss_carpet.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blush_moss_carpet.json new file mode 100644 index 00000000..2c408c83 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/blush_moss_carpet.json @@ -0,0 +1,29 @@ +{ + "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_tables/blocks/broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone.json new file mode 100644 index 00000000..127d6661 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/broodstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_brick_slab.json new file mode 100644 index 00000000..3b654ece --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/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: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_tables/blocks/broodstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_brick_stairs.json new file mode 100644 index 00000000..66b18f76 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/broodstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_brick_wall.json new file mode 100644 index 00000000..ca98b9a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_brick_wall.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/broodstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_bricks.json new file mode 100644 index 00000000..800d7a1a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_bricks.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/broodstone_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_pillar.json new file mode 100644 index 00000000..0cddd51f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_pillar.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/broodstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_slab.json new file mode 100644 index 00000000..fd22e35a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_slab.json @@ -0,0 +1,35 @@ +{ + "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_tables/blocks/broodstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_stairs.json new file mode 100644 index 00000000..61531b81 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_stairs.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/broodstone_titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_titanium_ore.json new file mode 100644 index 00000000..e82655e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_titanium_ore.json @@ -0,0 +1,52 @@ +{ + "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_tables/blocks/broodstone_uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_uranium_ore.json new file mode 100644 index 00000000..adc15d84 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_uranium_ore.json @@ -0,0 +1,52 @@ +{ + "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_tables/blocks/broodstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_wall.json new file mode 100644 index 00000000..b611acf6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/broodstone_wall.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/brown_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/brown_ant_nest.json new file mode 100644 index 00000000..41e87a40 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/brown_ant_nest.json @@ -0,0 +1,31 @@ +{ + "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_tables/blocks/budding_blood_crystal.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/budding_blood_crystal.json new file mode 100644 index 00000000..7b59ea19 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/budding_blood_crystal.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "pools": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/camellia.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/camellia.json new file mode 100644 index 00000000..897225ec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/camellia.json @@ -0,0 +1,29 @@ +{ + "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_tables/blocks/chiseled_broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_broodstone.json new file mode 100644 index 00000000..2fe7e767 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_broodstone.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/chiseled_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_dream_sandstone.json new file mode 100644 index 00000000..ae82513c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_dream_sandstone.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/chiseled_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_nyxite.json new file mode 100644 index 00000000..47104d56 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_nyxite.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/chiseled_shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_shellstone.json new file mode 100644 index 00000000..d3467ae6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_shellstone.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/chiseled_titanium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_titanium.json new file mode 100644 index 00000000..e0aff048 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_titanium.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/chiseled_uranium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_uranium.json new file mode 100644 index 00000000..55880026 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chiseled_uranium.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/chitin_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chitin_block.json new file mode 100644 index 00000000..dee0af3b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chitin_block.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/chitin_spike.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chitin_spike.json new file mode 100644 index 00000000..ded89868 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/chitin_spike.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/cloud_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cloud_block.json new file mode 100644 index 00000000..7b59ea19 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cloud_block.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "pools": [] +} 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 new file mode 100644 index 00000000..90a0d86e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/corn_crop.json @@ -0,0 +1,70 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "antarchy:corn_crop", + "properties": { + "half": "lower" + } + } + ], + "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" + } + ] + }, + { + "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_tables/blocks/cornea_stalk.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cornea_stalk.json new file mode 100644 index 00000000..cca0ef2d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cornea_stalk.json @@ -0,0 +1,5 @@ +{ + "type": "minecraft:block", + "pools": [], + "random_sequence": "antarchy:blocks/cornea_stalk" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cracked_shellstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cracked_shellstone_bricks.json new file mode 100644 index 00000000..caf67870 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cracked_shellstone_bricks.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/creeping_horror_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creeping_horror_egg.json new file mode 100644 index 00000000..2a3ec5b3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creeping_horror_egg.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 00000000..ee8223b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creeping_horror_eggs.json @@ -0,0 +1 @@ +{"type":"minecraft:block","pools":[]} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creepvine.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creepvine.json new file mode 100644 index 00000000..e1abf289 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/creepvine.json @@ -0,0 +1,25 @@ +{ + "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_tables/blocks/critter_cage_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/critter_cage_block.json new file mode 100644 index 00000000..6e74c8cd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/critter_cage_block.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:critter_cage" + } + ], + "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" } + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_dream_sandstone.json new file mode 100644 index 00000000..424f9e65 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_dream_sandstone.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/cut_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_dream_sandstone_slab.json new file mode 100644 index 00000000..2a86b88d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_dream_sandstone_slab.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/cut_titanium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_titanium.json new file mode 100644 index 00000000..66c0b972 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_titanium.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/cut_titanium_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_titanium_slab.json new file mode 100644 index 00000000..3c4ff908 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_titanium_slab.json @@ -0,0 +1,35 @@ +{ + "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_tables/blocks/cut_titanium_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_titanium_stairs.json new file mode 100644 index 00000000..aad46bb5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_titanium_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/cut_titanium_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_titanium_wall.json new file mode 100644 index 00000000..6e1ae02c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_titanium_wall.json @@ -0,0 +1,19 @@ +{ + "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.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_uranium.json new file mode 100644 index 00000000..301f599d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_uranium.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/cut_uranium_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_uranium_slab.json new file mode 100644 index 00000000..3a637241 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_uranium_slab.json @@ -0,0 +1,35 @@ +{ + "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_tables/blocks/cut_uranium_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_uranium_stairs.json new file mode 100644 index 00000000..085fba98 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_uranium_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/cut_uranium_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_uranium_wall.json new file mode 100644 index 00000000..7360e0cf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/cut_uranium_wall.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/dead_star_coral.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral.json new file mode 100644 index 00000000..d34f10d0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral.json @@ -0,0 +1,28 @@ +{ + "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_tables/blocks/dead_star_coral_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_block.json new file mode 100644 index 00000000..06d2dfd0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_block.json @@ -0,0 +1,19 @@ +{ + "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_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 new file mode 100644 index 00000000..43218c24 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_fan.json @@ -0,0 +1,28 @@ +{ + "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_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 new file mode 100644 index 00000000..43218c24 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dead_star_coral_wall_fan.json @@ -0,0 +1,28 @@ +{ + "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_tables/blocks/deepslate_titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_titanium_ore.json new file mode 100644 index 00000000..a1bef158 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_titanium_ore.json @@ -0,0 +1,52 @@ +{ + "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_tables/blocks/deepslate_uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_uranium_ore.json new file mode 100644 index 00000000..f2199bdf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/deepslate_uranium_ore.json @@ -0,0 +1,52 @@ +{ + "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_tables/blocks/dream_campfire.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_campfire.json new file mode 100644 index 00000000..8bf38e8a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_campfire.json @@ -0,0 +1,46 @@ +{ + "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_tables/blocks/dream_ceiling_torch.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_ceiling_torch.json new file mode 100644 index 00000000..2d716ec1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_ceiling_torch.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/dream_lantern.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_lantern.json new file mode 100644 index 00000000..d8a0fc78 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_lantern.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/dream_sand.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_sand.json new file mode 100644 index 00000000..d30a08f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_sand.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_sandstone.json new file mode 100644 index 00000000..d639dbcc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_sandstone.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_sandstone_slab.json new file mode 100644 index 00000000..b2b99f1b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_sandstone_slab.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_sandstone_stairs.json new file mode 100644 index 00000000..4c4f2870 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_sandstone_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/dream_sandstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_sandstone_wall.json new file mode 100644 index 00000000..62a87487 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_sandstone_wall.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/dream_torch.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_torch.json new file mode 100644 index 00000000..be499a91 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_torch.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/dream_wall_torch.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_wall_torch.json new file mode 100644 index 00000000..ee1a3927 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/dream_wall_torch.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/duct_tape.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/duct_tape.json new file mode 100644 index 00000000..36106b7c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/duct_tape.json @@ -0,0 +1,26 @@ +{ + "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_tables/blocks/duplicator_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/duplicator_log.json new file mode 100644 index 00000000..89403243 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/duplicator_log.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/duplicator_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/duplicator_sapling.json new file mode 100644 index 00000000..1d011246 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/duplicator_sapling.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/giant_lily_pad.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/giant_lily_pad.json new file mode 100644 index 00000000..b6332265 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/giant_lily_pad.json @@ -0,0 +1,33 @@ +{ + "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_tables/blocks/glowcap_mushroom.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/glowcap_mushroom.json new file mode 100644 index 00000000..0fe88a8e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/glowcap_mushroom.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/glowcap_mushroom_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/glowcap_mushroom_block.json new file mode 100644 index 00000000..fa32aaf1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/glowcap_mushroom_block.json @@ -0,0 +1,62 @@ +{ + "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": { + "enchantments": [ + { + "enchantment": "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_tables/blocks/hanging_creeproots.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/hanging_creeproots.json new file mode 100644 index 00000000..3a6dfc7e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/hanging_creeproots.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/hanging_peach.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/hanging_peach.json new file mode 100644 index 00000000..96e05f39 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/hanging_peach.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/hushweed.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/hushweed.json new file mode 100644 index 00000000..38f318d5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/hushweed.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/infested_coarse_dirt.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/infested_coarse_dirt.json new file mode 100644 index 00000000..7b59ea19 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/infested_coarse_dirt.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "pools": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/infested_rooted_dirt.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/infested_rooted_dirt.json new file mode 100644 index 00000000..7b59ea19 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/infested_rooted_dirt.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "pools": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/jerry_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/jerry_egg.json new file mode 100644 index 00000000..1c029f55 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/jerry_egg.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/jumpy_bug_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/jumpy_bug_egg.json new file mode 100644 index 00000000..56e63d63 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/jumpy_bug_egg.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 00000000..802a65ec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/large_blood_crystal_bud.json @@ -0,0 +1,33 @@ +{ + "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_tables/blocks/loam.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam.json new file mode 100644 index 00000000..4b098d8f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/loam.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/lotus.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lotus.json new file mode 100644 index 00000000..2c7f5cb8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lotus.json @@ -0,0 +1,18 @@ +{ + "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_tables/blocks/lumen_froglight.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lumen_froglight.json new file mode 100644 index 00000000..79c8941d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lumen_froglight.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/lurking_terror_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lurking_terror_egg.json new file mode 100644 index 00000000..1cfefbdd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lurking_terror_egg.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 00000000..ee8223b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/lurking_terror_eggs.json @@ -0,0 +1 @@ +{"type":"minecraft:block","pools":[]} 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 new file mode 100644 index 00000000..f8fb2734 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/medium_blood_crystal_bud.json @@ -0,0 +1,33 @@ +{ + "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_tables/blocks/molting_vines.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/molting_vines.json new file mode 100644 index 00000000..35966857 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/molting_vines.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/mossy_ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_ouranwood_log.json new file mode 100644 index 00000000..d5d9a58a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_ouranwood_log.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/mossy_ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_ouranwood_wood.json new file mode 100644 index 00000000..fb237892 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_ouranwood_wood.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/mossy_shellstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..1ee537f0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_shellstone_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_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_tables/blocks/mossy_shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..3c45a676 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_shellstone_brick_stairs.json @@ -0,0 +1,16 @@ +{ + "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_tables/blocks/mossy_shellstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_shellstone_brick_wall.json new file mode 100644 index 00000000..0c5bee10 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_shellstone_brick_wall.json @@ -0,0 +1,16 @@ +{ + "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_tables/blocks/mossy_shellstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_shellstone_bricks.json new file mode 100644 index 00000000..c71114a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mossy_shellstone_bricks.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/mucus.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mucus.json new file mode 100644 index 00000000..e429ffd7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/mucus.json @@ -0,0 +1,25 @@ +{ + "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_tables/blocks/myrmite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite.json new file mode 100644 index 00000000..fd82e19e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/myrmite_coal_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_coal_ore.json new file mode 100644 index 00000000..6da2ca1d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/myrmite_coal_ore.json @@ -0,0 +1,52 @@ +{ + "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_tables/blocks/nadir_button.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_button.json new file mode 100644 index 00000000..cc738c5c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_button.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_door.json new file mode 100644 index 00000000..d992154d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_door.json @@ -0,0 +1,30 @@ +{ + "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_tables/blocks/nadir_fence.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_fence.json new file mode 100644 index 00000000..3388ad18 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_fence.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_fence_gate.json new file mode 100644 index 00000000..aeb691fc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_fence_gate.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_hanging_sign.json new file mode 100644 index 00000000..7754bba0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_log.json new file mode 100644 index 00000000..0b91f557 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_log.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_planks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_planks.json new file mode 100644 index 00000000..489c3e34 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_planks.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_pressure_plate.json new file mode 100644 index 00000000..c9f9152d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_pressure_plate.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_sapling.json new file mode 100644 index 00000000..dd2b5842 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_sapling.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/nadir_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_sign.json new file mode 100644 index 00000000..67baa54a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_slab.json new file mode 100644 index 00000000..c2c76ef4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_slab.json @@ -0,0 +1,35 @@ +{ + "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_tables/blocks/nadir_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_stairs.json new file mode 100644 index 00000000..e06e6af0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_stairs.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_trapdoor.json new file mode 100644 index 00000000..6c570532 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_trapdoor.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_veil.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_veil.json new file mode 100644 index 00000000..dfb8cce5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_veil.json @@ -0,0 +1,16 @@ +{ + "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_tables/blocks/nadir_wall_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_wall_hanging_sign.json new file mode 100644 index 00000000..5a053f35 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_wall_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_wall_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_wall_sign.json new file mode 100644 index 00000000..ef0298e8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_wall_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nadir_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_wood.json new file mode 100644 index 00000000..cb9de74b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nadir_wood.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite.json new file mode 100644 index 00000000..88d04855 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/nyxite_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_brick_slab.json new file mode 100644 index 00000000..dd76fd58 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/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: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_tables/blocks/nyxite_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_brick_stairs.json new file mode 100644 index 00000000..e417be42 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_brick_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/nyxite_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_brick_wall.json new file mode 100644 index 00000000..bfd778ec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_brick_wall.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/nyxite_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_bricks.json new file mode 100644 index 00000000..3737802a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_bricks.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/nyxite_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_pillar.json new file mode 100644 index 00000000..1afc0284 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_pillar.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/nyxite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_slab.json new file mode 100644 index 00000000..a65d7383 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_slab.json @@ -0,0 +1,35 @@ +{ + "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_tables/blocks/nyxite_spike.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_spike.json new file mode 100644 index 00000000..4d1b4380 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_spike.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/nyxite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_stairs.json new file mode 100644 index 00000000..87cece8a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/nyxite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_wall.json new file mode 100644 index 00000000..b1bdfe1b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/nyxite_wall.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/orange_milkweed.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/orange_milkweed.json new file mode 100644 index 00000000..f79b2304 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/orange_milkweed.json @@ -0,0 +1,29 @@ +{ + "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_tables/blocks/ouranwood_acorn.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_acorn.json new file mode 100644 index 00000000..e1eefbb8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_acorn.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/ouranwood_button.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_button.json new file mode 100644 index 00000000..44d807f6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_button.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_door.json new file mode 100644 index 00000000..f5e80def --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_door.json @@ -0,0 +1,30 @@ +{ + "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_tables/blocks/ouranwood_fence.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence.json new file mode 100644 index 00000000..7caf870a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence_gate.json new file mode 100644 index 00000000..b5611fc4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_fence_gate.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_hanging_sign.json new file mode 100644 index 00000000..abe13499 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_leaves.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_leaves.json new file mode 100644 index 00000000..2957533a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_leaves.json @@ -0,0 +1,137 @@ +{ + "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_tables/blocks/ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_log.json new file mode 100644 index 00000000..d4293289 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_log.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_planks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_planks.json new file mode 100644 index 00000000..a06fd256 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_planks.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_pressure_plate.json new file mode 100644 index 00000000..572da244 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_pressure_plate.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_sign.json new file mode 100644 index 00000000..d74b95f4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_slab.json new file mode 100644 index 00000000..2607b412 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_slab.json @@ -0,0 +1,35 @@ +{ + "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_tables/blocks/ouranwood_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_stairs.json new file mode 100644 index 00000000..5000d99f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_stairs.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_trapdoor.json new file mode 100644 index 00000000..b117b21c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_trapdoor.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_wall_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_wall_hanging_sign.json new file mode 100644 index 00000000..a082998d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_wall_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_wall_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_wall_sign.json new file mode 100644 index 00000000..6dafb630 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_wall_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_wood.json new file mode 100644 index 00000000..1a7dbd98 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/ouranwood_wood.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/pale_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/pale_nyxite.json new file mode 100644 index 00000000..7f93d556 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/pale_nyxite.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/peach_button.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_button.json new file mode 100644 index 00000000..74410c74 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_button.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_door.json new file mode 100644 index 00000000..c8b63c95 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_door.json @@ -0,0 +1,30 @@ +{ + "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_tables/blocks/peach_fence.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_fence.json new file mode 100644 index 00000000..31c7edd6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_fence.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_fence_gate.json new file mode 100644 index 00000000..fd509861 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_fence_gate.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_hanging_sign.json new file mode 100644 index 00000000..a5d88061 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_leaves.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_leaves.json new file mode 100644 index 00000000..f1a2b349 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_leaves.json @@ -0,0 +1,138 @@ +{ + "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_tables/blocks/peach_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_log.json new file mode 100644 index 00000000..35a91254 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_log.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_planks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_planks.json new file mode 100644 index 00000000..1bd313c7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_planks.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_pressure_plate.json new file mode 100644 index 00000000..7f9121ef --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_pressure_plate.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_sapling.json new file mode 100644 index 00000000..7d35a420 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_sapling.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/peach_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_sign.json new file mode 100644 index 00000000..b71fbb4b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_slab.json new file mode 100644 index 00000000..53e759d0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_slab.json @@ -0,0 +1,35 @@ +{ + "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_tables/blocks/peach_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_stairs.json new file mode 100644 index 00000000..3f81f57e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_stairs.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_trapdoor.json new file mode 100644 index 00000000..ee2c8580 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_trapdoor.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_wall_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_wall_hanging_sign.json new file mode 100644 index 00000000..f9804bed --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_wall_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_wall_sign.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_wall_sign.json new file mode 100644 index 00000000..7ddd0f95 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_wall_sign.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/peach_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_wood.json new file mode 100644 index 00000000..f1787698 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/peach_wood.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/pink_milkweed.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/pink_milkweed.json new file mode 100644 index 00000000..99a772e5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/pink_milkweed.json @@ -0,0 +1,29 @@ +{ + "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_tables/blocks/polished_antimetal.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal.json new file mode 100644 index 00000000..73100b37 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/polished_antimetal_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_slab.json new file mode 100644 index 00000000..624081d1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_slab.json @@ -0,0 +1,44 @@ +{ + "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_tables/blocks/polished_antimetal_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_stairs.json new file mode 100644 index 00000000..e96674d5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_antimetal_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/polished_broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_broodstone.json new file mode 100644 index 00000000..6820fe85 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_broodstone.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/polished_broodstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_broodstone_slab.json new file mode 100644 index 00000000..10ca4083 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_broodstone_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_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_tables/blocks/polished_broodstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_broodstone_stairs.json new file mode 100644 index 00000000..dd45fc50 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_broodstone_stairs.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/polished_broodstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_broodstone_wall.json new file mode 100644 index 00000000..28fae763 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_broodstone_wall.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/polished_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite.json new file mode 100644 index 00000000..9bdf4248 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/polished_nyxite_button.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite_button.json new file mode 100644 index 00000000..4568d117 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite_button.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/polished_nyxite_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite_pressure_plate.json new file mode 100644 index 00000000..9590f8d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite_pressure_plate.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/polished_nyxite_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite_slab.json new file mode 100644 index 00000000..fd3b5613 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite_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_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_tables/blocks/polished_nyxite_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite_stairs.json new file mode 100644 index 00000000..db1519d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/polished_nyxite_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite_wall.json new file mode 100644 index 00000000..852fd8f6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_nyxite_wall.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/polished_shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_shellstone.json new file mode 100644 index 00000000..f2f69474 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_shellstone.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/polished_shellstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_shellstone_slab.json new file mode 100644 index 00000000..9f14b34e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_shellstone_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_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_tables/blocks/polished_shellstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_shellstone_stairs.json new file mode 100644 index 00000000..b1834d14 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_shellstone_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/polished_shellstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_shellstone_wall.json new file mode 100644 index 00000000..dc9c6f88 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/polished_shellstone_wall.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/potent_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potent_nyxite.json new file mode 100644 index 00000000..a08a448b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potent_nyxite.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/potted_glowcap_mushroom.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_glowcap_mushroom.json new file mode 100644 index 00000000..c7a9f5e6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_glowcap_mushroom.json @@ -0,0 +1,24 @@ +{ + "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_tables/blocks/potted_lotus.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_lotus.json new file mode 100644 index 00000000..ad1f944c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_lotus.json @@ -0,0 +1,24 @@ +{ + "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_tables/blocks/potted_nadir_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_nadir_sapling.json new file mode 100644 index 00000000..004fffd6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_nadir_sapling.json @@ -0,0 +1,24 @@ +{ + "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_tables/blocks/potted_ouranwood_acorn.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_ouranwood_acorn.json new file mode 100644 index 00000000..061cb2d6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_ouranwood_acorn.json @@ -0,0 +1,24 @@ +{ + "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_tables/blocks/potted_peach_sapling.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_peach_sapling.json new file mode 100644 index 00000000..c22a2844 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_peach_sapling.json @@ -0,0 +1,24 @@ +{ + "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_tables/blocks/potted_spider_lily.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_spider_lily.json new file mode 100644 index 00000000..079da348 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/potted_spider_lily.json @@ -0,0 +1,24 @@ +{ + "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_tables/blocks/rainbow_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/rainbow_ant_nest.json new file mode 100644 index 00000000..bd2bcf15 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/rainbow_ant_nest.json @@ -0,0 +1,31 @@ +{ + "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_tables/blocks/raw_titanium_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/raw_titanium_block.json new file mode 100644 index 00000000..3db55d2e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/raw_titanium_block.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/raw_uranium_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/raw_uranium_block.json new file mode 100644 index 00000000..15692e0a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/raw_uranium_block.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/red_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/red_ant_nest.json new file mode 100644 index 00000000..1db5c81a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/red_ant_nest.json @@ -0,0 +1,31 @@ +{ + "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_tables/blocks/roseate_froglight.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/roseate_froglight.json new file mode 100644 index 00000000..7665156e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/roseate_froglight.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/seashell.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/seashell.json new file mode 100644 index 00000000..da9adf20 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/seashell.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone.json new file mode 100644 index 00000000..d3323d86 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/shellstone_brick_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_brick_slab.json new file mode 100644 index 00000000..d18aacd5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_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: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_tables/blocks/shellstone_brick_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_brick_stairs.json new file mode 100644 index 00000000..b5599f00 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_brick_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/shellstone_brick_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_brick_wall.json new file mode 100644 index 00000000..fe77132f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_brick_wall.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/shellstone_bricks.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_bricks.json new file mode 100644 index 00000000..d726b845 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_bricks.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/shellstone_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_pillar.json new file mode 100644 index 00000000..0197c093 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_pillar.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/shellstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_slab.json new file mode 100644 index 00000000..9b8e83e9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_slab.json @@ -0,0 +1,35 @@ +{ + "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_tables/blocks/shellstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_stairs.json new file mode 100644 index 00000000..5afbfa5a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/shellstone_wall.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_wall.json new file mode 100644 index 00000000..30fda0e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/shellstone_wall.json @@ -0,0 +1,20 @@ +{ + "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_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 new file mode 100644 index 00000000..c3210026 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/small_blood_crystal_bud.json @@ -0,0 +1,33 @@ +{ + "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_tables/blocks/smooth_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/smooth_dream_sandstone.json new file mode 100644 index 00000000..910fb764 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/smooth_dream_sandstone.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/smooth_dream_sandstone_slab.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/smooth_dream_sandstone_slab.json new file mode 100644 index 00000000..d2915704 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/smooth_dream_sandstone_slab.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/smooth_dream_sandstone_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/smooth_dream_sandstone_stairs.json new file mode 100644 index 00000000..d0898ddb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/smooth_dream_sandstone_stairs.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/spider_lily.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/spider_lily.json new file mode 100644 index 00000000..cf82c4af --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/spider_lily.json @@ -0,0 +1,15 @@ +{ + "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_tables/blocks/spit_bug_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/spit_bug_egg.json new file mode 100644 index 00000000..623ae141 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/spit_bug_egg.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/star_coral.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral.json new file mode 100644 index 00000000..f7397a97 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral.json @@ -0,0 +1,28 @@ +{ + "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:star_coral" + } + ] + } + ] +} 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 new file mode 100644 index 00000000..726008ad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_block.json @@ -0,0 +1,42 @@ +{ + "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:dead_star_coral_block" + } + ] + } + ] + } + ] +} 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 new file mode 100644 index 00000000..62bea052 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_fan.json @@ -0,0 +1,28 @@ +{ + "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:star_coral_fan" + } + ] + } + ] +} 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 new file mode 100644 index 00000000..62bea052 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/star_coral_wall_fan.json @@ -0,0 +1,28 @@ +{ + "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:star_coral_fan" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_nadir_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_nadir_log.json new file mode 100644 index 00000000..8c1d3eca --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_nadir_log.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/stripped_nadir_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_nadir_wood.json new file mode 100644 index 00000000..72481f44 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_nadir_wood.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/stripped_ouranwood_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_log.json new file mode 100644 index 00000000..50d3061e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_log.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/stripped_ouranwood_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_wood.json new file mode 100644 index 00000000..6e4679ad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_ouranwood_wood.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/stripped_peach_log.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_peach_log.json new file mode 100644 index 00000000..514158bb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_peach_log.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/stripped_peach_wood.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_peach_wood.json new file mode 100644 index 00000000..91106444 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/stripped_peach_wood.json @@ -0,0 +1,21 @@ +{ + "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_tables/blocks/termite_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/termite_nest.json new file mode 100644 index 00000000..c222199e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/termite_nest.json @@ -0,0 +1,31 @@ +{ + "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_tables/blocks/titanium_bars.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_bars.json new file mode 100644 index 00000000..ca3141d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_bars.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/titanium_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_block.json new file mode 100644 index 00000000..d75bfea9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_block.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/titanium_bulb.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_bulb.json new file mode 100644 index 00000000..463e1b1d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_bulb.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/titanium_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_door.json new file mode 100644 index 00000000..0d382fda --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_door.json @@ -0,0 +1,30 @@ +{ + "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_tables/blocks/titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_ore.json new file mode 100644 index 00000000..f2298a83 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_ore.json @@ -0,0 +1,52 @@ +{ + "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_tables/blocks/titanium_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_trapdoor.json new file mode 100644 index 00000000..f8099042 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/titanium_trapdoor.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/triffid_goo_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/triffid_goo_block.json new file mode 100644 index 00000000..b09e8e76 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/triffid_goo_block.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/umbral_moss_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/umbral_moss_block.json new file mode 100644 index 00000000..050f79fd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/umbral_moss_block.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/umbral_moss_carpet.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/umbral_moss_carpet.json new file mode 100644 index 00000000..1ca07a11 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/umbral_moss_carpet.json @@ -0,0 +1,29 @@ +{ + "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_tables/blocks/upper.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/upper.json new file mode 100644 index 00000000..b5c904fa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/upper.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/uranium_bars.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_bars.json new file mode 100644 index 00000000..e5a40a93 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_bars.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/uranium_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_block.json new file mode 100644 index 00000000..cb0f9784 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_block.json @@ -0,0 +1,19 @@ +{ + "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_tables/blocks/uranium_bulb.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_bulb.json new file mode 100644 index 00000000..fa7bc0ff --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_bulb.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/uranium_door.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_door.json new file mode 100644 index 00000000..4485195d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_door.json @@ -0,0 +1,30 @@ +{ + "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_tables/blocks/uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_ore.json new file mode 100644 index 00000000..41202d6b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_ore.json @@ -0,0 +1,52 @@ +{ + "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_tables/blocks/uranium_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_trapdoor.json new file mode 100644 index 00000000..1ad2348a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/uranium_trapdoor.json @@ -0,0 +1,20 @@ +{ + "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_tables/blocks/wasp_nest.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/wasp_nest.json new file mode 100644 index 00000000..cb9d67c8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/wasp_nest.json @@ -0,0 +1,31 @@ +{ + "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_tables/blocks/wild_corn.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/wild_corn.json new file mode 100644 index 00000000..46f29bdc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/blocks/wild_corn.json @@ -0,0 +1,24 @@ +{ + "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_tables/chests/basilisk_lair/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/generic.json new file mode 100644 index 00000000..93e08b3c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/generic.json @@ -0,0 +1,200 @@ +{ + "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_tables/chests/basilisk_lair/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/treasure.json new file mode 100644 index 00000000..3c2530ea --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/basilisk_lair/treasure.json @@ -0,0 +1,198 @@ +{ + "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_tables/chests/fallen_kingdom_castle/bedroom.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/bedroom.json new file mode 100644 index 00000000..6011c694 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/bedroom.json @@ -0,0 +1,135 @@ +{ + "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_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 new file mode 100644 index 00000000..1946e603 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/generic.json @@ -0,0 +1,205 @@ +{ + "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_tables/chests/fallen_kingdom_castle/kitchen.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/kitchen.json new file mode 100644 index 00000000..6ba7c98a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/kitchen.json @@ -0,0 +1,235 @@ +{ + "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_tables/chests/fallen_kingdom_castle/storage.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/storage.json new file mode 100644 index 00000000..98dfa9a2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/storage.json @@ -0,0 +1,220 @@ +{ + "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_tables/chests/fallen_kingdom_castle/tools.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/tools.json new file mode 100644 index 00000000..56a1f365 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/tools.json @@ -0,0 +1,214 @@ +{ + "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_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 new file mode 100644 index 00000000..dcd6b2a2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/tower.json @@ -0,0 +1,261 @@ +{ + "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_potion", + "id": "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_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 new file mode 100644 index 00000000..be90946f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/fallen_kingdom_castle/treasure.json @@ -0,0 +1,146 @@ +{ + "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_tables/chests/ruined_arena/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_arena/generic.json new file mode 100644 index 00000000..50dba6cd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_arena/generic.json @@ -0,0 +1,297 @@ +{ + "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_potion", + "id": "antarchy:shrinking" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strength" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "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_tables/chests/ruined_prison/generic.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_prison/generic.json new file mode 100644 index 00000000..f7a5e755 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_prison/generic.json @@ -0,0 +1,240 @@ +{ + "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_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 new file mode 100644 index 00000000..ed539a08 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/ruined_prison/warden_cache.json @@ -0,0 +1,282 @@ +{ + "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_tables/chests/seashell.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/seashell.json new file mode 100644 index 00000000..28e25c0e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/seashell.json @@ -0,0 +1,129 @@ +{ + "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_tables/chests/stampys_house/bedroom.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/bedroom.json new file mode 100644 index 00000000..8fcaf3c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/bedroom.json @@ -0,0 +1,176 @@ +{ + "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_tables/chests/stampys_house/kitchen.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/kitchen.json new file mode 100644 index 00000000..85d58abc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/kitchen.json @@ -0,0 +1,165 @@ +{ + "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_tables/chests/stampys_house/storage.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/storage.json new file mode 100644 index 00000000..c7093fe5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/stampys_house/storage.json @@ -0,0 +1,176 @@ +{ + "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_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 new file mode 100644 index 00000000..e5882976 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/temple_of_technoblade/generic.json @@ -0,0 +1,210 @@ +{ + "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_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 new file mode 100644 index 00000000..189b3f72 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/temple_of_technoblade/treasure.json @@ -0,0 +1,170 @@ +{ + "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_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 new file mode 100644 index 00000000..949c9991 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/chests/trayaurus_lab/trayaurus_lab.json @@ -0,0 +1,441 @@ +{ + "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_potion", + "id": "antarchy:shrinking" + } + ], + "name": "minecraft:potion", + "weight": 2 + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "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_tables/entities/alpha_mantis.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/alpha_mantis.json new file mode 100644 index 00000000..851328fc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/alpha_mantis.json @@ -0,0 +1,123 @@ +{ + "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_tables/entities/apple_cow.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/apple_cow.json new file mode 100644 index 00000000..a7437c82 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/apple_cow.json @@ -0,0 +1,75 @@ +{ + "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_tables/entities/basilisk.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/basilisk.json new file mode 100644 index 00000000..a5a7135b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/basilisk.json @@ -0,0 +1,23 @@ +{ + "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_tables/entities/bed_bug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/bed_bug.json new file mode 100644 index 00000000..eb13f53d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/bed_bug.json @@ -0,0 +1,39 @@ +{ + "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_tables/entities/brutalfly.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/brutalfly.json new file mode 100644 index 00000000..c001fa35 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/brutalfly.json @@ -0,0 +1,39 @@ +{ + "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_tables/entities/cheep.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/cheep.json new file mode 100644 index 00000000..ea3b5bba --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/cheep.json @@ -0,0 +1,15 @@ +{ + "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_tables/entities/cloud_shark.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/cloud_shark.json new file mode 100644 index 00000000..5a78e7af --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/cloud_shark.json @@ -0,0 +1,19 @@ +{ + "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_tables/entities/creeping_horror.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/creeping_horror.json new file mode 100644 index 00000000..f402239f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/creeping_horror.json @@ -0,0 +1,72 @@ +{ + "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/easter_bunny.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/easter_bunny.json new file mode 100644 index 00000000..c4f7ac96 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/easter_bunny.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:entity", + "pools": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/emperor_scorpion.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/emperor_scorpion.json new file mode 100644 index 00000000..c5a7c9df --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/emperor_scorpion.json @@ -0,0 +1,19 @@ +{ + "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_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 new file mode 100644 index 00000000..a7437c82 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/enchanted_golden_apple_cow.json @@ -0,0 +1,75 @@ +{ + "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_tables/entities/flying_squirrel.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/flying_squirrel.json new file mode 100644 index 00000000..c4f7ac96 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/flying_squirrel.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:entity", + "pools": [] +} 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 new file mode 100644 index 00000000..a7437c82 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/golden_apple_cow.json @@ -0,0 +1,75 @@ +{ + "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_tables/entities/hercules_beetle.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/hercules_beetle.json new file mode 100644 index 00000000..a30541b2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/hercules_beetle.json @@ -0,0 +1,39 @@ +{ + "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_tables/entities/jerry.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/jerry.json new file mode 100644 index 00000000..2a746c8b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/jerry.json @@ -0,0 +1,39 @@ +{ + "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_tables/entities/jumpy_bug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/jumpy_bug.json new file mode 100644 index 00000000..30997597 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/jumpy_bug.json @@ -0,0 +1,94 @@ +{ + "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_tables/entities/kraken.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/kraken.json new file mode 100644 index 00000000..8306f4e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/kraken.json @@ -0,0 +1,41 @@ +{ + "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_tables/entities/lucid.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/lucid.json new file mode 100644 index 00000000..664ce949 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/lucid.json @@ -0,0 +1,19 @@ +{ + "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_tables/entities/lurking_terror.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/lurking_terror.json new file mode 100644 index 00000000..9e97d257 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/lurking_terror.json @@ -0,0 +1,72 @@ +{ + "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/mantis.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/mantis.json new file mode 100644 index 00000000..b24b2ee3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/mantis.json @@ -0,0 +1,71 @@ +{ + "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_tables/entities/missile_squid.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/missile_squid.json new file mode 100644 index 00000000..c4f7ac96 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/missile_squid.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:entity", + "pools": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/molevore.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/molevore.json new file mode 100644 index 00000000..6d8b3d99 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/molevore.json @@ -0,0 +1,19 @@ +{ + "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_tables/entities/moleworm.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/moleworm.json new file mode 100644 index 00000000..abb99896 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/moleworm.json @@ -0,0 +1,20 @@ +{ + "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_tables/entities/nightmare.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/nightmare.json new file mode 100644 index 00000000..27bd59df --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/nightmare.json @@ -0,0 +1,29 @@ +{ + "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_tables/entities/octopus_bomb.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/octopus_bomb.json new file mode 100644 index 00000000..c66fab67 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/octopus_bomb.json @@ -0,0 +1,18 @@ +{ + "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_tables/entities/ouranwood_deer.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/ouranwood_deer.json new file mode 100644 index 00000000..5bd5aaec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/ouranwood_deer.json @@ -0,0 +1,75 @@ +{ + "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_tables/entities/spit_bug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/spit_bug.json new file mode 100644 index 00000000..d604c60a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/spit_bug.json @@ -0,0 +1,72 @@ +{ + "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_tables/entities/stink_bug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/stink_bug.json new file mode 100644 index 00000000..a392269a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/stink_bug.json @@ -0,0 +1,25 @@ +{ + "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_tables/entities/toreterror.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/toreterror.json new file mode 100644 index 00000000..8b8512f1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/toreterror.json @@ -0,0 +1,64 @@ +{ + "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_tables/entities/triffid.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/triffid.json new file mode 100644 index 00000000..703b4e66 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/entities/triffid.json @@ -0,0 +1,39 @@ +{ + "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_tables/spawners/basilisk_lair/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/hard.json new file mode 100644 index 00000000..310a2352 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/hard.json @@ -0,0 +1,214 @@ +{ + "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_tables/spawners/basilisk_lair/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/medium.json new file mode 100644 index 00000000..5fe07766 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/basilisk_lair/medium.json @@ -0,0 +1,187 @@ +{ + "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_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 new file mode 100644 index 00000000..d18616d0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/fallen_kingdom_castle/hard.json @@ -0,0 +1,231 @@ +{ + "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_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 new file mode 100644 index 00000000..21777b28 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/fallen_kingdom_castle/medium.json @@ -0,0 +1,252 @@ +{ + "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_potion", + "id": "antarchy:shrinking" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "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_tables/spawners/ruined_arena/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/hard.json new file mode 100644 index 00000000..c2302ea9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/hard.json @@ -0,0 +1,336 @@ +{ + "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_potion", + "id": "minecraft:strength" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:swiftness" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "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_tables/spawners/ruined_arena/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/medium.json new file mode 100644 index 00000000..2169a9cb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_arena/medium.json @@ -0,0 +1,267 @@ +{ + "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_potion", + "id": "minecraft:swiftness" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strength" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "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_tables/spawners/ruined_prison/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/hard.json new file mode 100644 index 00000000..827dccb2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/hard.json @@ -0,0 +1,274 @@ +{ + "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_tables/spawners/ruined_prison/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/medium.json new file mode 100644 index 00000000..8ce546a3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/ruined_prison/medium.json @@ -0,0 +1,248 @@ +{ + "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_tables/spawners/stampys_house/hard.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/hard.json new file mode 100644 index 00000000..bc533a4b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/hard.json @@ -0,0 +1,231 @@ +{ + "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_tables/spawners/stampys_house/medium.json b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/medium.json new file mode 100644 index 00000000..f01c5d6e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/stampys_house/medium.json @@ -0,0 +1,260 @@ +{ + "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_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 new file mode 100644 index 00000000..3f56bc73 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/temple_of_technoblade/hard.json @@ -0,0 +1,185 @@ +{ + "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_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 new file mode 100644 index 00000000..673d0075 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_tables/spawners/temple_of_technoblade/medium.json @@ -0,0 +1,195 @@ +{ + "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/recipes/americanize.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/americanize.json new file mode 100644 index 00000000..ebddb8ef --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/americanize.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:americanize", + "category": "misc" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/antigravel.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/antigravel.json new file mode 100644 index 00000000..f1ce55dd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antigravel.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "pattern": [ + "GGG", + "GLG", + "GGG" + ], + "key": { + "G": { + "item": "minecraft:gravel" + }, + "L": { + "item": "antarchy:lucid_eye" + } + }, + "result": { + "item": "antarchy:antigravel", + "count": 8 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_activator_rail.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_activator_rail.json new file mode 100644 index 00000000..b636dbb2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_activator_rail.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:antimetal_activator_rail", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_detector_rail.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_detector_rail.json new file mode 100644 index 00000000..fe226bf3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_detector_rail.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:antimetal_detector_rail", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_powered_rail.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_powered_rail.json new file mode 100644 index 00000000..c689bab4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_powered_rail.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:antimetal_powered_rail", + "count": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_rail.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_rail.json new file mode 100644 index 00000000..7c0343f7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_rail.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "X": { + "item": "antarchy:polished_antimetal" + }, + "Y": { + "item": "minecraft:stick" + } + }, + "pattern": [ + "X X", + "XYX", + "X X" + ], + "result": { + "item": "antarchy:antimetal_rail", + "count": 16 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_scaffolding.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_scaffolding.json new file mode 100644 index 00000000..0e0069b0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_scaffolding.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "pattern": [ + "PCP", + "P P", + "P P" + ], + "key": { + "P": { + "item": "antarchy:polished_antimetal" + }, + "C": { + "item": "minecraft:chain" + } + }, + "result": { + "item": "antarchy:antimetal_scaffolding", + "count": 16 + } +} 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 new file mode 100644 index 00000000..b213a6d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:antimetal" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:antimetal_slab" + } +} \ 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 new file mode 100644 index 00000000..48fe4a0f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_slab_from_antimetal_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:antimetal" + }, + "result": { + "item": "antarchy:antimetal_slab" + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..94fe641f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:antimetal" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:antimetal_stairs" + } +} \ 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 new file mode 100644 index 00000000..f76beac4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antimetal_stairs_from_antimetal_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:antimetal" + }, + "result": { + "item": "antarchy:antimetal_stairs" + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..aa330c9b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/antiwater_bucket.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { "item": "minecraft:water_bucket" }, + { "item": "antarchy:lucid_eye" } + ], + "result": { + "item": "antarchy:antiwater_bucket", + "count": 1 + } +} 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 new file mode 100644 index 00000000..f190fe88 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/attitude_adjuster.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:attitude_adjuster", + "count": 1 + } +} 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 new file mode 100644 index 00000000..a9132600 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/basilisk_dagger.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "F": { + "item": "antarchy:basilisk_fang" + }, + "S": { + "item": "minecraft:stick" + } + }, + "pattern": [ + "F", + "S" + ], + "result": { + "item": "antarchy:basilisk_dagger", + "count": 1 + } +} 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 new file mode 100644 index 00000000..d5fe2981 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/battle_axe.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:battle_axe", + "count": 1 + } +} 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 new file mode 100644 index 00000000..81df4be1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:big_bertha", + "count": 1 + } +} 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 new file mode 100644 index 00000000..ff542ccc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_blade.json @@ -0,0 +1,36 @@ +{ + "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:cloud_shark_fin" + }, + "F": { + "item": "antarchy:kraken_tentacle" + }, + "G": { + "item": "antarchy:kraken_tooth" + } + }, + "result": { + "item": "antarchy:big_bertha_blade", + "count": 1 + } +} 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 new file mode 100644 index 00000000..f273dbb4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_handle.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + " G", + "CD ", + "AB " + ], + "key": { + "A": { + "item": "antarchy:mantis_claw" + }, + "B": { + "item": "antarchy:brutalfly_wing" + }, + "C": { + "item": "antarchy:triffid_goo" + }, + "D": { + "item": "antarchy:cooked_corndog" + }, + "G": { + "item": "antarchy:gravity_gun" + } + }, + "result": { + "item": "antarchy:big_bertha_handle", + "count": 1 + } +} 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 new file mode 100644 index 00000000..007a3258 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/big_bertha_hilt.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "AC ", + "DBG", + " EF" + ], + "key": { + "A": { + "item": "antarchy:nightmare_scale" + }, + "B": { + "item": "antarchy:molevore_nose" + }, + "C": { + "item": "antarchy:jumpy_bug_leg" + }, + "D": { + "item": "antarchy:jerry_nucleus" + }, + "E": { + "item": "antarchy:rainbow_sugar" + }, + "F": { + "item": "antarchy:primordial_scute" + }, + "G": { + "item": "antarchy:hercules_horn" + } + }, + "result": { + "item": "antarchy:big_bertha_hilt", + "count": 1 + } +} 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 new file mode 100644 index 00000000..3fd92a08 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_apple.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "###", + "#A#", + "###" + ], + "key": { + "#": { + "item": "antarchy:blood_crystal_shard" + }, + "A": { + "item": "minecraft:apple" + } + }, + "result": { + "item": "antarchy:blood_crystal_apple", + "count": 1 + } +} 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 new file mode 100644 index 00000000..b4ed4c54 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_block.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:blood_crystal_shard" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "item": "antarchy:blood_crystal_block", + "count": 1 + } +} 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 new file mode 100644 index 00000000..7adb3dc7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_boots.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:blood_crystal_shard" + } + }, + "result": { + "item": "antarchy:blood_crystal_boots", + "count": 1 + } +} 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 new file mode 100644 index 00000000..3ab13d5f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_chestplate.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "SSS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:blood_crystal_shard" + } + }, + "result": { + "item": "antarchy:blood_crystal_chestplate", + "count": 1 + } +} 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 new file mode 100644 index 00000000..54678e7f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S" + ], + "key": { + "S": { + "item": "antarchy:blood_crystal_shard" + } + }, + "result": { + "item": "antarchy:blood_crystal_helmet", + "count": 1 + } +} 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 new file mode 100644 index 00000000..3b5b2c04 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_katana.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + " B", + " B ", + "N " + ], + "key": { + "N": { + "item": "minecraft:netherite_ingot" + }, + "B": { + "item": "antarchy:blood_crystal_shard" + } + }, + "result": { + "item": "antarchy:blood_crystal_katana", + "count": 1 + } +} 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 new file mode 100644 index 00000000..3ea519aa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blood_crystal_leggings.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:blood_crystal_shard" + } + }, + "result": { + "item": "antarchy:blood_crystal_leggings", + "count": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_block.json new file mode 100644 index 00000000..a3a58c85 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_block.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "antarchy:bluestone" + } + }, + "pattern": [ + "###", + "###", + "###" + ], + "result": { + "item": "antarchy:bluestone_block" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_comparator.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_comparator.json new file mode 100644 index 00000000..4b7638a0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_comparator.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "antarchy:bluestone_torch" + }, + "I": { + "item": "minecraft:stone" + }, + "X": { + "item": "minecraft:quartz" + } + }, + "pattern": [ + " # ", + "#X#", + "III" + ], + "result": { + "item": "antarchy:bluestone_comparator" + } +} 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 new file mode 100644 index 00000000..fcef1930 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_from_blasting_bluestone_ore.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:blasting", + "category": "blocks", + "experience": 0.7, + "group": "bluestone", + "ingredient": { + "item": "antarchy:bluestone_ore" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..e9af71c3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_from_smelting_bluestone_ore.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "blocks", + "experience": 0.7, + "group": "bluestone", + "ingredient": { + "item": "antarchy:bluestone_ore" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..71e56188 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_lamp.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "G": { "item": "minecraft:glowstone" }, + "R": { "item": "antarchy:bluestone" } + }, + "pattern": [ + " R ", + "RGR", + " R " + ], + "result": { + "item": "antarchy:bluestone_lamp", + "count": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_repeater.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_repeater.json new file mode 100644 index 00000000..06195059 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_repeater.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "antarchy:bluestone_torch" + }, + "I": { + "item": "minecraft:stone" + }, + "X": { + "item": "antarchy:bluestone" + } + }, + "pattern": [ + "#X#", + "III" + ], + "result": { + "item": "antarchy:bluestone_repeater" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_torch.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_torch.json new file mode 100644 index 00000000..d25615a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bluestone_torch.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "minecraft:stick" + }, + "X": { + "item": "antarchy:bluestone" + } + }, + "pattern": [ + "X", + "#" + ], + "result": { + "item": "antarchy:bluestone_torch" + } +} 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 new file mode 100644 index 00000000..2cfbe304 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/blush_moss_carpet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:blush_moss_block" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "count": 3, + "item": "antarchy:blush_moss_carpet" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/bone_meal_from_chitin.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/bone_meal_from_chitin.json new file mode 100644 index 00000000..1b4a8ab5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/bone_meal_from_chitin.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:chitin" + } + ], + "result": { + "item": "minecraft:bone_meal", + "count": 3 + } +} 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 new file mode 100644 index 00000000..e431c40b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:broodstone_bricks" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:broodstone_brick_slab" + } +} 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 new file mode 100644 index 00000000..1199f40a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_slab_from_broodstone_bricks_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:broodstone_bricks" + }, + "result": { + "count": 2, + "item": "antarchy:broodstone_brick_slab" + } +} 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 new file mode 100644 index 00000000..625ef3e2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:broodstone_bricks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:broodstone_brick_stairs" + } +} 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 new file mode 100644 index 00000000..2f782e8b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_stairs_from_broodstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:broodstone_bricks" + }, + "result": { + "item": "antarchy:broodstone_brick_stairs" + } +} 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 new file mode 100644 index 00000000..cf1d844a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:broodstone_bricks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "item": "antarchy:broodstone_brick_wall" + } +} 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 new file mode 100644 index 00000000..ea5ef4a9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_brick_wall_from_broodstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:broodstone_bricks" + }, + "result": { + "item": "antarchy:broodstone_brick_wall" + } +} 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 new file mode 100644 index 00000000..9173fbfa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_bricks.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_broodstone" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 4, + "item": "antarchy:broodstone_bricks" + } +} 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 new file mode 100644 index 00000000..abb32374 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_bricks_from_polished_broodstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_broodstone" + }, + "result": { + "item": "antarchy:broodstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_pillar.json new file mode 100644 index 00000000..6a340bab --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_pillar.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_broodstone" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "item": "antarchy:broodstone_pillar", + "count": 2 + } +} 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 new file mode 100644 index 00000000..90d928d8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_pillar_from_broodstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:broodstone" + }, + "result": { + "item": "antarchy:broodstone_pillar" + } +} 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 new file mode 100644 index 00000000..1f344504 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:broodstone" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:broodstone_slab" + } +} 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 new file mode 100644 index 00000000..f552a508 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_slab_from_broodstone_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:broodstone" + }, + "result": { + "count": 2, + "item": "antarchy:broodstone_slab" + } +} 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 new file mode 100644 index 00000000..14103f3e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:broodstone" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:broodstone_stairs" + } +} 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 new file mode 100644 index 00000000..150e6ba5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_stairs_from_broodstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:broodstone" + }, + "result": { + "item": "antarchy:broodstone_stairs" + } +} 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 new file mode 100644 index 00000000..04017b12 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:broodstone" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "item": "antarchy:broodstone_wall" + } +} 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 new file mode 100644 index 00000000..8b8ee785 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/broodstone_wall_from_broodstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:broodstone" + }, + "result": { + "item": "antarchy:broodstone_wall" + } +} 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 new file mode 100644 index 00000000..299249f8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/brutalfly_elytra.json @@ -0,0 +1,23 @@ +{ + "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": { + "item": "antarchy:brutalfly_elytra", + "count": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_broodstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_broodstone.json new file mode 100644 index 00000000..5c24d343 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_broodstone.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_broodstone_slab" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "item": "antarchy:chiseled_broodstone" + } +} 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 new file mode 100644 index 00000000..489e3222 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_broodstone_from_polished_broodstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_broodstone" + }, + "result": { + "item": "antarchy:chiseled_broodstone" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_dream_sandstone.json new file mode 100644 index 00000000..0f47f3f1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_dream_sandstone.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:dream_sandstone_slab" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "item": "antarchy:chiseled_dream_sandstone" + } +} 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 new file mode 100644 index 00000000..b5f29aa2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_dream_sandstone_from_dream_sandstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:dream_sandstone" + }, + "result": { + "item": "antarchy:chiseled_dream_sandstone" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_nyxite.json new file mode 100644 index 00000000..5b4c9097 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_nyxite.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_nyxite_slab" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "item": "antarchy:chiseled_nyxite" + } +} 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 new file mode 100644 index 00000000..8eaf51ce --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_nyxite_from_polished_nyxite_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_nyxite" + }, + "result": { + "item": "antarchy:chiseled_nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_shellstone.json new file mode 100644 index 00000000..11b088f3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_shellstone.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_shellstone_slab" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "item": "antarchy:chiseled_shellstone" + } +} 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 new file mode 100644 index 00000000..c14e632d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chiseled_shellstone_from_polished_shellstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_shellstone" + }, + "result": { + "item": "antarchy:chiseled_shellstone" + } +} 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 new file mode 100644 index 00000000..6292aaf0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chitin_block.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:chitin" + } + }, + "pattern": [ + "###", + "###", + "###" + ], + "result": { + "item": "antarchy:chitin_block", + "count": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/chitin_from_chitin_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/chitin_from_chitin_block.json new file mode 100644 index 00000000..84aabe7f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/chitin_from_chitin_block.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:chitin_block" + } + ], + "result": { + "item": "antarchy:chitin", + "count": 9 + } +} 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 new file mode 100644 index 00000000..bb342c74 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cloud_shark_fin_soup.json @@ -0,0 +1,16 @@ +{ + "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/cooked_bug_meat_from_smelting.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_bug_meat_from_smelting.json new file mode 100644 index 00000000..e748572b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_bug_meat_from_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "food", + "cookingtime": 200, + "experience": 0.35, + "ingredient": { + "item": "antarchy:raw_bug_meat" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..087f4ddb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_bug_meat_from_smoking.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smoking", + "category": "food", + "cookingtime": 100, + "experience": 0.35, + "ingredient": { + "item": "antarchy:raw_bug_meat" + }, + "result": { + "item": "antarchy:cooked_bug_meat" + } +} 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 new file mode 100644 index 00000000..f026b388 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_corndog_from_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "food", + "cookingtime": 200, + "experience": 0.35, + "ingredient": { + "item": "antarchy:raw_corndog" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..aef145f1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_corndog_from_smoking.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smoking", + "category": "food", + "cookingtime": 100, + "experience": 0.35, + "ingredient": { + "item": "antarchy:raw_corndog" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..e27a0125 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_venison_from_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "food", + "cookingtime": 200, + "experience": 0.35, + "ingredient": { + "item": "antarchy:raw_venison" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..dcfb4e53 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cooked_venison_from_smoking.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smoking", + "category": "food", + "cookingtime": 100, + "experience": 0.35, + "ingredient": { + "item": "antarchy:raw_venison" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..8a0a218a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/corn_seeds.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:corn" + } + ], + "result": { + "count": 3, + "item": "antarchy:corn_seeds" + } +} 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 new file mode 100644 index 00000000..10a834e8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cornbread.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "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, + "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 new file mode 100644 index 00000000..5431917c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cracked_shellstone_bricks_from_shellstone_bricks_blasting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:blasting", + "category": "blocks", + "experience": 0.1, + "ingredient": { + "item": "antarchy:shellstone_bricks" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..1273a486 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cracked_shellstone_bricks_from_shellstone_bricks_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "blocks", + "experience": 0.1, + "ingredient": { + "item": "antarchy:shellstone_bricks" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..28276706 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/crafter_from_bluestone.json @@ -0,0 +1,27 @@ +{ + "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 new file mode 100644 index 00000000..f034ac39 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/critter_cage.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:critter_cage", + "count": 1 + } +} 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 new file mode 100644 index 00000000..0c8b50aa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:dream_sandstone" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 4, + "item": "antarchy:cut_dream_sandstone" + } +} 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 new file mode 100644 index 00000000..f01e5182 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_from_dream_sandstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:dream_sandstone" + }, + "result": { + "item": "antarchy:cut_dream_sandstone" + } +} 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 new file mode 100644 index 00000000..8d32fd31 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:cut_dream_sandstone" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:cut_dream_sandstone_slab" + } +} 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 new file mode 100644 index 00000000..22a28424 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab_from_cut_dream_sandstone_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:cut_dream_sandstone" + }, + "result": { + "count": 2, + "item": "antarchy:cut_dream_sandstone_slab" + } +} 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 new file mode 100644 index 00000000..14790e40 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/cut_dream_sandstone_slab_from_dream_sandstone_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:dream_sandstone" + }, + "result": { + "count": 2, + "item": "antarchy:cut_dream_sandstone_slab" + } +} 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 new file mode 100644 index 00000000..ffeba87f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dispenser_from_bluestone.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "minecraft:cobblestone" + }, + "R": { + "item": "antarchy:bluestone" + }, + "X": { + "item": "minecraft:bow" + } + }, + "pattern": [ + "###", + "#X#", + "#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 new file mode 100644 index 00000000..0b32f3a1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_campfire.json @@ -0,0 +1,24 @@ +{ + "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, + "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 new file mode 100644 index 00000000..ac673932 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_lantern.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "item": "antarchy:dream_torch" + }, + "X": { + "tag": "c:nuggets/iron" + } + }, + "pattern": [ + "XXX", + "X#X", + "XXX" + ], + "result": { + "count": 1, + "item": "antarchy:dream_lantern" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone.json new file mode 100644 index 00000000..a920fabf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:dream_sand" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "item": "antarchy:dream_sandstone" + } +} 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 new file mode 100644 index 00000000..c9390c2e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_slab.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": [ + { + "item": "antarchy:dream_sandstone" + }, + { + "item": "antarchy:chiseled_dream_sandstone" + } + ] + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:dream_sandstone_slab" + } +} 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 new file mode 100644 index 00000000..bc226150 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_slab_from_dream_sandstone_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:dream_sandstone" + }, + "result": { + "count": 2, + "item": "antarchy:dream_sandstone_slab" + } +} 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 new file mode 100644 index 00000000..fb28c66d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_stairs.json @@ -0,0 +1,26 @@ +{ + "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, + "item": "antarchy:dream_sandstone_stairs" + } +} 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 new file mode 100644 index 00000000..cdb4d94a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_stairs_from_dream_sandstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:dream_sandstone" + }, + "result": { + "item": "antarchy:dream_sandstone_stairs" + } +} 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 new file mode 100644 index 00000000..582005cb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:dream_sandstone" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "item": "antarchy:dream_sandstone_wall" + } +} 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 new file mode 100644 index 00000000..9e160019 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_sandstone_wall_from_dream_sandstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:dream_sandstone" + }, + "result": { + "item": "antarchy:dream_sandstone_wall" + } +} 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 new file mode 100644 index 00000000..e9d8c1b2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dream_torch.json @@ -0,0 +1,28 @@ +{ + "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, + "item": "antarchy:dream_torch" + } +} 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 new file mode 100644 index 00000000..0c2558fe --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/dropper_from_bluestone.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "minecraft:cobblestone" + }, + "R": { + "item": "antarchy:bluestone" + } + }, + "pattern": [ + "###", + "# #", + "#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 new file mode 100644 index 00000000..ff194a05 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/duct_tape.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "SSS", + "PPP" + ], + "key": { + "S": { + "tag": "c:slime_balls" + }, + "P": { + "item": "minecraft:paper" + } + }, + "result": { + "item": "antarchy:duct_tape", + "count": 1 + } +} 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 new file mode 100644 index 00000000..9860e1ef --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/gravity_gun.json @@ -0,0 +1,33 @@ +{ + "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": { + "item": "antarchy:gravity_gun", + "count": 1 + } +} 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 new file mode 100644 index 00000000..78e96303 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/growth_ray.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:growth_ray", + "count": 1 + } +} 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 new file mode 100644 index 00000000..249410c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/infested_coarse_dirt.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "ingredients": [ + { + "item": "minecraft:coarse_dirt" + }, + { + "item": "antarchy:moleworm" + } + ], + "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 new file mode 100644 index 00000000..2c46722e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/infested_rooted_dirt.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "ingredients": [ + { + "item": "minecraft:rooted_dirt" + }, + { + "item": "antarchy:moleworm" + } + ], + "result": { + "count": 1, + "item": "antarchy:infested_rooted_dirt" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/jumpy_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/jumpy_boots.json new file mode 100644 index 00000000..fb28dc20 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/jumpy_boots.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "JBJ", + "J J" + ], + "key": { + "J": { + "item": "antarchy:jumpy_bug_leg" + }, + "B": { + "item": "minecraft:netherite_boots" + } + }, + "result": { + "item": "antarchy:jumpy_boots", + "count": 1 + } +} 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 new file mode 100644 index 00000000..8394d128 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/kraken_kalamari_from_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "food", + "cookingtime": 200, + "experience": 0.5, + "ingredient": { + "item": "antarchy:kraken_tentacle" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..bfad9981 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/kraken_kalamari_from_smoking.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smoking", + "category": "food", + "cookingtime": 100, + "experience": 0.5, + "ingredient": { + "item": "antarchy:kraken_tentacle" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..7caf3e7d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/krakens_grasp.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "EEE", + " T ", + " T " + ], + "key": { + "E": { + "item": "antarchy:kraken_tooth" + }, + "T": { + "item": "antarchy:kraken_tentacle" + } + }, + "result": { + "item": "antarchy:krakens_grasp", + "count": 1 + } +} 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 new file mode 100644 index 00000000..18f839e7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/loam.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "pattern": [ + "MD", + "DM" + ], + "key": { + "M": { + "item": "minecraft:mud" + }, + "D": { + "item": "antarchy:myrmite" + } + }, + "result": { + "count": 1, + "item": "antarchy:loam" + } +} 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 new file mode 100644 index 00000000..e9e1b53b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/lucid_anchor.json @@ -0,0 +1,27 @@ +{ + "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": { + "item": "antarchy:lucid_anchor", + "count": 1 + } +} 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 new file mode 100644 index 00000000..1142fd9f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/lucid_pearl.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "antarchy:lucid_eye" + }, + { + "item": "minecraft:ender_pearl" + } + ], + "result": { + "item": "antarchy:lucid_pearl", + "count": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/miners_dream.json.disabled b/common-1.20.1/src/main/resources/data/antarchy/recipes/miners_dream.json.disabled new file mode 100644 index 00000000..0fba3562 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/miners_dream.json.disabled @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "GGG", + "RDR", + "TTT" + ], + "key": { + "G": { "item": "antarchy:triffid_goo" }, + "R": { "item": "minecraft:redstone_block" }, + "D": { "item": "minecraft:diamond_pickaxe" }, + "T": { "item": "minecraft:tnt" } + }, + "result": { + "item": "antarchy:miners_dream", + "count": 1 + } +} 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 new file mode 100644 index 00000000..3b265b0d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/moggles.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "BMB" + ], + "key": { + "B": { + "item": "antarchy:titanium_nugget" + }, + "M": { + "item": "antarchy:molevore_nose" + } + }, + "result": { + "item": "antarchy:moggles", + "count": 1 + } +} 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 new file mode 100644 index 00000000..87f5a73c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_shellstone_bricks" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:mossy_shellstone_brick_slab" + } +} 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 new file mode 100644 index 00000000..1c08d461 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_shellstone_bricks" + }, + "result": { + "item": "antarchy:mossy_shellstone_brick_slab" + } +} 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 new file mode 100644 index 00000000..46df8a66 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_shellstone_bricks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:mossy_shellstone_brick_stairs" + } +} 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 new file mode 100644 index 00000000..fd8033df --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_shellstone_bricks" + }, + "result": { + "item": "antarchy:mossy_shellstone_brick_stairs" + } +} 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 new file mode 100644 index 00000000..e3a9c574 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_shellstone_bricks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "item": "antarchy:mossy_shellstone_brick_wall" + } +} 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 new file mode 100644 index 00000000..35fe20b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_shellstone_bricks" + }, + "result": { + "item": "antarchy:mossy_shellstone_brick_wall" + } +} 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 new file mode 100644 index 00000000..ab62fe4c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mossy_shellstone_bricks.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "ingredients": [ + { + "item": "antarchy:shellstone_bricks" + }, + { + "item": "minecraft:moss_block" + } + ], + "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 new file mode 100644 index 00000000..a8514a84 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/mud_pie.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "minecraft:mud" + }, + { + "item": "antarchy:moleworm" + } + ], + "result": { + "count": 1, + "item": "antarchy:mud_pie" + } +} 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 new file mode 100644 index 00000000..c18b5ebd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_boat.json @@ -0,0 +1,18 @@ +{ + "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/recipes/nadir/nadir_button.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_button.json new file mode 100644 index 00000000..7a67d94c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_button.json @@ -0,0 +1,14 @@ +{ + "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/recipes/nadir/nadir_chest_boat.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_chest_boat.json new file mode 100644 index 00000000..e86215d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_chest_boat.json @@ -0,0 +1,17 @@ +{ + "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/recipes/nadir/nadir_door.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_door.json new file mode 100644 index 00000000..332d6cad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_door.json @@ -0,0 +1,19 @@ +{ + "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/recipes/nadir/nadir_fence.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence.json new file mode 100644 index 00000000..3ef5d1d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence.json @@ -0,0 +1,21 @@ +{ + "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/recipes/nadir/nadir_fence_gate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence_gate.json new file mode 100644 index 00000000..22069690 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_fence_gate.json @@ -0,0 +1,21 @@ +{ + "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/recipes/nadir/nadir_hanging_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_hanging_sign.json new file mode 100644 index 00000000..b057918e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_hanging_sign.json @@ -0,0 +1,22 @@ +{ + "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/recipes/nadir/nadir_planks.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_planks.json new file mode 100644 index 00000000..1fd4195f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_planks.json @@ -0,0 +1,14 @@ +{ + "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/recipes/nadir/nadir_pressure_plate.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_pressure_plate.json new file mode 100644 index 00000000..5286fecd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_pressure_plate.json @@ -0,0 +1,17 @@ +{ + "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/recipes/nadir/nadir_sign.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_sign.json new file mode 100644 index 00000000..6bd91309 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_sign.json @@ -0,0 +1,22 @@ +{ + "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/recipes/nadir/nadir_slab.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_slab.json new file mode 100644 index 00000000..bdb63f65 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_slab.json @@ -0,0 +1,17 @@ +{ + "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/recipes/nadir/nadir_stairs.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_stairs.json new file mode 100644 index 00000000..fbcda572 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_stairs.json @@ -0,0 +1,19 @@ +{ + "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/recipes/nadir/nadir_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_trapdoor.json new file mode 100644 index 00000000..920c954d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_trapdoor.json @@ -0,0 +1,18 @@ +{ + "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/recipes/nadir/nadir_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_wood.json new file mode 100644 index 00000000..ba48c303 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/nadir_wood.json @@ -0,0 +1,18 @@ +{ + "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/recipes/nadir/stripped_nadir_wood.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/stripped_nadir_wood.json new file mode 100644 index 00000000..b9b3c293 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nadir/stripped_nadir_wood.json @@ -0,0 +1,18 @@ +{ + "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/recipes/nightmare/nightmare_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_boots.json new file mode 100644 index 00000000..e2accc79 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_boots.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:nightmare_scale" + } + }, + "result": { + "item": "antarchy:nightmare_boots", + "count": 1 + } +} 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 new file mode 100644 index 00000000..5fe40cbe --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_chestplate.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "SSS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:nightmare_scale" + } + }, + "result": { + "item": "antarchy:nightmare_chestplate", + "count": 1 + } +} 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 new file mode 100644 index 00000000..5f9209ad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S" + ], + "key": { + "S": { + "item": "antarchy:nightmare_scale" + } + }, + "result": { + "item": "antarchy:nightmare_helmet", + "count": 1 + } +} 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 new file mode 100644 index 00000000..b1a58551 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_leggings.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:nightmare_scale" + } + }, + "result": { + "item": "antarchy:nightmare_leggings", + "count": 1 + } +} 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 new file mode 100644 index 00000000..2d505e76 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nightmare/nightmare_sword.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + " S ", + " S ", + " N " + ], + "key": { + "N": { + "item": "minecraft:netherite_ingot" + }, + "S": { + "item": "antarchy:nightmare_scale" + } + }, + "result": { + "item": "antarchy:nightmare_sword", + "count": 1 + } +} 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 new file mode 100644 index 00000000..84791962 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SS", + "SS" + ], + "key": { + "S": { + "item": "antarchy:nyxite_spike" + } + }, + "result": { + "item": "antarchy:nyxite", + "count": 1 + } +} 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 new file mode 100644 index 00000000..301b8120 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:nyxite_bricks" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:nyxite_brick_slab" + } +} 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 new file mode 100644 index 00000000..efa4ee34 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_slab_from_nyxite_bricks_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:nyxite_bricks" + }, + "result": { + "count": 2, + "item": "antarchy:nyxite_brick_slab" + } +} 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 new file mode 100644 index 00000000..9de26593 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:nyxite_bricks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:nyxite_brick_stairs" + } +} 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 new file mode 100644 index 00000000..2aac895f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_stairs_from_nyxite_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:nyxite_bricks" + }, + "result": { + "item": "antarchy:nyxite_brick_stairs" + } +} 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 new file mode 100644 index 00000000..6472634d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:nyxite_bricks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "item": "antarchy:nyxite_brick_wall" + } +} 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 new file mode 100644 index 00000000..cf9b83c4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_brick_wall_from_nyxite_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:nyxite_bricks" + }, + "result": { + "item": "antarchy:nyxite_brick_wall" + } +} 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 new file mode 100644 index 00000000..316f2240 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_bricks.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_nyxite" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 4, + "item": "antarchy:nyxite_bricks" + } +} 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 new file mode 100644 index 00000000..9bcd73d6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_bricks_from_polished_nyxite_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_nyxite" + }, + "result": { + "item": "antarchy:nyxite_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_pillar.json new file mode 100644 index 00000000..bcb81c7d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_pillar.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_nyxite" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "item": "antarchy:nyxite_pillar", + "count": 2 + } +} 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 new file mode 100644 index 00000000..69a6e02d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_pillar_from_nyxite_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:nyxite" + }, + "result": { + "item": "antarchy:nyxite_pillar" + } +} 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 new file mode 100644 index 00000000..26f4f0ee --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:nyxite" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:nyxite_slab" + } +} 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 new file mode 100644 index 00000000..d94b7444 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_slab_from_nyxite_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:nyxite" + }, + "result": { + "count": 2, + "item": "antarchy:nyxite_slab" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_spikes.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_spikes.json new file mode 100644 index 00000000..34d66f97 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_spikes.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "N" + ], + "key": { + "N": { + "item": "antarchy:nyxite" + } + }, + "result": { + "item": "antarchy:nyxite_spike", + "count": 4 + } +} 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 new file mode 100644 index 00000000..cd7505b3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:nyxite" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:nyxite_stairs" + } +} 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 new file mode 100644 index 00000000..8f60a969 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_stairs_from_nyxite_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:nyxite" + }, + "result": { + "item": "antarchy:nyxite_stairs" + } +} 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 new file mode 100644 index 00000000..185671ad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:nyxite" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "item": "antarchy:nyxite_wall" + } +} 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 new file mode 100644 index 00000000..38f7da3a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/nyxite_wall_from_nyxite_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:nyxite" + }, + "result": { + "item": "antarchy:nyxite_wall" + } +} 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 new file mode 100644 index 00000000..4220684e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/observer_from_bluestone.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "minecraft:cobblestone" + }, + "Q": { + "item": "minecraft:quartz" + }, + "R": { + "item": "antarchy:bluestone" + } + }, + "pattern": [ + "###", + "RRQ", + "###" + ], + "result": { + "count": 1, + "item": "minecraft:observer" + } +} 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 new file mode 100644 index 00000000..d28a43a1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/orange_dye_from_orange_milkweed.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:orange_milkweed" + } + ], + "result": { + "count": 2, + "item": "minecraft:orange_dye" + } +} 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 new file mode 100644 index 00000000..ed82210c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_log.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "ingredients": [ + { + "item": "antarchy:ouranwood_log" + }, + { + "item": "minecraft:moss_block" + } + ], + "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 new file mode 100644 index 00000000..40b8e9db --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_wood.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "ingredients": [ + { + "item": "antarchy:ouranwood_wood" + }, + { + "item": "minecraft:moss_block" + } + ], + "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 new file mode 100644 index 00000000..55d7d017 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/mossy_ouranwood_wood_from_mossy_ouranwood_log.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "bark", + "key": { + "#": { + "item": "antarchy:mossy_ouranwood_log" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 3, + "item": "antarchy:mossy_ouranwood_wood" + } +} 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 new file mode 100644 index 00000000..cf5d728e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_boat.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "#": { + "item": "antarchy:ouranwood_planks" + } + }, + "pattern": [ + "# #", + "###" + ], + "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 new file mode 100644 index 00000000..546495cf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_button.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "redstone", + "group": "wooden_button", + "ingredients": [ + { + "item": "antarchy:ouranwood_planks" + } + ], + "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 new file mode 100644 index 00000000..5bdac689 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_chest_boat.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "equipment", + "ingredients": [ + { + "item": "antarchy:ouranwood_boat" + }, + { + "item": "minecraft:chest" + } + ], + "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 new file mode 100644 index 00000000..21cc0041 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_door.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "wooden_door", + "key": { + "#": { + "item": "antarchy:ouranwood_planks" + } + }, + "pattern": [ + "##", + "##", + "##" + ], + "result": { + "count": 3, + "item": "antarchy:ouranwood_door" + } +} 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 new file mode 100644 index 00000000..ed56b3a9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_fence.json @@ -0,0 +1,21 @@ +{ + "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, + "item": "antarchy:ouranwood_fence" + } +} 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 new file mode 100644 index 00000000..e1919516 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_fence_gate.json @@ -0,0 +1,21 @@ +{ + "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, + "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 new file mode 100644 index 00000000..fbb0e9d0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_hanging_sign.json @@ -0,0 +1,22 @@ +{ + "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, + "item": "antarchy:ouranwood_hanging_sign" + } +} 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 new file mode 100644 index 00000000..f7346dc2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_planks.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "group": "planks", + "ingredients": [ + { + "tag": "antarchy:ouranwood_logs" + } + ], + "result": { + "count": 4, + "item": "antarchy:ouranwood_planks" + } +} 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 new file mode 100644 index 00000000..e06cada6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_pressure_plate.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "wooden_pressure_plate", + "key": { + "#": { + "item": "antarchy:ouranwood_planks" + } + }, + "pattern": [ + "##" + ], + "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 new file mode 100644 index 00000000..f4ee1361 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_sign.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "wooden_sign", + "key": { + "#": { + "item": "antarchy:ouranwood_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "pattern": [ + "###", + "###", + " X " + ], + "result": { + "count": 3, + "item": "antarchy:ouranwood_sign" + } +} 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 new file mode 100644 index 00000000..29ba8b65 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_slab.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "wooden_slab", + "key": { + "#": { + "item": "antarchy:ouranwood_planks" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:ouranwood_slab" + } +} 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 new file mode 100644 index 00000000..ead992f6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "wooden_stairs", + "key": { + "#": { + "item": "antarchy:ouranwood_planks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:ouranwood_stairs" + } +} 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 new file mode 100644 index 00000000..c27eb9e2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_trapdoor.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "wooden_trapdoor", + "key": { + "#": { + "item": "antarchy:ouranwood_planks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 2, + "item": "antarchy:ouranwood_trapdoor" + } +} 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 new file mode 100644 index 00000000..2c5694bf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/ouranwood_wood.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "bark", + "key": { + "#": { + "item": "antarchy:ouranwood_log" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 3, + "item": "antarchy:ouranwood_wood" + } +} 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 new file mode 100644 index 00000000..3057eae7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ouranwood/stripped_ouranwood_wood.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "bark", + "key": { + "#": { + "item": "antarchy:stripped_ouranwood_log" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 3, + "item": "antarchy:stripped_ouranwood_wood" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/pale_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/pale_nyxite.json new file mode 100644 index 00000000..d36f59ac --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/pale_nyxite.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "pattern": [ + "NQ", + "QN" + ], + "key": { + "N": { + "item": "antarchy:nyxite" + }, + "Q": { + "item": "minecraft:quartz" + } + }, + "result": { + "item": "antarchy:pale_nyxite", + "count": 2 + } +} 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 new file mode 100644 index 00000000..4f2b9635 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_boat.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "# #", + "###" + ], + "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 new file mode 100644 index 00000000..1e3ee233 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_button.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "redstone", + "group": "wooden_button", + "ingredients": [ + { + "item": "antarchy:peach_planks" + } + ], + "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 new file mode 100644 index 00000000..44109cb6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_chest_boat.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "equipment", + "ingredients": [ + { + "item": "antarchy:peach_boat" + }, + { + "item": "minecraft:chest" + } + ], + "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 new file mode 100644 index 00000000..4150d10b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_door.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "wooden_door", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "##", + "##", + "##" + ], + "result": { + "count": 3, + "item": "antarchy:peach_door" + } +} 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 new file mode 100644 index 00000000..e0d6dc28 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_fence.json @@ -0,0 +1,21 @@ +{ + "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, + "item": "antarchy:peach_fence" + } +} 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 new file mode 100644 index 00000000..81988d0a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_fence_gate.json @@ -0,0 +1,21 @@ +{ + "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, + "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 new file mode 100644 index 00000000..44604b9e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_hanging_sign.json @@ -0,0 +1,22 @@ +{ + "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, + "item": "antarchy:peach_hanging_sign" + } +} 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 new file mode 100644 index 00000000..b95f9c00 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_planks.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "group": "planks", + "ingredients": [ + { + "tag": "antarchy:peach_logs" + } + ], + "result": { + "count": 4, + "item": "antarchy:peach_planks" + } +} 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 new file mode 100644 index 00000000..975fba8f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_pressure_plate.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "wooden_pressure_plate", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "##" + ], + "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 new file mode 100644 index 00000000..f45c9072 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_sign.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "wooden_sign", + "key": { + "#": { + "item": "antarchy:peach_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "pattern": [ + "###", + "###", + " X " + ], + "result": { + "count": 3, + "item": "antarchy:peach_sign" + } +} 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 new file mode 100644 index 00000000..1e1946df --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_slab.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "wooden_slab", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:peach_slab" + } +} 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 new file mode 100644 index 00000000..a3db1e42 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "wooden_stairs", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:peach_stairs" + } +} 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 new file mode 100644 index 00000000..0597f17f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_trapdoor.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "wooden_trapdoor", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 2, + "item": "antarchy:peach_trapdoor" + } +} 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 new file mode 100644 index 00000000..26749b3f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/peach_wood.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "bark", + "key": { + "#": { + "item": "antarchy:peach_log" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 3, + "item": "antarchy:peach_wood" + } +} 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 new file mode 100644 index 00000000..3029b62f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach/stripped_peach_wood.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "bark", + "key": { + "#": { + "item": "antarchy:stripped_peach_log" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 3, + "item": "antarchy:stripped_peach_wood" + } +} 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 new file mode 100644 index 00000000..2ed80fa5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/peach_pie.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:peach" + }, + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:egg" + } + ], + "result": { + "count": 1, + "item": "antarchy:peach_pie" + } +} 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 new file mode 100644 index 00000000..3fdf703a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_camellia.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:camellia" + } + ], + "result": { + "count": 2, + "item": "minecraft:pink_dye" + } +} 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 new file mode 100644 index 00000000..f280fcf9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_lotus.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:lotus" + } + ], + "result": { + "count": 2, + "item": "minecraft:pink_dye" + } +} 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 new file mode 100644 index 00000000..d411a2df --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/pink_dye_from_pink_milkweed.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:pink_milkweed" + } + ], + "result": { + "count": 2, + "item": "minecraft:pink_dye" + } +} 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 new file mode 100644 index 00000000..9397f472 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/piston_from_bluestone.json @@ -0,0 +1,27 @@ +{ + "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, + "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 new file mode 100644 index 00000000..c585b6d8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "antarchy:antimetal" + } + }, + "result": { + "item": "antarchy:polished_antimetal", + "count": 1 + } +} 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 new file mode 100644 index 00000000..5e9ae380 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_antimetal" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:polished_antimetal_slab" + } +} \ 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 new file mode 100644 index 00000000..4f769eaa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_slab_from_polished_antimetal_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_antimetal" + }, + "result": { + "item": "antarchy:polished_antimetal_slab" + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..008f96b1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_antimetal" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:polished_antimetal_stairs" + } +} \ 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 new file mode 100644 index 00000000..70f75d2f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_antimetal_stairs_from_polished_antimetal_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_antimetal" + }, + "result": { + "item": "antarchy:polished_antimetal_stairs" + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..10a98e7f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:broodstone" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 4, + "item": "antarchy:polished_broodstone" + } +} 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 new file mode 100644 index 00000000..6e844c6e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_from_broodstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:broodstone" + }, + "result": { + "item": "antarchy:polished_broodstone" + } +} 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 new file mode 100644 index 00000000..889b189e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_broodstone" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:polished_broodstone_slab" + } +} 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 new file mode 100644 index 00000000..2b0f6710 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_slab_from_polished_broodstone_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_broodstone" + }, + "result": { + "count": 2, + "item": "antarchy:polished_broodstone_slab" + } +} 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 new file mode 100644 index 00000000..301aeea4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_broodstone" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:polished_broodstone_stairs" + } +} 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 new file mode 100644 index 00000000..fa2fa7a4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_stairs_from_polished_broodstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_broodstone" + }, + "result": { + "item": "antarchy:polished_broodstone_stairs" + } +} 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 new file mode 100644 index 00000000..30c797e4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_broodstone" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "item": "antarchy:polished_broodstone_wall" + } +} 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 new file mode 100644 index 00000000..730f2932 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_broodstone_wall_from_polished_broodstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_broodstone" + }, + "result": { + "item": "antarchy:polished_broodstone_wall" + } +} 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 new file mode 100644 index 00000000..e0f385fb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:nyxite" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 4, + "item": "antarchy:polished_nyxite" + } +} 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 new file mode 100644 index 00000000..9a2a7351 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_button.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "redstone", + "group": "stone_button", + "ingredients": [ + { + "item": "antarchy:polished_nyxite" + } + ], + "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 new file mode 100644 index 00000000..4f70eeb8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_from_nyxite_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:nyxite" + }, + "result": { + "item": "antarchy:polished_nyxite" + } +} 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 new file mode 100644 index 00000000..f7d0998e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_pressure_plate.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "stone_pressure_plate", + "key": { + "#": { + "item": "antarchy:polished_nyxite" + } + }, + "pattern": [ + "##" + ], + "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 new file mode 100644 index 00000000..583d3ba3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_nyxite" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:polished_nyxite_slab" + } +} 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 new file mode 100644 index 00000000..cf47942f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_slab_from_polished_nyxite_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_nyxite" + }, + "result": { + "count": 2, + "item": "antarchy:polished_nyxite_slab" + } +} 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 new file mode 100644 index 00000000..b7dfca5c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_nyxite" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:polished_nyxite_stairs" + } +} 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 new file mode 100644 index 00000000..76543140 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_stairs_from_polished_nyxite_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_nyxite" + }, + "result": { + "item": "antarchy:polished_nyxite_stairs" + } +} 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 new file mode 100644 index 00000000..e832bcbf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_nyxite" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "item": "antarchy:polished_nyxite_wall" + } +} 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 new file mode 100644 index 00000000..ffbac4b2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_nyxite_wall_from_polished_nyxite_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_nyxite" + }, + "result": { + "item": "antarchy:polished_nyxite_wall" + } +} 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 new file mode 100644 index 00000000..35952564 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:shellstone" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 4, + "item": "antarchy:polished_shellstone" + } +} 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 new file mode 100644 index 00000000..277918da --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_from_shellstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:shellstone" + }, + "result": { + "item": "antarchy:polished_shellstone" + } +} 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 new file mode 100644 index 00000000..c938a4a9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_shellstone" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:polished_shellstone_slab" + } +} 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 new file mode 100644 index 00000000..f0efa7db --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_slab_from_polished_shellstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_shellstone" + }, + "result": { + "item": "antarchy:polished_shellstone_slab" + } +} 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 new file mode 100644 index 00000000..5357b860 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_shellstone" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:polished_shellstone_stairs" + } +} 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 new file mode 100644 index 00000000..dada5990 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_stairs_from_polished_shellstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_shellstone" + }, + "result": { + "item": "antarchy:polished_shellstone_stairs" + } +} 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 new file mode 100644 index 00000000..f4c2a7ec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_shellstone" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "item": "antarchy:polished_shellstone_wall" + } +} 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 new file mode 100644 index 00000000..b5c5e6ad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/polished_shellstone_wall_from_polished_shellstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_shellstone" + }, + "result": { + "item": "antarchy:polished_shellstone_wall" + } +} 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 new file mode 100644 index 00000000..8e9711ae --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/popcorn_from_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "food", + "cookingtime": 200, + "experience": 0.1, + "ingredient": { + "item": "antarchy:corn_seeds" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..3941edb2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/popcorn_from_smoking.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smoking", + "category": "food", + "cookingtime": 100, + "experience": 0.1, + "ingredient": { + "item": "antarchy:corn_seeds" + }, + "result": { + "item": "antarchy:popcorn" + } +} 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 new file mode 100644 index 00000000..20b945d7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_boots.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:primordial_scute" + } + }, + "result": { + "item": "antarchy:primordial_boots", + "count": 1 + } +} 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 new file mode 100644 index 00000000..700240f6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_chestplate.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "SSS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:primordial_scute" + } + }, + "result": { + "item": "antarchy:primordial_chestplate", + "count": 1 + } +} 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 new file mode 100644 index 00000000..c8b45fbf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S" + ], + "key": { + "S": { + "item": "antarchy:primordial_scute" + } + }, + "result": { + "item": "antarchy:primordial_helmet", + "count": 1 + } +} 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 new file mode 100644 index 00000000..3a713227 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/primordial_leggings.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:primordial_scute" + } + }, + "result": { + "item": "antarchy:primordial_leggings", + "count": 1 + } +} 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 new file mode 100644 index 00000000..82cfb27f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/rainbow_sugar.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:sugar" + }, + { + "item": "antarchy:uranium_nugget" + }, + { + "item": "antarchy:high_fructose_corn_syrup" + } + ], + "result": { + "item": "antarchy:rainbow_sugar", + "count": 1 + } +} 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 new file mode 100644 index 00000000..a629abd4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/raw_corndog.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "tag": "antarchy:corndog_meats" + }, + "C": { + "item": "antarchy:corn" + }, + "S": { + "item": "minecraft:stick" + } + }, + "pattern": [ + " C ", + "C#C", + " S " + ], + "result": { + "count": 1, + "item": "antarchy:raw_corndog" + } +} 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 new file mode 100644 index 00000000..ae718ef0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/red_dye_from_spider_lily.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:spider_lily" + } + ], + "result": { + "count": 1, + "item": "minecraft:red_dye" + } +} 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 new file mode 100644 index 00000000..b59798f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/rpo_launcher.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "TTT", + "III", + "TTT" + ], + "key": { + "T": { + "item": "antarchy:titanium_block" + }, + "I": { + "item": "minecraft:ink_sac" + } + }, + "result": { + "item": "antarchy:rpo_launcher", + "count": 1 + } +} 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 new file mode 100644 index 00000000..6a2f88a1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/scorpion_whip.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " S", + " L ", + "L " + ], + "key": { + "L": { + "item": "minecraft:lead" + }, + "S": { + "item": "antarchy:emperor_scorpion_stinger" + } + }, + "result": { + "item": "antarchy:scorpion_whip", + "count": 1 + } +} 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 new file mode 100644 index 00000000..88a05d7d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "S": { + "item": "minecraft:stone" + }, + "P": { + "item": "antarchy:primordial_scute" + } + }, + "pattern": [ + "SSS", + "SPS", + "SSS" + ], + "result": { + "count": 8, + "item": "antarchy:shellstone" + } +} 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 new file mode 100644 index 00000000..30ce2d58 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:shellstone_bricks" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:shellstone_brick_slab" + } +} 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 new file mode 100644 index 00000000..bc9573c6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_slab_from_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:shellstone_bricks" + }, + "result": { + "item": "antarchy:shellstone_brick_slab" + } +} 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 new file mode 100644 index 00000000..03237c26 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:shellstone_bricks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:shellstone_brick_stairs" + } +} 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 new file mode 100644 index 00000000..3622e268 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_stairs_from_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:shellstone_bricks" + }, + "result": { + "item": "antarchy:shellstone_brick_stairs" + } +} 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 new file mode 100644 index 00000000..903b339c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:shellstone_bricks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "item": "antarchy:shellstone_brick_wall" + } +} 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 new file mode 100644 index 00000000..1db5b571 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_brick_wall_from_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:shellstone_bricks" + }, + "result": { + "item": "antarchy:shellstone_brick_wall" + } +} 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 new file mode 100644 index 00000000..df6e0835 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_bricks.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_shellstone" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 4, + "item": "antarchy:shellstone_bricks" + } +} 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 new file mode 100644 index 00000000..e69e1a8a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_bricks_from_polished_shellstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:polished_shellstone" + }, + "result": { + "item": "antarchy:shellstone_bricks" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_pillar.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_pillar.json new file mode 100644 index 00000000..b2395e57 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_pillar.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_shellstone" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "item": "antarchy:shellstone_pillar", + "count": 2 + } +} 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 new file mode 100644 index 00000000..069e19f7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_pillar_from_shellstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:shellstone" + }, + "result": { + "item": "antarchy:shellstone_pillar" + } +} 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 new file mode 100644 index 00000000..540d578c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:shellstone" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:shellstone_slab" + } +} 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 new file mode 100644 index 00000000..b5e227b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_slab_from_shellstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:shellstone" + }, + "result": { + "item": "antarchy:shellstone_slab" + } +} 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 new file mode 100644 index 00000000..a086b669 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:shellstone" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:shellstone_stairs" + } +} 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 new file mode 100644 index 00000000..42a6f194 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_stairs_from_shellstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:shellstone" + }, + "result": { + "item": "antarchy:shellstone_stairs" + } +} 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 new file mode 100644 index 00000000..b092b015 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:shellstone" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "item": "antarchy:shellstone_wall" + } +} 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 new file mode 100644 index 00000000..25af125f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shellstone_wall_from_shellstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:shellstone" + }, + "result": { + "item": "antarchy:shellstone_wall" + } +} 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 new file mode 100644 index 00000000..1a545ec0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/shrink_ray.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:shrink_ray", + "count": 1 + } +} 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 new file mode 100644 index 00000000..8222c2f1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:smelting", + "category": "blocks", + "experience": 0.1, + "ingredient": { + "item": "antarchy:dream_sandstone" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..3fd14dae --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:smooth_dream_sandstone" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:smooth_dream_sandstone_slab" + } +} 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 new file mode 100644 index 00000000..48810580 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_slab_from_smooth_dream_sandstone_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:smooth_dream_sandstone" + }, + "result": { + "count": 2, + "item": "antarchy:smooth_dream_sandstone_slab" + } +} 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 new file mode 100644 index 00000000..fe3b4dd6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:smooth_dream_sandstone" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:smooth_dream_sandstone_stairs" + } +} 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 new file mode 100644 index 00000000..8ad132ea --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/smooth_dream_sandstone_stairs_from_smooth_dream_sandstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:smooth_dream_sandstone" + }, + "result": { + "item": "antarchy:smooth_dream_sandstone_stairs" + } +} 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 new file mode 100644 index 00000000..fb2195bd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/squidzooka.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "TTT", + "III", + "TTT" + ], + "key": { + "T": { + "item": "antarchy:titanium_ingot" + }, + "I": { + "item": "minecraft:ink_sac" + } + }, + "result": { + "item": "antarchy:squidzooka", + "count": 1 + } +} 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 new file mode 100644 index 00000000..766ee9bd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/target_from_bluestone.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "H": { + "item": "minecraft:hay_block" + }, + "R": { + "item": "antarchy:bluestone" + } + }, + "pattern": [ + " R ", + "RHR", + " R " + ], + "result": { + "count": 1, + "item": "minecraft:target" + } +} 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 new file mode 100644 index 00000000..9128a13b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_boots.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "item": "antarchy:tigers_eye_boots", + "count": 1 + } +} 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 new file mode 100644 index 00000000..2ed91702 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_chestplate.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "SSS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "item": "antarchy:tigers_eye_chestplate", + "count": 1 + } +} 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 new file mode 100644 index 00000000..edc7f516 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "item": "antarchy:tigers_eye_helmet", + "count": 1 + } +} 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 new file mode 100644 index 00000000..3f1fa6b1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/tigers_eye_leggings.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "item": "antarchy:tigers_eye_leggings", + "count": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium.json new file mode 100644 index 00000000..e73b2f0e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:cut_titanium_slab" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "item": "antarchy:chiseled_titanium" + } +} 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 new file mode 100644 index 00000000..60c119bb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium_from_cut_titanium_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:cut_titanium" + }, + "result": { + "item": "antarchy:chiseled_titanium" + } +} 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 new file mode 100644 index 00000000..8e88da17 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/chiseled_titanium_from_titanium_block_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:titanium_block" + }, + "result": { + "count": 4, + "item": "antarchy:chiseled_titanium" + } +} 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 new file mode 100644 index 00000000..dec5c06f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:titanium_block" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 4, + "item": "antarchy:cut_titanium" + } +} 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 new file mode 100644 index 00000000..0877b716 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_from_titanium_block_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:titanium_block" + }, + "result": { + "count": 4, + "item": "antarchy:cut_titanium" + } +} 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 new file mode 100644 index 00000000..b793ec1d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:cut_titanium" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:cut_titanium_slab" + } +} 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 new file mode 100644 index 00000000..5b93f3e2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab_from_cut_titanium_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:cut_titanium" + }, + "result": { + "count": 2, + "item": "antarchy:cut_titanium_slab" + } +} 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 new file mode 100644 index 00000000..d42bfc35 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_slab_from_titanium_block_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:titanium_block" + }, + "result": { + "count": 8, + "item": "antarchy:cut_titanium_slab" + } +} 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 new file mode 100644 index 00000000..f8fcc089 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:cut_titanium" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:cut_titanium_stairs" + } +} 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 new file mode 100644 index 00000000..fc530c89 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs_from_cut_titanium_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:cut_titanium" + }, + "result": { + "item": "antarchy:cut_titanium_stairs" + } +} 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 new file mode 100644 index 00000000..cdc5f755 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/cut_titanium_stairs_from_titanium_block_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:titanium_block" + }, + "result": { + "count": 4, + "item": "antarchy:cut_titanium_stairs" + } +} 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 new file mode 100644 index 00000000..88cdda2d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_block.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "pattern": [ + "III", + "III", + "III" + ], + "key": { + "I": { + "item": "antarchy:raw_titanium" + } + }, + "result": { + "item": "antarchy:raw_titanium_block", + "count": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_from_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_from_block.json new file mode 100644 index 00000000..e1040d47 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_from_block.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:raw_titanium_block" + } + ], + "result": { + "item": "antarchy:raw_titanium", + "count": 9 + } +} 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 new file mode 100644 index 00000000..b3a9f6e5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/raw_titanium_from_scrap.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "SSS", + "SSS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:raw_titanium_scrap" + } + }, + "result": { + "item": "antarchy:raw_titanium", + "count": 1 + } +} 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 new file mode 100644 index 00000000..6def8cad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_bars.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "key": { + "#": { + "item": "antarchy:titanium_ingot" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 16, + "item": "antarchy:titanium_bars" + } +} 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 new file mode 100644 index 00000000..2859a08d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_block.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "pattern": [ + "III", + "III", + "III" + ], + "key": { + "I": { + "item": "antarchy:titanium_ingot" + } + }, + "result": { + "item": "antarchy:titanium_block", + "count": 1 + } +} 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 new file mode 100644 index 00000000..5d8cf951 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_bulb.json @@ -0,0 +1,24 @@ +{ + "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, + "item": "antarchy:titanium_bulb" + } +} 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 new file mode 100644 index 00000000..f3eeed50 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "antarchy:titanium_ingot" + } + }, + "pattern": [ + "##", + "##", + "##" + ], + "result": { + "count": 3, + "item": "antarchy:titanium_door" + } +} 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 new file mode 100644 index 00000000..a3e2488c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_nuggets.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "NNN", + "NNN", + "NNN" + ], + "key": { + "N": { + "item": "antarchy:titanium_nugget" + } + }, + "result": { + "item": "antarchy:titanium_ingot", + "count": 1 + } +} 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 new file mode 100644 index 00000000..001627c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_raw_titanium_blasting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "ingredient": { + "item": "antarchy:raw_titanium" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..3fea4099 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingot_from_raw_titanium_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "ingredient": { + "item": "antarchy:raw_titanium" + }, + "result": { + "item": "antarchy:titanium_ingot" + }, + "experience": 2.0, + "cookingtime": 200 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingots_from_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingots_from_block.json new file mode 100644 index 00000000..d60f153d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_ingots_from_block.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:titanium_block" + } + ], + "result": { + "item": "antarchy:titanium_ingot", + "count": 9 + } +} 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 new file mode 100644 index 00000000..3bd72866 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nugget_from_raw_titanium_scrap_blasting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "ingredient": { + "item": "antarchy:raw_titanium_scrap" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..aabaa6ac --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nugget_from_raw_titanium_scrap_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "ingredient": { + "item": "antarchy:raw_titanium_scrap" + }, + "result": { + "item": "antarchy:titanium_nugget" + }, + "experience": 2.0, + "cookingtime": 200 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nuggets_from_ingot.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nuggets_from_ingot.json new file mode 100644 index 00000000..c5b37dd1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_nuggets_from_ingot.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:titanium_ingot" + } + ], + "result": { + "item": "antarchy:titanium_nugget", + "count": 9 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_trapdoor.json new file mode 100644 index 00000000..c41d7d4c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/titanium/titanium_trapdoor.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "antarchy:titanium_ingot" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "item": "antarchy:titanium_trapdoor" + } +} 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 new file mode 100644 index 00000000..41272e15 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/triffid_goo_block.json @@ -0,0 +1,17 @@ +{ + "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/ultimate/ultimate_axe.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_axe.json new file mode 100644 index 00000000..f642b4b3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_axe.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:ultimate_axe", + "count": 1 + } +} 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 new file mode 100644 index 00000000..450c6cac --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_boots.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "U U", + "T T" + ], + "key": { + "U": { + "item": "antarchy:uranium_ingot" + }, + "T": { + "item": "antarchy:titanium_ingot" + } + }, + "result": { + "item": "antarchy:ultimate_boots", + "count": 1 + } +} 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 new file mode 100644 index 00000000..463d2c86 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_bow.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:ultimate_bow", + "count": 1 + } +} 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 new file mode 100644 index 00000000..d530c5ab --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_chestplate.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "U U", + "UTU", + "TTT" + ], + "key": { + "U": { + "item": "antarchy:uranium_ingot" + }, + "T": { + "item": "antarchy:titanium_ingot" + } + }, + "result": { + "item": "antarchy:ultimate_chestplate", + "count": 1 + } +} 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 new file mode 100644 index 00000000..018e1b42 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_crossbow.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:ultimate_crossbow", + "count": 1 + } +} 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 new file mode 100644 index 00000000..61f95984 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_helmet.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "TUT", + "T T" + ], + "key": { + "U": { + "item": "antarchy:uranium_ingot" + }, + "T": { + "item": "antarchy:titanium_ingot" + } + }, + "result": { + "item": "antarchy:ultimate_helmet", + "count": 1 + } +} 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 new file mode 100644 index 00000000..44f8b771 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_hoe.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:ultimate_hoe", + "count": 1 + } +} 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 new file mode 100644 index 00000000..6477818d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_leggings.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "UTU", + "T T", + "U U" + ], + "key": { + "U": { + "item": "antarchy:uranium_ingot" + }, + "T": { + "item": "antarchy:titanium_ingot" + } + }, + "result": { + "item": "antarchy:ultimate_leggings", + "count": 1 + } +} 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 new file mode 100644 index 00000000..cc414b53 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_pickaxe.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:ultimate_pickaxe", + "count": 1 + } +} 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 new file mode 100644 index 00000000..bcfb906b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_shovel.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:ultimate_shovel", + "count": 1 + } +} 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 new file mode 100644 index 00000000..aa518b6d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/ultimate_sword.json @@ -0,0 +1,24 @@ +{ + "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": { + "item": "antarchy:ultimate_sword", + "count": 1 + } +} 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 new file mode 100644 index 00000000..366f1958 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/ultimate/uranium_block.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "pattern": [ + "III", + "III", + "III" + ], + "key": { + "I": { + "item": "antarchy:uranium_ingot" + } + }, + "result": { + "item": "antarchy:uranium_block", + "count": 1 + } +} 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 new file mode 100644 index 00000000..7d13f04d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/umbral_moss_carpet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:umbral_moss_block" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "count": 3, + "item": "antarchy:umbral_moss_carpet" + } +} 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 new file mode 100644 index 00000000..646a064a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/upper.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "I": { "item": "antarchy:polished_antimetal" }, + "C": { "item": "minecraft:chest" } + }, + "pattern": [ + " I ", + "ICI", + "I I" + ], + "result": { + "item": "antarchy:upper", + "count": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium.json new file mode 100644 index 00000000..9eaeaa6b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:cut_uranium_slab" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "item": "antarchy:chiseled_uranium" + } +} 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 new file mode 100644 index 00000000..e0950a21 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium_from_cut_uranium_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:cut_uranium" + }, + "result": { + "item": "antarchy:chiseled_uranium" + } +} 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 new file mode 100644 index 00000000..11db7ff2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/chiseled_uranium_from_uranium_block_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:uranium_block" + }, + "result": { + "count": 4, + "item": "antarchy:chiseled_uranium" + } +} 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 new file mode 100644 index 00000000..7e2901db --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:uranium_block" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 4, + "item": "antarchy:cut_uranium" + } +} 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 new file mode 100644 index 00000000..229817c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_from_uranium_block_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:uranium_block" + }, + "result": { + "count": 4, + "item": "antarchy:cut_uranium" + } +} 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 new file mode 100644 index 00000000..f0780749 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:cut_uranium" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "item": "antarchy:cut_uranium_slab" + } +} 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 new file mode 100644 index 00000000..cf8bd948 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab_from_cut_uranium_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:cut_uranium" + }, + "result": { + "count": 2, + "item": "antarchy:cut_uranium_slab" + } +} 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 new file mode 100644 index 00000000..1ba4c788 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_slab_from_uranium_block_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:uranium_block" + }, + "result": { + "count": 8, + "item": "antarchy:cut_uranium_slab" + } +} 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 new file mode 100644 index 00000000..307b2fdd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:cut_uranium" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "item": "antarchy:cut_uranium_stairs" + } +} 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 new file mode 100644 index 00000000..37aa88c9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs_from_cut_uranium_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:cut_uranium" + }, + "result": { + "item": "antarchy:cut_uranium_stairs" + } +} 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 new file mode 100644 index 00000000..2992314c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/cut_uranium_stairs_from_uranium_block_stonecutting.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:uranium_block" + }, + "result": { + "count": 4, + "item": "antarchy:cut_uranium_stairs" + } +} 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 new file mode 100644 index 00000000..85179d2b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_block.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "pattern": [ + "III", + "III", + "III" + ], + "key": { + "I": { + "item": "antarchy:raw_uranium" + } + }, + "result": { + "item": "antarchy:raw_uranium_block", + "count": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_from_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_from_block.json new file mode 100644 index 00000000..8930c331 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_from_block.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:raw_uranium_block" + } + ], + "result": { + "item": "antarchy:raw_uranium", + "count": 9 + } +} 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 new file mode 100644 index 00000000..b1513e29 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/raw_uranium_from_scrap.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "SSS", + "SSS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:raw_uranium_scrap" + } + }, + "result": { + "item": "antarchy:raw_uranium", + "count": 1 + } +} 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 new file mode 100644 index 00000000..a555c96c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_bars.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "key": { + "#": { + "item": "antarchy:uranium_ingot" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 16, + "item": "antarchy:uranium_bars" + } +} 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 new file mode 100644 index 00000000..687e9f4c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_bulb.json @@ -0,0 +1,24 @@ +{ + "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, + "item": "antarchy:uranium_bulb" + } +} 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 new file mode 100644 index 00000000..78ae7ad1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "antarchy:uranium_ingot" + } + }, + "pattern": [ + "##", + "##", + "##" + ], + "result": { + "count": 3, + "item": "antarchy:uranium_door" + } +} 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 new file mode 100644 index 00000000..44ba418e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_nuggets.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "NNN", + "NNN", + "NNN" + ], + "key": { + "N": { + "item": "antarchy:uranium_nugget" + } + }, + "result": { + "item": "antarchy:uranium_ingot", + "count": 1 + } +} 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 new file mode 100644 index 00000000..26289231 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_raw_uranium_blasting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "ingredient": { + "item": "antarchy:raw_uranium" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..c4983363 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingot_from_raw_uranium_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "ingredient": { + "item": "antarchy:raw_uranium" + }, + "result": { + "item": "antarchy:uranium_ingot" + }, + "experience": 2.0, + "cookingtime": 200 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingots_from_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingots_from_block.json new file mode 100644 index 00000000..3cad884e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_ingots_from_block.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:uranium_block" + } + ], + "result": { + "item": "antarchy:uranium_ingot", + "count": 9 + } +} 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 new file mode 100644 index 00000000..a6d7fc52 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nugget_from_raw_uranium_scrap_blasting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "ingredient": { + "item": "antarchy:raw_uranium_scrap" + }, + "result": { + "item": "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 new file mode 100644 index 00000000..6694387e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nugget_from_raw_uranium_scrap_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "ingredient": { + "item": "antarchy:raw_uranium_scrap" + }, + "result": { + "item": "antarchy:uranium_nugget" + }, + "experience": 2.0, + "cookingtime": 200 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nuggets_from_ingot.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nuggets_from_ingot.json new file mode 100644 index 00000000..6195bae1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_nuggets_from_ingot.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:uranium_ingot" + } + ], + "result": { + "item": "antarchy:uranium_nugget", + "count": 9 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_trapdoor.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_trapdoor.json new file mode 100644 index 00000000..a5b13493 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/uranium/uranium_trapdoor.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "antarchy:uranium_ingot" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "item": "antarchy:uranium_trapdoor" + } +} 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 new file mode 100644 index 00000000..ce30a0c7 Binary files /dev/null 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 new file mode 100644 index 00000000..fe79deaa Binary files /dev/null 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 new file mode 100644 index 00000000..e25b6a92 Binary files /dev/null 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 new file mode 100644 index 00000000..b40629ac Binary files /dev/null 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/ruined_arena/ruined_arena.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/ruined_arena/ruined_arena.nbt new file mode 100644 index 00000000..e523fb70 Binary files /dev/null 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 new file mode 100644 index 00000000..19b8ea84 Binary files /dev/null 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 new file mode 100644 index 00000000..a61633bf Binary files /dev/null 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 new file mode 100644 index 00000000..e626f191 Binary files /dev/null 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 new file mode 100644 index 00000000..622db2cc Binary files /dev/null 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 new file mode 100644 index 00000000..b63c03e4 Binary files /dev/null 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 new file mode 100644 index 00000000..f83aef26 Binary files /dev/null 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 new file mode 100644 index 00000000..ac024fd7 Binary files /dev/null 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 new file mode 100644 index 00000000..873704bf Binary files /dev/null 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/toreterror_arena/toreterror_arena.nbt b/common-1.20.1/src/main/resources/data/antarchy/structures/toreterror_arena/toreterror_arena.nbt new file mode 100644 index 00000000..2a2e871f Binary files /dev/null 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 new file mode 100644 index 00000000..c02c9e2f Binary files /dev/null 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 new file mode 100644 index 00000000..46d6f375 Binary files /dev/null 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 new file mode 100644 index 00000000..e30dedf0 Binary files /dev/null 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/tags/block/rainbow_portal_frames.json b/common-1.20.1/src/main/resources/data/antarchy/tags/block/rainbow_portal_frames.json new file mode 100644 index 00000000..129433a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/block/rainbow_portal_frames.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:obsidian" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/amber_moss_replaceable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/amber_moss_replaceable.json new file mode 100644 index 00000000..7c1185df --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/amber_moss_replaceable.json @@ -0,0 +1,8 @@ +{ + "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/blocks/antimetal_inversion_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/antimetal_inversion_blocks.json new file mode 100644 index 00000000..9ae6d24b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/antimetal_inversion_blocks.json @@ -0,0 +1,10 @@ +{ + "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/blocks/biowart_replaceable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/biowart_replaceable.json new file mode 100644 index 00000000..883c1482 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/biowart_replaceable.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:biomite", + "antarchy:biomite_turf" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/biowart_tendrils_plantable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/biowart_tendrils_plantable.json new file mode 100644 index 00000000..3629673d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/biowart_tendrils_plantable.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:biomite_turf" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/bluestone_components.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/bluestone_components.json new file mode 100644 index 00000000..88779158 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/bluestone_components.json @@ -0,0 +1,10 @@ +{ + "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/blocks/bluestone_connectable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/bluestone_connectable.json new file mode 100644 index 00000000..88779158 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/bluestone_connectable.json @@ -0,0 +1,10 @@ +{ + "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/blocks/blush_moss_replaceable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/blush_moss_replaceable.json new file mode 100644 index 00000000..9ccd3add --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/blush_moss_replaceable.json @@ -0,0 +1,8 @@ +{ + "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/blocks/caterpillar_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/caterpillar_foods.json new file mode 100644 index 00000000..02f823bf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/caterpillar_foods.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:orange_milkweed", + "antarchy:pink_milkweed" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/cavaryn_portal_frames.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/cavaryn_portal_frames.json new file mode 100644 index 00000000..2976b86e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/cavaryn_portal_frames.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:myrmite" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/coral_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/coral_blocks.json new file mode 100644 index 00000000..731c04f2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/coral_blocks.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral_block" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/coral_plants.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/coral_plants.json new file mode 100644 index 00000000..964b717d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/coral_plants.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/corals.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/corals.json new file mode 100644 index 00000000..d900f62f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/corals.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral", + "antarchy:star_coral_fan" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/cornea_stalk_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/cornea_stalk_nyxite.json new file mode 100644 index 00000000..deca3ec2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/cornea_stalk_nyxite.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:nyxite", + "antarchy:pale_nyxite" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/cornea_stalk_plantable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/cornea_stalk_plantable.json new file mode 100644 index 00000000..f38f0dec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/cornea_stalk_plantable.json @@ -0,0 +1,9 @@ +{ + "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/blocks/dream_fire_base_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/dream_fire_base_blocks.json new file mode 100644 index 00000000..9fa5cb1f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/dream_fire_base_blocks.json @@ -0,0 +1,10 @@ +{ + "values": [ + "antarchy:nyxite", + "antarchy:dream_sand", + "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/antarchy/tags/blocks/duplicator_tree_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/duplicator_tree_blacklist.json new file mode 100644 index 00000000..af2fbd55 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/duplicator_tree_blacklist.json @@ -0,0 +1,20 @@ +{ + "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/blocks/elythia_portal_frames.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/elythia_portal_frames.json new file mode 100644 index 00000000..364e809d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/elythia_portal_frames.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:mossy_ouranwood_wood" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/gravity_gun_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/gravity_gun_blacklist.json new file mode 100644 index 00000000..af2fbd55 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/gravity_gun_blacklist.json @@ -0,0 +1,20 @@ +{ + "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/blocks/hercules_beetle_charge_immune_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/hercules_beetle_charge_immune_blocks.json new file mode 100644 index 00000000..5234c475 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/hercules_beetle_charge_immune_blocks.json @@ -0,0 +1,18 @@ +{ + "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/blocks/infinity_dimension_rare_ores.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/infinity_dimension_rare_ores.json new file mode 100644 index 00000000..639de1a7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/infinity_dimension_rare_ores.json @@ -0,0 +1,13 @@ +{ + "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/blocks/lucid_anchor_base_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/lucid_anchor_base_blocks.json new file mode 100644 index 00000000..b68760f5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/lucid_anchor_base_blocks.json @@ -0,0 +1,11 @@ +{ + "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/blocks/miners_dream_carvable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/miners_dream_carvable.json new file mode 100644 index 00000000..6f7d26ee --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/miners_dream_carvable.json @@ -0,0 +1,36 @@ +{ + "replace": false, + "values": [ + "#minecraft:base_stone_overworld", + "#minecraft:base_stone_nether", + "minecraft:stone", + "minecraft:deepslate", + "minecraft:granite", + "minecraft:diorite", + "minecraft:andesite", + "minecraft:tuff", + "minecraft:calcite", + "minecraft:netherrack", + "minecraft:blackstone", + "minecraft:basalt", + "minecraft:smooth_basalt", + "minecraft:end_stone", + "minecraft:dirt", + "minecraft:coarse_dirt", + "minecraft:rooted_dirt", + "minecraft:podzol", + "minecraft:mycelium", + "minecraft:gravel", + "minecraft:sand", + "minecraft:red_sand", + "minecraft:sandstone", + "minecraft:red_sandstone", + "minecraft:clay", + "minecraft:soul_sand", + "minecraft:soul_soil", + "antarchy:nyxite", + "antarchy:pale_nyxite", + "antarchy:dream_sand", + "antarchy:dream_sandstone" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/molevore_breakable_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/molevore_breakable_blocks.json new file mode 100644 index 00000000..74865fb9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/molevore_breakable_blocks.json @@ -0,0 +1,18 @@ +{ + "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/blocks/molevore_see_through_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/molevore_see_through_blocks.json new file mode 100644 index 00000000..74865fb9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/molevore_see_through_blocks.json @@ -0,0 +1,18 @@ +{ + "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/blocks/molevore_spawn_surfaces.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/molevore_spawn_surfaces.json new file mode 100644 index 00000000..ea10945e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/molevore_spawn_surfaces.json @@ -0,0 +1,29 @@ +{ + "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/blocks/nadir_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nadir_logs.json new file mode 100644 index 00000000..23dece7d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nadir_logs.json @@ -0,0 +1,9 @@ +{ + "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/blocks/nightmare_breakable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nightmare_breakable.json new file mode 100644 index 00000000..0ecd95ec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nightmare_breakable.json @@ -0,0 +1,13 @@ +{ + "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/blocks/nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nyxite.json new file mode 100644 index 00000000..51e4f7ea --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/nyxite.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "antarchy:nyxite", + "antarchy:pale_nyxite", + "antarchy:potent_nyxite" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/ouranwood_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/ouranwood_logs.json new file mode 100644 index 00000000..01800b33 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/ouranwood_logs.json @@ -0,0 +1,11 @@ +{ + "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/blocks/peach_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/peach_logs.json new file mode 100644 index 00000000..5a1d9ec3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/peach_logs.json @@ -0,0 +1,9 @@ +{ + "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/blocks/potent_nyxite_activation_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/potent_nyxite_activation_blocks.json new file mode 100644 index 00000000..5bbff63d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/potent_nyxite_activation_blocks.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:magma_block" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/rainbow_portal_frames.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/rainbow_portal_frames.json new file mode 100644 index 00000000..129433a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/rainbow_portal_frames.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:obsidian" + ] +} 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 new file mode 100644 index 00000000..d57688a4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/rolly_cavern_carveable.json @@ -0,0 +1,16 @@ +{ + "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/blocks/termite_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/termite_foods.json new file mode 100644 index 00000000..54c986bb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/termite_foods.json @@ -0,0 +1,14 @@ +{ + "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/blocks/thoraxis_portal_frames.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/thoraxis_portal_frames.json new file mode 100644 index 00000000..f622ee69 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/thoraxis_portal_frames.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:nyxite" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/tiger_eye_camouflage_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/tiger_eye_camouflage_blacklist.json new file mode 100644 index 00000000..7d4a90b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/tiger_eye_camouflage_blacklist.json @@ -0,0 +1,11 @@ +{ + "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/blocks/umbral_moss_replaceable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/umbral_moss_replaceable.json new file mode 100644 index 00000000..dd3155a9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/umbral_moss_replaceable.json @@ -0,0 +1,8 @@ +{ + "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/blocks/wall_corals.json b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/wall_corals.json new file mode 100644 index 00000000..a42a8397 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/blocks/wall_corals.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral_wall_fan" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/damage_type/bypasses_bloodglass.json b/common-1.20.1/src/main/resources/data/antarchy/tags/damage_type/bypasses_bloodglass.json new file mode 100644 index 00000000..1dd0b488 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/damage_type/bypasses_bloodglass.json @@ -0,0 +1,13 @@ +{ + "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/damage_types/bypasses_bloodglass.json b/common-1.20.1/src/main/resources/data/antarchy/tags/damage_types/bypasses_bloodglass.json new file mode 100644 index 00000000..1dd0b488 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/damage_types/bypasses_bloodglass.json @@ -0,0 +1,13 @@ +{ + "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_types/basilisk_prey.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/basilisk_prey.json new file mode 100644 index 00000000..73079119 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/basilisk_prey.json @@ -0,0 +1,22 @@ +{ + "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_types/critter_cage_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/critter_cage_blacklist.json new file mode 100644 index 00000000..5d341ba2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/critter_cage_blacklist.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dimensional_tear_common_spawns.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dimensional_tear_common_spawns.json new file mode 100644 index 00000000..5a2b9482 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dimensional_tear_common_spawns.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:lucid" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dimensional_tear_rare_spawns.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dimensional_tear_rare_spawns.json new file mode 100644 index 00000000..479d4395 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dimensional_tear_rare_spawns.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:nightmare" + ] +} 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 new file mode 100644 index 00000000..c3129700 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dread_hallucination_mobs.json @@ -0,0 +1,17 @@ +{ + "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:creeping_horror", + "antarchy:lurking_terror" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dream_sand_low_gravity_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dream_sand_low_gravity_blacklist.json new file mode 100644 index 00000000..66a9f668 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/dream_sand_low_gravity_blacklist.json @@ -0,0 +1,9 @@ +{ + "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_types/duct_tape_stick_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/duct_tape_stick_blacklist.json new file mode 100644 index 00000000..f716692b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/duct_tape_stick_blacklist.json @@ -0,0 +1,10 @@ +{ + "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_types/frog_glimmer_no_eat.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/frog_glimmer_no_eat.json new file mode 100644 index 00000000..abe11627 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/frog_glimmer_no_eat.json @@ -0,0 +1,9 @@ +{ + "values": [ + "antarchy:kraken", + "antarchy:toreterror", + "antarchy:emperor_scorpion", + "antarchy:alpha_mantis", + "antarchy:brutalfly" + ] +} 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 new file mode 100644 index 00000000..5ec6d6a2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/gravity_gun_blacklist.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:wither", + "minecraft:ender_dragon", + "antarchy:kraken" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_bosses.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_bosses.json new file mode 100644 index 00000000..69e3896e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_bosses.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:hercules_beetle" + ] +} 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 new file mode 100644 index 00000000..3cc117aa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_common.json @@ -0,0 +1,6 @@ +{ + "values": [ + "antarchy:creeping_horror", + "antarchy:lurking_terror" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_jerry.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_jerry.json new file mode 100644 index 00000000..f81b2826 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_jerry.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:jerry" + ] +} 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 new file mode 100644 index 00000000..298fd78a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_jumpers.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:jumpy_bug" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_molevore.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_molevore.json new file mode 100644 index 00000000..ece7739d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_molevore.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:molevore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_moleworm.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_moleworm.json new file mode 100644 index 00000000..8d9eb37b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_moleworm.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:moleworm" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_spitters.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_spitters.json new file mode 100644 index 00000000..39f6a107 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/horde_spitters.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:spit_bug" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/hushweed_targets.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/hushweed_targets.json new file mode 100644 index 00000000..ea9c3156 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/hushweed_targets.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:player" + ] +} 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 new file mode 100644 index 00000000..186c34bc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/inverted_immune.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "minecraft:ender_dragon", + "antarchy:emperor_scorpion", + "antarchy:kraken", + "antarchy:nightmare", + "antarchy:reverie", + "antarchy:lucid", + "antarchy:triffid" + ] +} 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 new file mode 100644 index 00000000..5d341ba2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/lucid_anchor_immune.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/lucid_bolt_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/lucid_bolt_immune.json new file mode 100644 index 00000000..687bfa85 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/lucid_bolt_immune.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:reverie" + ] +} 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 new file mode 100644 index 00000000..0ec21525 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/nightmare_no_attack.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:lucid", + "antarchy:reverie" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/paralysis_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/paralysis_immune.json new file mode 100644 index 00000000..883ca88e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/paralysis_immune.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:basilisk" + ] +} 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 new file mode 100644 index 00000000..5d341ba2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/scorpion_whip_blacklist.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/scorpion_whip_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/scorpion_whip_immune.json new file mode 100644 index 00000000..5d341ba2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/scorpion_whip_immune.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} 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 new file mode 100644 index 00000000..5d341ba2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/size_changing_immune.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/stinky_repelled_hostiles.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/stinky_repelled_hostiles.json new file mode 100644 index 00000000..8d81eb57 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/stinky_repelled_hostiles.json @@ -0,0 +1,10 @@ +{ + "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_types/tiger_eye_detection_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/tiger_eye_detection_immune.json new file mode 100644 index 00000000..6becc3cd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/tiger_eye_detection_immune.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:kraken", + "antarchy:nightmare", + "antarchy:toreterror", + "antarchy:emperor_scorpion" + ] +} 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 new file mode 100644 index 00000000..c6fb3f7c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_types/triffid_prey.json @@ -0,0 +1,12 @@ +{ + "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/fluids/antiwater.json b/common-1.20.1/src/main/resources/data/antarchy/tags/fluids/antiwater.json new file mode 100644 index 00000000..cb0c3b1f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/fluids/antiwater.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:antiwater", + "antarchy:flowing_antiwater" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/fluids/giant_lily_pad_supporting_fluids.json b/common-1.20.1/src/main/resources/data/antarchy/tags/fluids/giant_lily_pad_supporting_fluids.json new file mode 100644 index 00000000..ba96d3e9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/fluids/giant_lily_pad_supporting_fluids.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:water", + "minecraft:flowing_water", + "antarchy:lumen" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/fluids/lumen.json b/common-1.20.1/src/main/resources/data/antarchy/tags/fluids/lumen.json new file mode 100644 index 00000000..f44595c4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/fluids/lumen.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:lumen", + "antarchy:flowing_lumen" + ] +} 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 new file mode 100644 index 00000000..4277b9ed --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/item/rainbow_ant_breeding_foods.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:rainbow_sugar" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/brown_ant_activation_items.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/brown_ant_activation_items.json new file mode 100644 index 00000000..bc87462f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/brown_ant_activation_items.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:sugar" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/brown_ant_breeding_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/brown_ant_breeding_foods.json new file mode 100644 index 00000000..bc87462f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/brown_ant_breeding_foods.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:sugar" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/butterfly_breeding_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/butterfly_breeding_foods.json new file mode 100644 index 00000000..02f823bf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/butterfly_breeding_foods.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:orange_milkweed", + "antarchy:pink_milkweed" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/caterpillar_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/caterpillar_foods.json new file mode 100644 index 00000000..02f823bf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/caterpillar_foods.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:orange_milkweed", + "antarchy:pink_milkweed" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/corndog_meats.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/corndog_meats.json new file mode 100644 index 00000000..e7b7233e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/corndog_meats.json @@ -0,0 +1,19 @@ +{ + "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/items/dream_fire_base_blocks.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/dream_fire_base_blocks.json new file mode 100644 index 00000000..b27038b4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/dream_fire_base_blocks.json @@ -0,0 +1,6 @@ +{ + "values": [ + "antarchy:dream_sand", + "antarchy:dream_sandstone" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/duct_tape_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/duct_tape_blacklist.json new file mode 100644 index 00000000..5d341ba2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/duct_tape_blacklist.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/easter_bunny_spawn_egg_blacklist.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/easter_bunny_spawn_egg_blacklist.json new file mode 100644 index 00000000..9f62d724 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/easter_bunny_spawn_egg_blacklist.json @@ -0,0 +1,7 @@ +{ + "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/items/flying_squirrel_nuts.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/flying_squirrel_nuts.json new file mode 100644 index 00000000..2af25ce5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/flying_squirrel_nuts.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_acorn" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_ant.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_ant.json new file mode 100644 index 00000000..2bee141d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_ant.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bread" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_apple_cow.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_apple_cow.json new file mode 100644 index 00000000..3fa00a6b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_apple_cow.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:apple" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_elka.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_elka.json new file mode 100644 index 00000000..b11da3ed --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_elka.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:peach" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_frog.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_frog.json new file mode 100644 index 00000000..d9233809 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_frog.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:slime_ball" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_ouranwood_deer.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_ouranwood_deer.json new file mode 100644 index 00000000..f0885728 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/glimmer_augment_ouranwood_deer.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:glow_berries" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/hercules_beetle_food.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/hercules_beetle_food.json new file mode 100644 index 00000000..445d82b1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/hercules_beetle_food.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:broodfruit" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/hfcs_cannot_americanize.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/hfcs_cannot_americanize.json new file mode 100644 index 00000000..86dde3df --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/hfcs_cannot_americanize.json @@ -0,0 +1,3 @@ +{ + "values": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/multishot_enchantable.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/multishot_enchantable.json new file mode 100644 index 00000000..1b6b505d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/multishot_enchantable.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#minecraft:enchantable/crossbow", + "antarchy:squidzooka", + "antarchy:rpo_launcher" + ] +} 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 new file mode 100644 index 00000000..23dece7d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/nadir_logs.json @@ -0,0 +1,9 @@ +{ + "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/ouranwood_deer_food.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/ouranwood_deer_food.json new file mode 100644 index 00000000..6c67336b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/ouranwood_deer_food.json @@ -0,0 +1,9 @@ +{ + "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/items/ouranwood_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/ouranwood_logs.json new file mode 100644 index 00000000..01800b33 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/ouranwood_logs.json @@ -0,0 +1,11 @@ +{ + "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/items/peach_logs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/peach_logs.json new file mode 100644 index 00000000..5a1d9ec3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/peach_logs.json @@ -0,0 +1,9 @@ +{ + "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/items/rainbow_ant_activation_items.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/rainbow_ant_activation_items.json new file mode 100644 index 00000000..4277b9ed --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/rainbow_ant_activation_items.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:rainbow_sugar" + ] +} 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 new file mode 100644 index 00000000..bc87462f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/rainbow_ant_breeding_foods.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:sugar" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/red_ant_activation_items.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/red_ant_activation_items.json new file mode 100644 index 00000000..bc87462f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/red_ant_activation_items.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:sugar" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/red_ant_breeding_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/red_ant_breeding_foods.json new file mode 100644 index 00000000..bc87462f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/red_ant_breeding_foods.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:sugar" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/reverie_duplication_items.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/reverie_duplication_items.json new file mode 100644 index 00000000..fa1bf6b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/reverie_duplication_items.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:blood_crystal_shard" + ] +} 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 new file mode 100644 index 00000000..4c6d4e2a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/rolly_polly_food.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:glow_berries", + "minecraft:sweet_berries" + ] +} 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 new file mode 100644 index 00000000..149abdd0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/roots.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:hanging_roots", + "minecraft:crimson_roots", + "minecraft:warped_roots" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/termite_activation_items.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/termite_activation_items.json new file mode 100644 index 00000000..90f5f079 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/termite_activation_items.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:stick" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/termite_breeding_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/termite_breeding_foods.json new file mode 100644 index 00000000..d280b15e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/termite_breeding_foods.json @@ -0,0 +1,21 @@ +{ + "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/items/termite_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/termite_foods.json new file mode 100644 index 00000000..5d341ba2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/termite_foods.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/items/tigers_eye_armor.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/tigers_eye_armor.json new file mode 100644 index 00000000..e2b2f6b2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/tigers_eye_armor.json @@ -0,0 +1,9 @@ +{ + "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/items/venison_foods.json b/common-1.20.1/src/main/resources/data/antarchy/tags/items/venison_foods.json new file mode 100644 index 00000000..43bb9bec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/items/venison_foods.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:raw_venison", + "antarchy:cooked_venison" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/sound_event/dread_hallucination_sounds.json b/common-1.20.1/src/main/resources/data/antarchy/tags/sound_event/dread_hallucination_sounds.json new file mode 100644 index 00000000..b578f58d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/sound_event/dread_hallucination_sounds.json @@ -0,0 +1,26 @@ +{ + "replace": false, + "values": [ + "minecraft:entity.creeper.primed", + "minecraft:entity.spider.ambient", + "minecraft:entity.skeleton.ambient", + "minecraft:entity.zombie.ambient", + "minecraft:entity.zombie.hurt", + "minecraft:entity.skeleton.hurt", + "minecraft:entity.creeper.hurt", + "minecraft:entity.spider.hurt", + "minecraft:ambient.cave", + "antarchy:basilisk_hiss", + "antarchy:basilisk_bite", + "antarchy:bed_bug_ambient", + "antarchy:bed_bug_attack", + "antarchy:scorpion_ambient", + "antarchy:scorpion_attack", + "antarchy:cloud_shark_idle", + "antarchy:cloud_shark_bite", + "antarchy:nightmare_idle", + "antarchy:nightmare_hurt", + "antarchy:nightmare_roar", + "antarchy:nightmare_bite" + ] +} 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 new file mode 100644 index 00000000..98db4759 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/apple_cow_spawn_biomes.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#c:is_plains", + "#c:is_forest", + "#c:is_taiga" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/basilisk_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/basilisk_spawn_biomes.json new file mode 100644 index 00000000..ac9e8982 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/basilisk_spawn_biomes.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_forest", + "antarchy:sparse_ouranwood_forest" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/butterfly_can_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/butterfly_can_spawn_biomes.json new file mode 100644 index 00000000..fc1a8320 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/butterfly_can_spawn_biomes.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#antarchy:butterfly_spawn_biomes", + "#antarchy:flower_forest_butterfly_spawn_biomes" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/butterfly_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/butterfly_spawn_biomes.json new file mode 100644 index 00000000..2d7b60c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/butterfly_spawn_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#antarchy:is_elythia" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/caterpillar_can_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/caterpillar_can_spawn_biomes.json new file mode 100644 index 00000000..bdba644b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/caterpillar_can_spawn_biomes.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#antarchy:caterpillar_spawn_biomes", + "#antarchy:flower_forest_caterpillar_spawn_biomes" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/caterpillar_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/caterpillar_spawn_biomes.json new file mode 100644 index 00000000..2d7b60c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/caterpillar_spawn_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#antarchy:is_elythia" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/dorrie_elythia_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/dorrie_elythia_spawn_biomes.json new file mode 100644 index 00000000..b14f7bed --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/dorrie_elythia_spawn_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#antarchy:is_elythia_ocean" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/dorrie_overworld_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/dorrie_overworld_spawn_biomes.json new file mode 100644 index 00000000..b9aaf01e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/dorrie_overworld_spawn_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#minecraft:is_ocean" + ] +} 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 new file mode 100644 index 00000000..6e759e17 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow", + "antarchy:butterfly_fields", + "antarchy:ouranwood_forest", + "antarchy:peach_forest", + "antarchy:sparse_ouranwood_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 new file mode 100644 index 00000000..8d8c39a8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/enchanted_golden_apple_cow_spawn_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/flower_forest_butterfly_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/flower_forest_butterfly_spawn_biomes.json new file mode 100644 index 00000000..7650ae2d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/flower_forest_butterfly_spawn_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#antarchy:milkweed_spawn_biomes" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/flower_forest_caterpillar_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/flower_forest_caterpillar_spawn_biomes.json new file mode 100644 index 00000000..7650ae2d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/flower_forest_caterpillar_spawn_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#antarchy:milkweed_spawn_biomes" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/flying_squirrel_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/flying_squirrel_spawn_biomes.json new file mode 100644 index 00000000..f0e41d94 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/flying_squirrel_spawn_biomes.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_forest", + "antarchy:peach_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 new file mode 100644 index 00000000..98db4759 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/golden_apple_cow_spawn_biomes.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#c:is_plains", + "#c:is_forest", + "#c:is_taiga" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_rare_seashell.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_rare_seashell.json new file mode 100644 index 00000000..8f6ab420 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_rare_seashell.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:warm_ocean" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_seashell.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_seashell.json new file mode 100644 index 00000000..63af8eb6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_seashell.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_ocean" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_shellstone.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_shellstone.json new file mode 100644 index 00000000..c264e16c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_shellstone.json @@ -0,0 +1,32 @@ +{ + "replace": false, + "values": [ + "#minecraft:is_ocean", + "#minecraft:is_deep_ocean", + "#minecraft:is_beach", + { + "id": "#neoforge:is_ocean", + "required": false + }, + { + "id": "#c:ocean", + "required": false + }, + { + "id": "#c:shallow_ocean", + "required": false + }, + { + "id": "#c:deep_ocean", + "required": false + }, + { + "id": "#neoforge:is_beach", + "required": false + }, + { + "id": "#c:beach", + "required": false + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_star_coral.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_star_coral.json new file mode 100644 index 00000000..d70e35cc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_star_coral.json @@ -0,0 +1,14 @@ +{ + "replace": false, + "values": [ + "#minecraft:is_ocean", + { + "id": "#neoforge:is_ocean", + "required": false + }, + { + "id": "#c:ocean", + "required": false + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/basilisk_lair_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/basilisk_lair_biomes.json new file mode 100644 index 00000000..0b77f90b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/basilisk_lair_biomes.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_forest", + "antarchy:sparse_ouranwood_forest", + "antarchy:fungal_ouranwood_forest" + ] +} 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 new file mode 100644 index 00000000..8d8c39a8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/fallen_kingdom_castle_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow" + ] +} 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 new file mode 100644 index 00000000..8d8c39a8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_arena_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow" + ] +} 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 new file mode 100644 index 00000000..8d8c39a8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/sign_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow" + ] +} 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 new file mode 100644 index 00000000..8d8c39a8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/stampys_house_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow" + ] +} 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 new file mode 100644 index 00000000..8d8c39a8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/temple_of_technoblade_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/toreterror_arena_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/toreterror_arena_biomes.json new file mode 100644 index 00000000..b14f7bed --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/toreterror_arena_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#antarchy:is_elythia_ocean" + ] +} 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 new file mode 100644 index 00000000..89bf2423 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/trayaurus_lab_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow" + ] +} \ 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 new file mode 100644 index 00000000..8f87b48f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json @@ -0,0 +1,9 @@ +{ + "values": [ + "antarchy:cavaryn", + "antarchy:glowcap_caves", + "antarchy:biowart_caves", + "antarchy:brooding_tunnels", + "antarchy:rolly_caves" + ] +} 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 new file mode 100644 index 00000000..e115fe0e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json @@ -0,0 +1,17 @@ +{ + "replace": false, + "values": [ + "antarchy:butterfly_fields", + "antarchy:elythia_lush_caves", + "antarchy:elythia_meadow", + "antarchy:elythia_river", + "antarchy:moleworm_caves", + "antarchy:ouranwood_forest", + "antarchy:peach_forest", + "antarchy:glimmering_pools", + "antarchy:sparse_ouranwood_forest", + "antarchy:elythia_ocean", + "antarchy:elythia_coral_spikes", + "antarchy:fungal_ouranwood_forest" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia_ocean.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia_ocean.json new file mode 100644 index 00000000..e5dadf26 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia_ocean.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_ocean", + "antarchy:elythia_coral_spikes" + ] +} 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 new file mode 100644 index 00000000..21d751d9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/mantis_overworld_spawn_biomes.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "#c:is_forest", + "#c:is_jungle", + "#c:is_savanna", + "#c:is_plains" + ] +} 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 new file mode 100644 index 00000000..8076f444 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/mantis_spawn_biomes.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow" + ] +} + diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/milkweed_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/milkweed_spawn_biomes.json new file mode 100644 index 00000000..c2155356 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/milkweed_spawn_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:flower_forest" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/missile_squid_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/missile_squid_spawn_biomes.json new file mode 100644 index 00000000..d3150f98 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/missile_squid_spawn_biomes.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:deep_ocean", + "minecraft:deep_cold_ocean", + "minecraft:deep_lukewarm_ocean", + "minecraft:deep_frozen_ocean" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/octopus_bomb_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/octopus_bomb_spawn_biomes.json new file mode 100644 index 00000000..d3150f98 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/octopus_bomb_spawn_biomes.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:deep_ocean", + "minecraft:deep_cold_ocean", + "minecraft:deep_lukewarm_ocean", + "minecraft:deep_frozen_ocean" + ] +} 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 new file mode 100644 index 00000000..60dbe479 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/overworld_ant_nest_spawn_biomes.json @@ -0,0 +1,248 @@ +{ + "replace": false, + "values": [ + "#minecraft:is_forest", + "#minecraft:is_taiga", + "minecraft:plains", + "minecraft:sunflower_plains", + "minecraft:grove", + { + "id": "#neoforge:is_forest", + "required": false + }, + { + "id": "#c:forest", + "required": false + }, + + { + "id": "biomesoplenty:redwood_forest", + "required": false + }, + { + "id": "byg:redwood_thicket", + "required": false + }, + { + "id": "projectvibrantjourneys:redwoods", + "required": false + }, + { + "id": "terralith:cloud_forest", + "required": false + }, + { + "id": "terralith:forested_highlands", + "required": false + }, + { + "id": "terralith:lavender_forest", + "required": false + }, + { + "id": "terralith:lavender_valley", + "required": false + }, + { + "id": "terralith:moonlight_grove", + "required": false + }, + { + "id": "terralith:moonlight_valley", + "required": false + }, + { + "id": "terralith:rocky_shrubland", + "required": false + }, + { + "id": "terralith:shrubland", + "required": false + }, + { + "id": "terralith:wintry_forest", + "required": false + }, + { + "id": "biomesoplenty:jade_cliffs", + "required": false + }, + { + "id": "biomesoplenty:mediterranean_taiga", + "required": false + }, + { + "id": "biomesoplenty:dead_forest", + "required": false + }, + { + "id": "biomesoplenty:old_growth_dead_forest", + "required": false + }, + { + "id": "byg:autumnal_taiga", + "required": false + }, + { + "id": "byg:canadian_shield", + "required": false + }, + { + "id": "byg:maple_taiga", + "required": false + }, + { + "id": "projectvibrantjourneys:boreal_forest", + "required": false + }, + { + "id": "projectvibrantjourneys:crystal_lakes", + "required": false + }, + { + "id": "regions_unexplored:willow_forest", + "required": false + }, + { + "id": "regions_unexplored:pine_forest", + "required": false + }, + { + "id": "regions_unexplored:boreal_forest", + "required": false + }, + { + "id": "regions_unexplored:golden_boreal_forest", + "required": false + }, + { + "id": "regions_unexplored:boreal_taiga", + "required": false + }, + { + "id": "regions_unexplored:golden_boreal_taiga", + "required": false + }, + { + "id": "regions_unexplored:pine_taiga", + "required": false + }, + { + "id": "regions_unexplored:pine_slopes", + "required": false + }, + { + "id": "wythers:ancient_taiga", + "required": false + }, + { + "id": "wythers:birch_taiga", + "required": false + }, + { + "id": "wythers:boreal_forest_red", + "required": false + }, + { + "id": "wythers:boreal_forest_yellow", + "required": false + }, + { + "id": "wythers:cold_island", + "required": false + }, + { + "id": "wythers:flooded_temperate_rainforest", + "required": false + }, + { + "id": "wythers:forested_highlands", + "required": false + }, + { + "id": "wythers:jade_highlands", + "required": false + }, + { + "id": "wythers:larch_taiga", + "required": false + }, + { + "id": "wythers:old_growth_taiga_crags", + "required": false + }, + { + "id": "wythers:old_growth_taiga_swamp", + "required": false + }, + { + "id": "wythers:pine_barrens", + "required": false + }, + { + "id": "wythers:sparse_eucalyptus_woodland", + "required": false + }, + { + "id": "wythers:sparse_eucalyptus_jungle", + "required": false + }, + { + "id": "wythers:temperate_rainforest", + "required": false + }, + { + "id": "wythers:temperate_rainforest_crags", + "required": false + }, + { + "id": "wythers:thermal_taiga", + "required": false + }, + + { + "id": "terralith:brushland", + "required": false + }, + { + "id": "projectvibrantjourneys:prairie", + "required": false + }, + { + "id": "#c:plains", + "required": false + }, + { + "id": "regions_unexplored:lupine_plains", + "required": false + }, + { + "id": "regions_unexplored:clover_plains", + "required": false + }, + { + "id": "regions_unexplored:prairie", + "required": false + }, + { + "id": "regions_unexplored:grassland", + "required": false + }, + { + "id": "regions_unexplored:barley_fields", + "required": false + }, + { + "id": "regions_unexplored:poppy_fields", + "required": false + }, + { + "id": "regions_unexplored:shrubland", + "required": false + }, + { + "id": "regions_unexplored:lush_hills", + "required": false + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/red_ant_nest_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/red_ant_nest_spawn_biomes.json new file mode 100644 index 00000000..4f82dd88 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/red_ant_nest_spawn_biomes.json @@ -0,0 +1,108 @@ +{ + "replace": false, + "values": [ + "#minecraft:is_nether", + "minecraft:nether_wastes", + "minecraft:basalt_deltas", + { + "id": "#neoforge:is_nether", + "required": false + }, + { + "id": "#c:nether", + "required": false + }, + { + "id": "#c:in_nether", + "required": false + }, + { + "id": "betternether:bone_reef", + "required": false + }, + { + "id": "betternether:crimson_glowing_woods", + "required": false + }, + { + "id": "betternether:crimson_pinewood", + "required": false + }, + { + "id": "betternether:flooded_deltas", + "required": false + }, + { + "id": "betternether:gravel_desert", + "required": false + }, + { + "id": "betternether:magma_land", + "required": false + }, + { + "id": "betternether:nether_grasslands", + "required": false + }, + { + "id": "betternether:nether_jungle", + "required": false + }, + { + "id": "betternether:nether_mushroom_forest", + "required": false + }, + { + "id": "betternether:nether_mushroom_forest_edge", + "required": false + }, + { + "id": "betternether:nether_swampland", + "required": false + }, + { + "id": "betternether:nether_swampland_terraces", + "required": false + }, + { + "id": "betternether:old_fungiwoods", + "required": false + }, + { + "id": "betternether:old_swampland", + "required": false + }, + { + "id": "betternether:old_warped_woods", + "required": false + }, + { + "id": "betternether:poor_nether_grasslands", + "required": false + }, + { + "id": "betternether:soul_plain", + "required": false + }, + { + "id": "betternether:sulfuric_bone_reef", + "required": false + }, + { + "id": "betternether:upside_down_forest", + "required": false + }, + { + "id": "betternether:upside_down_forest_cleared", + "required": false + }, + { + "id": "betternether:wart_forest", + "required": false + }, + { + "id": "betternether:wart_forest_edge", + "required": false + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/uses_horde_system.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/uses_horde_system.json new file mode 100644 index 00000000..28e2c5b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/uses_horde_system.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#antarchy:is_cavaryn" + ] +} 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 new file mode 100644 index 00000000..44db277a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/wild_corn_spawn_biomes.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "#c:is_plains", + "minecraft:plains", + "minecraft:sunflower_plains", + "minecraft:meadow", + { + "id": "#c:plains", + "required": false + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/trayaurus_trades/default.json b/common-1.20.1/src/main/resources/data/antarchy/trayaurus_trades/default.json new file mode 100644 index 00000000..e08354ab --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/trayaurus_trades/default.json @@ -0,0 +1,81 @@ +{ + "trades": [ + { + "buy": { + "item": "minecraft:emerald", + "count": 7 + }, + "sell": { + "item": "antarchy:root_beer", + "count": 1 + }, + "max_uses": 16, + "villager_xp": 1, + "price_multiplier": 0.05 + }, + { + "buy": { + "item": "antarchy:cooked_corndog", + "count": 3 + }, + "sell": { + "item": "antarchy:duct_tape", + "count": 1 + }, + "max_uses": 12, + "villager_xp": 5, + "price_multiplier": 0.05 + }, + { + "buy": { + "item": "antarchy:uranium_ingot", + "count": 8 + }, + "second_buy": { + "item": "antarchy:kraken_tooth", + "count": 1 + }, + "sell": { + "item": "antarchy:duplicator_sapling", + "count": 1 + }, + "max_uses": 6, + "villager_xp": 10, + "price_multiplier": 0.1 + }, + { + "buy": { + "item": "antarchy:titanium_ingot", + "count": 10 + }, + "second_buy": { + "item": "antarchy:emperor_scorpion_stinger", + "count": 1 + }, + "sell": { + "item": "antarchy:easter_bunny_spawn_egg", + "count": 1 + }, + "max_uses": 3, + "villager_xp": 5, + "price_multiplier": 0.05 + }, + { + "buy": { + "item": "antarchy:uranium_ingot", + "count": 1 + }, + "second_buy": { + "item": "antarchy:titanium_ingot", + "count": 1 + }, + "sell": { + "item": "antarchy:spirit_apple", + "count": 1 + }, + "max_uses": 2, + "villager_xp": 20, + "price_multiplier": 0.2 + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/normal.json b/common-1.20.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/normal.json new file mode 100644 index 00000000..44c5275e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/normal.json @@ -0,0 +1,16 @@ +{ + "simultaneous_mobs": 1.0, + "simultaneous_mobs_added_per_player": 0.0, + "spawn_potentials": [ + { + "data": { + "entity": { + "id": "antarchy:basilisk" + } + }, + "weight": 1 + } + ], + "ticks_between_spawn": 60, + "total_mobs": 5.0 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/ominous.json b/common-1.20.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/ominous.json new file mode 100644 index 00000000..79834927 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/ominous.json @@ -0,0 +1,22 @@ +{ + "loot_tables_to_eject": [ + { + "data": "antarchy:spawners/basilisk_lair/hard", + "weight": 1 + } + ], + "simultaneous_mobs": 1.0, + "simultaneous_mobs_added_per_player": 0.0, + "spawn_potentials": [ + { + "data": { + "entity": { + "id": "antarchy:basilisk" + } + }, + "weight": 1 + } + ], + "ticks_between_spawn": 60, + "total_mobs": 8.0 +} 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 new file mode 100644 index 00000000..d5c30781 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/trim_material/blood_crystal.json @@ -0,0 +1,10 @@ +{ + "asset_name": "blood_crystal", + "ingredient": "antarchy:blood_crystal_shard", + "item_model_index": 0.81, + "description": { + "color": "#AC3E5C", + "translate": "trim_material.antarchy.blood_crystal" + } +} + diff --git a/common-1.20.1/src/main/resources/data/antarchy/trim_material/bluestone.json b/common-1.20.1/src/main/resources/data/antarchy/trim_material/bluestone.json new file mode 100644 index 00000000..0f2c5584 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/trim_material/bluestone.json @@ -0,0 +1,9 @@ +{ + "asset_name": "bluestone", + "ingredient": "antarchy:bluestone", + "item_model_index": 0.85, + "description": { + "color": "#2E89FF", + "translate": "trim_material.antarchy.bluestone" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/trim_material/nightmare_scale.json b/common-1.20.1/src/main/resources/data/antarchy/trim_material/nightmare_scale.json new file mode 100644 index 00000000..a4eb2e6e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/trim_material/nightmare_scale.json @@ -0,0 +1,9 @@ +{ + "asset_name": "nightmare_scale", + "ingredient": "antarchy:nightmare_scale", + "item_model_index": 0.82, + "description": { + "color": "#3F3D5D", + "translate": "trim_material.antarchy.nightmare_scale" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/trim_material/tigers_eye.json b/common-1.20.1/src/main/resources/data/antarchy/trim_material/tigers_eye.json new file mode 100644 index 00000000..d4e61197 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/trim_material/tigers_eye.json @@ -0,0 +1,9 @@ +{ + "asset_name": "tigers_eye", + "ingredient": "antarchy:tigers_eye", + "item_model_index": 0.82, + "description": { + "color": "#C7882C", + "translate": "trim_material.antarchy.tigers_eye" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/trim_material/titanium.json b/common-1.20.1/src/main/resources/data/antarchy/trim_material/titanium.json new file mode 100644 index 00000000..8dd07511 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/trim_material/titanium.json @@ -0,0 +1,9 @@ +{ + "asset_name": "titanium", + "ingredient": "antarchy:titanium_ingot", + "item_model_index": 0.83, + "description": { + "color": "#86BEC5", + "translate": "trim_material.antarchy.titanium" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/trim_material/uranium.json b/common-1.20.1/src/main/resources/data/antarchy/trim_material/uranium.json new file mode 100644 index 00000000..f28f1b16 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/trim_material/uranium.json @@ -0,0 +1,9 @@ +{ + "asset_name": "uranium", + "ingredient": "antarchy:uranium_ingot", + "item_model_index": 0.84, + "description": { + "color": "#F1DD4D", + "translate": "trim_material.antarchy.uranium" + } +} 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 new file mode 100644 index 00000000..8670a024 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/attitude_adjuster.json @@ -0,0 +1,41 @@ +{ + "parent": "bettercombat:heavy_axe", + "attributes" : { + "attack_range": 3.5, + "pose": "bettercombat:pose_two_handed_heavy", + "category": "greathammer", + "two_handed": true, + "attacks": [ + { + "hitbox": "HORIZONTAL_PLANE", + "damage_multiplier": 1, + "angle": 180, + "upswing": 0.5, + "animation": "bettercombat:two_handed_slash_horizontal_left", + "swing_sound": { + "id": "bettercombat:double_axe_swing" + } + }, + { + "hitbox": "HORIZONTAL_PLANE", + "damage_multiplier": 1, + "angle": 180, + "upswing": 0.5, + "animation": "bettercombat:two_handed_slash_horizontal_right", + "swing_sound": { + "id": "bettercombat:double_axe_swing" + } + }, + { + "hitbox": "FORWARD_BOX", + "damage_multiplier": 1.5, + "angle": 0, + "upswing": 0.5, + "animation": "bettercombat:two_handed_slam", + "swing_sound": { + "id": "bettercombat:hammer_slam" + } + } + ] + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/basilisk_dagger.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/basilisk_dagger.json new file mode 100644 index 00000000..51490007 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/basilisk_dagger.json @@ -0,0 +1,41 @@ +{ + "attributes": { + "attack_range": 1.8, + "category": "soul_knife", + "attacks": [ + { + "hitbox": "FORWARD_BOX", + "damage_multiplier": 1, + "angle": 0, + "upswing": 0.2, + "animation": "bettercombat:one_handed_stab", + "swing_sound": { + "id": "bettercombat:dagger_slash", + "pitch": 1.3 + } + }, + { + "hitbox": "FORWARD_BOX", + "damage_multiplier": 1, + "angle": 0, + "upswing": 0.2, + "animation": "bettercombat:one_handed_stab", + "swing_sound": { + "id": "bettercombat:dagger_slash", + "pitch": 1.4 + } + }, + { + "hitbox": "FORWARD_BOX", + "damage_multiplier": 1.3, + "angle": 0, + "upswing": 0.2, + "animation": "bettercombat:one_handed_stab", + "swing_sound": { + "id": "bettercombat:dagger_slash", + "pitch": 1.5 + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/battle_axe.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/battle_axe.json new file mode 100644 index 00000000..ec3a0418 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/battle_axe.json @@ -0,0 +1,8 @@ +{ + "parent": "bettercombat:heavy_axe", + "attributes": { + "attack_range": 3.5, + "two_handed": true, + "category": "greataxe" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/big_bertha.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/big_bertha.json new file mode 100644 index 00000000..2cd44311 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/big_bertha.json @@ -0,0 +1,40 @@ +{ + "attributes": { + "attack_range": 4.5, + "two_handed": true, + "category": "claymore", + "attacks": [ + { + "hitbox": "HORIZONTAL_PLANE", + "damage_multiplier": 1, + "angle": 180, + "upswing": 0.5, + "animation": "bettercombat:two_handed_slash_horizontal_left", + "swing_sound": { + "id": "bettercombat:claymore_swing" + } + }, + { + "hitbox": "HORIZONTAL_PLANE", + "damage_multiplier": 1, + "angle": 180, + "upswing": 0.5, + "animation": "bettercombat:two_handed_slash_horizontal_right", + "swing_sound": { + "id": "bettercombat:claymore_swing" + } + }, + { + "hitbox": "HORIZONTAL_PLANE", + "damage_multiplier": 1.5, + "angle": 360, + "upswing": 0.5, + "animation": "bettercombat:two_handed_spin", + "swing_sound": { + "id": "bettercombat:claymore_swing", + "pitch": 1.1 + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/blood_crystal_katana.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/blood_crystal_katana.json new file mode 100644 index 00000000..980633c9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/blood_crystal_katana.json @@ -0,0 +1,8 @@ +{ + "parent": "bettercombat:katana", + "attributes": { + "attack_range": 2.9, + "two_handed": true, + "category": "katana" + } +} 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 new file mode 100644 index 00000000..8d3980c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/krakens_grasp.json @@ -0,0 +1,3 @@ +{ + "parent": "bettercombat:rapier" +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/nightmare_sword.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/nightmare_sword.json new file mode 100644 index 00000000..d9bee8f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/nightmare_sword.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/scorpion_whip.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/scorpion_whip.json new file mode 100644 index 00000000..323f5474 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/scorpion_whip.json @@ -0,0 +1,41 @@ +{ + "attributes": { + "attack_range": 3.5, + "category": "rapier", + "attacks": [ + { + "hitbox": "FORWARD_BOX", + "damage_multiplier": 1, + "angle": 0, + "upswing": 0.4, + "animation": "bettercombat:one_handed_stab", + "swing_sound": { + "id": "bettercombat:glaive_slash_quick", + "pitch": 1.2 + } + }, + { + "hitbox": "FORWARD_BOX", + "damage_multiplier": 1, + "angle": 0, + "upswing": 0.4, + "animation": "bettercombat:one_handed_stab", + "swing_sound": { + "id": "bettercombat:glaive_slash_quick", + "pitch": 1.3 + } + }, + { + "hitbox": "HORIZONTAL_PLANE", + "damage_multiplier": 1.2, + "angle": 160, + "upswing": 0.5, + "animation": "bettercombat:one_handed_slash_horizontal_right", + "swing_sound": { + "id": "bettercombat:glaive_slash_quick", + "pitch": 0.9 + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/ultimate_axe.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/ultimate_axe.json new file mode 100644 index 00000000..ec3a0418 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/ultimate_axe.json @@ -0,0 +1,8 @@ +{ + "parent": "bettercombat:heavy_axe", + "attributes": { + "attack_range": 3.5, + "two_handed": true, + "category": "greataxe" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/ultimate_sword.json b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/ultimate_sword.json new file mode 100644 index 00000000..d9bee8f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/weapon_attributes/ultimate_sword.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/worldgen/biome/biowart_caves.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json new file mode 100644 index 00000000..c5b8bd84 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json @@ -0,0 +1,91 @@ +{ + "has_precipitation": false, + "temperature": 0.58, + "downfall": 0.25, + "effects": { + "fog_color": 7639848, + "water_color": 9453328, + "water_fog_color": 5643034, + "sky_color": 5007935, + "grass_color": 4569361, + "foliage_color": 6018898, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 60000, + "block_search_extent": 8, + "offset": 2.0 + }, + "particle": { + "probability": 0.004, + "options": { + "type": "antarchy:orange_ash" + } + } + }, + "spawn_costs": { + "antarchy:jerry": { + "energy_budget": 0.8, + "charge": 4 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [], + [], + [ + "antarchy:cavaryn_bile_veins", + "antarchy:cavaryn_bile_cysts", + "antarchy:termite_nest" + ], + [ + "antarchy:jerry_egg_patch" + ], + [ + "antarchy:biowart_patch", + "antarchy:cavaryn_creepvine", + "antarchy:cavaryn_hanging_creeproots" + ], + [] + ], + "creature_spawn_probability": 0.08, + "spawners": { + "monster": [ + { + "type": "antarchy:jerry", + "weight": 65, + "minCount": 1, + "maxCount": 2 + } + ], + "creature": [ + { + "type": "antarchy:rolly_polly", + "weight": 25, + "minCount": 1, + "maxCount": 3 + }, + { + "type": "antarchy:stink_bug", + "weight": 35, + "minCount": 2, + "maxCount": 4 + } + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..c9b515a3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json @@ -0,0 +1,96 @@ +{ + "has_precipitation": false, + "temperature": 0.45, + "downfall": 0.0, + "effects": { + "fog_color": 655360, + "water_color": 327680, + "water_fog_color": 0, + "sky_color": 262144, + "grass_color": 2763554, + "foliage_color": 2763554, + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 1200000, + "block_search_extent": 8, + "offset": 2.0 + }, + "particle": { + "probability": 0.003, + "options": { + "type": "antarchy:orange_ash" + } + } + }, + "spawn_costs": { + "antarchy:jumpy_bug": { + "energy_budget": 0.4, + "charge": 7 + }, + "antarchy:spit_bug": { + "energy_budget": 0.9, + "charge": 2 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "antarchy:broodstone_uranium_ore", + "antarchy:broodstone_titanium_ore" + ], + [], + [ + "antarchy:cavaryn_bile_veins", + "antarchy:cavaryn_bile_cysts", + "antarchy:termite_nest" + ], + [ + "antarchy:brooding_tunnels_creepvine", + "antarchy:brooding_tunnels_hanging_creeproots", + "antarchy:molting_vines", + "antarchy:ground_molting_vines", + "antarchy:jumpy_bug_egg_ceiling", + "antarchy:spit_bug_egg_patch" + ] + ], + "creature_spawn_probability": 0.12, + "spawners": { + "monster": [ + { + "type": "antarchy:jumpy_bug", + "weight": 95, + "minCount": 1, + "maxCount": 3 + } + ], + "creature": [ + { + "type": "antarchy:rolly_polly", + "weight": 25, + "minCount": 1, + "maxCount": 3 + }, + { + "type": "antarchy:stink_bug", + "weight": 35, + "minCount": 2, + "maxCount": 4 + }], + "ambient": [ + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..9bad1184 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json @@ -0,0 +1,102 @@ +{ + "has_precipitation": false, + "temperature": 0.83, + "downfall": 1.0, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.basalt_deltas.mood", + "tick_delay": 8000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:elythia_large_tuff_boulders", + "antarchy:elythia_tuff_boulders", + "antarchy:butterfly_fields_flora", + "antarchy:elythia_brown_ant_nests", + "antarchy:elythia_rainbow_ant_nests", + "antarchy:ouranwood_cocoon_trees" + ], + [] + ], + "creature_spawn_probability": 0.2, + "spawners": { + "monster": [], + "creature": [ + { + "type": "antarchy:caterpillar", + "weight": 30, + "minCount": 1, + "maxCount": 3 + }, + { + "type": "antarchy:golden_apple_cow", + "weight": 10, + "minCount": 2, + "maxCount": 4 + }, + { + "type": "antarchy:enchanted_golden_apple_cow", + "weight": 4, + "minCount": 1, + "maxCount": 1 + } + ], + "ambient": [ + { + "type": "antarchy:butterfly", + "weight": 180, + "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/cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json new file mode 100644 index 00000000..0d28f52e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json @@ -0,0 +1,86 @@ +{ + "has_precipitation": false, + "temperature": 0.45, + "downfall": 0.0, + "effects": { + "fog_color": 983040, + "water_color": 327680, + "water_fog_color": 0, + "sky_color": 524288, + "grass_color": 4211262, + "foliage_color": 4211262, + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 1200000, + "block_search_extent": 8, + "offset": 2.0 + }, + "particle": { + "probability": 0.002, + "options": { + "type": "antarchy:orange_ash" + } + } + }, + "spawn_costs": { + "antarchy:hercules_beetle": { + "energy_budget": 0.2, + "charge": 15 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "antarchy:myrmite_coal_ore", + "antarchy:broodstone_uranium_ore", + "antarchy:broodstone_titanium_ore" + ], + [], + [ + "antarchy:cavaryn_bile_veins", + "antarchy:cavaryn_bile_cysts", + "antarchy:cavaryn_chitin_spikes", + "antarchy:cavaryn_terror_egg_patch", + "antarchy:termite_nest_cavaryn" + ], + [ + "antarchy:cavaryn_wall_amber_moss", + "antarchy:cavaryn_creepvine", + "antarchy:cavaryn_hanging_creeproots" + ] + ], + "creature_spawn_probability": 0.06, + "spawners": { + "monster": [ + ], + "creature": [ + { + "type": "antarchy:rolly_polly", + "weight": 25, + "minCount": 1, + "maxCount": 3 + }, + { + "type": "antarchy:stink_bug", + "weight": 35, + "minCount": 2, + "maxCount": 4 + }], + "ambient": [ + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json new file mode 100644 index 00000000..869ded6c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json @@ -0,0 +1,106 @@ +{ + "has_precipitation": false, + "temperature": 0.77, + "downfall": 0.96, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4566565, + "grass_color_modifier": "none", + "particle": { + "probability": 0.009, + "options": { + "type": "minecraft:ash" + } + }, + "music": { + "sound": "antarchy:music.game.cavaryn", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true + } + }, + "spawn_costs": { + "antarchy:molevore": { + "energy_budget": 0.9, + "charge": 2.2 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "antarchy:myrmite_coal_ore", + "antarchy:broodstone_uranium_ore", + "antarchy:broodstone_titanium_ore" + ], + [ + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [ + "antarchy:cavaryn_bile_veins", + "antarchy:cavaryn_bile_cysts" + ], + [ + "antarchy:moleworm_caves_creepvine", + "antarchy:moleworm_caves_hanging_creeproots" + ], + [] + ], + "creature_spawn_probability": 0.9, + "spawners": { + "monster": [ + { + "type": "antarchy:molevore", + "weight": 28, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:moleworm", + "weight": 20, + "minCount": 2, + "maxCount": 4 + } + ], + "creature": [ + { + "type": "antarchy:rolly_polly", + "weight": 220, + "minCount": 3, + "maxCount": 7 + }, + { + "type": "antarchy:stink_bug", + "weight": 300, + "minCount": 4, + "maxCount": 8 + } + ], + "ambient": [ + { + "type": "minecraft:bat", + "weight": 1, + "minCount": 1, + "maxCount": 2 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cloud_sea.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cloud_sea.json new file mode 100644 index 00000000..11160712 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cloud_sea.json @@ -0,0 +1,69 @@ +{ + "has_precipitation": false, + "temperature": 0.82, + "downfall": 1.0, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 736368, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.basalt_deltas.mood", + "tick_delay": 8000, + "block_search_extent": 8, + "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true + } + }, + "spawn_costs": { + "antarchy:cloud_shark": { + "energy_budget": 0.15, + "charge": 22 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [ + "antarchy:elythia_clouds" + ], + [], + [], + [], + [], + [], + [] + ], + "creature_spawn_probability": 0.03, + "spawners": { + "creature": [], + "ambient": [], + "monster": [ + { + "type": "antarchy:cloud_shark", + "weight": 10, + "minCount": 1, + "maxCount": 2 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..4d9a7cc0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json @@ -0,0 +1,99 @@ +{ + "has_precipitation": false, + "temperature": 2.0, + "downfall": 0.0, + "effects": { + "fog_color": 983040, + "water_color": 327680, + "water_fog_color": 0, + "sky_color": 524288, + "particle": { + "probability": 0.004, + "options": { + "type": "minecraft:ash" + } + }, + "additions_sound": { + "sound": "antarchy:thoraxis_dream_dunes_biome_additions", + "tick_chance": 0.0005 + }, + "mood_sound": { + "sound": "antarchy:thoraxis_dream_dunes_mood", + "tick_delay": 8572, + "block_search_extent": 8, + "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true + } + }, + "spawn_costs": { + "antarchy:emperor_scorpion": { + "energy_budget": 0.18, + "charge": 1.4 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "antarchy:bluestone_ore" + ], + [], + [ + "antarchy:patch_fire" + ], + [ + "antarchy:nyxite_spikes", + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" + ], + [ + "antarchy:cornea_stalk_patch", + "antarchy:patch_ceiling_cornea_stalk" + ], + [] + ], + "creature_spawn_probability": 0.03, + "spawners": { + "monster": [ + { + "type": "antarchy:scorpion", + "weight": 20, + "minCount": 2, + "maxCount": 5 + }, + { + "type": "antarchy:emperor_scorpion", + "weight": 3, + "minCount": 1, + "maxCount": 1 + } + ], + "creature": [ + { + "type": "antarchy:bed_bug", + "weight": 15, + "minCount": 2, + "maxCount": 4 + } + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..050be664 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json @@ -0,0 +1,69 @@ +{ + "has_precipitation": false, + "temperature": 0.68, + "downfall": 0.96, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 736368, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 7000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground" + ], + [], + [ + "minecraft:patch_sugar_cane" + ], + [] + ], + "creature_spawn_probability": 0.04, + "spawners": { + "monster": [], + "creature": [], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..e04a1a26 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_cloud_sea.json @@ -0,0 +1,60 @@ +{ + "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 new file mode 100644 index 00000000..852ff0f7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json @@ -0,0 +1,97 @@ +{ + "has_precipitation": false, + "temperature": 0.78, + "downfall": 1.0, + "effects": { + "fog_color": 6245375, + "water_color": 3461580, + "water_fog_color": 736368, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.underwater.loop", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground" + ], + [], + [ + "antarchy:elythia_coral_spike" + ], + [] + ], + "creature_spawn_probability": 0.04, + "spawners": { + "monster": [ + { + "type": "antarchy:missile_squid", + "weight": 12, + "minCount": 1, + "maxCount": 3 + } + ], + "creature": [ + { + "type": "minecraft:turtle", + "weight": 5, + "minCount": 1, + "maxCount": 2 + } + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [ + { + "type": "antarchy:octopus_bomb", + "weight": 4, + "minCount": 1, + "maxCount": 2 + } + ], + "water_ambient": [ + { + "type": "minecraft:tropical_fish", + "weight": 20, + "minCount": 4, + "maxCount": 8 + } + ], + "misc": [] + } +} 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 new file mode 100644 index 00000000..48be0038 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json @@ -0,0 +1,87 @@ +{ + "has_precipitation": false, + "temperature": 0.72, + "downfall": 1.0, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 736368, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "particle": { + "probability": 0.01428, + "options": { + "type": "minecraft:spore_blossom_air" + } + }, + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 60000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [], + [ + "minecraft:large_dripstone", + "minecraft:pointed_dripstone", + "minecraft:lush_caves_clay" + ], + [], + [ + "minecraft:lush_caves_vegetation", + "minecraft:rooted_azalea_tree", + "minecraft:spore_blossom", + "minecraft:classic_vines_cave_feature", + "minecraft:cave_vines", + "minecraft:lush_caves_ceiling_vegetation" + ], + [] + ], + "creature_spawn_probability": 0.03, + "spawners": { + "monster": [], + "creature": [], + "ambient": [ + { + "type": "minecraft:bat", + "weight": 10, + "minCount": 8, + "maxCount": 8 + } + ], + "axolotls": [ + { + "type": "minecraft:axolotl", + "weight": 10, + "minCount": 4, + "maxCount": 6 + } + ], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [ + { + "type": "minecraft:tropical_fish", + "weight": 25, + "minCount": 8, + "maxCount": 8 + } + ], + "misc": [] + } +} 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 new file mode 100644 index 00000000..4e865464 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json @@ -0,0 +1,167 @@ +{ + "has_precipitation": false, + "temperature": 0.82, + "downfall": 1.0, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 736368, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.basalt_deltas.mood", + "tick_delay": 8000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": { + "antarchy:alpha_mantis": { + "energy_budget": 0.1, + "charge": 18.0 + }, + "antarchy:mantis": { + "energy_budget": 0.1, + "charge": 15.0 + }, + "antarchy:glimmer": { + "energy_budget": 0.1, + "charge": 9 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:elythia_meadow_large_tuff_boulders", + "antarchy:elythia_meadow_tuff_boulders", + "antarchy:elythia_meadow_flora", + "antarchy:elythia_brown_ant_nests", + "antarchy:elythia_rainbow_ant_nests", + "minecraft:patch_sugar_cane", + "antarchy:giant_lily_pad_patch_meadow" + ], + [] + ], + "creature_spawn_probability": 0.2, + "spawners": { + "creature": [ + { + "type": "antarchy:caterpillar", + "weight": 24, + "minCount": 1, + "maxCount": 1 + }, + { + "type": "antarchy:apple_cow", + "weight": 24, + "minCount": 1, + "maxCount": 3 + }, + { + "type": "antarchy:golden_apple_cow", + "weight": 20, + "minCount": 1, + "maxCount": 3 + }, + { + "type": "antarchy:enchanted_golden_apple_cow", + "weight": 2, + "minCount": 1, + "maxCount": 1 + }, + { + "type": "minecraft:rabbit", + "weight": 16, + "minCount": 1, + "maxCount": 3 + }, + { + "type": "antarchy:glimmer", + "weight": 2, + "minCount": 1, + "maxCount": 1 + } + ], + "ambient": [ + { + "type": "antarchy:butterfly", + "weight": 48, + "minCount": 2, + "maxCount": 4 + } + ], + "monster": [ + { + "type": "antarchy:mantis", + "weight": 20, + "minCount": 1, + "maxCount": 1 + }, + { + "type": "antarchy:alpha_mantis", + "weight": 1, + "minCount": 1, + "maxCount": 1 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [ + { + "type": "antarchy:octopus_bomb", + "weight": 2, + "minCount": 1, + "maxCount": 1 + } + ], + "water_ambient": [ + { + "type": "antarchy:cheep", + "weight": 10, + "minCount": 3, + "maxCount": 6 + }, + { + "type": "minecraft:tropical_fish", + "weight": 20, + "minCount": 4, + "maxCount": 8 + } + ], + "misc": [] + } +} 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 new file mode 100644 index 00000000..a365532b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json @@ -0,0 +1,99 @@ +{ + "has_precipitation": false, + "temperature": 0.65, + "downfall": 1.0, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 736368, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.underwater.loop", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground" + ], + [], + [ + "minecraft:sea_pickle", + "minecraft:warm_ocean_vegetation", + "minecraft:kelp_warm", + "antarchy:giant_lily_pad_patch_common" + ], + [] + ], + "creature_spawn_probability": 0.15, + "spawners": { + "monster": [ + { + "type": "antarchy:missile_squid", + "weight": 12, + "minCount": 1, + "maxCount": 3 + } + ], + "creature": [], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [ + { + "type": "antarchy:octopus_bomb", + "weight": 4, + "minCount": 1, + "maxCount": 2 + } + ], + "water_ambient": [ + { + "type": "antarchy:cheep", + "weight": 10, + "minCount": 3, + "maxCount": 6 + }, + { + "type": "minecraft:tropical_fish", + "weight": 20, + "minCount": 4, + "maxCount": 8 + } + ], + "misc": [] + } +} 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 new file mode 100644 index 00000000..bc4dd507 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json @@ -0,0 +1,73 @@ +{ + "has_precipitation": false, + "temperature": 0.76, + "downfall": 0.98, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 736368, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 7000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:elythia_meadow_flora", + "minecraft:patch_sugar_cane", + "antarchy:giant_lily_pad_patch" + ], + [] + ], + "creature_spawn_probability": 0.04, + "spawners": { + "monster": [], + "creature": [], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..3c822d2d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json @@ -0,0 +1,129 @@ +{ + "has_precipitation": false, + "temperature": 0.78, + "downfall": 0.95, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "particle": { + "probability": 0.009, + "options": { + "type": "minecraft:spore_blossom_air" + } + }, + "additions_sound": { + "sound": "antarchy:ambient.elythia.ouranwood_forest", + "tick_chance": 0.0005 + }, + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": { + "antarchy:glimmer": { + "energy_budget": 0.1, + "charge": 9 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:ouranwood_trees_sparse", + "antarchy:elythia_forest_flora", + "antarchy:elythia_brown_ant_nests", + "antarchy:elythia_rainbow_ant_nests", + "antarchy:fallen_ouranwood_tree", + "antarchy:fungal_mushroom" + ], + [] + ], + "creature_spawn_probability": 0.07, + "spawners": { + "monster": [], + "creature": [ + { + "type": "minecraft:frog", + "weight": 3, + "minCount": 1, + "maxCount": 1 + }, + { + "type": "antarchy:caterpillar", + "weight": 5, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:flying_squirrel", + "weight": 2, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:ouranwood_deer", + "weight": 5, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:glimmer", + "weight": 1, + "minCount": 1, + "maxCount": 1 + } + ], + "ambient": [ + { + "type": "antarchy:butterfly", + "weight": 7, + "minCount": 1, + "maxCount": 2 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..81896bc3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json @@ -0,0 +1,93 @@ +{ + "has_precipitation": false, + "temperature": 0.76, + "downfall": 1.0, + "effects": { + "fog_color": 8084735, + "water_color": 5923435, + "water_fog_color": 3297596, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [ + "antarchy:lumen_pools", + "antarchy:lumen_streams", + "antarchy:lumen_lily_pads", + "antarchy:giant_lily_pad_patch_common" + ], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:ouranwood_trees_sparse", + "antarchy:elythia_forest_flora", + "antarchy:elythia_brown_ant_nests", + "antarchy:elythia_rainbow_ant_nests" + ], + [] + ], + "creature_spawn_probability": 0.15, + "spawners": { + "monster": [], + "creature": [ + { + "type": "antarchy:glimmer", + "weight": 36, + "minCount": 1, + "maxCount": 1 + } + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [ + { + "type": "minecraft:glow_squid", + "weight": 14, + "minCount": 2, + "maxCount": 4 + } + ], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..0addf183 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json @@ -0,0 +1,75 @@ +{ + "has_precipitation": false, + "temperature": 0.68, + "downfall": 0.35, + "effects": { + "fog_color": 12034454, + "water_color": 9453328, + "water_fog_color": 5643034, + "sky_color": 10787353, + "grass_color": 16744192, + "foliage_color": 16722688, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 40000, + "block_search_extent": 8, + "offset": 2.0 + }, + "particle": { + "probability": 0.004, + "options": { + "type": "antarchy:orange_ash" + } + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [], + [], + [], + [ + "antarchy:glowcap_caves_floor_patch", + "antarchy:glowcap_caves_huge_glowcap_mushroom", + "antarchy:glowcap_caves_molting_vines", + "antarchy:glowcap_caves_wall_amber_moss", + "antarchy:termite_nest" + ], + [] + ], + "creature_spawn_probability": 0.09, + "spawners": { + "monster": [ + ], + "creature": [ + { + "type": "antarchy:rolly_polly", + "weight": 25, + "minCount": 1, + "maxCount": 3 + }, + { + "type": "antarchy:stink_bug", + "weight": 40, + "minCount": 2, + "maxCount": 4 + }], + "ambient": [ + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..fe18f88a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json @@ -0,0 +1,100 @@ +{ + "has_precipitation": false, + "temperature": 2.0, + "downfall": 0.0, + "effects": { + "fog_color": 983040, + "water_color": 327680, + "water_fog_color": 0, + "sky_color": 524288, + "particle": { + "probability": 0.005, + "options": { + "type": "minecraft:crimson_spore" + } + }, + "additions_sound": { + "sound": "antarchy:thoraxis_lucid_pools_biome_additions", + "tick_chance": 0.0005 + }, + "mood_sound": { + "sound": "antarchy:thoraxis_lucid_pools_mood", + "tick_delay": 12000, + "block_search_extent": 8, + "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "spawn_costs": { + "antarchy:lucid": { + "energy_budget": 0.10, + "charge": 15.0 + } + }, + "features": [ + [], + [], + [], + [], + [ + "antarchy:bluestone_ore" + ], + [ + "antarchy:lucid_blood_crystal_spires", + "antarchy:lucid_medium_blood_crystal_spires", + "antarchy:lucid_large_blood_crystal_spires" + ], + [], + [ + "antarchy:lucid_antiwater_pools", + "antarchy:antiwater_springs", + "antarchy:bed_bug_surface_cluster", + "antarchy:red_ant_nest_magma", + "antarchy:nyxite_spikes", + "antarchy:patch_fire_sparse", + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" + ], + [], + [ + "antarchy:cornea_stalk_patch", + "antarchy:patch_ceiling_cornea_stalk", + "antarchy:bed_bug_nest" + ], + [] + ], + "creature_spawn_probability": 0.06, + "spawners": { + "monster": [ + { + "type": "antarchy:lucid", + "weight": 7, + "minCount": 1, + "maxCount": 1 + } + ], + "creature": [ + { + "type": "antarchy:bed_bug", + "weight": 7, + "minCount": 2, + "maxCount": 4 + } + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..7efaca3e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json @@ -0,0 +1,80 @@ +{ + "has_precipitation": false, + "temperature": 0.77, + "downfall": 0.96, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4566565, + "grass_color_modifier": "none", + "particle": { + "probability": 0.009, + "options": { + "type": "minecraft:ash" + } + } + }, + "spawn_costs": { + "antarchy:molevore": { + "energy_budget": 0.9, + "charge": 2.2 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [], + [ + "antarchy:elythia_moleworm_warrens", + "antarchy:elythia_moleworm_cave_entrances", + "antarchy:elythia_moleworm_tunnels", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [], + [] + ], + "creature_spawn_probability": 0.08, + "spawners": { + "monster": [ + { + "type": "antarchy:molevore", + "weight": 28, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:moleworm", + "weight": 20, + "minCount": 2, + "maxCount": 4 + } + ], + "creature": [], + "ambient": [ + { + "type": "minecraft:bat", + "weight": 12, + "minCount": 4, + "maxCount": 8 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..8e672ad0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json @@ -0,0 +1,107 @@ +{ + "has_precipitation": false, + "temperature": 2.0, + "downfall": 0.0, + "effects": { + "fog_color": 983040, + "water_color": 327680, + "water_fog_color": 0, + "sky_color": 524288, + "particle": { + "probability": 0.005, + "options": { + "type": "minecraft:crimson_spore" + } + }, + "additions_sound": { + "sound": "antarchy:thoraxis_nightmare_wastes_biome_additions", + "tick_chance": 0.0005 + }, + "mood_sound": { + "sound": "antarchy:thoraxis_nightmare_wastes_mood", + "tick_delay": 8572, + "block_search_extent": 8, + "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "spawn_costs": { + "antarchy:nightmare": { + "energy_budget": 0.1, + "charge": 11.0 + } + }, + "features": [ + [], + [], + [], + [], + [ + "antarchy:bluestone_ore" + ], + [ + "antarchy:thoraxis_floor_rib_columns", + "antarchy:thoraxis_roof_rib_columns", + "antarchy:thoraxis_floor_spikes", + "antarchy:thoraxis_roof_spikes" + ], + [], + [], + [ + "antarchy:antiwater_springs", + "antarchy:bed_bug_surface_cluster", + "antarchy:red_ant_nest_magma", + "antarchy:bed_bug_nest", + "antarchy:nyxite_spikes", + "antarchy:patch_fire_sparse", + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" + ], + [ + "antarchy:cornea_stalk_patch", + "antarchy:patch_ceiling_cornea_stalk" + ], + [] + ], + "creature_spawn_probability": 0.08, + "spawners": { + "monster": [ + { + "type": "antarchy:nightmare", + "weight": 6, + "minCount": 1, + "maxCount": 1 + } + ], + "creature": [ + { + "type": "antarchy:bed_bug", + "weight": 15, + "minCount": 2, + "maxCount": 4 + } + ], + "ambient": [ + { + "type": "antarchy:reverie", + "weight": 10, + "minCount": 1, + "maxCount": 2 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..5a399930 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json @@ -0,0 +1,153 @@ +{ + "has_precipitation": false, + "temperature": 0.78, + "downfall": 0.95, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "particle": { + "probability": 0.009, + "options": { + "type": "minecraft:spore_blossom_air" + } + }, + "additions_sound": { + "sound": "antarchy:ambient.elythia.ouranwood_forest", + "tick_chance": 0.0005 + }, + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": { + "antarchy:basilisk": { + "energy_budget": 0.1, + "charge": 14.0 + }, + "antarchy:glimmer": { + "energy_budget": 0.1, + "charge": 9 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:ouranwood_trees", + "antarchy:elythia_forest_flora", + "antarchy:elythia_brown_ant_nests", + "antarchy:elythia_rainbow_ant_nests" + ], + [ + "antarchy:triffid_patch" + ] + ], + "creature_spawn_probability": 0.07, + "spawners": { + "monster": [ + { + "type": "antarchy:basilisk", + "weight": 20, + "minCount": 1, + "maxCount": 1 + } + ], + "creature": [ + { + "type": "minecraft:frog", + "weight": 3, + "minCount": 1, + "maxCount": 1 + }, + { + "type": "antarchy:caterpillar", + "weight": 6, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:flying_squirrel", + "weight": 4, + "minCount": 1, + "maxCount": 1 + }, + { + "type": "antarchy:ouranwood_deer", + "weight": 6, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:glimmer", + "weight": 1, + "minCount": 1, + "maxCount": 1 + } + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [ + { + "type": "antarchy:octopus_bomb", + "weight": 2, + "minCount": 1, + "maxCount": 1 + } + ], + "water_ambient": [ + { + "type": "antarchy:cheep", + "weight": 10, + "minCount": 3, + "maxCount": 6 + }, + { + "type": "minecraft:tropical_fish", + "weight": 20, + "minCount": 4, + "maxCount": 8 + } + ], + "misc": [] + } +} 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 new file mode 100644 index 00000000..7c74ec9c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json @@ -0,0 +1,106 @@ +{ + "has_precipitation": false, + "temperature": 0.69, + "downfall": 0.97, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 16748737, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": { + "antarchy:glimmer": { + "energy_budget": 0.1, + "charge": 9 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [ + "antarchy:peach_forest_ponds_large", + "antarchy:peach_forest_ponds_medium", + "antarchy:peach_forest_ponds_small" + ], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:peach_forest_mossy_boulders", + "antarchy:blush_moss_patch", + "antarchy:peach_forest_petals", + "antarchy:peach_large_tree", + "antarchy:peach_tree", + "antarchy:peach_forest_flora", + "antarchy:elythia_rainbow_ant_nests", + "antarchy:giant_lily_pad_patch_peach_forest" + ], + [] + ], + "creature_spawn_probability": 0.28, + "spawners": { + "monster": [], + "creature": [ + { + "type": "antarchy:elka", + "weight": 22, + "minCount": 1, + "maxCount": 3 + }, + { + "type": "minecraft:frog", + "weight": 25, + "minCount": 3, + "maxCount": 6 + }, + { + "type": "antarchy:glimmer", + "weight": 2, + "minCount": 1, + "maxCount": 1 + } + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..33d8d16b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json @@ -0,0 +1,83 @@ +{ + "has_precipitation": false, + "temperature": 0.7, + "downfall": 0.6, + "effects": { + "fog_color": 4867366, + "water_color": 6591296, + "water_fog_color": 2440734, + "sky_color": 1710351, + "grass_color": 10275406, + "foliage_color": 10275406, + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 60000, + "block_search_extent": 8, + "offset": 2.0 + }, + "particle": { + "probability": 0.004, + "options": { + "type": "minecraft:spore_blossom_air" + } + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [ + "antarchy:rolly_caves_bile_pool" + ], + [ + "antarchy:rolly_caves_giant_cavern" + ], + [], + [], + [], + [], + [], + [], + [ + "minecraft:lush_caves_vegetation", + "minecraft:lush_caves_ceiling_vegetation", + "minecraft:cave_vines", + "antarchy:rolly_caves_amber_moss_patch", + "antarchy:cavaryn_wall_amber_moss", + "antarchy:termite_nest", + "minecraft:glow_lichen", + "minecraft:patch_tall_grass_2", + "minecraft:lush_caves_clay", + "minecraft:rooted_azalea_tree", + "minecraft:spore_blossom" + ], + [] + ], + "creature_spawn_probability": 0.08, + "spawners": { + "monster": [], + "creature": [ + { + "type": "antarchy:rolly_polly", + "weight": 60, + "minCount": 2, + "maxCount": 4 + }, + { + "type": "antarchy:stink_bug", + "weight": 35, + "minCount": 2, + "maxCount": 4 + } + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..0fb33db1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json @@ -0,0 +1,121 @@ +{ + "has_precipitation": false, + "temperature": 0.78, + "downfall": 0.95, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "particle": { + "probability": 0.009, + "options": { + "type": "minecraft:spore_blossom_air" + } + }, + "additions_sound": { + "sound": "antarchy:ambient.elythia.ouranwood_forest", + "tick_chance": 0.0005 + }, + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": { + "antarchy:glimmer": { + "energy_budget": 0.1, + "charge": 9 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:ouranwood_trees_sparse", + "antarchy:elythia_forest_flora", + "antarchy:elythia_brown_ant_nests", + "antarchy:elythia_rainbow_ant_nests" + ], + [] + ], + "creature_spawn_probability": 0.07, + "spawners": { + "monster": [], + "creature": [ + { + "type": "antarchy:caterpillar", + "weight": 5, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:flying_squirrel", + "weight": 2, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:ouranwood_deer", + "weight": 4, + "minCount": 1, + "maxCount": 1 + }, + { + "type": "antarchy:glimmer", + "weight": 1, + "minCount": 1, + "maxCount": 1 + } + ], + "ambient": [ + { + "type": "antarchy:butterfly", + "weight": 7, + "minCount": 1, + "maxCount": 2 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 new file mode 100644 index 00000000..1d06e420 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json @@ -0,0 +1,105 @@ +{ + "has_precipitation": false, + "temperature": 2.0, + "downfall": 0.0, + "effects": { + "fog_color": 983040, + "water_color": 327680, + "water_fog_color": 0, + "sky_color": 524288, + "particle": { + "probability": 0.006, + "options": { + "type": "minecraft:ash" + } + }, + "additions_sound": { + "sound": "antarchy:thoraxis_nightmare_wastes_biome_additions", + "tick_chance": 0.0005 + }, + "mood_sound": { + "sound": "antarchy:thoraxis_nightmare_wastes_mood", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true + } + }, + "spawn_costs": { + "antarchy:nightmare": { + "energy_budget": 0.3, + "charge": 1.8 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [ + "antarchy:bluestone_ore" + ], + [ + "antarchy:thoraxis_floor_spikes", + "antarchy:thoraxis_roof_spikes" + ], + [], + [ + "antarchy:bed_bug_surface_cluster", + "antarchy:nyxite_spikes", + "antarchy:patch_fire_sparse", + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" + ], + [], + [ + "antarchy:cornea_stalk_patch", + "antarchy:patch_ceiling_cornea_stalk", + "antarchy:bed_bug_nest" + ], + [ + "antarchy:umbral_moss_patch" + ] + ], + "creature_spawn_probability": 0.07, + "spawners": { + "monster": [ + { + "type": "antarchy:nightmare", + "weight": 5, + "minCount": 1, + "maxCount": 1 + } + ], + "creature": [ + { + "type": "antarchy:bed_bug", + "weight": 18, + "minCount": 2, + "maxCount": 5 + } + ], + "ambient": [ + { + "type": "antarchy:reverie", + "weight": 8, + "minCount": 1, + "maxCount": 2 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_patch_bonemeal.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_patch_bonemeal.json new file mode 100644 index 00000000..a9949a67 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_patch_bonemeal.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:vegetation_patch", + "config": { + "depth": 1, + "extra_bottom_block_chance": 0.0, + "extra_edge_column_chance": 0.75, + "ground_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:amber_moss_block" + } + }, + "replaceable": "#antarchy:amber_moss_replaceable", + "surface": "floor", + "vegetation_chance": 0.6, + "vegetation_feature": { + "feature": "antarchy:amber_moss_vegetation", + "placement": [] + }, + "vertical_range": 5, + "xz_radius": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 2, + "min_inclusive": 1 + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_vegetation.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_vegetation.json new file mode 100644 index 00000000..bf8ac8be --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_vegetation.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:weighted_state_provider", + "entries": [ + { + "data": { + "Name": "antarchy:amber_moss_carpet", + "Properties": { + "bottom": "true", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + "weight": 8 + }, + { + "data": { + "Name": "antarchy:glowcap_mushroom" + }, + "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 new file mode 100644 index 00000000..66785c1e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/antigravel_ceiling.json @@ -0,0 +1,11 @@ +{ + "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/antiwater_springs.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/antiwater_springs.json new file mode 100644 index 00000000..2167c3e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/antiwater_springs.json @@ -0,0 +1,26 @@ +{ + "type": "antarchy:antiwater_springs", + "config": { + "state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:antiwater" + } + }, + "horizontal_search_radius": 6, + "floor_search_below": 20, + "floor_search_above": 12, + "vent_offset_radius": 2, + "base_clusters": 1, + "extra_cluster_chance": 4, + "min_small_vent_count": 1, + "max_small_vent_count": 2, + "min_large_vent_count": 2, + "max_large_vent_count": 4, + "large_vent_cluster_chance": 5, + "min_depth": 1, + "max_depth": 4, + "large_cluster_min_depth": 2, + "large_cluster_max_depth": 5 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/basalt_blobs.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/basalt_blobs.json new file mode 100644 index 00000000..66ce1caf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/basalt_blobs.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:netherrack_replace_blobs", + "config": { + "radius": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 7, + "min_inclusive": 3 + } + }, + "state": { + "Name": "antarchy:nyxite", + "Properties": { + "axis": "y" + } + }, + "target": { + "Name": "antarchy:nyxite" + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/bed_bug_nest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/bed_bug_nest.json new file mode 100644 index 00000000..d426764e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/bed_bug_nest.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:bed_bug_nest", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/bed_bug_surface_cluster.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/bed_bug_surface_cluster.json new file mode 100644 index 00000000..74c938ae --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/bed_bug_surface_cluster.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:bed_bug_surface_cluster", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/biowart_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/biowart_patch.json new file mode 100644 index 00000000..958690c7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/biowart_patch.json @@ -0,0 +1,39 @@ +{ + "type": "minecraft:vegetation_patch", + "config": { + "surface": "floor", + "depth": 1, + "vertical_range": 5, + "extra_bottom_block_chance": 0.0, + "extra_edge_column_chance": 0.55, + "vegetation_chance": 0.72, + "xz_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 3, + "max_inclusive": 6 + } + }, + "replaceable": "#antarchy:biowart_replaceable", + "ground_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:biowart" + } + }, + "vegetation_feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:biowart_tendrils" + } + } + } + }, + "placement": [] + } + } +} 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 new file mode 100644 index 00000000..c5d9a0fd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blood_crystal_cluster.json @@ -0,0 +1,27 @@ +{ + "type": "antarchy:thoraxis_blood_crystal_spires", + "config": { + "base_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:blood_crystal_block" + } + }, + "crystal_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:blood_crystal_cluster" + } + }, + "min_height": 6, + "max_height": 10, + "min_base_radius": 1, + "max_base_radius": 2, + "tip_radius": 1, + "sway": 2, + "side_crystal_chance": 0.24, + "branch_chance": 0.08 + } +} + + diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/bluestone_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/bluestone_ore.json new file mode 100644 index 00000000..02212774 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/bluestone_ore.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "size": 4, + "discard_chance_on_air_exposure": 0.0, + "targets": [ + { + "target": { + "predicate_type": "minecraft:block_match", + "block": "antarchy:nyxite" + }, + "state": { + "Name": "antarchy:bluestone_ore" + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch.json new file mode 100644 index 00000000..89be6bc7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:vegetation_patch", + "config": { + "depth": 1, + "extra_bottom_block_chance": 0.0, + "extra_edge_column_chance": 0.3, + "ground_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:blush_moss_block" + } + }, + "replaceable": "#antarchy:blush_moss_replaceable", + "surface": "floor", + "vegetation_chance": 0.8, + "vegetation_feature": { + "feature": "antarchy:blush_moss_vegetation", + "placement": [] + }, + "vertical_range": 5, + "xz_radius": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 7, + "min_inclusive": 4 + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch_bonemeal.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch_bonemeal.json new file mode 100644 index 00000000..89be6bc7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch_bonemeal.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:vegetation_patch", + "config": { + "depth": 1, + "extra_bottom_block_chance": 0.0, + "extra_edge_column_chance": 0.3, + "ground_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:blush_moss_block" + } + }, + "replaceable": "#antarchy:blush_moss_replaceable", + "surface": "floor", + "vegetation_chance": 0.8, + "vegetation_feature": { + "feature": "antarchy:blush_moss_vegetation", + "placement": [] + }, + "vertical_range": 5, + "xz_radius": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 7, + "min_inclusive": 4 + } + } + } +} 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 new file mode 100644 index 00000000..bcf78e9a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_vegetation.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:weighted_state_provider", + "entries": [ + { + "data": { + "Name": "antarchy:blush_moss_carpet", + "Properties": { + "bottom": "true", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + "weight": 25 + } + ] + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/broodstone_titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/broodstone_titanium_ore.json new file mode 100644 index 00000000..5832f471 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/broodstone_titanium_ore.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "size": 4, + "discard_chance_on_air_exposure": 0.0, + "targets": [ + { + "target": { + "predicate_type": "minecraft:block_match", + "block": "antarchy:broodstone" + }, + "state": { + "Name": "antarchy:broodstone_titanium_ore" + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/broodstone_uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/broodstone_uranium_ore.json new file mode 100644 index 00000000..71eb802c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/broodstone_uranium_ore.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "size": 4, + "discard_chance_on_air_exposure": 0.0, + "targets": [ + { + "target": { + "predicate_type": "minecraft:block_match", + "block": "antarchy:broodstone" + }, + "state": { + "Name": "antarchy:broodstone_uranium_ore" + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/brown_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/brown_ant_nest.json new file mode 100644 index 00000000..43492df6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/brown_ant_nest.json @@ -0,0 +1,14 @@ +{ + "type": "antarchy:brown_ant_nest", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:brown_ant_nest", + "Properties": { + "facing": "north" + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/brutalfly_cocoon.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/brutalfly_cocoon.json new file mode 100644 index 00000000..4f76262b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/brutalfly_cocoon.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:brutalfly_cocoon", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/butterfly_fields_flora.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/butterfly_fields_flora.json new file mode 100644 index 00000000..3e137c72 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/butterfly_fields_flora.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:butterfly_fields_flora", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_cysts.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_cysts.json new file mode 100644 index 00000000..1616e268 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_cysts.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:cavaryn_bile_cysts", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_veins.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_veins.json new file mode 100644 index 00000000..6a2a5e5d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_veins.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:cavaryn_bile_veins", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chitin_spikes.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chitin_spikes.json new file mode 100644 index 00000000..4272b51d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chitin_spikes.json @@ -0,0 +1,18 @@ +{ + "type": "antarchy:cavaryn_chitin_spikes", + "config": { + "floor_to_ceiling_search_range": 10, + "radius": 4, + "max_column_height": 5, + "height_deviation": 1, + "chance_of_column_at_max_distance_from_center": 0.3, + "max_distance_from_center_affecting_chance_of_column": 4, + "max_distance_from_center_affecting_height_bias": 4, + "max_height_difference": 1, + "large_variant_chance": 0.35, + "large_variant_extra_radius": 3, + "large_variant_extra_height": 4, + "large_variant_extra_height_deviation": 2, + "large_variant_surface_spike_multiplier": 2.5 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_creepvine.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_creepvine.json new file mode 100644 index 00000000..13d7a210 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_creepvine.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:cavaryn_creepvine", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_terror_egg_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_terror_egg_patch.json new file mode 100644 index 00000000..76039ff0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_terror_egg_patch.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:cavaryn_terror_egg_patch", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_wall_amber_moss.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_wall_amber_moss.json new file mode 100644 index 00000000..f06cc5d9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_wall_amber_moss.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:cavaryn_wall_amber_moss", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/corn_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/corn_patch.json new file mode 100644 index 00000000..d6fd8f3c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/corn_patch.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:corn_patch", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cornea_stalk_cluster.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cornea_stalk_cluster.json new file mode 100644 index 00000000..c171b3e2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cornea_stalk_cluster.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:random_patch", + "config": { + "tries": 12, + "xz_spread": 4, + "y_spread": 1, + "feature": "antarchy:cornea_stalk_single" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cornea_stalk_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cornea_stalk_patch.json new file mode 100644 index 00000000..9ba60ff3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/cornea_stalk_patch.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:cornea_stalk", + "Properties": { + "age": "3" + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/delta.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/delta.json new file mode 100644 index 00000000..1fe8e599 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/delta.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:delta_feature", + "config": { + "contents": { + "Name": "antarchy:ichor", + "Properties": { + "level": "0" + } + }, + "rim": { + "Name": "minecraft:magma_block" + }, + "rim_size": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 2, + "min_inclusive": 0 + } + }, + "size": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 7, + "min_inclusive": 3 + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/dimensional_tear.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/dimensional_tear.json new file mode 100644 index 00000000..cde1b426 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/dimensional_tear.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:dimensional_tear", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_clouds.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_clouds.json new file mode 100644 index 00000000..c168bd7a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_clouds.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_clouds", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_coral_spike.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_coral_spike.json new file mode 100644 index 00000000..066a22b9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_coral_spike.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_coral_spike", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_forest_flora.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_forest_flora.json new file mode 100644 index 00000000..be76b7b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_forest_flora.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_forest_flora", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_large_tuff_boulder.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_large_tuff_boulder.json new file mode 100644 index 00000000..6b10ea67 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_large_tuff_boulder.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_large_tuff_boulder", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_meadow_flora.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_meadow_flora.json new file mode 100644 index 00000000..c053048c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_meadow_flora.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_meadow_flora", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_cave_entrances.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_cave_entrances.json new file mode 100644 index 00000000..77cea35f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_cave_entrances.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_moleworm_cave_entrances", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_surface_mounds.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_surface_mounds.json new file mode 100644 index 00000000..6e9733c3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_surface_mounds.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_moleworm_surface_mounds", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_tunnels.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_tunnels.json new file mode 100644 index 00000000..089735fb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_tunnels.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_moleworm_tunnels", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_warrens.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_warrens.json new file mode 100644 index 00000000..713fcfe9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_moleworm_warrens.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_moleworm_warrens", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_pond.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_pond.json new file mode 100644 index 00000000..e00c9bc3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_pond.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_pond", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_surface_cover.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_surface_cover.json new file mode 100644 index 00000000..d567f535 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_surface_cover.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_surface_cover", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_tuff_boulder.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_tuff_boulder.json new file mode 100644 index 00000000..fba2a478 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_tuff_boulder.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_tuff_boulder", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_underground.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_underground.json new file mode 100644 index 00000000..613db8d0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_underground.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_underground", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/fallen_ouranwood_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/fallen_ouranwood_tree.json new file mode 100644 index 00000000..5c93038c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/fallen_ouranwood_tree.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:fallen_ouranwood_tree", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/flower_forest_milkweed.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/flower_forest_milkweed.json new file mode 100644 index 00000000..526138f4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/flower_forest_milkweed.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:flower_forest_milkweed", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/fungal_mushroom.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/fungal_mushroom.json new file mode 100644 index 00000000..5c113be3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/fungal_mushroom.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:fungal_mushroom", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/giant_lily_pad_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/giant_lily_pad_patch.json new file mode 100644 index 00000000..5188ad45 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/giant_lily_pad_patch.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:giant_lily_pad_patch", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/giant_lily_pad_patch_peach_forest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/giant_lily_pad_patch_peach_forest.json new file mode 100644 index 00000000..9d3e15fe --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/giant_lily_pad_patch_peach_forest.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:giant_lily_pad_patch_peach_forest", + "config": {} +} 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 new file mode 100644 index 00000000..dc6a4cc8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/glowcap_caves_floor_patch.json @@ -0,0 +1,67 @@ +{ + "type": "minecraft:vegetation_patch", + "config": { + "surface": "floor", + "depth": 1, + "vertical_range": 5, + "extra_bottom_block_chance": 0.0, + "extra_edge_column_chance": 0.55, + "vegetation_chance": 0.85, + "xz_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 4, + "max_inclusive": 7 + } + }, + "replaceable": "#antarchy:amber_moss_replaceable", + "ground_state": { + "type": "minecraft:weighted_state_provider", + "entries": [ + { + "weight": 3, + "data": { + "Name": "antarchy:amber_moss_block" + } + }, + { + "weight": 2, + "data": { + "Name": "minecraft:mycelium" + } + } + ] + }, + "vegetation_feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:weighted_state_provider", + "entries": [ + { + "weight": 24, + "data": { + "Name": "antarchy:amber_moss_carpet" + } + }, + { + "weight": 12, + "data": { + "Name": "minecraft:short_grass" + } + }, + { + "weight": 2, + "data": { + "Name": "antarchy:glowcap_mushroom" + } + } + ] + } + } + }, + "placement": [] + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/glowstone_extra.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/glowstone_extra.json new file mode 100644 index 00000000..041755c0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/glowstone_extra.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:glowstone_blob", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ground_molting_vines.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ground_molting_vines.json new file mode 100644 index 00000000..289e8743 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ground_molting_vines.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:ground_molting_vines", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/hanging_creeproots.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/hanging_creeproots.json new file mode 100644 index 00000000..9acb5ad3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/hanging_creeproots.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:hanging_creeproots", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/huge_glowcap_mushroom.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/huge_glowcap_mushroom.json new file mode 100644 index 00000000..e2ad8f3f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/huge_glowcap_mushroom.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:huge_glowcap_mushroom", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/huge_glowcap_mushroom_worldgen.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/huge_glowcap_mushroom_worldgen.json new file mode 100644 index 00000000..0ed99905 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/huge_glowcap_mushroom_worldgen.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:huge_glowcap_mushroom_worldgen", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/jerry_egg_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/jerry_egg_patch.json new file mode 100644 index 00000000..15732cb3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/jerry_egg_patch.json @@ -0,0 +1,42 @@ +{ + "type": "minecraft:random_patch", + "config": { + "tries": 10, + "xz_spread": 5, + "y_spread": 2, + "feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:jerry_egg", + "Properties": { + "rotated": "false" + } + } + } + } + }, + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:matching_blocks", + "offset": [ + 0, + -1, + 0 + ], + "blocks": [ + "antarchy:biomite", + "antarchy:biomite_turf", + "antarchy:biowart" + ] + } + } + ] + } + } +} 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 new file mode 100644 index 00000000..f63327da --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/jumpy_bug_egg_ceiling.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:jumpy_bug_egg_ceiling", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/large_basalt_columns.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/large_basalt_columns.json new file mode 100644 index 00000000..c6d8c459 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/large_basalt_columns.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:basalt_columns", + "config": { + "height": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 10, + "min_inclusive": 5 + } + }, + "reach": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 3, + "min_inclusive": 2 + } + } + } +} 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 new file mode 100644 index 00000000..3787ac71 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/large_blood_crystal_cluster.json @@ -0,0 +1,27 @@ +{ + "type": "antarchy:thoraxis_blood_crystal_spires", + "config": { + "base_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:blood_crystal_block" + } + }, + "crystal_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:blood_crystal_cluster" + } + }, + "min_height": 16, + "max_height": 24, + "min_base_radius": 3, + "max_base_radius": 5, + "tip_radius": 1, + "sway": 4, + "side_crystal_chance": 0.32, + "branch_chance": 0.16 + } +} + + diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_lily_pads.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_lily_pads.json new file mode 100644 index 00000000..f266ce88 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_lily_pads.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:lumen_lily_pads", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_pools.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_pools.json new file mode 100644 index 00000000..2c7be22b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_pools.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:lumen_pools", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_spires.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_spires.json new file mode 100644 index 00000000..dee83232 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_spires.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:lumen_spires", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_streams.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_streams.json new file mode 100644 index 00000000..d90db198 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_streams.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:lumen_streams", + "config": {} +} 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 new file mode 100644 index 00000000..aba0d210 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/medium_blood_crystal_cluster.json @@ -0,0 +1,27 @@ +{ + "type": "antarchy:thoraxis_blood_crystal_spires", + "config": { + "base_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:blood_crystal_block" + } + }, + "crystal_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:blood_crystal_cluster" + } + }, + "min_height": 10, + "max_height": 16, + "min_base_radius": 2, + "max_base_radius": 3, + "tip_radius": 1, + "sway": 3, + "side_crystal_chance": 0.28, + "branch_chance": 0.12 + } +} + + diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/molting_vines.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/molting_vines.json new file mode 100644 index 00000000..2099fa52 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/molting_vines.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:molting_vines", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/myrmite_coal_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/myrmite_coal_ore.json new file mode 100644 index 00000000..fd6b9ffe --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/myrmite_coal_ore.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "size": 12, + "discard_chance_on_air_exposure": 0.0, + "targets": [ + { + "target": { + "predicate_type": "minecraft:block_match", + "block": "antarchy:myrmite" + }, + "state": { + "Name": "antarchy:myrmite_coal_ore" + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/nyxite_spikes.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/nyxite_spikes.json new file mode 100644 index 00000000..51efc5f7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/nyxite_spikes.json @@ -0,0 +1,13 @@ +{ + "type": "antarchy:nyxite_spikes", + "config": { + "floor_to_ceiling_search_range": 10, + "radius": 4, + "max_column_height": 4, + "height_deviation": 1, + "chance_of_column_at_max_distance_from_center": 0.25, + "max_distance_from_center_affecting_chance_of_column": 4, + "max_distance_from_center_affecting_height_bias": 4, + "max_height_difference": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ore_gold.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ore_gold.json new file mode 100644 index 00000000..1b39be60 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ore_gold.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 9, + "targets": [ + { + "state": { + "Name": "minecraft:gold_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "minecraft:deepslate_gold_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ore_gravel_nether.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ore_gravel_nether.json new file mode 100644 index 00000000..0ded5a55 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ore_gravel_nether.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 33, + "targets": [ + { + "state": { + "Name": "minecraft:gravel" + }, + "target": { + "block": "antarchy:nyxite", + "predicate_type": "minecraft:block_match" + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ore_magma.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ore_magma.json new file mode 100644 index 00000000..85e60066 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ore_magma.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 33, + "targets": [ + { + "state": { + "Name": "minecraft:blackstone" + }, + "target": { + "block": "antarchy:nyxite", + "predicate_type": "minecraft:block_match" + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_cocoon_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_cocoon_tree.json new file mode 100644 index 00000000..8bc2fa8d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_cocoon_tree.json @@ -0,0 +1,72 @@ +{ + "type": "antarchy:ouranwood_cocoon_tree", + "config": { + "trunk_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:ouranwood_log", + "Properties": { + "axis": "y" + } + } + }, + "foliage_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:ouranwood_leaves", + "Properties": { + "distance": "7", + "persistent": "false", + "waterlogged": "false" + } + } + }, + "height": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 55, + "max_inclusive": 75 + } + }, + "trunk_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 1, + "max_inclusive": 2 + } + }, + "canopy_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 7, + "max_inclusive": 12 + } + }, + "canopy_depth": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 10, + "max_inclusive": 16 + } + }, + "buttress_height": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 3, + "max_inclusive": 7 + } + }, + "trunk_vine_length": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 3, + "max_inclusive": 7 + } + }, + "juvenile": false, + "flying_squirrel_nest_chance": 0.1, + "flying_squirrel_hollow_chance": 0.5, + "wasp_nest_chance": 0.025, + "caterpillar_chrysalis_chance": 0.05 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_large_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_large_tree.json new file mode 100644 index 00000000..714baac9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_large_tree.json @@ -0,0 +1,72 @@ +{ + "type": "antarchy:ouranwood_large_tree", + "config": { + "trunk_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:ouranwood_log", + "Properties": { + "axis": "y" + } + } + }, + "foliage_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:ouranwood_leaves", + "Properties": { + "distance": "7", + "persistent": "false", + "waterlogged": "false" + } + } + }, + "height": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 108, + "max_inclusive": 136 + } + }, + "trunk_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 2, + "max_inclusive": 3 + } + }, + "canopy_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 10, + "max_inclusive": 16 + } + }, + "canopy_depth": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 16, + "max_inclusive": 24 + } + }, + "buttress_height": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 6, + "max_inclusive": 12 + } + }, + "trunk_vine_length": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 4, + "max_inclusive": 9 + } + }, + "juvenile": false, + "flying_squirrel_nest_chance": 0.16, + "flying_squirrel_hollow_chance": 0.75, + "wasp_nest_chance": 0.03266666666666667, + "caterpillar_chrysalis_chance": 0.09 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_medium_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_medium_tree.json new file mode 100644 index 00000000..c9b06653 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_medium_tree.json @@ -0,0 +1,72 @@ +{ + "type": "antarchy:ouranwood_medium_tree", + "config": { + "trunk_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:ouranwood_log", + "Properties": { + "axis": "y" + } + } + }, + "foliage_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:ouranwood_leaves", + "Properties": { + "distance": "7", + "persistent": "false", + "waterlogged": "false" + } + } + }, + "height": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 48, + "max_inclusive": 72 + } + }, + "trunk_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 1, + "max_inclusive": 2 + } + }, + "canopy_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 7, + "max_inclusive": 11 + } + }, + "canopy_depth": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 10, + "max_inclusive": 15 + } + }, + "buttress_height": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 1, + "max_inclusive": 4 + } + }, + "trunk_vine_length": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 3, + "max_inclusive": 7 + } + }, + "juvenile": false, + "flying_squirrel_nest_chance": 0.08, + "flying_squirrel_hollow_chance": 0.45, + "wasp_nest_chance": 0.02333333333333333, + "caterpillar_chrysalis_chance": 0.07 + } +} 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 new file mode 100644 index 00000000..bb766731 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_tree_selector.json @@ -0,0 +1,11 @@ +{ + "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" } + ], + "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 new file mode 100644 index 00000000..db71d906 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_tree_selector_sparse.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:random_selector", + "config": { + "features": [ + { "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/ouranwood_young_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_young_tree.json new file mode 100644 index 00000000..dabb3f3c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/ouranwood_young_tree.json @@ -0,0 +1,71 @@ +{ + "type": "antarchy:ouranwood_young_tree", + "config": { + "trunk_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:ouranwood_log", + "Properties": { + "axis": "y" + } + } + }, + "foliage_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:ouranwood_leaves", + "Properties": { + "distance": "7", + "persistent": "false", + "waterlogged": "false" + } + } + }, + "height": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 22, + "max_inclusive": 36 + } + }, + "trunk_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 1, + "max_inclusive": 2 + } + }, + "canopy_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 5, + "max_inclusive": 8 + } + }, + "canopy_depth": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 7, + "max_inclusive": 11 + } + }, + "buttress_height": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 0, + "max_inclusive": 1 + } + }, + "trunk_vine_length": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 2, + "max_inclusive": 5 + } + }, + "juvenile": true, + "flying_squirrel_nest_chance": 0.0, + "flying_squirrel_hollow_chance": 0.0, + "wasp_nest_chance": 0.0 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_ceiling_cornea_stalk.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_ceiling_cornea_stalk.json new file mode 100644 index 00000000..97ad1d9d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_ceiling_cornea_stalk.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:cornea_stalk", + "Properties": { + "age": "3", + "hanging": "true" + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_ceiling_cornea_stalk_cluster.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_ceiling_cornea_stalk_cluster.json new file mode 100644 index 00000000..f48eee6a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_ceiling_cornea_stalk_cluster.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:random_patch", + "config": { + "tries": 12, + "xz_spread": 4, + "y_spread": 1, + "feature": "antarchy:patch_ceiling_cornea_stalk_single" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_ceiling_fire.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_ceiling_fire.json new file mode 100644 index 00000000..46e3a903 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_ceiling_fire.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:dream_fire_ceiling" + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_fire.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_fire.json new file mode 100644 index 00000000..a71363c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_fire.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:dream_fire" + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_soul_fire.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_soul_fire.json new file mode 100644 index 00000000..acc303d8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/patch_soul_fire.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "minecraft:soul_fire" + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_flora.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_flora.json new file mode 100644 index 00000000..7dfc323c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_flora.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:peach_forest_flora", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_mossy_boulder.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_mossy_boulder.json new file mode 100644 index 00000000..b980262e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_mossy_boulder.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:peach_forest_mossy_boulder", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_petals.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_petals.json new file mode 100644 index 00000000..b6be7acd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_petals.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:weighted_state_provider", + "entries": [ + { + "data": { + "Name": "minecraft:pink_petals", + "Properties": { + "flower_amount": "2" + } + }, + "weight": 1 + }, + { + "data": { + "Name": "minecraft:pink_petals", + "Properties": { + "flower_amount": "3" + } + }, + "weight": 1 + }, + { + "data": { + "Name": "minecraft:pink_petals", + "Properties": { + "flower_amount": "4" + } + }, + "weight": 1 + } + ] + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_large.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_large.json new file mode 100644 index 00000000..bd272aec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_large.json @@ -0,0 +1,9 @@ +{ + "type": "antarchy:peach_forest_pond", + "config": { + "min_radius": 16, + "max_radius": 24, + "min_depth": 6, + "max_depth": 9 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_medium.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_medium.json new file mode 100644 index 00000000..440d8a53 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_medium.json @@ -0,0 +1,9 @@ +{ + "type": "antarchy:peach_forest_pond", + "config": { + "min_radius": 12, + "max_radius": 16, + "min_depth": 4, + "max_depth": 6 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_small.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_small.json new file mode 100644 index 00000000..2c9bfc5c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_small.json @@ -0,0 +1,9 @@ +{ + "type": "antarchy:peach_forest_pond", + "config": { + "min_radius": 8, + "max_radius": 12, + "min_depth": 3, + "max_depth": 4 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_large_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_large_tree.json new file mode 100644 index 00000000..8432c77e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_large_tree.json @@ -0,0 +1,49 @@ +{ + "type": "antarchy:peach_tree", + "config": { + "trunk_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:peach_log", + "Properties": { + "axis": "y" + } + } + }, + "foliage_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:peach_leaves", + "Properties": { + "distance": "7", + "persistent": "false", + "waterlogged": "false" + } + } + }, + "height": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 20, + "max_inclusive": 30 + } + }, + "canopy_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 7, + "max_inclusive": 8 + } + }, + "branch_count": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 4, + "max_inclusive": 6 + } + }, + "trunk_width": 2, + "fruit_chance": 0.6, + "top_canopy_scale": 0.72 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_tree.json new file mode 100644 index 00000000..cd0331bc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/peach_tree.json @@ -0,0 +1,49 @@ +{ + "type": "antarchy:peach_tree", + "config": { + "trunk_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:peach_log", + "Properties": { + "axis": "y" + } + } + }, + "foliage_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:peach_leaves", + "Properties": { + "distance": "7", + "persistent": "false", + "waterlogged": "false" + } + } + }, + "height": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 10, + "max_inclusive": 15 + } + }, + "canopy_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 4, + "max_inclusive": 5 + } + }, + "branch_count": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 3, + "max_inclusive": 5 + } + }, + "trunk_width": 1, + "fruit_chance": 0.45, + "top_canopy_scale": 0.62 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/potent_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/potent_nyxite.json new file mode 100644 index 00000000..4f84508f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/potent_nyxite.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:potent_nyxite", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rainbow_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rainbow_ant_nest.json new file mode 100644 index 00000000..5c112639 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rainbow_ant_nest.json @@ -0,0 +1,14 @@ +{ + "type": "antarchy:rainbow_ant_nest", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:rainbow_ant_nest", + "Properties": { + "facing": "north" + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/red_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/red_ant_nest.json new file mode 100644 index 00000000..ec67fa66 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/red_ant_nest.json @@ -0,0 +1,14 @@ +{ + "type": "antarchy:red_ant_nest", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:red_ant_nest", + "Properties": { + "facing": "north" + } + } + } + } +} 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 new file mode 100644 index 00000000..2e18b002 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_amber_moss_patch.json @@ -0,0 +1,73 @@ +{ + "type": "minecraft:vegetation_patch", + "config": { + "surface": "floor", + "depth": 1, + "vertical_range": 5, + "extra_bottom_block_chance": 0.0, + "extra_edge_column_chance": 0.3, + "vegetation_chance": 0.7, + "xz_radius": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 4, + "max_inclusive": 7 + } + }, + "replaceable": "#minecraft:moss_replaceable", + "ground_state": { + "type": "minecraft:weighted_state_provider", + "entries": [ + { + "weight": 3, + "data": { + "Name": "antarchy:amber_moss_block" + } + }, + { + "weight": 2, + "data": { + "Name": "minecraft:moss_block" + } + } + ] + }, + "vegetation_feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:weighted_state_provider", + "entries": [ + { + "weight": 4, + "data": { + "Name": "antarchy:amber_moss_carpet" + } + }, + { + "weight": 3, + "data": { + "Name": "minecraft:moss_carpet" + } + }, + { + "weight": 2, + "data": { + "Name": "minecraft:short_grass" + } + }, + { + "weight": 2, + "data": { + "Name": "antarchy:glowcap_mushroom" + } + } + ] + } + } + }, + "placement": [] + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_bile_pool.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_bile_pool.json new file mode 100644 index 00000000..65ea831a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_bile_pool.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:lake", + "config": { + "fluid": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:bile", + "Properties": { + "level": "0" + } + } + }, + "barrier": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "minecraft:moss_block" + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_giant_cavern.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_giant_cavern.json new file mode 100644 index 00000000..6478f042 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_giant_cavern.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:rolly_caves_giant_cavern", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_glowcap_mushroom.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_glowcap_mushroom.json new file mode 100644 index 00000000..4b4a8ac2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/rolly_caves_glowcap_mushroom.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:glowcap_mushroom" + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/seashell_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/seashell_patch.json new file mode 100644 index 00000000..c9987613 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/seashell_patch.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:seashell_patch", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/shellstone_blob.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/shellstone_blob.json new file mode 100644 index 00000000..51810441 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/shellstone_blob.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 64, + "targets": [ + { + "state": { + "Name": "antarchy:shellstone" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:base_stone_overworld" + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/small_basalt_columns.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/small_basalt_columns.json new file mode 100644 index 00000000..e201bad5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/small_basalt_columns.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:basalt_columns", + "config": { + "height": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 4, + "min_inclusive": 1 + } + }, + "reach": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spit_bug_egg_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spit_bug_egg_patch.json new file mode 100644 index 00000000..cc45b2c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spit_bug_egg_patch.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:spit_bug_egg_patch", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_antiwater_open.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_antiwater_open.json new file mode 100644 index 00000000..60ed926a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_antiwater_open.json @@ -0,0 +1,16 @@ +{ + "type": "antarchy:lucid_antiwater_pool", + "config": { + "state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:antiwater" + } + }, + "min_radius": 8, + "max_radius": 18, + "min_depth": 2, + "max_depth": 6, + "irregularity": 0.25 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_delta.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_delta.json new file mode 100644 index 00000000..99522b32 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_delta.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:spring_feature", + "config": { + "state": { + "Name": "antarchy:ichor", + "Properties": { + "falling": "true" + } + }, + "valid_blocks": [ + "antarchy:nyxite", + "minecraft:soul_sand", + "minecraft:gravel", + "minecraft:magma_block", + "minecraft:blackstone" + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_lava_overworld.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_lava_overworld.json new file mode 100644 index 00000000..51c6bdba --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_lava_overworld.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:spring_feature", + "config": { + "state": { + "Name": "antarchy:ichor", + "Properties": { + "falling": "true" + } + }, + "valid_blocks": [ + "minecraft:stone", + "minecraft:granite", + "minecraft:diorite", + "minecraft:andesite", + "minecraft:deepslate", + "minecraft:tuff", + "minecraft:calcite", + "minecraft:dirt" + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_nether_closed.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_nether_closed.json new file mode 100644 index 00000000..8ca3b05d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_nether_closed.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:spring_feature", + "config": { + "hole_count": 0, + "requires_block_below": false, + "rock_count": 5, + "state": { + "Name": "antarchy:ichor", + "Properties": { + "falling": "true" + } + }, + "valid_blocks": "antarchy:nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_nether_open.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_nether_open.json new file mode 100644 index 00000000..020a7258 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/spring_nether_open.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:spring_feature", + "config": { + "requires_block_below": false, + "state": { + "Name": "antarchy:ichor", + "Properties": { + "falling": "true" + } + }, + "valid_blocks": "antarchy:nyxite" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/star_coral_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/star_coral_patch.json new file mode 100644 index 00000000..26ef9212 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/star_coral_patch.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:star_coral_patch", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/termite_nest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/termite_nest.json new file mode 100644 index 00000000..f777d3bb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/termite_nest.json @@ -0,0 +1,14 @@ +{ + "type": "antarchy:termite_nest", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:termite_nest", + "Properties": { + "facing": "north" + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_rib_columns.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_rib_columns.json new file mode 100644 index 00000000..47c44f53 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_rib_columns.json @@ -0,0 +1,13 @@ +{ + "type": "antarchy:thoraxis_rib_columns", + "config": { + "min_ribs": 3, + "max_ribs": 6, + "min_length": 5, + "max_length": 12, + "min_thickness": 1, + "max_thickness": 3, + "curve_strength": 8, + "claw_gap_chance": 0.35 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_stalactite.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_stalactite.json new file mode 100644 index 00000000..b28b1f0a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_stalactite.json @@ -0,0 +1,12 @@ +{ + "type": "antarchy:thoraxis_spike", + "config": { + "orientation": "DOWN", + "min_length": 48, + "max_length": 88, + "base_radius": 4, + "tip_radius": 1, + "sway": 9, + "branch_chance": 0.22 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_stalagmite.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_stalagmite.json new file mode 100644 index 00000000..04f4f197 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_stalagmite.json @@ -0,0 +1,12 @@ +{ + "type": "antarchy:thoraxis_spike", + "config": { + "orientation": "UP", + "min_length": 48, + "max_length": 88, + "base_radius": 4, + "tip_radius": 1, + "sway": 9, + "branch_chance": 0.22 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/titanium_ore.json new file mode 100644 index 00000000..3842b35d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/titanium_ore.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "size": 3, + "discard_chance_on_air_exposure": 0.0, + "targets": [ + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + }, + "state": { + "Name": "antarchy:titanium_ore" + } + }, + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + }, + "state": { + "Name": "antarchy:deepslate_titanium_ore" + } + } + ] + } +} 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 new file mode 100644 index 00000000..055de6bc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/triffid_patch.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:triffid_patch", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/umbral_moss_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/umbral_moss_patch.json new file mode 100644 index 00000000..617b8484 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/umbral_moss_patch.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:vegetation_patch", + "config": { + "depth": 1, + "extra_bottom_block_chance": 0.0, + "extra_edge_column_chance": 0.3, + "ground_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:umbral_moss_block" + } + }, + "replaceable": "#antarchy:umbral_moss_replaceable", + "surface": "floor", + "vegetation_chance": 0.4, + "vegetation_feature": { + "feature": "antarchy:umbral_moss_vegetation", + "placement": [] + }, + "vertical_range": 5, + "xz_radius": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 7, + "min_inclusive": 4 + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/umbral_moss_patch_bonemeal.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/umbral_moss_patch_bonemeal.json new file mode 100644 index 00000000..405fdcd9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/umbral_moss_patch_bonemeal.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:vegetation_patch", + "config": { + "depth": 1, + "extra_bottom_block_chance": 0.0, + "extra_edge_column_chance": 0.3, + "ground_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:umbral_moss_block" + } + }, + "replaceable": "#antarchy:umbral_moss_replaceable", + "surface": "floor", + "vegetation_chance": 0.8, + "vegetation_feature": { + "feature": "antarchy:umbral_moss_vegetation", + "placement": [] + }, + "vertical_range": 5, + "xz_radius": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 7, + "min_inclusive": 4 + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/umbral_moss_vegetation.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/umbral_moss_vegetation.json new file mode 100644 index 00000000..c42a3618 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/umbral_moss_vegetation.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:weighted_state_provider", + "entries": [ + { + "data": { + "Name": "antarchy:umbral_moss_carpet", + "Properties": { + "bottom": "true", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + "weight": 25 + }, + { + "data": { + "Name": "antarchy:hushweed" + }, + "weight": 1 + } + ] + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/uranium_ore.json new file mode 100644 index 00000000..275f798e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/uranium_ore.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "size": 3, + "discard_chance_on_air_exposure": 0.0, + "targets": [ + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + }, + "state": { + "Name": "antarchy:uranium_ore" + } + }, + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + }, + "state": { + "Name": "antarchy:deepslate_uranium_ore" + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_custom.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_custom.json new file mode 100644 index 00000000..02ada1e9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_custom.json @@ -0,0 +1,107 @@ +{ + "type": "minecraft:add", + "argument1": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:cache_2d", + "argument": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:weird_scaled_sampler", + "input": { + "type": "minecraft:noise", + "noise": "minecraft:spaghetti_2d_modulator", + "xz_scale": 0.25, + "y_scale": 0.15 + }, + "noise": "antarchy:cavaryn", + "rarity_value_mapper": "type_2" + }, + "argument2": { + "type": "minecraft:mul", + "argument1": 0.123, + "argument2": { + "type": "minecraft:cache_once", + "argument": { + "type": "minecraft:add", + "argument1": -0.86, + "argument2": { + "type": "minecraft:mul", + "argument1": -0.25, + "argument2": { + "type": "minecraft:noise", + "noise": "minecraft:spaghetti_2d_thickness", + "xz_scale": 1.2, + "y_scale": 1.5 + } + } + } + } + } + }, + "argument2": { + "type": "minecraft:cube", + "argument": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:abs", + "argument": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:add", + "argument1": 0, + "argument2": { + "type": "minecraft:mul", + "argument1": 10, + "argument2": { + "type": "minecraft:noise", + "noise": "minecraft:spaghetti_2d_elevation", + "xz_scale": 0.8, + "y_scale": 0.4 + } + } + }, + "argument2": { + "type": "minecraft:y_clamped_gradient", + "from_y": 252, + "to_y": 8, + "from_value": 10, + "to_value": -10 + } + } + }, + "argument2": { + "type": "minecraft:cache_once", + "argument": { + "type": "minecraft:add", + "argument1": -0.86, + "argument2": { + "type": "minecraft:mul", + "argument1": -0.25, + "argument2": { + "type": "minecraft:noise", + "noise": "minecraft:spaghetti_2d_thickness", + "xz_scale": 1.2, + "y_scale": 1.5 + } + } + } + } + } + } + }, + "max": 2.0, + "min": -2.0 + } + }, + "argument2": { + "type": "minecraft:cache_all_in_cell", + "argument": "antarchy:cavaryn_noise_cave" + } + }, + "argument2": -0.05 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_noise_cave.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_noise_cave.json new file mode 100644 index 00000000..5ce470a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_noise_cave.json @@ -0,0 +1,42 @@ +{ + "type": "minecraft:add", + "argument1": { + "type": "minecraft:cache_once", + "argument": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": 232, + "to_y": 20, + "from_value": 1.45, + "to_value": 0.12 + }, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:noise", + "noise": "minecraft:noodle_thickness", + "xz_scale": 1, + "y_scale": 7.5 + }, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:weird_scaled_sampler", + "rarity_value_mapper": "type_1", + "noise": "minecraft:patch", + "input": { + "type": "minecraft:interpolated", + "argument": 1 + } + }, + "argument2": { + "type": "minecraft:cube", + "argument": 0.5 + } + } + } + } + }, + "argument2": 0.3 +} 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 new file mode 100644 index 00000000..62c0bc38 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json @@ -0,0 +1,86 @@ +{ + "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: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": "minecraft:mul", + "argument1": -0.06, + "argument2": "minecraft:overworld/erosion" + }, + "argument2": { + "type": "minecraft:mul", + "argument1": 0.58, + "argument2": "minecraft:overworld/continents" + } + } + } + } + } + } + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/thoraxis_base_3d_noise.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/thoraxis_base_3d_noise.json new file mode 100644 index 00000000..612019dc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/density_function/thoraxis_base_3d_noise.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:old_blended_noise", + "smear_scale_multiplier": 8.0, + "xz_factor": 80.0, + "xz_scale": 0.25, + "y_factor": 60.0, + "y_scale": 0.375 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/cavaryn.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/cavaryn.json new file mode 100644 index 00000000..76e945fc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/cavaryn.json @@ -0,0 +1,7 @@ +{ + "firstOctave": -7, + "amplitudes": [ + 0.95, + 0.95 + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/elythia_surface.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/elythia_surface.json new file mode 100644 index 00000000..ae92390c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/elythia_surface.json @@ -0,0 +1,8 @@ +{ + "firstOctave": -8, + "amplitudes": [ + 1.0, + 1.0, + 0.5 + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/elythia_surface_detail.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/elythia_surface_detail.json new file mode 100644 index 00000000..4a1cd821 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/elythia_surface_detail.json @@ -0,0 +1,8 @@ +{ + "firstOctave": -6, + "amplitudes": [ + 1.0, + 0.7, + 0.35 + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/elythia_surface_edge.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/elythia_surface_edge.json new file mode 100644 index 00000000..3eae7384 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/elythia_surface_edge.json @@ -0,0 +1,8 @@ +{ + "firstOctave": -4, + "amplitudes": [ + 1.0, + 0.5, + 0.25 + ] +} 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 new file mode 100644 index 00000000..765d1bdd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise/surface_blend.json @@ -0,0 +1,4 @@ +{ + "firstOctave": -3, + "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 new file mode 100644 index 00000000..5f4002c4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json @@ -0,0 +1,247 @@ +{ + "sea_level": 32, + "disable_mob_generation": false, + "aquifers_enabled": true, + "ore_veins_enabled": false, + "legacy_random_source": false, + "default_block": { + "Name": "antarchy:myrmite" + }, + "default_fluid": { + "Name": "antarchy:bile", + "Properties": { + "level": "0" + } + }, + "noise": { + "min_y": 0, + "height": 208, + "size_horizontal": 1, + "size_vertical": 2 + }, + "noise_router": { + "barrier": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_barrier", + "xz_scale": 1, + "y_scale": 0.5 + }, + "fluid_level_floodedness": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_floodedness", + "xz_scale": 1, + "y_scale": 0.67 + }, + "fluid_level_spread": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_spread", + "xz_scale": 1, + "y_scale": 0.7142857142857143 + }, + "lava": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_lava", + "xz_scale": 1, + "y_scale": 1 + }, + "temperature": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:temperature", + "xz_scale": 0.25, + "y_scale": 0, + "shift_x": "minecraft:shift_x", + "shift_y": 0, + "shift_z": "minecraft:shift_z" + }, + "vegetation": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:vegetation", + "xz_scale": 0.25, + "y_scale": 0, + "shift_x": "minecraft:shift_x", + "shift_y": 0, + "shift_z": "minecraft:shift_z" + }, + "continents": "minecraft:overworld/continents", + "erosion": "minecraft:overworld/erosion", + "depth": "minecraft:overworld/depth", + "ridges": "minecraft:overworld/ridges", + "initial_density_without_jaggedness": 0, + "final_density": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": 0, + "to_y": 12, + "from_value": 4, + "to_value": -0.5 + }, + "argument2": { + "type": "minecraft:y_clamped_gradient", + "from_y": 196, + "to_y": 207, + "from_value": -0.5, + "to_value": 4 + } + }, + "argument2": { + "type": "minecraft:min", + "argument1": "minecraft:overworld/caves/noodle", + "argument2": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": 4, + "max_exclusive": 204, + "when_in_range": "antarchy:cavaryn_custom", + "when_out_of_range": 2 + } + } + }, + "vein_toggle": 0, + "vein_ridged": 0, + "vein_gap": 0 + }, + "spawn_target": [ + { + "temperature": [ + -1, + 1 + ], + "humidity": [ + -1, + 1 + ], + "continentalness": [ + -1, + 1 + ], + "erosion": [ + -1, + 1 + ], + "weirdness": [ + -1, + 1 + ], + "depth": 0, + "offset": 0 + } + ], + "surface_rule": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 5 + }, + "surface_depth_multiplier": 0 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "below_top": 5 + }, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": ["antarchy:biowart_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:block", + "result_state": { + "Name": "antarchy:biomite_turf" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:biomite" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": ["antarchy:brooding_tunnels"] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:broodstone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 40 + }, + "surface_depth_multiplier": 0 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:myrmite" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:myrmite" + } + } + ] + } +} 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 new file mode 100644 index 00000000..90c87438 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json @@ -0,0 +1,841 @@ +{ + "sea_level": 60, + "disable_mob_generation": false, + "aquifers_enabled": true, + "ore_veins_enabled": false, + "legacy_random_source": false, + "spawn_target": [ + { + "continentalness": [ + -0.11, + 1.0 + ], + "depth": 0.0, + "erosion": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "offset": 0.0, + "temperature": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + -0.16 + ] + }, + { + "continentalness": [ + -0.11, + 1.0 + ], + "depth": 0.0, + "erosion": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "offset": 0.0, + "temperature": [ + -1.0, + 1.0 + ], + "weirdness": [ + 0.16, + 1.0 + ] + } + ], + "default_block": { + "Name": "minecraft:stone" + }, + "default_fluid": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + }, + "noise": { + "height": 512, + "min_y": -64, + "size_horizontal": 1, + "size_vertical": 2 + }, + "noise_router": { + "barrier": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_barrier", + "xz_scale": 1.0, + "y_scale": 0.5 + }, + "continents": "minecraft:overworld/continents", + "depth": "minecraft:overworld/depth", + "erosion": "minecraft:overworld/erosion", + "final_density": { + "type": "minecraft:squeeze", + "argument": { + "type": "minecraft:mul", + "argument1": 0.64, + "argument2": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:blend_density", + "argument": { + "type": "minecraft:add", + "argument1": 0.1171875, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_value": 0.0, + "from_y": -64, + "to_value": 1.0, + "to_y": -40 + }, + "argument2": { + "type": "minecraft:add", + "argument1": -0.1171875, + "argument2": { + "type": "minecraft:add", + "argument1": -0.078125, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_value": 1.0, + "from_y": 240, + "to_value": 0.0, + "to_y": 256 + }, + "argument2": { + "type": "minecraft:add", + "argument1": 0.078125, + "argument2": { + "type": "minecraft:range_choice", + "input": "antarchy:elythia_surface", + "max_exclusive": 1.5625, + "min_inclusive": -1000000.0, + "when_in_range": "antarchy:elythia_surface", + "when_out_of_range": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:mul", + "argument1": 4.0, + "argument2": { + "type": "minecraft:square", + "argument": { + "type": "minecraft:noise", + "noise": "minecraft:cave_layer", + "xz_scale": 1.0, + "y_scale": 8.0 + } + } + }, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": 0.27, + "argument2": { + "type": "minecraft:noise", + "noise": "minecraft:cave_cheese", + "xz_scale": 1.0, + "y_scale": 0.6666666666666666 + } + }, + "max": 1.0, + "min": -1.0 + }, + "argument2": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": 1.5, + "argument2": { + "type": "minecraft:mul", + "argument1": -0.64, + "argument2": "antarchy:elythia_surface" + } + }, + "max": 0.5, + "min": 0.0 + } + } + }, + "argument2": { + "type": "minecraft:range_choice", + "input": "minecraft:overworld/caves/pillars", + "max_exclusive": 0.03, + "min_inclusive": -1000000.0, + "when_in_range": -1000000.0, + "when_out_of_range": "minecraft:overworld/caves/pillars" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "fluid_level_floodedness": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_floodedness", + "xz_scale": 1.0, + "y_scale": 0.67 + }, + "fluid_level_spread": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_spread", + "xz_scale": 1.0, + "y_scale": 0.7142857142857143 + }, + "lava": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_lava", + "xz_scale": 1.0, + "y_scale": 1.0 + }, + "initial_density_without_jaggedness": "antarchy:elythia_surface", + "preliminary_surface_level": { + "type": "minecraft:find_top_surface", + "cell_height": 8, + "density": "antarchy:elythia_surface", + "lower_bound": -64, + "upper_bound": 448 + }, + "ridges": "minecraft:overworld/ridges", + "temperature": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:temperature", + "shift_x": "minecraft:shift_x", + "shift_y": 0.0, + "shift_z": "minecraft:shift_z", + "xz_scale": 0.25, + "y_scale": 0.0 + }, + "vegetation": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:vegetation", + "shift_x": "minecraft:shift_x", + "shift_y": 0.0, + "shift_z": "minecraft:shift_z", + "xz_scale": 0.25, + "y_scale": 0.0 + }, + "vein_toggle": 0.0, + "vein_ridged": 0.0, + "vein_gap": 0.0 + }, + "surface_rule": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "random_name": "minecraft:bedrock_floor", + "true_at_and_below": { + "absolute": -60 + }, + "false_at_and_above": { + "absolute": -56 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "antarchy:moleworm_caves" + ] + }, + "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: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:elythia_river" + ] + }, + "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:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + } + }, + { + "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": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "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: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:dirt" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "antarchy:elythia_ocean", + "antarchy:elythia_coral_spikes" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:above_preliminary_surface" + }, + "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:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 4, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:shellstone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": true, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:shellstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:shellstone" + } + } + ] + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "antarchy:elythia_beach" + ] + }, + "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": "minecraft:sand" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 3, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 6, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": true, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:shellstone" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "antarchy:peach_forest" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:above_preliminary_surface" + }, + "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:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -0.28, + "max_threshold": 1.1 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:blush_moss_block" + } + } + ] + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:above_preliminary_surface" + }, + "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:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -0.4, + "max_threshold": 1.1 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -0.412, + "max_threshold": -0.4 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:rooted_dirt" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:moss_block" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -1, + "surface_depth_multiplier": 2, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -0.35, + "max_threshold": -0.15 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:rooted_dirt" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_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:dirt" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "random_name": "minecraft:deepslate", + "true_at_and_below": { + "absolute": -8 + }, + "false_at_and_above": { + "absolute": 0 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:deepslate", + "Properties": { + "axis": "y" + } + } + } + } + ] + } +} 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 new file mode 100644 index 00000000..117178af --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json @@ -0,0 +1,244 @@ +{ + "sea_level": 32, + "disable_mob_generation": false, + "aquifers_enabled": false, + "ore_veins_enabled": false, + "legacy_random_source": true, + "default_block": { + "Name": "antarchy:nyxite" + }, + "default_fluid": { + "Name": "antarchy:ichor", + "Properties": { + "level": "0" + } + }, + "noise": { + "min_y": 0, + "height": 256, + "size_horizontal": 1, + "size_vertical": 2 + }, + "noise_router": { + "barrier": 0, + "fluid_level_floodedness": 0, + "fluid_level_spread": 0, + "lava": 0, + "temperature": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:nether/temperature", + "shift_x": 0.0, + "shift_y": 0.0, + "shift_z": 0.0, + "xz_scale": 0.25, + "y_scale": 0.0 + }, + "vegetation": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:nether/vegetation", + "shift_x": 0.0, + "shift_y": 0.0, + "shift_z": 0.0, + "xz_scale": 0.25, + "y_scale": 0.0 + }, + "continents": 0, + "erosion": 0, + "depth": 0, + "ridges": 0, + "initial_density_without_jaggedness": 0, + "final_density": { + "type": "minecraft:squeeze", + "argument": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:mul", + "argument1": 0.64, + "argument2": { + "type": "minecraft:blend_density", + "argument": { + "type": "minecraft:add", + "argument1": 2.5, + "argument2": { + "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 + }, + "argument2": { + "type": "minecraft:add", + "argument1": 0.9375, + "argument2": { + "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" + } + } + } + } + } + } + } + } + }, + "vein_toggle": 0, + "vein_ridged": 0, + "vein_gap": 0 + }, + "spawn_target": [], + "surface_rule": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 4 + }, + "surface_depth_multiplier": 0 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "antarchy:dream_dunes" + ] + }, + "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": "floor" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157e+308, + "min_threshold": 0.0, + "noise": "minecraft:nether_state_selector" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:dream_sand" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:dream_sandstone" + } + } + ] + } + }, + { + "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:dream_sandstone" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "antarchy:umbral_hills" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": true, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:umbral_moss_block" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "below_top": 4 + }, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:nyxite" + } + } + ] + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/antiwater_springs.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/antiwater_springs.json new file mode 100644 index 00000000..fa6e86e2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/antiwater_springs.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:antiwater_springs", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 0 + }, + "min_inclusive": { + "above_bottom": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/basalt_blobs.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/basalt_blobs.json new file mode 100644 index 00000000..16ca54c3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/basalt_blobs.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:basalt_blobs", + "placement": [ + { + "type": "minecraft:count", + "count": 75 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 0 + }, + "min_inclusive": { + "above_bottom": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/bed_bug_nest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/bed_bug_nest.json new file mode 100644 index 00000000..54704c63 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/bed_bug_nest.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:bed_bug_nest", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 12 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 10 + }, + "max_inclusive": { + "absolute": 140 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/bed_bug_surface_cluster.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/bed_bug_surface_cluster.json new file mode 100644 index 00000000..9cfae10e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/bed_bug_surface_cluster.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:bed_bug_surface_cluster", + "placement": [ + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 10 + }, + "max_inclusive": { + "absolute": 140 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/biowart_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/biowart_patch.json new file mode 100644 index 00000000..1be9c317 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/biowart_patch.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:biowart_patch", + "placement": [ + { + "type": "minecraft:count", + "count": 18 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/bluestone_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/bluestone_ore.json new file mode 100644 index 00000000..3aba913f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/bluestone_ore.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:bluestone_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 24 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 8 + }, + "max_inclusive": { + "absolute": 220 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/blush_moss_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/blush_moss_patch.json new file mode 100644 index 00000000..3f427bca --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/blush_moss_patch.json @@ -0,0 +1,44 @@ +{ + "feature": "antarchy:blush_moss_patch", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 0 + }, + "max_inclusive": { + "absolute": 256 + } + } + }, + { + "type": "minecraft:environment_scan", + "allowed_search_condition": { + "type": "minecraft:matching_block_tag", + "tag": "minecraft:air" + }, + "direction_of_search": "down", + "max_steps": 12, + "target_condition": { + "type": "minecraft:solid" + } + }, + { + "type": "minecraft:random_offset", + "xz_spread": 0, + "y_spread": 1 + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/brooding_tunnels_creepvine.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/brooding_tunnels_creepvine.json new file mode 100644 index 00000000..61470bd2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/brooding_tunnels_creepvine.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_creepvine", + "placement": [ + { + "type": "minecraft:count", + "count": 22 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/brooding_tunnels_hanging_creeproots.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/brooding_tunnels_hanging_creeproots.json new file mode 100644 index 00000000..ac28008a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/brooding_tunnels_hanging_creeproots.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:hanging_creeproots", + "placement": [ + { + "type": "minecraft:count", + "count": 18 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/broodstone_titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/broodstone_titanium_ore.json new file mode 100644 index 00000000..7fb6fbc2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/broodstone_titanium_ore.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:broodstone_titanium_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 5 + }, + { + "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/broodstone_uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/broodstone_uranium_ore.json new file mode 100644 index 00000000..35d3cf77 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/broodstone_uranium_ore.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:broodstone_uranium_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 5 + }, + { + "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/brown_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/brown_ant_nest.json new file mode 100644 index 00000000..6cdfbdee --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/brown_ant_nest.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:brown_ant_nest", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 90 + }, + { + "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/brutalfly_cocoon.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/brutalfly_cocoon.json new file mode 100644 index 00000000..b455b92d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/brutalfly_cocoon.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:brutalfly_cocoon", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 2 + }, + { + "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/butterfly_fields_flora.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/butterfly_fields_flora.json new file mode 100644 index 00000000..b3224fc4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/butterfly_fields_flora.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:butterfly_fields_flora", + "placement": [ + { + "type": "minecraft:count", + "count": 8 + }, + { + "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/cavaryn_amber_moss_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_amber_moss_patch.json new file mode 100644 index 00000000..702f99a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_amber_moss_patch.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:amber_moss_patch_bonemeal", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_cysts.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_cysts.json new file mode 100644 index 00000000..ff189ab4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_cysts.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_bile_cysts", + "placement": [ + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_veins.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_veins.json new file mode 100644 index 00000000..b18f9af9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_veins.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_bile_veins", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chitin_spikes.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chitin_spikes.json new file mode 100644 index 00000000..d78c77b1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chitin_spikes.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_chitin_spikes", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_creepvine.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_creepvine.json new file mode 100644 index 00000000..f81d4998 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_creepvine.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_creepvine", + "placement": [ + { + "type": "minecraft:count", + "count": 18 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_hanging_creeproots.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_hanging_creeproots.json new file mode 100644 index 00000000..ce6f564e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_hanging_creeproots.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:hanging_creeproots", + "placement": [ + { + "type": "minecraft:count", + "count": 14 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_terror_egg_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_terror_egg_patch.json new file mode 100644 index 00000000..01c6693b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_terror_egg_patch.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_terror_egg_patch", + "placement": [ + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_wall_amber_moss.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_wall_amber_moss.json new file mode 100644 index 00000000..d7c131c3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_wall_amber_moss.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_wall_amber_moss", + "placement": [ + { + "type": "minecraft:count", + "count": 10 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/corn_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/corn_patch.json new file mode 100644 index 00000000..3220e420 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/corn_patch.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:corn_patch", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 144 + }, + { + "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/cornea_stalk_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cornea_stalk_patch.json new file mode 100644 index 00000000..601ca7df --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cornea_stalk_patch.json @@ -0,0 +1,33 @@ +{ + "feature": "antarchy:cornea_stalk_cluster", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 3, + "max_inclusive": 6 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 4 + }, + "max_inclusive": { + "below_top": 4 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cornea_stalk_single.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cornea_stalk_single.json new file mode 100644 index 00000000..b88238bc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/cornea_stalk_single.json @@ -0,0 +1,26 @@ +{ + "feature": "antarchy:cornea_stalk_patch", + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:all_of", + "predicates": [ + { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + }, + { + "type": "minecraft:matching_block_tag", + "tag": "antarchy:cornea_stalk_plantable", + "offset": [ + 0, + -1, + 0 + ] + } + ] + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/delta.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/delta.json new file mode 100644 index 00000000..d7003367 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/delta.json @@ -0,0 +1,12 @@ +{ + "feature": "antarchy:delta", + "placement": [ + { + "type": "minecraft:count_on_every_layer", + "count": 40 + }, + { + "type": "minecraft:biome" + } + ] +} 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 new file mode 100644 index 00000000..f2b49a38 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/dimensional_tears.json @@ -0,0 +1,23 @@ +{ + "feature": "antarchy:dimensional_tear", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 96 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { "absolute": 24 }, + "max_inclusive": { "absolute": 170 } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_brown_ant_nests.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_brown_ant_nests.json new file mode 100644 index 00000000..4c5f9517 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_brown_ant_nests.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:brown_ant_nest", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 20 + }, + { + "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/elythia_cave_underground.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_cave_underground.json new file mode 100644 index 00000000..40848cfd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_cave_underground.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:elythia_underground", + "placement": [ + { + "type": "minecraft:count", + "count": 15 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": -48 + }, + "max_inclusive": { + "absolute": 96 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_clouds.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_clouds.json new file mode 100644 index 00000000..2072b577 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_clouds.json @@ -0,0 +1,31 @@ +{ + "feature": "antarchy:elythia_clouds", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 16 + }, + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 380 + }, + "max_inclusive": { + "absolute": 430 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_coral_spike.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_coral_spike.json new file mode 100644 index 00000000..e6757d38 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_coral_spike.json @@ -0,0 +1,12 @@ +{ + "feature": "antarchy:elythia_coral_spike", + "placement": [ + { + "type": "minecraft:heightmap", + "heightmap": "OCEAN_FLOOR_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_forest_flora.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_forest_flora.json new file mode 100644 index 00000000..583b014c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_forest_flora.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:elythia_forest_flora", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "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/elythia_large_tuff_boulders.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_large_tuff_boulders.json new file mode 100644 index 00000000..7e25c5aa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_large_tuff_boulders.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:elythia_large_tuff_boulder", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 34 + }, + { + "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/elythia_meadow_flora.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_meadow_flora.json new file mode 100644 index 00000000..05069edb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_meadow_flora.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:elythia_meadow_flora", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "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/elythia_meadow_large_tuff_boulders.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_meadow_large_tuff_boulders.json new file mode 100644 index 00000000..2349160e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_meadow_large_tuff_boulders.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:elythia_large_tuff_boulder", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 40 + }, + { + "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/elythia_meadow_ponds.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_meadow_ponds.json new file mode 100644 index 00000000..69cef79a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_meadow_ponds.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:elythia_pond", + "placement": [ + { + "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/elythia_meadow_tuff_boulders.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_meadow_tuff_boulders.json new file mode 100644 index 00000000..7a3606da --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_meadow_tuff_boulders.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:elythia_tuff_boulder", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 12 + }, + { + "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/elythia_moleworm_cave_entrances.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_cave_entrances.json new file mode 100644 index 00000000..5205107a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_cave_entrances.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:elythia_moleworm_cave_entrances", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 4 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": -48 + }, + "max_inclusive": { + "absolute": 65 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_surface_mounds.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_surface_mounds.json new file mode 100644 index 00000000..07bce835 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_surface_mounds.json @@ -0,0 +1,15 @@ +{ + "feature": "antarchy:elythia_moleworm_surface_mounds", + "placement": [ + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_tunnels.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_tunnels.json new file mode 100644 index 00000000..75c8e1d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_tunnels.json @@ -0,0 +1,15 @@ +{ + "feature": "antarchy:elythia_moleworm_tunnels", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_warrens.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_warrens.json new file mode 100644 index 00000000..23789262 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_warrens.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:elythia_moleworm_warrens", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 8 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": -40 + }, + "max_inclusive": { + "absolute": 32 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_rainbow_ant_nests.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_rainbow_ant_nests.json new file mode 100644 index 00000000..b47b16a7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_rainbow_ant_nests.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:rainbow_ant_nest", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 512 + }, + { + "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/elythia_surface_cover.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_surface_cover.json new file mode 100644 index 00000000..1889848a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_surface_cover.json @@ -0,0 +1,15 @@ +{ + "feature": "antarchy:elythia_surface_cover", + "placement": [ + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_tuff_boulders.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_tuff_boulders.json new file mode 100644 index 00000000..004e9bec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_tuff_boulders.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:elythia_tuff_boulder", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 9 + }, + { + "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/elythia_underground.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_underground.json new file mode 100644 index 00000000..e7cd0ebf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_underground.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:elythia_underground", + "placement": [ + { + "type": "minecraft:count", + "count": 24 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": -48 + }, + "max_inclusive": { + "absolute": 96 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} 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 new file mode 100644 index 00000000..de592a7f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json @@ -0,0 +1,9 @@ +{ + "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" } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/flower_forest_milkweed.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/flower_forest_milkweed.json new file mode 100644 index 00000000..d40a649f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/flower_forest_milkweed.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:flower_forest_milkweed", + "placement": [ + { + "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/fungal_mushroom.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json new file mode 100644 index 00000000..a720f1e1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json @@ -0,0 +1,9 @@ +{ + "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" } + ] +} 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 new file mode 100644 index 00000000..b1b0dd8d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch.json @@ -0,0 +1,9 @@ +{ + "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" } + ] +} 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 new file mode 100644 index 00000000..6b49ad1f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_common.json @@ -0,0 +1,9 @@ +{ + "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" } + ] +} 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 new file mode 100644 index 00000000..9e0694f1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_meadow.json @@ -0,0 +1,9 @@ +{ + "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" } + ] +} 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 new file mode 100644 index 00000000..176eba6c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_peach_forest.json @@ -0,0 +1,9 @@ +{ + "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" } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_floor_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_floor_patch.json new file mode 100644 index 00000000..f890a975 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_floor_patch.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:glowcap_caves_floor_patch", + "placement": [ + { + "type": "minecraft:count", + "count": 40 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_huge_glowcap_mushroom.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_huge_glowcap_mushroom.json new file mode 100644 index 00000000..0a43f32a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_huge_glowcap_mushroom.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:huge_glowcap_mushroom_worldgen", + "placement": [ + { + "type": "minecraft:count", + "count": 8 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 18 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_molting_vines.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_molting_vines.json new file mode 100644 index 00000000..467eefff --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_molting_vines.json @@ -0,0 +1,33 @@ +{ + "feature": "antarchy:molting_vines", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 10, + "max_inclusive": 16 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 8 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_wall_amber_moss.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_wall_amber_moss.json new file mode 100644 index 00000000..a3a0f97b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowcap_caves_wall_amber_moss.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_wall_amber_moss", + "placement": [ + { + "type": "minecraft:count", + "count": 18 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowstone.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowstone.json new file mode 100644 index 00000000..44169c4a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowstone.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:glowstone_extra", + "placement": [ + { + "type": "minecraft:count", + "count": 10 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 0 + }, + "min_inclusive": { + "above_bottom": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowstone_extra.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowstone_extra.json new file mode 100644 index 00000000..e1e72dcd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/glowstone_extra.json @@ -0,0 +1,33 @@ +{ + "feature": "antarchy:glowstone_extra", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:biased_to_bottom", + "value": { + "max_inclusive": 9, + "min_inclusive": 0 + } + } + }, + { + "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" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ground_molting_vines.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ground_molting_vines.json new file mode 100644 index 00000000..4eb66a56 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ground_molting_vines.json @@ -0,0 +1,33 @@ +{ + "feature": "antarchy:ground_molting_vines", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 3, + "max_inclusive": 6 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 8 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/jerry_egg_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/jerry_egg_patch.json new file mode 100644 index 00000000..735f1e48 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/jerry_egg_patch.json @@ -0,0 +1,33 @@ +{ + "feature": "antarchy:jerry_egg_patch", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 2, + "max_inclusive": 5 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} 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 new file mode 100644 index 00000000..8ed335fa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/jumpy_bug_egg_ceiling.json @@ -0,0 +1,33 @@ +{ + "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/large_basalt_columns.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/large_basalt_columns.json new file mode 100644 index 00000000..2e63b745 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/large_basalt_columns.json @@ -0,0 +1,12 @@ +{ + "feature": "antarchy:large_basalt_columns", + "placement": [ + { + "type": "minecraft:count_on_every_layer", + "count": 2 + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_antiwater_pools.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_antiwater_pools.json new file mode 100644 index 00000000..31998b17 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_antiwater_pools.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:spring_antiwater_open", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 16 + }, + "min_inclusive": { + "above_bottom": 160 + } + } + }, + { + "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 new file mode 100644 index 00000000..1b324284 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_blood_crystal_spires.json @@ -0,0 +1,33 @@ +{ + "feature": "antarchy:blood_crystal_cluster", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 7 + }, + { + "type": "minecraft:count", + "count": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 20 + }, + "min_inclusive": { + "above_bottom": 8 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} + + 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 new file mode 100644 index 00000000..e75e392d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_large_blood_crystal_spires.json @@ -0,0 +1,33 @@ +{ + "feature": "antarchy:large_blood_crystal_cluster", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 20 + }, + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 20 + }, + "min_inclusive": { + "above_bottom": 8 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} + + 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 new file mode 100644 index 00000000..39631321 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lucid_medium_blood_crystal_spires.json @@ -0,0 +1,33 @@ +{ + "feature": "antarchy:medium_blood_crystal_cluster", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 12 + }, + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 20 + }, + "min_inclusive": { + "above_bottom": 8 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} + + diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_lily_pads.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_lily_pads.json new file mode 100644 index 00000000..35200fdf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_lily_pads.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:lumen_lily_pads", + "placement": [ + { + "type": "minecraft:count", + "count": 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/lumen_pools.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_pools.json new file mode 100644 index 00000000..11f62e28 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_pools.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:lumen_pools", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "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/lumen_spires.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_spires.json new file mode 100644 index 00000000..ac4400ba --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_spires.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:lumen_spires", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 48 + }, + { + "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/lumen_streams.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_streams.json new file mode 100644 index 00000000..d875b63f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_streams.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:lumen_streams", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 8 + }, + { + "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/moleworm_caves_creepvine.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_creepvine.json new file mode 100644 index 00000000..61470bd2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_creepvine.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_creepvine", + "placement": [ + { + "type": "minecraft:count", + "count": 22 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_hanging_creeproots.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_hanging_creeproots.json new file mode 100644 index 00000000..f5e407dc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_hanging_creeproots.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:hanging_creeproots", + "placement": [ + { + "type": "minecraft:count", + "count": 24 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/molting_vines.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/molting_vines.json new file mode 100644 index 00000000..f168ac32 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/molting_vines.json @@ -0,0 +1,33 @@ +{ + "feature": "antarchy:molting_vines", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 4, + "max_inclusive": 8 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 8 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/myrmite_coal_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/myrmite_coal_ore.json new file mode 100644 index 00000000..55fbe7aa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/myrmite_coal_ore.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:myrmite_coal_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 14 + }, + { + "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/nyxite_spikes.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nyxite_spikes.json new file mode 100644 index 00000000..2263e7e2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/nyxite_spikes.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:nyxite_spikes", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 16 + }, + "max_inclusive": { + "below_top": 16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_gold_deltas.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_gold_deltas.json new file mode 100644 index 00000000..0dc9d4a7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_gold_deltas.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:ore_gold", + "placement": [ + { + "type": "minecraft:count", + "count": 20 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 10 + }, + "min_inclusive": { + "above_bottom": 10 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_gold_nether.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_gold_nether.json new file mode 100644 index 00000000..8d983ea7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_gold_nether.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:ore_gold", + "placement": [ + { + "type": "minecraft:count", + "count": 10 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 10 + }, + "min_inclusive": { + "above_bottom": 10 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_gravel_nether.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_gravel_nether.json new file mode 100644 index 00000000..2d7143c6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_gravel_nether.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:ore_gravel_nether", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "absolute": 41 + }, + "min_inclusive": { + "absolute": 5 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} 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 new file mode 100644 index 00000000..acd5b565 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ore_magma.json @@ -0,0 +1,23 @@ +{ + "feature": "antarchy:ore_magma", + "placement": [ + { + "type": "minecraft:count", + "count": 48 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "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_cocoon_trees.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_cocoon_trees.json new file mode 100644 index 00000000..03026319 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_cocoon_trees.json @@ -0,0 +1,4 @@ +{ + "feature": "antarchy:ouranwood_cocoon_tree", + "placement": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_large_trees.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_large_trees.json new file mode 100644 index 00000000..4d2e7b93 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_large_trees.json @@ -0,0 +1,4 @@ +{ + "feature": "antarchy:ouranwood_large_tree", + "placement": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_medium_trees.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_medium_trees.json new file mode 100644 index 00000000..767595c0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_medium_trees.json @@ -0,0 +1,4 @@ +{ + "feature": "antarchy:ouranwood_medium_tree", + "placement": [] +} 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 new file mode 100644 index 00000000..850dde08 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_trees.json @@ -0,0 +1,9 @@ +{ + "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" } + ] +} 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 new file mode 100644 index 00000000..61755a74 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_trees_sparse.json @@ -0,0 +1,9 @@ +{ + "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" } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_young_trees.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_young_trees.json new file mode 100644 index 00000000..09aa8e25 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/ouranwood_young_trees.json @@ -0,0 +1,4 @@ +{ + "feature": "antarchy:ouranwood_young_tree", + "placement": [] +} 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 new file mode 100644 index 00000000..49da7126 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_antigravel.json @@ -0,0 +1,68 @@ +{ + "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/patch_ceiling_cornea_stalk.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_cornea_stalk.json new file mode 100644 index 00000000..daaac6e0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_cornea_stalk.json @@ -0,0 +1,33 @@ +{ + "feature": "antarchy:patch_ceiling_cornea_stalk_cluster", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 3, + "max_inclusive": 6 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 4 + }, + "max_inclusive": { + "below_top": 4 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_cornea_stalk_single.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_cornea_stalk_single.json new file mode 100644 index 00000000..18f1181f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_cornea_stalk_single.json @@ -0,0 +1,26 @@ +{ + "feature": "antarchy:patch_ceiling_cornea_stalk", + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:all_of", + "predicates": [ + { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + }, + { + "type": "minecraft:matching_block_tag", + "tag": "antarchy:cornea_stalk_plantable", + "offset": [ + 0, + 1, + 0 + ] + } + ] + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_fire.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_fire.json new file mode 100644 index 00000000..0a888157 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_ceiling_fire.json @@ -0,0 +1,75 @@ +{ + "feature": "antarchy:patch_ceiling_fire", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 6, + "min_inclusive": 1 + } + } + }, + { + "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": 128 + }, + { + "type": "minecraft:random_offset", + "xz_spread": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 7, + "min_inclusive": -7 + } + }, + "y_spread": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 3, + "min_inclusive": -3 + } + } + }, + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:all_of", + "predicates": [ + { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + }, + { + "type": "minecraft:matching_block_tag", + "tag": "antarchy:dream_fire_base_blocks", + "offset": [ + 0, + 1, + 0 + ] + } + ] + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_fire.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_fire.json new file mode 100644 index 00000000..74d7af9f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_fire.json @@ -0,0 +1,75 @@ +{ + "feature": "antarchy:patch_fire", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 5, + "min_inclusive": 0 + } + } + }, + { + "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": 96 + }, + { + "type": "minecraft:random_offset", + "xz_spread": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 7, + "min_inclusive": -7 + } + }, + "y_spread": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 3, + "min_inclusive": -3 + } + } + }, + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:all_of", + "predicates": [ + { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + }, + { + "type": "minecraft:matching_block_tag", + "tag": "antarchy:dream_fire_base_blocks", + "offset": [ + 0, + -1, + 0 + ] + } + ] + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_fire_sparse.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_fire_sparse.json new file mode 100644 index 00000000..b744aca8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_fire_sparse.json @@ -0,0 +1,75 @@ +{ + "feature": "antarchy:patch_fire", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 2, + "min_inclusive": 0 + } + } + }, + { + "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": 24 + }, + { + "type": "minecraft:random_offset", + "xz_spread": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 5, + "min_inclusive": -5 + } + }, + "y_spread": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 2, + "min_inclusive": -2 + } + } + }, + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:all_of", + "predicates": [ + { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + }, + { + "type": "minecraft:matching_block_tag", + "tag": "antarchy:dream_fire_base_blocks", + "offset": [ + 0, + -1, + 0 + ] + } + ] + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_soul_fire.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_soul_fire.json new file mode 100644 index 00000000..6605cab2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/patch_soul_fire.json @@ -0,0 +1,75 @@ +{ + "feature": "antarchy:patch_soul_fire", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 5, + "min_inclusive": 0 + } + } + }, + { + "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": 96 + }, + { + "type": "minecraft:random_offset", + "xz_spread": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 7, + "min_inclusive": -7 + } + }, + "y_spread": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 3, + "min_inclusive": -3 + } + } + }, + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:all_of", + "predicates": [ + { + "type": "minecraft:matching_block_tag", + "tag": "minecraft:air" + }, + { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:soul_soil", + "offset": [ + 0, + -1, + 0 + ] + } + ] + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_flora.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_flora.json new file mode 100644 index 00000000..83a59387 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_flora.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_flora", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "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/peach_forest_mossy_boulders.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_mossy_boulders.json new file mode 100644 index 00000000..f0f30851 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_mossy_boulders.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_mossy_boulder", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 72 + }, + { + "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/peach_forest_petals.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json new file mode 100644 index 00000000..9ff2e915 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json @@ -0,0 +1,28 @@ +{ + "feature": "antarchy:peach_forest_petals", + "placement": [ + { + "type": "minecraft:count", + "count": 12 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:would_survive", + "state": { + "Name": "minecraft:pink_petals" + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_large.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_large.json new file mode 100644 index 00000000..d118e03f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_large.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_pond_large", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 420 + }, + { + "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/peach_forest_ponds_medium.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_medium.json new file mode 100644 index 00000000..265370a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_medium.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_pond_medium", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 144 + }, + { + "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/peach_forest_ponds_small.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_small.json new file mode 100644 index 00000000..e0951250 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_small.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_pond_small", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 80 + }, + { + "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/peach_large_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_large_tree.json new file mode 100644 index 00000000..e08a2556 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_large_tree.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_large_tree", + "placement": [ + { + "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/peach_tree.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_tree.json new file mode 100644 index 00000000..7c6a4341 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/peach_tree.json @@ -0,0 +1,31 @@ +{ + "feature": "antarchy:peach_tree", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:weighted_list", + "distribution": [ + { + "weight": 3, + "data": 1 + }, + { + "weight": 1, + "data": 0 + } + ] + } + }, + { + "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/potent_nyxite.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/potent_nyxite.json new file mode 100644 index 00000000..4db97e0b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/potent_nyxite.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:potent_nyxite", + "placement": [ + { + "type": "minecraft:count", + "count": 10 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 0 + }, + "min_inclusive": { + "above_bottom": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rainbow_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rainbow_ant_nest.json new file mode 100644 index 00000000..97ad2d85 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rainbow_ant_nest.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:rainbow_ant_nest", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 192 + }, + { + "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/red_ant_nest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/red_ant_nest.json new file mode 100644 index 00000000..81555f52 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/red_ant_nest.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:red_ant_nest", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 24 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 32 + }, + "max_inclusive": { + "absolute": 118 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/red_ant_nest_magma.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/red_ant_nest_magma.json new file mode 100644 index 00000000..850042eb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/red_ant_nest_magma.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:red_ant_nest", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 24 + }, + { + "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/rolly_caves_amber_moss_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rolly_caves_amber_moss_patch.json new file mode 100644 index 00000000..b4347be6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rolly_caves_amber_moss_patch.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:rolly_caves_amber_moss_patch", + "placement": [ + { + "type": "minecraft:count", + "count": 40 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 2 + }, + "max_inclusive": { + "absolute": 200 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rolly_caves_bile_pool.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rolly_caves_bile_pool.json new file mode 100644 index 00000000..2d6a759d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rolly_caves_bile_pool.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:rolly_caves_bile_pool", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 5 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 8 + }, + "max_inclusive": { + "absolute": 160 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rolly_caves_giant_cavern.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rolly_caves_giant_cavern.json new file mode 100644 index 00000000..5a87fb83 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rolly_caves_giant_cavern.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:rolly_caves_giant_cavern", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 40 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 30 + }, + "max_inclusive": { + "absolute": 150 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rolly_caves_glowcap_mushroom.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rolly_caves_glowcap_mushroom.json new file mode 100644 index 00000000..7cb1f6e8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/rolly_caves_glowcap_mushroom.json @@ -0,0 +1,44 @@ +{ + "feature": "antarchy:rolly_caves_glowcap_mushroom", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 0 + }, + "max_inclusive": { + "absolute": 256 + } + } + }, + { + "type": "minecraft:environment_scan", + "allowed_search_condition": { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + }, + "direction_of_search": "down", + "max_steps": 12, + "target_condition": { + "type": "minecraft:solid" + } + }, + { + "type": "minecraft:random_offset", + "xz_spread": 0, + "y_spread": 1 + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/seashell_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/seashell_patch.json new file mode 100644 index 00000000..d51c19d1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/seashell_patch.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:seashell_patch", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 10 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "OCEAN_FLOOR_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/seashell_patch_rare.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/seashell_patch_rare.json new file mode 100644 index 00000000..41549470 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/seashell_patch_rare.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:seashell_patch", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 100 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "OCEAN_FLOOR_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_lower.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_lower.json new file mode 100644 index 00000000..11152fbe --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_lower.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:shellstone_blob", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "absolute": 60 + }, + "min_inclusive": { + "absolute": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_upper.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_upper.json new file mode 100644 index 00000000..d3c421c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_upper.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:shellstone_blob", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 6 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "absolute": 128 + }, + "min_inclusive": { + "absolute": 64 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/small_basalt_columns.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/small_basalt_columns.json new file mode 100644 index 00000000..e82bbf99 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/small_basalt_columns.json @@ -0,0 +1,12 @@ +{ + "feature": "antarchy:small_basalt_columns", + "placement": [ + { + "type": "minecraft:count_on_every_layer", + "count": 4 + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spit_bug_egg_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spit_bug_egg_patch.json new file mode 100644 index 00000000..8cdd862c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spit_bug_egg_patch.json @@ -0,0 +1,33 @@ +{ + "feature": "antarchy:spit_bug_egg_patch", + "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/spring_closed.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_closed.json new file mode 100644 index 00000000..bd6292be --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_closed.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:spring_nether_closed", + "placement": [ + { + "type": "minecraft:count", + "count": 16 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 10 + }, + "min_inclusive": { + "above_bottom": 10 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_closed_double.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_closed_double.json new file mode 100644 index 00000000..3f1c0ffa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_closed_double.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:spring_nether_closed", + "placement": [ + { + "type": "minecraft:count", + "count": 32 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 10 + }, + "min_inclusive": { + "above_bottom": 10 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_delta.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_delta.json new file mode 100644 index 00000000..d9f8c0c5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_delta.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:spring_delta", + "placement": [ + { + "type": "minecraft:count", + "count": 16 + }, + { + "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" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_lava.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_lava.json new file mode 100644 index 00000000..797bd774 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_lava.json @@ -0,0 +1,28 @@ +{ + "feature": "antarchy:spring_lava_overworld", + "placement": [ + { + "type": "minecraft:count", + "count": 20 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:very_biased_to_bottom", + "inner": 8, + "max_inclusive": { + "below_top": 8 + }, + "min_inclusive": { + "above_bottom": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_open.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_open.json new file mode 100644 index 00000000..bafe98a6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/spring_open.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:spring_nether_open", + "placement": [ + { + "type": "minecraft:count", + "count": 8 + }, + { + "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" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/star_coral_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/star_coral_patch.json new file mode 100644 index 00000000..836db8d3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/star_coral_patch.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:star_coral_patch", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 56 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "OCEAN_FLOOR_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/termite_nest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/termite_nest.json new file mode 100644 index 00000000..70a93fad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/termite_nest.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:termite_nest", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 88 + }, + { + "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/thoraxis_floor_rib_columns.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_floor_rib_columns.json new file mode 100644 index 00000000..6e7c25e7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_floor_rib_columns.json @@ -0,0 +1,22 @@ +{ + "feature": "antarchy:thoraxis_rib_columns", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 128 + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { "absolute": 32 }, + "max_inclusive": { + "absolute": 84 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} 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 new file mode 100644 index 00000000..d3bf833e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_floor_spikes.json @@ -0,0 +1,25 @@ +{ + "feature": "antarchy:thoraxis_stalagmite", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 224 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { "absolute": 24 }, + "max_inclusive": { + "absolute": 96 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_red_ant_nest_magma.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_red_ant_nest_magma.json new file mode 100644 index 00000000..615a0f1c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_red_ant_nest_magma.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:red_ant_nest", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 16 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 32 + }, + "max_inclusive": { + "absolute": 118 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_roof_rib_columns.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_roof_rib_columns.json new file mode 100644 index 00000000..b048fc5f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_roof_rib_columns.json @@ -0,0 +1,24 @@ +{ + "feature": "antarchy:thoraxis_rib_columns", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 72 + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 176 + }, + "max_inclusive": { + "absolute": 248 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_roof_spikes.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_roof_spikes.json new file mode 100644 index 00000000..b1825fe3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_roof_spikes.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:thoraxis_stalactite", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 120 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 176 + }, + "max_inclusive": { + "absolute": 240 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/titanium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/titanium_ore.json new file mode 100644 index 00000000..c49ace8f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/titanium_ore.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:titanium_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 13 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": -64 + }, + "max_inclusive": { + "absolute": 32 + } + } + }, + { + "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 new file mode 100644 index 00000000..f87e45e7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/triffid_patch.json @@ -0,0 +1,19 @@ +{ + "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/umbral_moss_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/umbral_moss_patch.json new file mode 100644 index 00000000..8e413526 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/umbral_moss_patch.json @@ -0,0 +1,44 @@ +{ + "feature": "antarchy:umbral_moss_patch", + "placement": [ + { + "type": "minecraft:count", + "count": 125 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 0 + }, + "max_inclusive": { + "absolute": 256 + } + } + }, + { + "type": "minecraft:environment_scan", + "allowed_search_condition": { + "type": "minecraft:matching_block_tag", + "tag": "minecraft:air" + }, + "direction_of_search": "down", + "max_steps": 12, + "target_condition": { + "type": "minecraft:solid" + } + }, + { + "type": "minecraft:random_offset", + "xz_spread": 0, + "y_spread": 1 + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/uranium_ore.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/uranium_ore.json new file mode 100644 index 00000000..6297fb6c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/uranium_ore.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:uranium_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 13 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": -64 + }, + "max_inclusive": { + "absolute": 32 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/basilisk_lair_processor.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/basilisk_lair_processor.json new file mode 100644 index 00000000..8abd2b3c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/basilisk_lair_processor.json @@ -0,0 +1,10 @@ +{ + "processors": [ + { + "processor_type": "integrated_api:tick_blocks_processor", + "blocks_to_tick": [ + "minecraft:dispenser" + ] + } + ] +} 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 new file mode 100644 index 00000000..8c6d77f2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/fallen_kingdom_castle_processor.json @@ -0,0 +1,18 @@ +{ + "processors": [ + { + "processor_type": "integrated_api:integrated_block_replace_processor", + "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 + } + ] +} 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 new file mode 100644 index 00000000..1e098c7f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/generic_processor.json @@ -0,0 +1,10 @@ +{ + "processors": [ + { + "processor_type": "integrated_api:tick_blocks_processor", + "blocks_to_tick": [ + "minecraft:dispenser" + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/temple_of_technoblade_processor.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/temple_of_technoblade_processor.json new file mode 100644 index 00000000..8abd2b3c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/processor_list/temple_of_technoblade_processor.json @@ -0,0 +1,10 @@ +{ + "processors": [ + { + "processor_type": "integrated_api:tick_blocks_processor", + "blocks_to_tick": [ + "minecraft:dispenser" + ] + } + ] +} 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 new file mode 100644 index 00000000..e4ec1031 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/basilisk_lair.json @@ -0,0 +1,22 @@ +{ + "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/structure/fallen_kingdom_castle.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/fallen_kingdom_castle.json new file mode 100644 index 00000000..73b7adb2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/fallen_kingdom_castle.json @@ -0,0 +1,22 @@ +{ + "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/structure/ruined_arena.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_arena.json new file mode 100644 index 00000000..beee8a5d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_arena.json @@ -0,0 +1,22 @@ +{ + "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/structure/sign.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/sign.json new file mode 100644 index 00000000..40841a3e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/sign.json @@ -0,0 +1,20 @@ +{ + "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": { + "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/structure/stampys_house.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/stampys_house.json new file mode 100644 index 00000000..17a94908 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/stampys_house.json @@ -0,0 +1,20 @@ +{ + "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": { + "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/structure/temple_of_technoblade.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/temple_of_technoblade.json new file mode 100644 index 00000000..33db2af2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/temple_of_technoblade.json @@ -0,0 +1,22 @@ +{ + "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/structure/toreterror_arena.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json new file mode 100644 index 00000000..0af857c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json @@ -0,0 +1,15 @@ +{ + "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/structure/trayaurus_lab.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/trayaurus_lab.json new file mode 100644 index 00000000..3dfb6256 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/trayaurus_lab.json @@ -0,0 +1,17 @@ +{ + "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/structure_set/elythia_rare.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json new file mode 100644 index 00000000..fc89cf40 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json @@ -0,0 +1,30 @@ +{ + "structures": [ + { + "structure": "antarchy:trayaurus_lab", + "weight": 1 + }, + { + "structure": "antarchy:fallen_kingdom_castle", + "weight": 2 + }, + { + "structure": "antarchy:ruined_prison", + "weight": 2 + }, + { + "structure": "antarchy:ruined_arena", + "weight": 3 + }, + { + "structure": "antarchy:toreterror_arena", + "weight": 3 + } + ], + "placement": { + "salt": 659843583, + "spacing": 75, + "separation": 68, + "type": "integrated_api:advanced_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 new file mode 100644 index 00000000..e4ec1031 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/basilisk_lair.json @@ -0,0 +1,22 @@ +{ + "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 new file mode 100644 index 00000000..73b7adb2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/fallen_kingdom_castle.json @@ -0,0 +1,22 @@ +{ + "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 new file mode 100644 index 00000000..beee8a5d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/ruined_arena.json @@ -0,0 +1,22 @@ +{ + "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 new file mode 100644 index 00000000..07fdd9be --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/ruined_prison.json @@ -0,0 +1,22 @@ +{ + "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 new file mode 100644 index 00000000..f538f2d5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/sign.json @@ -0,0 +1,17 @@ +{ + "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 new file mode 100644 index 00000000..404f1589 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/stampys_house.json @@ -0,0 +1,17 @@ +{ + "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 new file mode 100644 index 00000000..33db2af2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/temple_of_technoblade.json @@ -0,0 +1,22 @@ +{ + "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 new file mode 100644 index 00000000..0af857c1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/toreterror_arena.json @@ -0,0 +1,15 @@ +{ + "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 new file mode 100644 index 00000000..3dfb6256 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structures/trayaurus_lab.json @@ -0,0 +1,17 @@ +{ + "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/basilisk_lair/basilisk_lair.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/basilisk_lair/basilisk_lair.json new file mode 100644 index 00000000..82cf3eb6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/basilisk_lair/basilisk_lair.json @@ -0,0 +1,22 @@ +{ + "name": "antarchy:basilisk_lair/basilisk_lair", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:basilisk_lair/basilisk_lair", + "processors": "antarchy:basilisk_lair_processor", + "projection": "rigid", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35 + }, + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle.json new file mode 100644 index 00000000..2b225e95 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle.json @@ -0,0 +1,22 @@ +{ + "name": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle1", + "processors": "antarchy:fallen_kingdom_castle_processor", + "projection": "rigid", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35 + }, + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle2.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle2.json new file mode 100644 index 00000000..dc15dfa0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle2.json @@ -0,0 +1,22 @@ +{ + "name": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle2", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle2", + "processors": "antarchy:fallen_kingdom_castle_processor", + "projection": "rigid", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35 + }, + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle3.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle3.json new file mode 100644 index 00000000..05fbcaa8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle3.json @@ -0,0 +1,22 @@ +{ + "name": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle3", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle3", + "processors": "antarchy:fallen_kingdom_castle_processor", + "projection": "rigid", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35 + }, + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle_banner.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle_banner.json new file mode 100644 index 00000000..53b950e6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle_banner.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle_banner", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle_banner", + "processors": "antarchy:fallen_kingdom_castle_processor", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle_bridge.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle_bridge.json new file mode 100644 index 00000000..b0b06695 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle_bridge.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle_bridge", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle_bridge", + "processors": "antarchy:fallen_kingdom_castle_processor", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle_flag.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle_flag.json new file mode 100644 index 00000000..0044b59b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/fallen_kingdom_castle/fallen_kingdom_castle_flag.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle_flag", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:fallen_kingdom_castle/fallen_kingdom_castle_flag", + "processors": "antarchy:fallen_kingdom_castle_processor", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/ruined_arena/ruined_arena.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/ruined_arena/ruined_arena.json new file mode 100644 index 00000000..5b870c72 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/ruined_arena/ruined_arena.json @@ -0,0 +1,22 @@ +{ + "name": "antarchy:ruined_arena/ruined_arena", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:ruined_arena/ruined_arena", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35 + }, + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/sign/sign.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/sign/sign.json new file mode 100644 index 00000000..73529f58 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/sign/sign.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:sign/sign", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:sign/sign", + "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/stampys_house/stampys_house.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house.json new file mode 100644 index 00000000..b14422e8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:stampys_house/stampys_house", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:stampys_house/stampys_house", + "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/stampys_house/stampys_house_bottom1.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house_bottom1.json new file mode 100644 index 00000000..e7ab2152 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house_bottom1.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:stampys_house/stampys_house_bottom1", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:stampys_house/stampys_house_bottom1", + "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/stampys_house/stampys_house_bottom2.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house_bottom2.json new file mode 100644 index 00000000..f8c2581a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house_bottom2.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:stampys_house/stampys_house_bottom2", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:stampys_house/stampys_house_bottom2", + "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/temple_of_technoblade/temple_of_technoblade1.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/temple_of_technoblade/temple_of_technoblade1.json new file mode 100644 index 00000000..865789ba --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/temple_of_technoblade/temple_of_technoblade1.json @@ -0,0 +1,22 @@ +{ + "name": "antarchy:temple_of_technoblade/temple_of_technoblade1", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:temple_of_technoblade/temple_of_technoblade1", + "processors": "antarchy:temple_of_technoblade_processor", + "projection": "rigid", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35 + }, + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/temple_of_technoblade/temple_of_technoblade2.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/temple_of_technoblade/temple_of_technoblade2.json new file mode 100644 index 00000000..c2cb6245 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/temple_of_technoblade/temple_of_technoblade2.json @@ -0,0 +1,22 @@ +{ + "name": "antarchy:temple_of_technoblade/temple_of_technoblade2", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:temple_of_technoblade/temple_of_technoblade2", + "processors": "antarchy:temple_of_technoblade_processor", + "projection": "rigid", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35 + }, + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/temple_of_technoblade/temple_of_technoblade3.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/temple_of_technoblade/temple_of_technoblade3.json new file mode 100644 index 00000000..7c8ccdd2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/temple_of_technoblade/temple_of_technoblade3.json @@ -0,0 +1,22 @@ +{ + "name": "antarchy:temple_of_technoblade/temple_of_technoblade3", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:temple_of_technoblade/temple_of_technoblade3", + "processors": "antarchy:temple_of_technoblade_processor", + "projection": "rigid", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35 + }, + "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 new file mode 100644 index 00000000..9b0b0f55 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:toreterror_arena/toreterror_arena", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:toreterror_arena/toreterror_arena", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} \ 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 new file mode 100644 index 00000000..bdf238c5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena_bottom.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:toreterror_arena/toreterror_arena_bottom", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:toreterror_arena/toreterror_arena_bottom", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} \ 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 new file mode 100644 index 00000000..8a7ad2f3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/trayaurus_lab/trayaurus_lab.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:trayaurus_lab/trayaurus_lab", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:trayaurus_lab/trayaurus_lab", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} \ 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 new file mode 100644 index 00000000..5e9d3f17 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/trayaurus_lab/trayaurus_lab_bottom.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:trayaurus_lab/trayaurus_lab_bottom", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:trayaurus_lab/trayaurus_lab_bottom", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/fence_gates.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/fence_gates.json new file mode 100644 index 00000000..628a0416 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/fence_gates.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_fence_gate" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/ores.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores.json new file mode 100644 index 00000000..48c82ae3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores.json @@ -0,0 +1,8 @@ +{ + "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/blocks/ores/bluestone.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores/bluestone.json new file mode 100644 index 00000000..264d7d72 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores/bluestone.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:bluestone_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/ores/coal.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores/coal.json new file mode 100644 index 00000000..dd5065b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores/coal.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:myrmite_coal_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/ores/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores/titanium.json new file mode 100644 index 00000000..51a3cb8b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores/titanium.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:titanium_ore", + "antarchy:deepslate_titanium_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/ores/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores/uranium.json new file mode 100644 index 00000000..004de06d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores/uranium.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:uranium_ore", + "antarchy:deepslate_uranium_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/ores_in_ground/deepslate.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores_in_ground/deepslate.json new file mode 100644 index 00000000..a18a1543 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores_in_ground/deepslate.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:deepslate_uranium_ore", + "antarchy:deepslate_titanium_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/ores_in_ground/myrmite.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores_in_ground/myrmite.json new file mode 100644 index 00000000..dd5065b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores_in_ground/myrmite.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:myrmite_coal_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/ores_in_ground/stone.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores_in_ground/stone.json new file mode 100644 index 00000000..5d96296f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/ores_in_ground/stone.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:uranium_ore", + "antarchy:titanium_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/sandstone/blocks.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/sandstone/blocks.json new file mode 100644 index 00000000..62958bac --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/sandstone/blocks.json @@ -0,0 +1,9 @@ +{ + "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/blocks/sandstone/slabs.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/sandstone/slabs.json new file mode 100644 index 00000000..6d2c70e8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/sandstone/slabs.json @@ -0,0 +1,8 @@ +{ + "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/blocks/sandstone/stairs.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/sandstone/stairs.json new file mode 100644 index 00000000..896f6fad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/sandstone/stairs.json @@ -0,0 +1,7 @@ +{ + "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/blocks/stones.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/stones.json new file mode 100644 index 00000000..83c265b0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/stones.json @@ -0,0 +1,4 @@ +{ + "values": [ + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks.json new file mode 100644 index 00000000..7ada88fb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks.json @@ -0,0 +1,9 @@ +{ + "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/blocks/storage_blocks/raw_titanium.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks/raw_titanium.json new file mode 100644 index 00000000..4b5d6f93 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks/raw_titanium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:raw_titanium_block" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks/raw_uranium.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks/raw_uranium.json new file mode 100644 index 00000000..d27b02b0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks/raw_uranium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:raw_uranium_block" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks/titanium.json new file mode 100644 index 00000000..68fda782 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks/titanium.json @@ -0,0 +1,14 @@ +{ + "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/blocks/storage_blocks/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks/uranium.json new file mode 100644 index 00000000..29a144b3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/blocks/storage_blocks/uranium.json @@ -0,0 +1,14 @@ +{ + "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/item/tools/melee_weapon.json b/common-1.20.1/src/main/resources/data/c/tags/item/tools/melee_weapon.json new file mode 100644 index 00000000..28f24b20 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/item/tools/melee_weapon.json @@ -0,0 +1,12 @@ +{ + "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/items/animal_foods.json b/common-1.20.1/src/main/resources/data/c/tags/items/animal_foods.json new file mode 100644 index 00000000..31cdfa7a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/animal_foods.json @@ -0,0 +1,10 @@ +{ + "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/items/armors.json b/common-1.20.1/src/main/resources/data/c/tags/items/armors.json new file mode 100644 index 00000000..78f746df --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/armors.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "#c:boots", + "#c:leggings", + "#c:chestplates", + "#c:helmets" + ] +} 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 new file mode 100644 index 00000000..fb4c4964 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/axes.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_axe", + "antarchy:battle_axe" + ] +} 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 new file mode 100644 index 00000000..f04449ad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/boots.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_boots", + "antarchy:nightmare_boots", + "antarchy:blood_crystal_boots", + "antarchy:primordial_boots", + "antarchy:jumpy_boots" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/bows.json b/common-1.20.1/src/main/resources/data/c/tags/items/bows.json new file mode 100644 index 00000000..66565526 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/bows.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_bow" + ] +} 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 new file mode 100644 index 00000000..bff31c6e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/chestplates.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_chestplate", + "antarchy:nightmare_chestplate", + "antarchy:blood_crystal_chestplate", + "antarchy:primordial_chestplate" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/crossbows.json b/common-1.20.1/src/main/resources/data/c/tags/items/crossbows.json new file mode 100644 index 00000000..d0458b36 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/crossbows.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "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 new file mode 100644 index 00000000..32ba9b63 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/elytra.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:brutalfly_elytra" + ] +} 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 new file mode 100644 index 00000000..a8b524a7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/enchantables.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:jumpy_boots" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/fence_gates.json b/common-1.20.1/src/main/resources/data/c/tags/items/fence_gates.json new file mode 100644 index 00000000..628a0416 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/fence_gates.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_fence_gate" + ] +} 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 new file mode 100644 index 00000000..35048616 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/foods.json @@ -0,0 +1,27 @@ +{ + "replace": false, + "values": [ + "#c:foods/soup", + "antarchy:blood_crystal_apple", + "antarchy:cornbread", + "antarchy:popcorn", + "antarchy:peach_pie", + "antarchy:cheep", + "antarchy:broodfruit", + "antarchy:raw_bug_meat", + "antarchy:cooked_bug_meat", + "antarchy:raw_venison", + "antarchy:cooked_venison", + "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/items/foods/cooked_meat.json b/common-1.20.1/src/main/resources/data/c/tags/items/foods/cooked_meat.json new file mode 100644 index 00000000..e3f95c3d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/foods/cooked_meat.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:cooked_venison", + "antarchy:cooked_bug_meat" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/foods/food_poisoning.json b/common-1.20.1/src/main/resources/data/c/tags/items/foods/food_poisoning.json new file mode 100644 index 00000000..416e8237 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/foods/food_poisoning.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:mud_pie", + "antarchy:moleworm" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/foods/fruit.json b/common-1.20.1/src/main/resources/data/c/tags/items/foods/fruit.json new file mode 100644 index 00000000..aa4f6517 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/foods/fruit.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:peach" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/foods/raw_fish.json b/common-1.20.1/src/main/resources/data/c/tags/items/foods/raw_fish.json new file mode 100644 index 00000000..12df0487 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/foods/raw_fish.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:cheep" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/foods/raw_meat.json b/common-1.20.1/src/main/resources/data/c/tags/items/foods/raw_meat.json new file mode 100644 index 00000000..999e42f3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/foods/raw_meat.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:raw_venison", + "antarchy:raw_bug_meat" + ] +} 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 new file mode 100644 index 00000000..0e21e13e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/foods/soup.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:cloud_shark_fin_soup" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/gems.json b/common-1.20.1/src/main/resources/data/c/tags/items/gems.json new file mode 100644 index 00000000..f61a414f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/gems.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:tigers_eye" + ] +} 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 new file mode 100644 index 00000000..fad05ccc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/helmets.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_helmet", + "antarchy:nightmare_helmet", + "antarchy:moggles", + "antarchy:blood_crystal_helmet", + "antarchy:fallen_king_crown", + "antarchy:primordial_helmet" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/hoes.json b/common-1.20.1/src/main/resources/data/c/tags/items/hoes.json new file mode 100644 index 00000000..eb8474b2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/hoes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_hoe" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/ingots.json b/common-1.20.1/src/main/resources/data/c/tags/items/ingots.json new file mode 100644 index 00000000..5c8c1102 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/ingots.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#c:ingots/titanium", + "#c:ingots/uranium" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/ingots/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/items/ingots/titanium.json new file mode 100644 index 00000000..0c40bede --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/ingots/titanium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:titanium_ingot" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/ingots/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/items/ingots/uranium.json new file mode 100644 index 00000000..c3391b6e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/ingots/uranium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:uranium_ingot" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/leaves.json b/common-1.20.1/src/main/resources/data/c/tags/items/leaves.json new file mode 100644 index 00000000..019600cb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/leaves.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_leaves" + ] +} 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 new file mode 100644 index 00000000..04f5edee --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/leggings.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_leggings", + "antarchy:nightmare_leggings", + "antarchy:blood_crystal_leggings", + "antarchy:primordial_leggings" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/nuggets.json b/common-1.20.1/src/main/resources/data/c/tags/items/nuggets.json new file mode 100644 index 00000000..787f0bcf --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/nuggets.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#c:nuggets/titanium", + "#c:nuggets/uranium" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/nuggets/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/items/nuggets/titanium.json new file mode 100644 index 00000000..fafc2765 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/nuggets/titanium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:titanium_nugget" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/nuggets/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/items/nuggets/uranium.json new file mode 100644 index 00000000..33997321 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/nuggets/uranium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:uranium_nugget" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/ores.json b/common-1.20.1/src/main/resources/data/c/tags/items/ores.json new file mode 100644 index 00000000..48c82ae3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/ores.json @@ -0,0 +1,8 @@ +{ + "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/items/ores/bluestone.json b/common-1.20.1/src/main/resources/data/c/tags/items/ores/bluestone.json new file mode 100644 index 00000000..264d7d72 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/ores/bluestone.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:bluestone_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/ores/coal.json b/common-1.20.1/src/main/resources/data/c/tags/items/ores/coal.json new file mode 100644 index 00000000..dd5065b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/ores/coal.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:myrmite_coal_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/ores/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/items/ores/titanium.json new file mode 100644 index 00000000..51a3cb8b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/ores/titanium.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:titanium_ore", + "antarchy:deepslate_titanium_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/ores/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/items/ores/uranium.json new file mode 100644 index 00000000..004de06d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/ores/uranium.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:uranium_ore", + "antarchy:deepslate_uranium_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/ores_in_ground/myrmite.json b/common-1.20.1/src/main/resources/data/c/tags/items/ores_in_ground/myrmite.json new file mode 100644 index 00000000..dd5065b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/ores_in_ground/myrmite.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:myrmite_coal_ore" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/pickaxes.json b/common-1.20.1/src/main/resources/data/c/tags/items/pickaxes.json new file mode 100644 index 00000000..5418fd4b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/pickaxes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_pickaxe" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/raw_materials.json b/common-1.20.1/src/main/resources/data/c/tags/items/raw_materials.json new file mode 100644 index 00000000..9d6975bd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/raw_materials.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#c:raw_materials/titanium", + "#c:raw_materials/uranium" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/raw_materials/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/items/raw_materials/titanium.json new file mode 100644 index 00000000..c0f35467 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/raw_materials/titanium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:raw_titanium" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/raw_materials/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/items/raw_materials/uranium.json new file mode 100644 index 00000000..9fffc783 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/raw_materials/uranium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:raw_uranium" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/sandstone/blocks.json b/common-1.20.1/src/main/resources/data/c/tags/items/sandstone/blocks.json new file mode 100644 index 00000000..62958bac --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/sandstone/blocks.json @@ -0,0 +1,9 @@ +{ + "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/items/sandstone/slabs.json b/common-1.20.1/src/main/resources/data/c/tags/items/sandstone/slabs.json new file mode 100644 index 00000000..6d2c70e8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/sandstone/slabs.json @@ -0,0 +1,8 @@ +{ + "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/items/sandstone/stairs.json b/common-1.20.1/src/main/resources/data/c/tags/items/sandstone/stairs.json new file mode 100644 index 00000000..896f6fad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/sandstone/stairs.json @@ -0,0 +1,7 @@ +{ + "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/items/seeds.json b/common-1.20.1/src/main/resources/data/c/tags/items/seeds.json new file mode 100644 index 00000000..48cf8010 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/seeds.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:corn_seeds" + ] +} 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 new file mode 100644 index 00000000..41d829cb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/shovels.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_shovel" + ] +} 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 new file mode 100644 index 00000000..74e34e54 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/slime_balls.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:slime_ball", + "antarchy:triffid_goo" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks.json b/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks.json new file mode 100644 index 00000000..7ada88fb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks.json @@ -0,0 +1,9 @@ +{ + "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/items/storage_blocks/raw_titanium.json b/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks/raw_titanium.json new file mode 100644 index 00000000..4b5d6f93 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks/raw_titanium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:raw_titanium_block" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks/raw_uranium.json b/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks/raw_uranium.json new file mode 100644 index 00000000..d27b02b0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks/raw_uranium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:raw_uranium_block" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks/titanium.json b/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks/titanium.json new file mode 100644 index 00000000..ab4fd344 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks/titanium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:titanium_block" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks/uranium.json b/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks/uranium.json new file mode 100644 index 00000000..af7684d6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/storage_blocks/uranium.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:uranium_block" + ] +} 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 new file mode 100644 index 00000000..1f7b8343 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/swords.json @@ -0,0 +1,12 @@ +{ + "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" + ] +} 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 new file mode 100644 index 00000000..17f3daa4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/tools/melee_weapon.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_sword", + "antarchy:battle_axe", + "antarchy:nightmare_sword", + "antarchy:basilisk_dagger", + "antarchy:scorpion_whip", + "antarchy:attitude_adjuster" + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/tools/ranged_weapon.json b/common-1.20.1/src/main/resources/data/c/tags/items/tools/ranged_weapon.json new file mode 100644 index 00000000..9dff752f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/c/tags/items/tools/ranged_weapon.json @@ -0,0 +1,11 @@ +{ + "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/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 new file mode 100644 index 00000000..2d3718f9 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/integrated_api/tags/worldgen/structure/larger_locate_search.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "antarchy:toreterror_arena", + "antarchy:fallen_kingdom_castle", + "antarchy:ruined_prison", + "antarchy:ruined_arena", + "antarchy:trayaurus_lab" + ] +} 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 new file mode 100644 index 00000000..145abef3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/integrated_api/tags/worldgen/structures/larger_locate_search.json @@ -0,0 +1,9 @@ +{ + "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/loot_tables/entities/magma_cube.json b/common-1.20.1/src/main/resources/data/minecraft/loot_tables/entities/magma_cube.json new file mode 100644 index 00000000..4e011b10 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/loot_tables/entities/magma_cube.json @@ -0,0 +1,161 @@ +{ + "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/tags/blocks/all_hanging_signs.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/all_hanging_signs.json new file mode 100644 index 00000000..7e4be6b5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/all_hanging_signs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_hanging_sign", + "antarchy:ouranwood_wall_hanging_sign", + "antarchy:peach_hanging_sign", + "antarchy:peach_wall_hanging_sign" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/animals_spawnable_on.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/animals_spawnable_on.json new file mode 100644 index 00000000..a5ea1c6e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/animals_spawnable_on.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:blush_moss_block", + "minecraft:moss_block" + ] +} 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 new file mode 100644 index 00000000..746c5071 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/ceiling_hanging_signs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_hanging_sign", + "antarchy:peach_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 new file mode 100644 index 00000000..6f6679d5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/climbable.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:vine", + "antarchy:creepvine", + "antarchy:molting_vines" + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/coral_blocks.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/coral_blocks.json new file mode 100644 index 00000000..731c04f2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/coral_blocks.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral_block" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/coral_plants.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/coral_plants.json new file mode 100644 index 00000000..964b717d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/coral_plants.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/corals.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/corals.json new file mode 100644 index 00000000..c806e535 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/corals.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral_fan" + ] +} 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 new file mode 100644 index 00000000..0cd9680b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/dirt.json @@ -0,0 +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" + ] +} 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 new file mode 100644 index 00000000..e6ac4fd5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/doors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:uranium_door", + "antarchy:titanium_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 new file mode 100644 index 00000000..738ac5c8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/fence_gates.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_fence_gate", + "antarchy:peach_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 new file mode 100644 index 00000000..d794cdec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/flowers.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "antarchy:camellia", + "antarchy:lotus", + "antarchy:orange_milkweed", + "antarchy:pink_milkweed", + "antarchy:spider_lily" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/frogs_spawnable_on.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/frogs_spawnable_on.json new file mode 100644 index 00000000..a5ea1c6e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/frogs_spawnable_on.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:blush_moss_block", + "minecraft:moss_block" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/leaves.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/leaves.json new file mode 100644 index 00000000..aee0c428 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/leaves.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_leaves", + "antarchy:peach_leaves" + ] +} 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 new file mode 100644 index 00000000..5fc273ea --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/logs.json @@ -0,0 +1,16 @@ +{ + "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" + ] +} 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 new file mode 100644 index 00000000..5fc273ea --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/logs_that_burn.json @@ -0,0 +1,16 @@ +{ + "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" + ] +} 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 new file mode 100644 index 00000000..c87836aa --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json @@ -0,0 +1,44 @@ +{ + "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" + ] +} 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 new file mode 100644 index 00000000..d66584d1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json @@ -0,0 +1,20 @@ +{ + "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" + ] +} 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 new file mode 100644 index 00000000..25b732f3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -0,0 +1,124 @@ +{ + "replace": false, + "values": [ + "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:shellstone_pillar", + "antarchy:nyxite_pillar", + "antarchy:broodstone_pillar", + "antarchy:dream_lantern", + "antarchy:bluestone_ore", + "antarchy:bluestone_block" + ] +} 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 new file mode 100644 index 00000000..5346432f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json @@ -0,0 +1,12 @@ +{ + "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" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/moss_replaceable.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/moss_replaceable.json new file mode 100644 index 00000000..e273cf02 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/moss_replaceable.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:myrmite", + "antarchy:broodstone" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mushroom_grow_block.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mushroom_grow_block.json new file mode 100644 index 00000000..c52641fc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/mushroom_grow_block.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:mycelium", + "antarchy:amber_moss_block" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json new file mode 100644 index 00000000..4d243781 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json @@ -0,0 +1,31 @@ +{ + "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/blocks/needs_stone_tool.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json new file mode 100644 index 00000000..ee689010 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json @@ -0,0 +1,44 @@ +{ + "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:myrmite_coal_ore", + "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:shellstone_pillar", + "antarchy:broodstone_pillar", + "antarchy:biomite", + "antarchy:biomite_turf", + "antarchy:bluestone_ore", + "antarchy:bluestone_block" + ] +} 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 new file mode 100644 index 00000000..d98bff17 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/planks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_planks", + "antarchy:peach_planks" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/sand.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/sand.json new file mode 100644 index 00000000..d79aca3c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/sand.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:dream_sand" + ] +} 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 new file mode 100644 index 00000000..5a06a14d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/saplings.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_acorn", + "antarchy:peach_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 new file mode 100644 index 00000000..9bd75693 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/slabs.json @@ -0,0 +1,22 @@ +{ + "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: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" + ] +} 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 new file mode 100644 index 00000000..ae42e249 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/small_flowers.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:lotus", + "antarchy:spider_lily" + ] +} 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 new file mode 100644 index 00000000..8dae86d4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/stairs.json @@ -0,0 +1,21 @@ +{ + "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: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" + ] +} 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 new file mode 100644 index 00000000..6ec9e2a8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/standing_signs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_sign", + "antarchy:peach_sign" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/stone_buttons.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/stone_buttons.json new file mode 100644 index 00000000..bf507d60 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/stone_buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:polished_nyxite_button" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/stone_pressure_plates.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/stone_pressure_plates.json new file mode 100644 index 00000000..52fc3749 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/stone_pressure_plates.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:polished_nyxite_pressure_plate" + ] +} 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 new file mode 100644 index 00000000..5d341ba2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/sword_efficient.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} 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 new file mode 100644 index 00000000..cf2db3ab --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/tall_flowers.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "antarchy:camellia", + "antarchy:orange_milkweed", + "antarchy:pink_milkweed" + ] +} 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 new file mode 100644 index 00000000..174efdac --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/trapdoors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:uranium_trapdoor", + "antarchy:titanium_trapdoor" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/underwater_bonemeals.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/underwater_bonemeals.json new file mode 100644 index 00000000..a8614dfb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/underwater_bonemeals.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral", + "antarchy:star_coral_wall_fan" + ] +} 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 new file mode 100644 index 00000000..6f6679d5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/vines.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:vine", + "antarchy:creepvine", + "antarchy:molting_vines" + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_corals.json b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_corals.json new file mode 100644 index 00000000..a42a8397 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_corals.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral_wall_fan" + ] +} 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 new file mode 100644 index 00000000..3472b17e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_hanging_signs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_wall_hanging_sign", + "antarchy:peach_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 new file mode 100644 index 00000000..406407ee --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wall_signs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_wall_sign", + "antarchy:peach_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 new file mode 100644 index 00000000..3d65f231 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/walls.json @@ -0,0 +1,16 @@ +{ + "replace": false, + "values": [ + "antarchy:dream_sandstone_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" + ] +} 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 new file mode 100644 index 00000000..1d626cef --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_buttons.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_button", + "antarchy:peach_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 new file mode 100644 index 00000000..e4ebd50e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_door", + "antarchy:peach_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 new file mode 100644 index 00000000..f1b5eb5a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_fences.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_fence", + "antarchy:peach_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 new file mode 100644 index 00000000..7f3d5149 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_pressure_plate", + "antarchy:peach_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 new file mode 100644 index 00000000..9b0b8371 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_slabs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_slab", + "antarchy:peach_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 new file mode 100644 index 00000000..5d419448 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_stairs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_stairs", + "antarchy:peach_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 new file mode 100644 index 00000000..df34c0e6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_trapdoor", + "antarchy:peach_trapdoor" + ] +} 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 new file mode 100644 index 00000000..042bce23 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/entity_types/arthropod.json @@ -0,0 +1,23 @@ +{ + "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:jumpy_bug", + "antarchy:spit_bug", + "antarchy:stink_bug", + "antarchy:hercules_beetle", + "antarchy:creeping_horror", + "antarchy:lurking_terror", + "antarchy:rolly_polly", + "antarchy:scorpion", + "antarchy:emperor_scorpion", + "antarchy:jerry" + ] +} 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 new file mode 100644 index 00000000..fb4c4964 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/axes.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_axe", + "antarchy:battle_axe" + ] +} 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 new file mode 100644 index 00000000..fd04ca71 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/boats.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_boat", + "antarchy:ouranwood_chest_boat", + "antarchy:peach_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 new file mode 100644 index 00000000..bff31c6e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/chest_armor.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_chestplate", + "antarchy:nightmare_chestplate", + "antarchy:blood_crystal_chestplate", + "antarchy:primordial_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 new file mode 100644 index 00000000..47f46f23 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/chest_boats.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_chest_boat", + "antarchy:peach_chest_boat" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/dirt.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/dirt.json new file mode 100644 index 00000000..26f30b50 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/dirt.json @@ -0,0 +1,8 @@ +{ + "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/items/doors.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/doors.json new file mode 100644 index 00000000..e6ac4fd5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/doors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:uranium_door", + "antarchy:titanium_door" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/bow.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/bow.json new file mode 100644 index 00000000..66565526 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/bow.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_bow" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/crossbow.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/crossbow.json new file mode 100644 index 00000000..d0458b36 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/crossbow.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_crossbow" + ] +} 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 new file mode 100644 index 00000000..e5ba50fc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/durability.json @@ -0,0 +1,36 @@ +{ + "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:jumpy_boots", + "antarchy:fallen_king_crown", + "antarchy:water_cannon" + ] +} 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 new file mode 100644 index 00000000..91e23a16 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/elytra.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:elytra", + "antarchy:brutalfly_elytra" + ] +} 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 new file mode 100644 index 00000000..864900e5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/equippable.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "antarchy:battle_axe", + "antarchy:ultimate_bow", + "antarchy:ultimate_crossbow", + "antarchy:brutalfly_elytra", + "antarchy:jumpy_boots" + ] +} 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 new file mode 100644 index 00000000..90c9e379 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/fire_aspect.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_sword", + "antarchy:big_bertha", + "antarchy:blood_crystal_katana" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/mace.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/mace.json new file mode 100644 index 00000000..d275da3f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/mace.json @@ -0,0 +1,5 @@ +{ + "replace": false, + "values": [ + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/trident.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/trident.json new file mode 100644 index 00000000..4d4e3067 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/trident.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:krakens_grasp" + ] +} 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 new file mode 100644 index 00000000..a8b524a7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/vanishing.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:jumpy_boots" + ] +} 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 new file mode 100644 index 00000000..9f3a72a3 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/weapon.json @@ -0,0 +1,13 @@ +{ + "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" + ] +} 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 new file mode 100644 index 00000000..738ac5c8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/fence_gates.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_fence_gate", + "antarchy:peach_fence_gate" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/fishes.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/fishes.json new file mode 100644 index 00000000..12df0487 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/fishes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:cheep" + ] +} 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 new file mode 100644 index 00000000..d794cdec --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/flowers.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "antarchy:camellia", + "antarchy:lotus", + "antarchy:orange_milkweed", + "antarchy:pink_milkweed", + "antarchy:spider_lily" + ] +} 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 new file mode 100644 index 00000000..f04449ad --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/foot_armor.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_boots", + "antarchy:nightmare_boots", + "antarchy:blood_crystal_boots", + "antarchy:primordial_boots", + "antarchy:jumpy_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 new file mode 100644 index 00000000..746c5071 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/hanging_signs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_hanging_sign", + "antarchy:peach_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 new file mode 100644 index 00000000..fad05ccc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/head_armor.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_helmet", + "antarchy:nightmare_helmet", + "antarchy:moggles", + "antarchy:blood_crystal_helmet", + "antarchy:fallen_king_crown", + "antarchy:primordial_helmet" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/hoes.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/hoes.json new file mode 100644 index 00000000..eb8474b2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/hoes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_hoe" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/horse_food.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/horse_food.json new file mode 100644 index 00000000..aa4f6517 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/horse_food.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:peach" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/leaves.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/leaves.json new file mode 100644 index 00000000..aee0c428 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/leaves.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_leaves", + "antarchy:peach_leaves" + ] +} 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 new file mode 100644 index 00000000..04f5edee --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/leg_armor.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_leggings", + "antarchy:nightmare_leggings", + "antarchy:blood_crystal_leggings", + "antarchy:primordial_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 new file mode 100644 index 00000000..5fc273ea --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/logs.json @@ -0,0 +1,16 @@ +{ + "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" + ] +} 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 new file mode 100644 index 00000000..5fc273ea --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/logs_that_burn.json @@ -0,0 +1,16 @@ +{ + "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" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/meat.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/meat.json new file mode 100644 index 00000000..6e665875 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/meat.json @@ -0,0 +1,9 @@ +{ + "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/items/parrot_food.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/parrot_food.json new file mode 100644 index 00000000..48cf8010 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/parrot_food.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:corn_seeds" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/pickaxes.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/pickaxes.json new file mode 100644 index 00000000..5418fd4b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/pickaxes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_pickaxe" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/piglin_safe_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/piglin_safe_armor.json new file mode 100644 index 00000000..697a3e6d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/piglin_safe_armor.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:fallen_king_crown" + ] +} 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 new file mode 100644 index 00000000..d98bff17 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/planks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_planks", + "antarchy:peach_planks" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/sand.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/sand.json new file mode 100644 index 00000000..d79aca3c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/sand.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:dream_sand" + ] +} 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 new file mode 100644 index 00000000..5a06a14d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/saplings.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_acorn", + "antarchy:peach_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 new file mode 100644 index 00000000..41d829cb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/shovels.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_shovel" + ] +} 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 new file mode 100644 index 00000000..6ec9e2a8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/signs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_sign", + "antarchy:peach_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 new file mode 100644 index 00000000..9a281d20 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/slabs.json @@ -0,0 +1,20 @@ +{ + "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:cut_uranium_slab", + "antarchy:cut_titanium_slab", + "antarchy:broodstone_slab", + "antarchy:polished_broodstone_slab", + "antarchy:broodstone_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 new file mode 100644 index 00000000..1c54cc36 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/slime_balls.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:triffid_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 new file mode 100644 index 00000000..ae42e249 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/small_flowers.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:lotus", + "antarchy:spider_lily" + ] +} 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 new file mode 100644 index 00000000..df140f7a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/stairs.json @@ -0,0 +1,19 @@ +{ + "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:cut_uranium_stairs", + "antarchy:cut_titanium_stairs", + "antarchy:broodstone_stairs", + "antarchy:polished_broodstone_stairs", + "antarchy:broodstone_brick_stairs" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/stone_buttons.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/stone_buttons.json new file mode 100644 index 00000000..bf507d60 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/stone_buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:polished_nyxite_button" + ] +} 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 new file mode 100644 index 00000000..bb811eef --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/swords.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "antarchy:ultimate_sword", + "antarchy:nightmare_sword", + "antarchy:basilisk_dagger", + "antarchy:big_bertha", + "antarchy:blood_crystal_katana", + "antarchy:mantis_claw" + ] +} 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 new file mode 100644 index 00000000..cf2db3ab --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/tall_flowers.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "antarchy:camellia", + "antarchy:orange_milkweed", + "antarchy:pink_milkweed" + ] +} 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 new file mode 100644 index 00000000..174efdac --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/trapdoors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:uranium_trapdoor", + "antarchy:titanium_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 new file mode 100644 index 00000000..b29bad3b --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/trim_materials.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "antarchy:blood_crystal_shard", + "antarchy:nightmare_scale", + "antarchy:uranium_ingot", + "antarchy:titanium_ingot", + "antarchy:bluestone", + "antarchy:tigers_eye" + ] +} + + 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 new file mode 100644 index 00000000..62754ec1 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/trimmable_armor.json @@ -0,0 +1,20 @@ +{ + "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:jumpy_boots" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/villager_plantable_seeds.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/villager_plantable_seeds.json new file mode 100644 index 00000000..48cf8010 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/villager_plantable_seeds.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:corn_seeds" + ] +} 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 new file mode 100644 index 00000000..f48d67f2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/vines.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:vine", + "antarchy:creepvine", + "antarchy:molting_vines" + ] +} 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 new file mode 100644 index 00000000..25573f07 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/walls.json @@ -0,0 +1,16 @@ +{ + "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:broodstone_wall", + "antarchy:polished_broodstone_wall", + "antarchy:broodstone_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 new file mode 100644 index 00000000..1d626cef --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_buttons.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_button", + "antarchy:peach_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 new file mode 100644 index 00000000..e4ebd50e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_doors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_door", + "antarchy:peach_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 new file mode 100644 index 00000000..f1b5eb5a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_fences.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_fence", + "antarchy:peach_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 new file mode 100644 index 00000000..7f3d5149 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_pressure_plates.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_pressure_plate", + "antarchy:peach_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 new file mode 100644 index 00000000..9b0b8371 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_slabs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_slab", + "antarchy:peach_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 new file mode 100644 index 00000000..5d419448 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_stairs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_stairs", + "antarchy:peach_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 new file mode 100644 index 00000000..df34c0e6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:ouranwood_trapdoor", + "antarchy:peach_trapdoor" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/has_structure/nether_fossil.json b/common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/has_structure/nether_fossil.json new file mode 100644 index 00000000..2a30802a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/has_structure/nether_fossil.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:soul_sand_valley", + "antarchy:dream_dunes" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/is_river.json b/common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/is_river.json new file mode 100644 index 00000000..72318268 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/worldgen/biome/is_river.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:elythia_river" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/worldgen/noise/nether/temperature.json b/common-1.20.1/src/main/resources/data/minecraft/worldgen/noise/nether/temperature.json new file mode 100644 index 00000000..ab7b15e6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/worldgen/noise/nether/temperature.json @@ -0,0 +1,7 @@ +{ + "amplitudes": [ + 1.0, + 1.0 + ], + "firstOctave": -7 +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/worldgen/noise/nether/vegetation.json b/common-1.20.1/src/main/resources/data/minecraft/worldgen/noise/nether/vegetation.json new file mode 100644 index 00000000..ab7b15e6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/worldgen/noise/nether/vegetation.json @@ -0,0 +1,7 @@ +{ + "amplitudes": [ + 1.0, + 1.0 + ], + "firstOctave": -7 +} diff --git a/common-1.20.1/src/main/resources/pack.mcmeta b/common-1.20.1/src/main/resources/pack.mcmeta new file mode 100644 index 00000000..75ba51bc --- /dev/null +++ b/common-1.20.1/src/main/resources/pack.mcmeta @@ -0,0 +1,7 @@ +{ + "pack": { + "description": "Antarchy mod resources", + "pack_format": 15, + "_comment": "ANTS" + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java new file mode 100644 index 00000000..fda4f1d7 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java @@ -0,0 +1,55 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity; +import com.mojang.serialization.MapCodec; +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.level.LevelAccessor; +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; + +public class AntigravelBlock extends Block { + public static final MapCodec CODEC = simpleCodec(AntigravelBlock::new); + + public AntigravelBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected 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); + } + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (direction == Direction.UP) { + level.scheduleTick(pos, this, 2); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + protected 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.21.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneLampBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneLampBlock.java new file mode 100644 index 00000000..7cc0ca3c --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/BluestoneLampBlock.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +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.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; + +public class BluestoneLampBlock extends Block { + public static final MapCodec CODEC = simpleCodec(BluestoneLampBlock::new); + public static final BooleanProperty LIT = BlockStateProperties.LIT; + + public BluestoneLampBlock(BlockBehaviour.Properties properties) { + super(properties); + registerDefaultState(this.stateDefinition.any().setValue(LIT, false)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(LIT); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(LIT, shouldLight(context.getLevel(), context.getClickedPos())); + } + + @Override + protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + if (level.isClientSide) { + return; + } + boolean lit = state.getValue(LIT); + boolean powered = shouldLight(level, pos); + if (lit && !powered) { + level.scheduleTick(pos, this, 4); + } else if (!lit && powered) { + level.setBlock(pos, state.setValue(LIT, true), 2); + } + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (state.getValue(LIT) && !shouldLight(level, pos)) { + level.setBlock(pos, state.setValue(LIT, false), 2); + } + } + + private static boolean shouldLight(Level level, BlockPos pos) { + return level.hasNeighborSignal(pos) || BluestoneSignalHelper.getBestNeighborSignal(level, pos) > 0; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/MucusBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/MucusBlock.java new file mode 100644 index 00000000..a50e1258 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/MucusBlock.java @@ -0,0 +1,59 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.MultifaceBlock; +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.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class MucusBlock extends GlowLichenBlock { + public static final MapCodec CODEC = simpleCodec(MucusBlock::new); + 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; + + public MucusBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return (MapCodec) (MapCodec) CODEC; + } + + @Override + protected VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(MultifaceBlock.getFaceProperty(Direction.DOWN)) ? DOWN_COLLISION_SHAPE : Shapes.empty(); + } + + @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))) { + return; + } + + Vec3 delta = entity.getDeltaMovement(); + Vec3 horizontal = new Vec3(delta.x, 0.0D, delta.z); + double speed = horizontal.length(); + if (speed < SLIDE_MIN_SPEED) { + return; + } + + Vec3 direction = horizontal.scale(1.0D / speed); + double boostedSpeed = Math.min(speed + SLIDE_ACCELERATION, SLIDE_MAX_SPEED); + entity.setDeltaMovement(direction.x * boostedSpeed, delta.y, direction.z * boostedSpeed); + entity.hurtMarked = true; + entity.hasImpulse = true; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/NadirSaplingBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/NadirSaplingBlock.java new file mode 100644 index 00000000..0e9a2dd9 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/NadirSaplingBlock.java @@ -0,0 +1,53 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +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.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class NadirSaplingBlock extends BushBlock { + public static final MapCodec CODEC = Block.simpleCodec(NadirSaplingBlock::new); + private static final VoxelShape SHAPE = Block.box(2.0D, 0.0D, 2.0D, 14.0D, 12.0D, 14.0D); + + public NadirSaplingBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(BlockTags.DIRT) || state.is(Blocks.FARMLAND); + } + + @Override + protected 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(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/UpperBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/UpperBlock.java new file mode 100644 index 00000000..470aace2 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/UpperBlock.java @@ -0,0 +1,147 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.block.entity.UpperBlockEntity; +import com.mojang.serialization.MapCodec; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.Containers; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.player.Player; +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.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; +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.DirectionProperty; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class UpperBlock extends BaseEntityBlock { + public static final DirectionProperty FACING = DirectionProperty.create("facing", direction -> direction != Direction.DOWN); + public static final BooleanProperty ENABLED = BlockStateProperties.ENABLED; + + private static final VoxelShape TOP = Block.box(0.0, 0.0, 0.0, 16.0, 6.0, 16.0); + private static final VoxelShape MIDDLE = Block.box(4.0, 6.0, 4.0, 12.0, 12.0, 12.0); + private static final VoxelShape BASE = Shapes.or(TOP, MIDDLE); + private static final VoxelShape UP_SHAPE = Shapes.or(BASE, Block.box(6.0, 12.0, 6.0, 10.0, 16.0, 10.0)); + private static final VoxelShape NORTH_SHAPE = Shapes.or(BASE, Block.box(6.0, 8.0, 0.0, 10.0, 12.0, 4.0)); + private static final VoxelShape SOUTH_SHAPE = Shapes.or(BASE, Block.box(6.0, 8.0, 12.0, 10.0, 12.0, 16.0)); + private static final VoxelShape WEST_SHAPE = Shapes.or(BASE, Block.box(0.0, 8.0, 6.0, 4.0, 12.0, 10.0)); + private static final VoxelShape EAST_SHAPE = Shapes.or(BASE, Block.box(12.0, 8.0, 6.0, 16.0, 12.0, 10.0)); + + private final Supplier> blockEntityTypeSupplier; + private final MapCodec codec; + + public UpperBlock(Supplier> blockEntityTypeSupplier, BlockBehaviour.Properties properties) { + super(properties); + this.blockEntityTypeSupplier = blockEntityTypeSupplier; + this.codec = Block.simpleCodec(ignored -> this); + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.UP).setValue(ENABLED, true)); + } + + @Override + public MapCodec codec() { + return this.codec; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING, ENABLED); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Direction opposite = context.getClickedFace().getOpposite(); + Direction facing = opposite == Direction.DOWN ? Direction.UP : opposite; + return this.defaultBlockState() + .setValue(FACING, facing) + .setValue(ENABLED, !context.getLevel().hasNeighborSignal(context.getClickedPos())); + } + + @Override + protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + this.updateEnabled(level, pos, state); + } + + private void updateEnabled(Level level, BlockPos pos, BlockState state) { + boolean shouldBeEnabled = !level.hasNeighborSignal(pos); + if (shouldBeEnabled != state.getValue(ENABLED)) { + level.setBlock(pos, state.setValue(ENABLED, shouldBeEnabled), Block.UPDATE_CLIENTS); + } + } + + @Override + protected RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return switch (state.getValue(FACING)) { + case UP -> UP_SHAPE; + case NORTH -> NORTH_SHAPE; + case SOUTH -> SOUTH_SHAPE; + case WEST -> WEST_SHAPE; + case EAST -> EAST_SHAPE; + default -> UP_SHAPE; + }; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new UpperBlockEntity(pos, state, this.blockEntityTypeSupplier); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + if (level.isClientSide) { + return null; + } + return createTickerHelper(blockEntityType, this.blockEntityTypeSupplier.get(), (tickLevel, tickPos, tickState, blockEntity) -> { + if (tickLevel instanceof net.minecraft.server.level.ServerLevel serverLevel) { + UpperBlockEntity.serverTick(serverLevel, tickPos, tickState, blockEntity); + } + }); + } + + @Override + protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { + if (level.getBlockEntity(pos) instanceof MenuProvider menuProvider) { + player.openMenu(menuProvider); + } + return InteractionResult.CONSUME; + } + + @Override + protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock()) && level.getBlockEntity(pos) instanceof UpperBlockEntity blockEntity) { + Containers.dropContents(level, pos, blockEntity); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } + + @Override + protected BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @Override + protected BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UpperBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UpperBlockEntity.java new file mode 100644 index 00000000..84671de3 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UpperBlockEntity.java @@ -0,0 +1,222 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.block.UpperBlock; +import java.util.List; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.Container; +import net.minecraft.world.ContainerHelper; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.HopperMenu; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; + +public class UpperBlockEntity extends RandomizableContainerBlockEntity { + private static final int CONTAINER_SIZE = 5; + private static final int MOVE_ITEM_SPEED = 8; + + private NonNullList items = NonNullList.withSize(CONTAINER_SIZE, ItemStack.EMPTY); + private int cooldownTime = -1; + + public UpperBlockEntity(BlockPos pos, BlockState state, Supplier> typeSupplier) { + super(typeSupplier.get(), pos, state); + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, UpperBlockEntity blockEntity) { + blockEntity.cooldownTime--; + if (!blockEntity.isOnCooldown()) { + blockEntity.setCooldown(0); + tryMoveItems(level, pos, state, blockEntity); + } + } + + private boolean isOnCooldown() { + return this.cooldownTime > 0; + } + + private void setCooldown(int cooldown) { + this.cooldownTime = cooldown; + } + + private static boolean tryMoveItems(ServerLevel level, BlockPos pos, BlockState state, UpperBlockEntity upper) { + if (!state.getValue(UpperBlock.ENABLED)) { + return false; + } + + boolean moved = false; + if (!upper.isEmpty()) { + moved = pushToDestination(level, pos, state, upper); + } + if (!moved) { + moved = pullFromBelow(level, pos, upper); + } + moved |= suckLooseItems(level, pos, upper); + + if (moved) { + upper.setCooldown(MOVE_ITEM_SPEED); + upper.setChanged(); + return true; + } + return false; + } + + private static boolean pullFromBelow(ServerLevel level, BlockPos pos, UpperBlockEntity upper) { + Container source = getContainerAt(level, pos.below()); + if (source == null) { + return false; + } + if (source instanceof UpperBlockEntity sourceUpper && sourceUpper.isOnCooldown()) { + return false; + } + return transferOneItem(source, upper); + } + + private static boolean pushToDestination(ServerLevel level, BlockPos pos, BlockState state, UpperBlockEntity upper) { + Direction facing = state.getValue(UpperBlock.FACING); + Container destination = getContainerAt(level, pos.relative(facing)); + if (destination == null) { + return false; + } + boolean pushed = transferOneItem(upper, destination); + if (pushed && destination instanceof UpperBlockEntity destinationUpper && !destinationUpper.isOnCooldown()) { + destinationUpper.setCooldown(MOVE_ITEM_SPEED); + destinationUpper.setChanged(); + } + return pushed; + } + + private static boolean suckLooseItems(ServerLevel level, BlockPos pos, UpperBlockEntity upper) { + AABB suckArea = new AABB(pos.below()).inflate(-0.05D, 0.0D, -0.05D); + List entities = level.getEntitiesOfClass(ItemEntity.class, suckArea, ItemEntity::isAlive); + boolean moved = false; + for (ItemEntity itemEntity : entities) { + ItemStack stack = itemEntity.getItem(); + ItemStack remainder = addItem(upper, stack.copy()); + if (remainder.isEmpty()) { + itemEntity.discard(); + moved = true; + } else if (remainder.getCount() != stack.getCount()) { + itemEntity.setItem(remainder); + moved = true; + } + } + return moved; + } + + private static Container getContainerAt(ServerLevel level, BlockPos pos) { + BlockEntity blockEntity = level.getBlockEntity(pos); + return blockEntity instanceof Container container ? container : null; + } + + private static boolean transferOneItem(Container source, Container destination) { + for (int slot = 0; slot < source.getContainerSize(); slot++) { + ItemStack stack = source.getItem(slot); + if (stack.isEmpty()) { + continue; + } + + ItemStack single = stack.copyWithCount(1); + ItemStack remainder = addItem(destination, single); + if (remainder.isEmpty()) { + stack.shrink(1); + source.setItem(slot, stack); + destination.setChanged(); + source.setChanged(); + return true; + } + } + return false; + } + + private static ItemStack addItem(Container container, ItemStack stack) { + for (int slot = 0; slot < container.getContainerSize() && !stack.isEmpty(); slot++) { + ItemStack existing = container.getItem(slot); + if (!existing.isEmpty() && ItemStack.isSameItemSameComponents(existing, stack)) { + int limit = Math.min(existing.getMaxStackSize(), container.getMaxStackSize()); + int room = limit - existing.getCount(); + if (room > 0) { + int moveCount = Math.min(room, stack.getCount()); + existing.grow(moveCount); + stack.shrink(moveCount); + } + } + } + for (int slot = 0; slot < container.getContainerSize() && !stack.isEmpty(); slot++) { + ItemStack existing = container.getItem(slot); + if (existing.isEmpty() && container.canPlaceItem(slot, stack)) { + int moveCount = Math.min(stack.getMaxStackSize(), stack.getCount()); + container.setItem(slot, stack.split(moveCount)); + } + } + return stack; + } + + @Override + public int getContainerSize() { + return CONTAINER_SIZE; + } + + @Override + protected NonNullList getItems() { + return this.items; + } + + @Override + protected void setItems(NonNullList items) { + this.items = items; + } + + @Override + protected Component getDefaultName() { + return Component.translatable("container.antarchy.upper"); + } + + @Override + protected AbstractContainerMenu createMenu(int containerId, Inventory inventory) { + return new HopperMenu(containerId, inventory, this); + } + + @Override + protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.saveAdditional(tag, registries); + if (!this.trySaveLootTable(tag)) { + ContainerHelper.saveAllItems(tag, this.items, registries); + } + tag.putInt("Cooldown", this.cooldownTime); + } + + @Override + protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.loadAdditional(tag, registries); + this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); + if (!this.tryLoadLootTable(tag)) { + ContainerHelper.loadAllItems(tag, this.items, registries); + } + this.cooldownTime = tag.getInt("Cooldown"); + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + return this.saveCustomOnly(registries); + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java new file mode 100644 index 00000000..866e0731 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/boss/BossCombatUtil.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.boss; + +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; + +public final class BossCombatUtil { + private BossCombatUtil() {} + + public static boolean isOutOfDamageRange(Mob boss, double range) { + if (range <= 0.0D) { + return false; + } + return boss.level().getNearestPlayer(boss, range) == null; + } + + public static void clampHalfHealthCrossing(LivingEntity boss, float preHitHealth) { + float halfHealth = boss.getMaxHealth() * 0.5F; + if (preHitHealth > halfHealth && boss.getHealth() < halfHealth) { + boss.setHealth(halfHealth); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/GlimmeringHudRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/GlimmeringHudRenderer.java new file mode 100644 index 00000000..0e8b25b2 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/GlimmeringHudRenderer.java @@ -0,0 +1,39 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.Holder; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.player.Player; + +public final class GlimmeringHudRenderer { + private static final int MAX_ALPHA = 0x40; + private static final int TINT_RGB = 0x66CCFF; + private static final float FADE_SPEED = 0.05F; + + private static float fadeProgress = 0.0F; + + private GlimmeringHudRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + Minecraft minecraft = Minecraft.getInstance(); + Player player = minecraft.player; + Holder glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + boolean active = player != null && !player.isDeadOrDying() && glimmering != null && player.hasEffect(glimmering); + + fadeProgress = active + ? Math.min(1.0F, fadeProgress + FADE_SPEED) + : Math.max(0.0F, fadeProgress - FADE_SPEED); + if (fadeProgress <= 0.0F) { + return; + } + + int alpha = Mth.floor(MAX_ALPHA * fadeProgress); + int width = minecraft.getWindow().getGuiScaledWidth(); + int height = minecraft.getWindow().getGuiScaledHeight(); + guiGraphics.fill(0, 0, width, height, (alpha << 24) | TINT_RGB); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/SizeRaySoundHandler.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/SizeRaySoundHandler.java new file mode 100644 index 00000000..d5e6d58f --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/SizeRaySoundHandler.java @@ -0,0 +1,116 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +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.RandomSource; + +public final class SizeRaySoundHandler { + private static SizeRayItem activeItem; + private static SizeRayUseSound chargeSound; + private static SizeRayUseSound loopSound; + + private SizeRaySoundHandler() { + } + + public static void tick(Minecraft minecraft) { + LocalPlayer player = minecraft.player; + if (minecraft.level == null || player == null || !AntarchySettings.sizeChangingRaysEnabled()) { + stopActive(minecraft); + return; + } + + if (!(player.getUseItem().getItem() instanceof SizeRayItem sizeRayItem)) { + stopActive(minecraft); + return; + } + + if (activeItem != sizeRayItem) { + stopActive(minecraft); + activeItem = sizeRayItem; + } + + int useTicks = sizeRayItem.getUseDuration(player.getUseItem(), player) - player.getUseItemRemainingTicks(); + if (useTicks >= SizeRayItem.LOOP_SOUND_START_TICKS) { + stopCharge(minecraft); + if (loopSound == null || !minecraft.getSoundManager().isActive(loopSound)) { + loopSound = new SizeRayUseSound(player, sizeRayItem.getLoopSound(), true); + minecraft.getSoundManager().play(loopSound); + } + return; + } + + stopLoop(minecraft); + if (chargeSound == null) { + chargeSound = new SizeRayUseSound(player, sizeRayItem.getChargeSound(), false); + minecraft.getSoundManager().play(chargeSound); + } + } + + private static void stopActive(Minecraft minecraft) { + stopCharge(minecraft); + stopLoop(minecraft); + activeItem = null; + } + + private static void stopCharge(Minecraft minecraft) { + if (chargeSound != null) { + chargeSound.stopNow(minecraft); + chargeSound = null; + } + } + + private static void stopLoop(Minecraft minecraft) { + if (loopSound != null) { + loopSound.stopNow(minecraft); + loopSound = null; + } + } + + private static final class SizeRayUseSound extends AbstractTickableSoundInstance { + private final LocalPlayer player; + + private SizeRayUseSound(LocalPlayer player, SoundEvent soundEvent, boolean loop) { + super(soundEvent, SoundSource.PLAYERS, RandomSource.create()); + this.player = player; + this.looping = loop; + this.delay = 0; + this.relative = false; + this.attenuation = SoundInstance.Attenuation.LINEAR; + this.volume = 1.0F; + this.pitch = 1.0F; + this.x = player.getX(); + this.y = player.getY(); + this.z = player.getZ(); + } + + private void stopNow(Minecraft minecraft) { + minecraft.getSoundManager().stop(this); + this.stop(); + } + + @Override + public void tick() { + if (this.player.isRemoved() + || !this.player.isAlive() + || !(this.player.getUseItem().getItem() instanceof SizeRayItem)) { + this.stop(); + return; + } + + this.x = this.player.getX(); + this.y = this.player.getY(); + this.z = this.player.getZ(); + } + + @Override + public boolean canStartSilent() { + return true; + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/DimensionalTearModel.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/DimensionalTearModel.java new file mode 100644 index 00000000..fd9c2e3f --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/DimensionalTearModel.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class DimensionalTearModel extends GeoModel { + public static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/dimensional_tear.png"); + + @Override + public ResourceLocation getModelResource(DimensionalTearEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/dimensional_tear.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(DimensionalTearEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(DimensionalTearEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/dimensional_tear.animation.json"); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/particle/LucidBoltImpactParticle.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/particle/LucidBoltImpactParticle.java new file mode 100644 index 00000000..dc2b3ade --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/particle/LucidBoltImpactParticle.java @@ -0,0 +1,75 @@ +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.client.renderer.LightTexture; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.Mth; + +public final class LucidBoltImpactParticle extends TextureSheetParticle { + private final SpriteSet sprites; + + private LucidBoltImpactParticle(ClientLevel level, double x, double y, double z, double xd, double yd, double zd, SpriteSet sprites, float baseScale, int minLifetime, int randomLifetime) { + super(level, x, y, z, xd, yd, zd); + this.sprites = sprites; + this.friction = 0.88F; + this.gravity = 0.0F; + this.hasPhysics = false; + this.xd = xd; + this.yd = yd; + this.zd = zd; + this.quadSize = baseScale * (0.85F + this.random.nextFloat() * 0.3F); + this.lifetime = minLifetime + this.random.nextInt(randomLifetime); + this.setColor(0.94F, 0.95F, 1.0F); + this.setAlpha(0.95F); + this.pickSprite(sprites); + } + + @Override + public void tick() { + super.tick(); + this.pickSprite(this.sprites); + float life = (float) this.age / (float) this.lifetime; + this.setAlpha(Mth.clamp(1.0F - life, 0.0F, 1.0F) * 0.95F); + } + + @Override + public int getLightColor(float partialTick) { + return LightTexture.FULL_BRIGHT; + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; + } + + public static final class SmallProvider implements ParticleProvider { + private final SpriteSet sprites; + + public SmallProvider(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 LucidBoltImpactParticle(level, x, y, z, xd, yd, zd, this.sprites, 0.1F, 8, 4); + } + } + + public static final class LargeProvider implements ParticleProvider { + private final SpriteSet sprites; + + public LargeProvider(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 LucidBoltImpactParticle(level, x, y, z, xd, yd, zd, this.sprites, 0.22F, 10, 4); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DimensionalTearRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DimensionalTearRenderer.java new file mode 100644 index 00000000..46057baf --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/DimensionalTearRenderer.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.DimensionalTearModel; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +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 DimensionalTearRenderer extends GeoEntityRenderer { + public DimensionalTearRenderer(EntityRendererProvider.Context context) { + super(context, new DimensionalTearModel()); + this.shadowRadius = 0.0F; + } + + @Override + public void render(DimensionalTearEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + super.render(entity, entityYaw, partialTick, poseStack, bufferSource, 0xF000F0); + } + + @Override + public @Nullable RenderType getRenderType(DimensionalTearEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityTranslucent(DimensionalTearModel.TEXTURE); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmeringLivingLayer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmeringLivingLayer.java new file mode 100644 index 00000000..97aa44d7 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmeringLivingLayer.java @@ -0,0 +1,44 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.core.Holder; +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 int GLIMMERING_TINT = 0x4266CCFF; + + public GlimmeringLivingLayer(RenderLayerParent renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLight, T entity, + float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, + float netHeadYaw, float headPitch) { + Holder glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + if (glimmering == null || !entity.hasEffect(glimmering)) { + return; + } + + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucentEmissive(this.getTextureLocation(entity))); + this.getParentModel().renderToBuffer( + poseStack, + vertexConsumer, + LightTexture.FULL_BRIGHT, + LivingEntityRenderer.getOverlayCoords(entity, 0.0F), + GLIMMERING_TINT + ); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ThoraxisUndersideSkyRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ThoraxisUndersideSkyRenderer.java new file mode 100644 index 00000000..4ca01e64 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ThoraxisUndersideSkyRenderer.java @@ -0,0 +1,256 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; +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.MeshData; +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 java.util.Random; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import org.joml.Matrix4f; +import org.joml.Matrix4fStack; + +public final class ThoraxisUndersideSkyRenderer { + public static final ResourceKey THORAXIS = ResourceKey.create( + Registries.DIMENSION, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "thoraxis") + ); + private static final ResourceLocation SUN_TEXTURE = ResourceLocation.withDefaultNamespace("textures/environment/sun.png"); + private static final ResourceLocation MOON_TEXTURE = ResourceLocation.withDefaultNamespace("textures/environment/moon_phases.png"); + private static final float SKY_RADIUS = 100.0F; + private static final float BODY_SIZE = 32.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 ThoraxisUndersideSkyRenderer() { + } + + public static boolean shouldRender(ClientLevel level, Camera camera) { + return level.dimension().equals(THORAXIS) && camera.getPosition().y < ThoraxisUndersideManager.GRAVITY_FLIP_Y; + } + + public static void render( + Minecraft minecraft, + PoseStack poseStack, + Matrix4f projectionMatrix, + float partialTick, + Camera camera, + boolean isFoggy, + Runnable setupFog, + VertexBuffer skyBuffer + ) { + setupFog.run(); + if (isFoggy || minecraft.options.hideLightningFlash().get() || minecraft.gameRenderer.getMainCamera() != camera) { + return; + } + + RenderSystem.depthMask(false); + RenderSystem.setShaderColor(SKY_RED, SKY_GREEN, SKY_BLUE, 1.0F); + skyBuffer.bind(); + skyBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader()); + 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); + + RenderSystem.depthMask(true); + } + + private static void renderRedStars(Matrix4f modelViewMatrix, Matrix4f projectionMatrix) { + if (redStarBuffer == null) { + redStarBuffer = buildRedStarBuffer(); + } + + 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.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + } + + private static VertexBuffer buildRedStarBuffer() { + Random random = new Random(552031L); + BufferBuilder builder = Tesselator.getInstance().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; + 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; + double sx = x * 100.0D; + double sy = y * 100.0D; + double sz = z * 100.0D; + double yaw = Math.atan2(x, z); + double sinYaw = Math.sin(yaw); + double cosYaw = Math.cos(yaw); + 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; + double v = (j + 1 & 2) - 1; + double px = u * cosRot - v * sinRot; + double py = v * cosRot + u * sinRot; + double qx = px * sinPitch; + double qy = -px * cosPitch; + double rx = qy * sinYaw - py * cosYaw; + double ry = py * sinYaw + qy * cosYaw; + builder.addVertex((float) (sx + rx * size), (float) (sy + qx * size), (float) (sz + ry * size)) + .setColor(red, green, blue, 1.0F); + } + } + } + + MeshData mesh = builder.buildOrThrow(); + VertexBuffer buffer = new VertexBuffer(VertexBuffer.Usage.STATIC); + buffer.bind(); + buffer.upload(mesh); + VertexBuffer.unbind(); + return buffer; + } + + 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 void renderBodyGlow(Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float orbitDegrees, float yawDegrees, int rgb, float glowRadius) { + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.disableCull(); + RenderSystem.setShader(GameRenderer::getPositionColorShader); + RenderSystem.backupProjectionMatrix(); + RenderSystem.setProjectionMatrix(projectionMatrix, VertexSorting.DISTANCE_TO_ORIGIN); + + Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); + modelViewStack.pushMatrix(); + modelViewStack.set(modelViewMatrix); + modelViewStack.rotateX((float) Math.toRadians(orbitDegrees)); + modelViewStack.rotateZ((float) Math.toRadians(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().begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); + buffer.addVertex(0.0F, SKY_RADIUS, 0.0F).setColor(red, green, blue, 0.55F); + for (int i = 0; i <= 24; i++) { + float angle = i * Mth.TWO_PI / 24.0F; + buffer.addVertex(Mth.sin(angle) * glowRadius, SKY_RADIUS, Mth.cos(angle) * glowRadius).setColor(red, green, blue, 0.0F); + } + BufferUploader.drawWithShader(buffer.buildOrThrow()); + + modelViewStack.popMatrix(); + RenderSystem.applyModelViewMatrix(); + RenderSystem.restoreProjectionMatrix(); + RenderSystem.enableCull(); + 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 + ) { + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate( + GlStateManager.SourceFactor.ONE, + GlStateManager.DestFactor.ONE, + GlStateManager.SourceFactor.ONE, + GlStateManager.DestFactor.ZERO + ); + RenderSystem.disableCull(); + RenderSystem.setShaderColor(((rgb >> 16) & 0xFF) / 255.0F, ((rgb >> 8) & 0xFF) / 255.0F, (rgb & 0xFF) / 255.0F, 1.0F); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, texture); + RenderSystem.backupProjectionMatrix(); + RenderSystem.setProjectionMatrix(projectionMatrix, VertexSorting.DISTANCE_TO_ORIGIN); + + Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); + modelViewStack.pushMatrix(); + modelViewStack.set(modelViewMatrix); + modelViewStack.rotateX((float) Math.toRadians(orbitDegrees)); + modelViewStack.rotateZ((float) Math.toRadians(yawDegrees)); + modelViewStack.rotateY((float) Math.toRadians(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; + } + + BufferBuilder buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + buffer.addVertex(-halfSize, SKY_RADIUS, -halfSize).setUv(minU, minV); + buffer.addVertex(-halfSize, SKY_RADIUS, halfSize).setUv(minU, maxV); + buffer.addVertex(halfSize, SKY_RADIUS, halfSize).setUv(maxU, maxV); + buffer.addVertex(halfSize, SKY_RADIUS, -halfSize).setUv(maxU, minV); + BufferUploader.drawWithShader(buffer.buildOrThrow()); + + modelViewStack.popMatrix(); + 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.21.1/src/main/java/com/craisinlord/antarchy/content/effect/GlimmeringMobEffect.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/GlimmeringMobEffect.java new file mode 100644 index 00000000..be376399 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/GlimmeringMobEffect.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.effect; + +import com.craisinlord.antarchy.content.client.particle.GlimmerParticles; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; +import net.minecraft.world.entity.LivingEntity; + +public final class GlimmeringMobEffect extends MobEffect { + public GlimmeringMobEffect() { + super(MobEffectCategory.BENEFICIAL, 0x66CCFF); + } + + @Override + public boolean applyEffectTick(LivingEntity entity, int amplifier) { + if (!entity.level().isClientSide()) { + boolean running = entity.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D; + GlimmerParticles.tickAmbient(entity, running); + } + return true; + } + + @Override + public boolean shouldApplyEffectTickThisTick(int duration, int amplifier) { + return true; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java index bc8e9cfd..6b06e8c8 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java @@ -97,8 +97,8 @@ public class CaterpillarEntity extends Animal implements GeoEntity { private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation EAT_ANIM = RawAnimation.begin().thenPlay("eat"); - private static final RawAnimation PUPATION_ANIM = RawAnimation.begin().thenPlay("Coocon"); - private static final RawAnimation CHRYSALIS_ANIM = RawAnimation.begin().thenLoop("coocon"); + private static final RawAnimation PUPATION_ANIM = RawAnimation.begin().thenPlay("cocoon"); + private static final RawAnimation CHRYSALIS_ANIM = RawAnimation.begin().thenLoop("cocoon_chrysalis"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java index aea769ff..5a278639 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java @@ -156,6 +156,8 @@ public class CreepingHorrorEntity extends Monster implements GeoEntity { attackAnimTicks = clamped; if (wasIdle && clamped > 0) { this.triggerAnim("main_controller", "attack"); + } else if (!wasIdle && clamped <= 0) { + this.stopTriggeredAnim("main_controller", "attack"); } } @@ -177,7 +179,7 @@ public class CreepingHorrorEntity extends Monster implements GeoEntity { @Override public void handleEntityEvent(byte id) { if (id == ATTACK_ANIM_EVENT) { - attackAnimTicks = 20; + this.setAttackAnimTicks(20); return; } super.handleEntityEvent(id); @@ -189,15 +191,14 @@ public class CreepingHorrorEntity extends Monster implements GeoEntity { super.tick(); CavarynBurrowingMobBehavior.moveOutOfBlocks(this); if (attackAnimTicks > 0) { - attackAnimTicks--; - if (attackAnimTicks <= 0 && !this.level().isClientSide()) { - this.stopTriggeredAnim("main_controller", "attack"); - } + this.setAttackAnimTicks(attackAnimTicks - 1); } if (this.level().isClientSide()) return; boolean climbing = this.horizontalCollision; - this.entityData.set(CLIMBING, climbing); + if (this.entityData.get(CLIMBING) != climbing) { + this.entityData.set(CLIMBING, climbing); + } if (climbing && this.getTarget() != null) { LivingEntity target = this.getTarget(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java index ad186d0b..456667fd 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java @@ -178,7 +178,7 @@ public class LurkingTerrorEntity extends Monster implements GeoEntity { 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); + if (attackAnimTicks > 0) this.setAttackAnimTicks(attackAnimTicks - 1); } private void setAttackAnimTicks(int ticks) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirBoatEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirBoatEntity.java new file mode 100644 index 00000000..4be3f887 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirBoatEntity.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; + +public class NadirBoatEntity extends Boat { + public NadirBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nadir_boat")); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirChestBoatEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirChestBoatEntity.java new file mode 100644 index 00000000..c0035472 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/NadirChestBoatEntity.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.entity.vehicle.ChestBoat; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; + +public class NadirChestBoatEntity extends ChestBoat { + public NadirChestBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nadir_chest_boat")); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java index 1d440ab2..3e85e15f 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java @@ -299,8 +299,6 @@ public class OctopusBombEntity extends Monster implements GeoEntity { tag.putInt("LastAttackState", this.lastAttackState); tag.putBoolean("CanFly", this.canFly()); tag.putBoolean("SpawnedByKraken", this.spawnedByKraken); - if (this.grabbedTargetId >= 0) tag.putInt("GrabTarget", this.grabbedTargetId); - tag.putInt("AttackState", this.getAttackState()); tag.putInt("AnimationState", this.getAnimationState()); } @@ -312,9 +310,10 @@ public class OctopusBombEntity extends Monster implements GeoEntity { this.lastAttackState = tag.contains("LastAttackState") ? tag.getInt("LastAttackState") : ATTACK_NONE; this.setCanFly(tag.getBoolean("CanFly")); this.spawnedByKraken = tag.getBoolean("SpawnedByKraken"); - this.grabbedTargetId = tag.contains("GrabTarget") ? tag.getInt("GrabTarget") : -1; - this.entityData.set(ATTACK_STATE, tag.getInt("AttackState")); - this.entityData.set(ANIMATION_STATE, tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_IDLE); + this.grabbedTargetId = -1; + this.actionTicks = 0; + this.entityData.set(ATTACK_STATE, ATTACK_NONE); + this.entityData.set(ANIMATION_STATE, ANIM_IDLE); } public boolean canFly() { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java index 0173fa79..e7130b87 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java @@ -24,7 +24,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 +58,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; @@ -105,10 +103,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 +190,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() { @@ -261,6 +257,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.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java index 1d262523..aff4284b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java @@ -10,6 +10,7 @@ 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; @@ -147,6 +148,16 @@ public class TriffidEntity extends Monster implements GeoEntity { builder.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)); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java new file mode 100644 index 00000000..25020b5e --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java @@ -0,0 +1,376 @@ +package com.craisinlord.antarchy.content.entity.portal; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +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.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.registries.BuiltInRegistries; +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.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +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.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.level.Level; +import net.minecraft.tags.TagKey; +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.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class DimensionalTearEntity extends Entity implements GeoEntity { + public enum TearState { + NORMAL, + UNSTABLE, + LUCID, + COLLAPSING, + OPENING + } + + private static final EntityDataAccessor STATE = + SynchedEntityData.defineId(DimensionalTearEntity.class, EntityDataSerializers.INT); + 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 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 final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private UUID linkedTearId; + 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; + + public DimensionalTearEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setInvulnerable(true); + this.noPhysics = true; + this.noCulling = true; + } + + public static DimensionalTearEntity create(ServerLevel level, Vec3 pos, float yaw, int lifetimeTicks) { + DimensionalTearEntity tear = new DimensionalTearEntity(AntarchyObjects.DIMENSIONAL_TEAR.get(), level); + tear.moveTo(pos.x, pos.y, pos.z, yaw, 0.0F); + tear.lifetimeTicks = lifetimeTicks; + tear.nextEventTicks = tear.randomEventDelay(); + return tear; + } + + public void linkTo(DimensionalTearEntity other) { + this.linkedTearId = other.getUUID(); + this.linkedFallbackPos = other.position(); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + builder.define(STATE, TearState.NORMAL.ordinal()); + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + this.tickClientParticles(); + return; + } + + this.ageTicks++; + if (this.ageTicks < OPENING_ANIMATION_TICKS) { + this.setTearState(TearState.OPENING); + } else if (this.ageTicks >= this.lifetimeTicks - CLOSING_ANIMATION_TICKS) { + 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(); + return; + } + + DimensionalTearEntity linked = this.findLinkedTear(); + if (linked == null || !linked.isAlive()) { + this.discard(); + return; + } + + this.tickMobEvent((ServerLevel) this.level()); + this.tickTeleport(linked); + } + + private void tickMobEvent(ServerLevel level) { + TearState state = this.getTearState(); + if (state == TearState.OPENING || state == TearState.COLLAPSING || level.getDifficulty() == Difficulty.PEACEFUL) { + return; + } + + if (this.eventTicks > 0) { + this.eventTicks--; + if (this.eventTicks == 1) { + this.spawnEmergence(level, this.pendingEvent); + this.pendingEvent = TearState.NORMAL; + this.setTearState(TearState.NORMAL); + this.nextEventTicks = this.randomEventDelay(); + } + return; + } + + if (this.nextEventTicks > 0) { + this.nextEventTicks--; + return; + } + + this.pendingEvent = this.random.nextFloat() < AntarchySettings.dimensionalTearLucidEventChance() + ? TearState.LUCID + : TearState.UNSTABLE; + this.eventTicks = EVENT_WARNING_TICKS; + this.setTearState(this.pendingEvent); + level.playSound(null, this.blockPosition(), SoundEvents.RESPAWN_ANCHOR_CHARGE, SoundSource.HOSTILE, 0.85F, this.pendingEvent == TearState.LUCID ? 1.35F : 0.65F); + } + + private void spawnEmergence(ServerLevel level, TearState eventState) { + Vec3 exitPos = this.exitPosition(); + TagKey> spawnTag = eventState == TearState.LUCID + ? AntarchyTags.Entities.DIMENSIONAL_TEAR_COMMON_SPAWNS + : AntarchyTags.Entities.DIMENSIONAL_TEAR_RARE_SPAWNS; + Mob mob = this.createTaggedMob(level, spawnTag); + if (mob == null || !level.noCollision(mob, mob.getType().getDimensions().makeBoundingBox(exitPos))) { + return; + } + + mob.moveTo(exitPos.x, exitPos.y, exitPos.z, this.getYRot(), 0.0F); + mob.finalizeSpawn(level, level.getCurrentDifficultyAt(BlockPos.containing(exitPos)), MobSpawnType.MOB_SUMMONED, null); + 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); + } + + @Nullable + private Mob createTaggedMob(ServerLevel level, TagKey> tag) { + return BuiltInRegistries.ENTITY_TYPE.getTag(tag) + .flatMap((HolderSet.Named> entityTypes) -> entityTypes.getRandomElement(this.random)) + .map(Holder::value) + .map(entityType -> entityType.create(level)) + .filter(entity -> entity instanceof Mob) + .map(entity -> (Mob) entity) + .orElse(null); + } + + private void tickTeleport(DimensionalTearEntity linked) { + AABB area = this.getBoundingBox().inflate(PORTAL_RADIUS); + List entities = this.level().getEntities(this, area, this::canTeleportEntity); + for (Entity entity : entities) { + teleportEntity(entity, linked); + } + } + + private boolean canTeleportEntity(Entity entity) { + if (!entity.isAlive() || entity instanceof DimensionalTearEntity || entity.isPassenger() || entity.isVehicle()) { + return false; + } + UUID uuid = entity.getUUID(); + long gameTime = this.level().getGameTime(); + long cooldownUntil = TELEPORT_COOLDOWNS.getOrDefault(uuid, 0L); + if (cooldownUntil <= gameTime) { + TELEPORT_COOLDOWNS.remove(uuid); + return true; + } + return false; + } + + private void teleportEntity(Entity entity, DimensionalTearEntity destination) { + Vec3 motion = entity.getDeltaMovement(); + Vec3 exitPos = destination.exitPosition(); + TELEPORT_COOLDOWNS.put(entity.getUUID(), this.level().getGameTime() + TELEPORT_COOLDOWN_TICKS); + + if (entity instanceof ServerPlayer player && destination.level() instanceof ServerLevel serverLevel) { + player.teleportTo(serverLevel, exitPos.x, exitPos.y, exitPos.z, player.getYRot(), player.getXRot()); + } else { + entity.teleportTo(exitPos.x, exitPos.y, exitPos.z); + } + + entity.setDeltaMovement(motion); + entity.hasImpulse = true; + if (entity instanceof LivingEntity living) { + living.addEffect(new MobEffectInstance(AntarchyObjects.INVERTED_EFFECT.get(), AntarchySettings.dimensionalTearInvertedDurationTicks(), 0)); + } + this.level().playSound(null, this.blockPosition(), SoundEvents.ENDERMAN_TELEPORT, SoundSource.NEUTRAL, 0.7F, 0.65F + this.random.nextFloat() * 0.2F); + } + + private Vec3 exitPosition() { + Vec3 facing = this.getViewVector(1.0F); + if (facing.lengthSqr() < 1.0E-4D) { + facing = new Vec3(0.0D, 0.0D, 1.0D); + } + return this.position().add(facing.normalize().scale(EXIT_OFFSET)); + } + + @Nullable + private DimensionalTearEntity findLinkedTear() { + if (!(this.level() instanceof ServerLevel serverLevel) || this.linkedTearId == null) { + return null; + } + Entity entity = serverLevel.getEntity(this.linkedTearId); + return entity instanceof DimensionalTearEntity tear ? tear : null; + } + + private void removeLinkedPair() { + DimensionalTearEntity linked = this.findLinkedTear(); + if (linked != null && linked.isAlive()) { + linked.discard(); + } + this.discard(); + } + + private int randomEventDelay() { + int min = Math.max(20, AntarchySettings.dimensionalTearEmergenceMinIntervalTicks()); + int max = Math.max(min, AntarchySettings.dimensionalTearEmergenceMaxIntervalTicks()); + return min + this.random.nextInt(max - min + 1); + } + + public TearState getTearState() { + int ordinal = this.entityData.get(STATE); + TearState[] values = TearState.values(); + return ordinal >= 0 && ordinal < values.length ? values[ordinal] : TearState.NORMAL; + } + + private void setTearState(TearState state) { + this.entityData.set(STATE, state.ordinal()); + } + + private void tickClientParticles() { + TearState state = this.getTearState(); + if (this.random.nextInt(state == TearState.NORMAL ? 5 : 2) != 0) { + return; + } + double spread = state == TearState.NORMAL ? 0.65D : 1.15D; + this.level().addParticle( + state == TearState.LUCID ? ParticleTypes.END_ROD : ParticleTypes.PORTAL, + this.getX() + (this.random.nextDouble() - 0.5D) * spread, + this.getY() + 1.3D + (this.random.nextDouble() - 0.5D) * spread, + this.getZ() + (this.random.nextDouble() - 0.5D) * spread, + (this.random.nextDouble() - 0.5D) * 0.05D, + (this.random.nextDouble() - 0.5D) * 0.05D, + (this.random.nextDouble() - 0.5D) * 0.05D + ); + } + + @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 addAdditionalSaveData(CompoundTag tag) { + tag.putInt("AgeTicks", this.ageTicks); + tag.putInt("LifetimeTicks", this.lifetimeTicks); + tag.putInt("EventTicks", this.eventTicks); + tag.putInt("NextEventTicks", this.nextEventTicks); + tag.putInt("PendingEvent", this.pendingEvent.ordinal()); + 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); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + this.ageTicks = tag.getInt("AgeTicks"); + this.lifetimeTicks = tag.getInt("LifetimeTicks"); + this.eventTicks = tag.getInt("EventTicks"); + this.nextEventTicks = tag.getInt("NextEventTicks"); + int event = tag.getInt("PendingEvent"); + TearState[] states = TearState.values(); + this.pendingEvent = event >= 0 && event < states.length ? states[event] : TearState.NORMAL; + if (tag.hasUUID("LinkedTearId")) { + this.linkedTearId = tag.getUUID("LinkedTearId"); + } + this.linkedFallbackPos = new Vec3(tag.getDouble("LinkedX"), tag.getDouble("LinkedY"), tag.getDouble("LinkedZ")); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "tear_controller", 0, this::tearController)); + } + + private PlayState tearController(AnimationState state) { + TearState tearState = this.getTearState(); + double speed = switch (tearState) { + case UNSTABLE -> 1.8D; + case LUCID -> 0.65D; + default -> 1.0D; + }; + state.getController().setAnimationSpeed(speed); + 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 + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynCreatureSpawner.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynCreatureSpawner.java new file mode 100644 index 00000000..c41df699 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynCreatureSpawner.java @@ -0,0 +1,227 @@ +package com.craisinlord.antarchy.content.horde; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +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.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.level.GameRules; +import net.minecraft.world.level.Level; +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, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cavaryn") + ); + + private static final int CHECK_INTERVAL_TICKS = 20 * 10; + private static final int AREA_COOLDOWN_TICKS = 20 * 60; + private static final int AREA_CELL_SIZE = 40; + private static final double NEARBY_RADIUS = 40.0D; + private static final int TARGET_NEARBY_COUNT = 4; + private static final double MIN_SPAWN_DISTANCE = 16.0D; + private static final double MAX_SPAWN_DISTANCE = 36.0D; + private static final int STINK_BUG_MIN_GROUP_SIZE = 1; + private static final int STINK_BUG_MAX_GROUP_SIZE = 5; + private static final int ROLLY_POLLY_MIN_GROUP_SIZE = 1; + private static final int ROLLY_POLLY_MAX_GROUP_SIZE = 3; + private static final int STINK_BUG_WEIGHT = 750; + private static final int ROLLY_POLLY_WEIGHT = 250; + private static final int MEMBER_JITTER_RADIUS = 4; + private static final int MEMBER_VERTICAL_SEARCH = 3; + + private static final Map AREA_COOLDOWNS = new HashMap<>(); + + private CavarynCreatureSpawner() { + } + + public static void tick(ServerLevel level) { + if (!level.dimension().equals(CAVARYN)) { + return; + } + if (level.getDifficulty() == Difficulty.PEACEFUL || !level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { + return; + } + + long gameTime = level.getGameTime(); + if (gameTime % CHECK_INTERVAL_TICKS != 0L) { + return; + } + + for (ServerPlayer player : level.players()) { + if (player.isSpectator() || player.isCreative() || !player.isAlive()) { + continue; + } + attemptSpawnNear(level, player, gameTime); + } + } + + private static void attemptSpawnNear(ServerLevel level, ServerPlayer player, long gameTime) { + BlockPos playerPos = player.blockPosition(); + long area = areaKey(playerPos); + Long cooldownUntil = AREA_COOLDOWNS.get(area); + if (cooldownUntil != null && gameTime < cooldownUntil) { + return; + } + + EntityType stinkBugType = AntarchyObjects.STINK_BUG.get(); + EntityType rollyPollyType = AntarchyObjects.ROLLY_POLLY.get(); + int nearbyStinkBugs = countNearby(level, playerPos, stinkBugType); + int nearbyRollyPollies = countNearby(level, playerPos, rollyPollyType); + boolean needStinkBug = nearbyStinkBugs < TARGET_NEARBY_COUNT; + boolean needRollyPolly = nearbyRollyPollies < TARGET_NEARBY_COUNT; + if (!needStinkBug && !needRollyPolly) { + AREA_COOLDOWNS.put(area, gameTime + AREA_COOLDOWN_TICKS); + return; + } + + RandomSource random = level.random; + BlockPos anchor = pickColumnNear(level, player, random); + if (anchor == null) { + return; + } + + EntityType chosenType = chooseType(needStinkBug, needRollyPolly, random); + boolean isStinkBug = chosenType == AntarchyObjects.STINK_BUG.get(); + int minGroupSize = isStinkBug ? STINK_BUG_MIN_GROUP_SIZE : ROLLY_POLLY_MIN_GROUP_SIZE; + int maxGroupSize = isStinkBug ? STINK_BUG_MAX_GROUP_SIZE : ROLLY_POLLY_MAX_GROUP_SIZE; + int groupSize = minGroupSize + random.nextInt(maxGroupSize - minGroupSize + 1); + int spawned = 0; + for (int i = 0; i < groupSize; i++) { + BlockPos memberPos = jitter(anchor, random); + BlockPos memberFloor = findFloorNear(level, memberPos); + if (memberFloor == null) { + continue; + } + if (spawnMob(level, chosenType, memberFloor)) { + spawned++; + } + } + + if (spawned > 0) { + AREA_COOLDOWNS.put(area, gameTime + AREA_COOLDOWN_TICKS); + } + } + + private static int countNearby(ServerLevel level, BlockPos center, EntityType type) { + AABB box = new AABB(center).inflate(NEARBY_RADIUS); + return level.getEntities(type, box, entity -> true).size(); + } + + private static EntityType chooseType(boolean needStinkBug, boolean needRollyPolly, RandomSource random) { + if (needStinkBug && !needRollyPolly) { + return AntarchyObjects.STINK_BUG.get(); + } + if (needRollyPolly && !needStinkBug) { + return AntarchyObjects.ROLLY_POLLY.get(); + } + int roll = random.nextInt(STINK_BUG_WEIGHT + ROLLY_POLLY_WEIGHT); + return roll < STINK_BUG_WEIGHT ? AntarchyObjects.STINK_BUG.get() : AntarchyObjects.ROLLY_POLLY.get(); + } + + private static BlockPos pickColumnNear(ServerLevel level, ServerPlayer player, RandomSource random) { + BlockPos origin = player.blockPosition(); + for (int attempt = 0; attempt < 12; 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 floor = scanColumnForFloor(level, x, z); + if (floor != null) { + return floor; + } + } + return null; + } + + private static BlockPos scanColumnForFloor(ServerLevel level, int x, int z) { + int minY = level.getMinBuildHeight(); + int maxY = level.getMaxBuildHeight() - 1; + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + for (int y = minY; y <= maxY; y++) { + cursor.set(x, y, z); + if (isValidGroundSpawn(level, cursor)) { + return cursor.immutable(); + } + } + return null; + } + + private static BlockPos jitter(BlockPos anchor, RandomSource random) { + int dx = random.nextInt(MEMBER_JITTER_RADIUS * 2 + 1) - MEMBER_JITTER_RADIUS; + int dz = random.nextInt(MEMBER_JITTER_RADIUS * 2 + 1) - MEMBER_JITTER_RADIUS; + return anchor.offset(dx, 0, dz); + } + + private static BlockPos findFloorNear(ServerLevel level, BlockPos start) { + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + for (int dy = 0; dy <= MEMBER_VERTICAL_SEARCH; dy++) { + cursor.set(start.getX(), start.getY() - dy, start.getZ()); + if (isValidGroundSpawn(level, cursor)) { + return cursor.immutable(); + } + if (dy != 0) { + cursor.set(start.getX(), start.getY() + dy, start.getZ()); + if (isValidGroundSpawn(level, cursor)) { + return cursor.immutable(); + } + } + } + return null; + } + + private static boolean isValidGroundSpawn(ServerLevel level, BlockPos pos) { + BlockPos below = pos.below(); + return level.getBlockState(pos).isAir() + && level.getBlockState(pos.above()).isAir() + && level.getFluidState(pos).isEmpty() + && level.getFluidState(pos.above()).isEmpty() + && level.getBlockState(below).isFaceSturdy(level, below, Direction.UP); + } + + private static boolean spawnMob(ServerLevel level, EntityType type, BlockPos pos) { + if (!level.noCollision(type.getSpawnAABB(pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D))) { + return false; + } + Entity entity = type.create(level); + if (!(entity instanceof Mob mob)) { + return false; + } + mob.moveTo(pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D, level.random.nextFloat() * 360.0F, 0.0F); + mob.finalizeSpawn(level, level.getCurrentDifficultyAt(pos), MobSpawnType.NATURAL, null); + return level.addFreshEntity(mob); + } + + private static long areaKey(BlockPos pos) { + return BlockPos.asLong( + Math.floorDiv(pos.getX(), AREA_CELL_SIZE) * AREA_CELL_SIZE, + Math.floorDiv(pos.getY(), AREA_CELL_SIZE) * AREA_CELL_SIZE, + Math.floorDiv(pos.getZ(), AREA_CELL_SIZE) * AREA_CELL_SIZE + ); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/MucusBlockItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/MucusBlockItem.java new file mode 100644 index 00000000..5fa62c75 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/MucusBlockItem.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.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.block.Block; + +public class MucusBlockItem extends BlockItem { + public MucusBlockItem(Block block, Properties properties) { + super(block, properties); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { +// tooltipComponents.add(Component.translatable("tooltip.antarchy.mucus_slippery").withStyle(ChatFormatting.DARK_AQUA)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NadirBoatOnlyItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NadirBoatOnlyItem.java new file mode 100644 index 00000000..91900f0f --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NadirBoatOnlyItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.NadirBoatEntity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +public class NadirBoatOnlyItem extends OuranwoodBoatItem { + private final EntityType entityType; + + public NadirBoatOnlyItem(EntityType entityType, Properties properties) { + super(properties); + this.entityType = entityType; + } + + @Override + protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { + Vec3 pos = hitResult.getLocation(); + NadirBoatEntity boat = new NadirBoatEntity(this.entityType, level); + boat.setPos(pos.x, pos.y, pos.z); + boat.xo = pos.x; + boat.yo = pos.y; + boat.zo = pos.z; + this.applyDefaultStackConfig(level, stack, player, boat); + return boat; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NadirChestBoatItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NadirChestBoatItem.java new file mode 100644 index 00000000..035d15ca --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NadirChestBoatItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.NadirChestBoatEntity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +public class NadirChestBoatItem extends OuranwoodBoatItem { + private final EntityType entityType; + + public NadirChestBoatItem(EntityType entityType, Properties properties) { + super(properties); + this.entityType = entityType; + } + + @Override + protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { + Vec3 pos = hitResult.getLocation(); + NadirChestBoatEntity boat = new NadirChestBoatEntity(this.entityType, level); + boat.setPos(pos.x, pos.y, pos.z); + boat.xo = pos.x; + boat.yo = pos.y; + boat.zo = pos.z; + this.applyDefaultStackConfig(level, stack, player, boat); + return boat; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portal/RainbowPortalIgniter.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portal/RainbowPortalIgniter.java new file mode 100644 index 00000000..ff83f8d7 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portal/RainbowPortalIgniter.java @@ -0,0 +1,90 @@ +package com.craisinlord.antarchy.content.portal; + +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.level.block.Blocks; +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; + + private RainbowPortalIgniter() { + } + + public static boolean tryIgnite(ServerLevel level, AABB deathBounds, ResourceLocation dimensionId) { + PermanentPortalShape shape = findInactiveShape(level, deathBounds); + if (shape == null) { + return false; + } + + shape.fill(level); + BlockPos anyInteriorPos = firstInteriorPos(shape); + if (anyInteriorPos == null) { + return false; + } + + boolean created = InfinityCompat.get().createPhysicalPortal(level, anyInteriorPos, dimensionId); + if (!created) { + return false; + } + + Vec3 center = shape.center(); + level.playSound(null, center.x, center.y, center.z, SoundEvents.END_PORTAL_SPAWN, SoundSource.BLOCKS, 0.9F, 0.9F); + return true; + } + + @Nullable + private static PermanentPortalShape findInactiveShape(ServerLevel level, AABB bounds) { + int minX = (int) Math.floor(bounds.minX + 0.001D) - SEARCH_RADIUS; + int minY = (int) Math.floor(bounds.minY + 0.001D) - SEARCH_RADIUS; + int minZ = (int) Math.floor(bounds.minZ + 0.001D) - SEARCH_RADIUS; + int maxX = (int) Math.floor(bounds.maxX - 0.001D) + SEARCH_RADIUS; + int maxY = (int) Math.floor(bounds.maxY - 0.001D) + SEARCH_RADIUS; + int maxZ = (int) Math.floor(bounds.maxZ - 0.001D) + SEARCH_RADIUS; + + for (int x = minX; x <= maxX; x++) { + for (int y = minY; y <= maxY; y++) { + for (int z = minZ; z <= maxZ; z++) { + BlockPos candidate = new BlockPos(x, y, z); + PermanentPortalShape xShape = PermanentPortalShape.findInactive( + level, candidate, AntarchyTags.Blocks.RAINBOW_PORTAL_FRAMES, Blocks.NETHER_PORTAL, Direction.Axis.X); + if (xShape != null && xShape.intersects(bounds)) { + return xShape; + } + PermanentPortalShape zShape = PermanentPortalShape.findInactive( + level, candidate, AntarchyTags.Blocks.RAINBOW_PORTAL_FRAMES, Blocks.NETHER_PORTAL, Direction.Axis.Z); + if (zShape != null && zShape.intersects(bounds)) { + return zShape; + } + } + } + } + + return null; + } + + @Nullable + private static BlockPos firstInteriorPos(PermanentPortalShape shape) { + BlockPos[] holder = new BlockPos[1]; + shape.forEachInterior(pos -> { + if (holder[0] == null) { + holder[0] = pos; + } + }); + return holder[0]; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaCloudFeature.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaCloudFeature.java new file mode 100644 index 00000000..276021ad --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaCloudFeature.java @@ -0,0 +1,114 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +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; + +/** + * 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); + } + + private enum CloudSize { + WISPY, + SMALL, + LARGE + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + RandomSource random = context.random(); + + CloudSize size = pickSize(random); + int banks = switch (size) { + case WISPY -> 1 + random.nextInt(2); + case SMALL -> 1; + case LARGE -> 3 + random.nextInt(3); + }; + int spread = switch (size) { + case WISPY -> 20; + case SMALL -> 10; + case LARGE -> 28; + }; + + boolean placedAny = false; + for (int i = 0; i < banks; i++) { + BlockPos center = origin.offset( + random.nextInt(spread * 2 + 1) - spread, + random.nextInt(9) - 4, + random.nextInt(spread * 2 + 1) - spread); + int[] radii = rollRadii(size, random); + placedAny |= placeBank(level, center, radii[0], radii[1], radii[2], size, random); + } + + return placedAny; + } + + private static CloudSize pickSize(RandomSource random) { + float roll = random.nextFloat(); + if (roll < 0.40F) return CloudSize.WISPY; + if (roll < 0.75F) return CloudSize.SMALL; + return CloudSize.LARGE; + } + + private static int[] rollRadii(CloudSize size, RandomSource random) { + return switch (size) { + case WISPY -> new int[]{5 + random.nextInt(5), 1, 5 + random.nextInt(5)}; + case SMALL -> new int[]{2 + random.nextInt(2), 1 + random.nextInt(2), 2 + random.nextInt(2)}; + case LARGE -> new int[]{6 + random.nextInt(6), 3 + random.nextInt(4), 6 + random.nextInt(6)}; + }; + } + + private boolean placeBank(WorldGenLevel level, BlockPos center, int radiusX, int radiusY, int radiusZ, CloudSize size, RandomSource random) { + int xRange = Math.max(1, radiusX); + 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; + + boolean placedAny = false; + for (int x = -xRange; x <= xRange; x++) { + for (int y = -yRange; y <= yRange; y++) { + for (int z = -zRange; z <= zRange; z++) { + double normalized = (x * x) / (double) (xRange * xRange) + + (y * y) / (double) (yRange * yRange) + + (z * z) / (double) (zRange * zRange); + if (normalized > 1.0D + random.nextDouble() * 0.1D) { + continue; + } + + if (normalized > edgeStart && random.nextFloat() > edgeFillChance) { + continue; + } + + BlockPos target = center.offset(x, y, z); + BlockState current = level.getBlockState(target); + if (!current.isAir() && !current.canBeReplaced()) { + continue; + } + + level.setBlock(target, cloud, 2); + placedAny = true; + } + } + } + + return placedAny; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/DimensionalTearFeature.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/DimensionalTearFeature.java new file mode 100644 index 00000000..4100efde --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/DimensionalTearFeature.java @@ -0,0 +1,112 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +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; +import net.minecraft.world.level.ServerLevelAccessor; +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); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + if (!(level instanceof ServerLevelAccessor serverLevelAccessor)) { + return false; + } + + RandomSource random = context.random(); + BlockPos first = findOpenPocket(level, context.origin(), random, LOCAL_SEARCH_ATTEMPTS); + if (first == null) { + 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); + 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; + int maxY = level.getMaxBuildHeight() - 8; + for (int i = 0; i < attempts; i++) { + BlockPos candidate = origin.offset( + Mth.nextInt(random, -16, 16), + Mth.nextInt(random, -24, 24), + Mth.nextInt(random, -16, 16) + ); + candidate = new BlockPos(candidate.getX(), Mth.clamp(candidate.getY(), minY, maxY), candidate.getZ()); + if (isUsablePocket(level, candidate)) { + return candidate; + } + } + return null; + } + + private static boolean isUsablePocket(WorldGenLevel level, BlockPos pos) { + 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 (!canAccess(level, checkPos) || !level.getBlockState(checkPos).getCollisionShape(level, checkPos).isEmpty()) { + return false; + } + } + } + } + return true; + } + + private static boolean canAccess(WorldGenLevel level, BlockPos pos) { + return !(level instanceof WorldGenRegion region) || region.ensureCanWrite(pos); + } + + private static Vec3 center(BlockPos pos) { + return new Vec3(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java index f3237566..15697d10 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java @@ -39,6 +39,10 @@ public final class ThoraxisBiomeSource extends BiomeSource { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "lucid_pools") ); + private static final ResourceKey UNDERSIDE = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "thoraxis_underside") + ); public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( MultiNoiseBiomeSource.DIRECT_CODEC.forGetter(ThoraxisBiomeSource::parameters), @@ -60,6 +64,7 @@ public final class ThoraxisBiomeSource extends BiomeSource { private Holder dreamDunesBiome; private Holder umbralHillsBiome; private Holder lucidPoolsBiome; + private Holder undersideBiome; private static final ThreadLocal REGION_CACHE = ThreadLocal.withInitial(() -> new Long2DoubleOpenHashMap(512)); @@ -89,6 +94,7 @@ public final class ThoraxisBiomeSource extends BiomeSource { this.dreamDunesBiome = this.findBiome(DREAM_DUNES); this.umbralHillsBiome = this.findBiome(UMBRAL_HILLS); this.lucidPoolsBiome = this.findBiome(LUCID_POOLS); + this.undersideBiome = this.findBiome(UNDERSIDE); this.biomesResolved = true; } } @@ -122,6 +128,10 @@ public final class ThoraxisBiomeSource extends BiomeSource { @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { this.resolveBiomesIfNeeded(); + if (y < 0 && this.undersideBiome != null) { + return this.undersideBiome; + } + if (y >= this.lucidPoolsMinQuartY && this.lucidPoolsBiome != null) { return this.lucidPoolsBiome; } 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 new file mode 100644 index 00000000..6fb87b36 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java @@ -0,0 +1,74 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +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 java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; + +public final class ThoraxisUndersideManager { + public static final int GRAVITY_FLIP_Y = 0; + private static final ResourceLocation THORAXIS_DIMENSION = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "thoraxis"); + private static final AntarchyGravityTransition TRANSITION = new AntarchyGravityTransition(12); + private static final Set UNDERSIDE_FORCED_GRAVITY = new HashSet<>(); + + private ThoraxisUndersideManager() { + } + + public static void tick(ServerLevel level) { + if (!isThoraxis(level)) { + return; + } + + Set activeThisTick = new HashSet<>(); + for (Entity entity : level.getAllEntities()) { + if (!entity.isAlive() || entity.isSpectator()) { + continue; + } + + UUID uuid = entity.getUUID(); + if (entity.getY() < GRAVITY_FLIP_Y) { + activeThisTick.add(uuid); + UNDERSIDE_FORCED_GRAVITY.add(uuid); + if (AntarchyGravityApi.getGravityDirection(entity) != AntarchyGravityDirection.UP + || !AntarchyGravityApi.isGravityForced(entity)) { + AntarchyGravityApi.setForcedGravityDirection(entity, AntarchyGravityDirection.UP, TRANSITION); + } + continue; + } + + if (!UNDERSIDE_FORCED_GRAVITY.remove(uuid)) { + continue; + } + + if (shouldReleaseGravity(entity)) { + AntarchyGravityApi.setGravityDirection(entity, AntarchyGravityDirection.DOWN, false, TRANSITION); + } + } + + UNDERSIDE_FORCED_GRAVITY.retainAll(activeThisTick); + } + + private static boolean shouldReleaseGravity(Entity entity) { + if (AntarchyGravityApi.getGravityDirection(entity) != AntarchyGravityDirection.UP) { + return false; + } + + if (entity instanceof LivingEntity living && living.hasEffect(AntarchyObjects.INVERTED_EFFECT.get())) { + return false; + } + + return AntarchyGravityApi.isGravityForced(entity); + } + + public static boolean isThoraxis(ServerLevel level) { + return level.dimension().location().equals(THORAXIS_DIMENSION); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringDamageImmunityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringDamageImmunityMixin.java new file mode 100644 index 00000000..5d47f766 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringDamageImmunityMixin.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.Holder; +import net.minecraft.tags.DamageTypeTags; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffect; +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.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; + if (self.level().isClientSide()) { + return; + } + + if (source.getEntity() == null || source.is(DamageTypeTags.BYPASSES_ARMOR)) { + return; + } + + Holder glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + if (glimmering != null && self.hasEffect(glimmering)) { + cir.setReturnValue(false); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushEntitiesMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushEntitiesMixin.java new file mode 100644 index 00000000..9ab47868 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushEntitiesMixin.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.Holder; +import net.minecraft.world.effect.MobEffect; +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 GlimmeringPushEntitiesMixin { + @Inject(method = "pushEntities", at = @At("HEAD"), cancellable = true) + private void antarchy$glimmeringSkipsPushingOthers(CallbackInfo ci) { + LivingEntity self = (LivingEntity) (Object) this; + Holder glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + if (glimmering != null && self.hasEffect(glimmering)) { + ci.cancel(); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushableMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushableMixin.java new file mode 100644 index 00000000..8b5350ec --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GlimmeringPushableMixin.java @@ -0,0 +1,44 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.Holder; +import net.minecraft.world.effect.MobEffect; +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.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) + private void antarchy$glimmeringNotPushable(CallbackInfoReturnable cir) { + if (!cir.getReturnValueZ()) { + return; + } + + LivingEntity self = (LivingEntity) (Object) this; + Holder glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + if (glimmering != null && self.hasEffect(glimmering)) { + cir.setReturnValue(false); + } + } + + // 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()) { + return; + } + + LivingEntity self = (LivingEntity) (Object) this; + Holder glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + if (glimmering != null && self.hasEffect(glimmering)) { + cir.setReturnValue(false); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/NightmareArmorEffectImmunityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/NightmareArmorEffectImmunityMixin.java new file mode 100644 index 00000000..64e860e5 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/NightmareArmorEffectImmunityMixin.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +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.CallbackInfoReturnable; + +@Mixin(LivingEntity.class) +public abstract class NightmareArmorEffectImmunityMixin { + @Inject(method = "canBeAffected", at = @At("HEAD"), cancellable = true) + private void antarchy$blockNightmareArmorEffects(MobEffectInstance effectInstance, CallbackInfoReturnable cir) { + LivingEntity livingEntity = (LivingEntity) (Object) this; + if (NightmareArmorItem.isWearingFullSet(livingEntity) + && (effectInstance.is(MobEffects.WITHER) || effectInstance.is(AntarchyObjects.DREAD.get()))) { + cir.setReturnValue(false); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/ElythiaSkyMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/ElythiaSkyMixin.java index e60df934..3ee7d79c 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/ElythiaSkyMixin.java +++ b/common-1.21.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,23 @@ public abstract class ElythiaSkyMixin { @Inject(method = "renderSky", at = @At("HEAD"), cancellable = true) private void antarchy$renderElythiaSky(Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float partialTick, Camera camera, boolean isFoggy, Runnable setupFog, CallbackInfo ci) { + if (this.level != null && ThoraxisUndersideSkyRenderer.shouldRender(this.level, camera)) { + PoseStack poseStack = new PoseStack(); + poseStack.mulPose(modelViewMatrix); + 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.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/GlimmeringTranslucencyMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/GlimmeringTranslucencyMixin.java new file mode 100644 index 00000000..68cd6180 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/GlimmeringTranslucencyMixin.java @@ -0,0 +1,73 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.core.Holder; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.LivingEntity; +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.Redirect; +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 int GLIMMERING_ALPHA = 0x40; + + @Unique + private boolean antarchy$glimmeringActive; + + @Inject( + method = "render(Lnet/minecraft/world/entity/LivingEntity;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", + at = @At("HEAD") + ) + private void antarchy$captureGlimmering(LivingEntity entity, float limbSwing, float partialTick, + com.mojang.blaze3d.vertex.PoseStack poseStack, + net.minecraft.client.renderer.MultiBufferSource buffer, + int packedLight, CallbackInfo ci) { + Holder glimmering = AntarchyObjects.GLIMMERING_EFFECT.get(); + this.antarchy$glimmeringActive = glimmering != null && entity.hasEffect(glimmering); + } + + @Redirect( + method = "render(Lnet/minecraft/world/entity/LivingEntity;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/LivingEntityRenderer;getRenderType(Lnet/minecraft/world/entity/LivingEntity;ZZZ)Lnet/minecraft/client/renderer/RenderType;" + ) + ) + private RenderType antarchy$forceTranslucentRenderType(LivingEntityRenderer self, LivingEntity entity, + boolean bodyVisible, boolean translucent, boolean glowingEffect) { + if (this.antarchy$glimmeringActive) { + var texture = Minecraft.getInstance().getEntityRenderDispatcher().getRenderer(entity).getTextureLocation(entity); + return RenderType.entityTranslucent(texture); + } + return this.getRenderType((T) entity, bodyVisible, translucent, glowingEffect); + } + + @Shadow + protected abstract RenderType getRenderType(T entity, boolean bodyVisible, boolean translucent, boolean glowingEffect); + + @ModifyArg( + method = "render(Lnet/minecraft/world/entity/LivingEntity;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/model/EntityModel;renderToBuffer(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;III)V" + ), + index = 4 + ) + private int antarchy$applyGlimmeringAlpha(int color) { + if (!this.antarchy$glimmeringActive) { + return color; + } + return (color & 0x00FFFFFF) | (GLIMMERING_ALPHA << 24); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeArmorHideMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeArmorHideMixin.java new file mode 100644 index 00000000..4f08af03 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeArmorHideMixin.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +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.CallbackInfo; + +@Mixin(HumanoidArmorLayer.class) +public abstract class TigerEyeArmorHideMixin { + @Inject( + method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V", + at = @At("HEAD"), + cancellable = true + ) + private void antarchy$hideArmorWhileCamouflaged(PoseStack poseStack, MultiBufferSource buffer, int packedLight, + LivingEntity entity, float limbSwing, float limbSwingAmount, + float partialTick, float ageInTicks, float netHeadYaw, + float headPitch, CallbackInfo ci) { + if (!(entity instanceof Player player) || !TigerEyeArmorUtil.hasFullSet(player)) { + return; + } + + TigerEyeCamouflageClientState.CamouflageState state = TigerEyeCamouflageClientState.get(player.getId()); + if (state != null && state.active()) { + ci.cancel(); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeNameTagHideMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeNameTagHideMixin.java new file mode 100644 index 00000000..4f4aff3e --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/TigerEyeNameTagHideMixin.java @@ -0,0 +1,30 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +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(LivingEntityRenderer.class) +public abstract class TigerEyeNameTagHideMixin { + @Inject( + method = "shouldShowName(Lnet/minecraft/world/entity/LivingEntity;)Z", + at = @At("HEAD"), + cancellable = true + ) + private void antarchy$hideNameWhileCamouflaged(LivingEntity entity, CallbackInfoReturnable cir) { + if (!(entity instanceof Player player) || !TigerEyeArmorUtil.hasFullSet(player)) { + return; + } + + TigerEyeCamouflageClientState.CamouflageState state = TigerEyeCamouflageClientState.get(player.getId()); + if (state != null && state.active()) { + cir.setReturnValue(false); + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/caterpillar.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/caterpillar.animation.json index ba5f650e..2a4449d0 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/animations/caterpillar.animation.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/caterpillar.animation.json @@ -848,7 +848,7 @@ } } }, - "Coocon": { + "cocoon": { "loop": "hold_on_last_frame", "animation_length": 2, "bones": { @@ -1350,7 +1350,7 @@ } } }, - "coocon": { + "cocoon_chrysalis": { "loop": true, "animation_length": 2.5, "bones": { diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/dimensional_tear.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/dimensional_tear.animation.json new file mode 100644 index 00000000..d47fcf55 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/dimensional_tear.animation.json @@ -0,0 +1,1006 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 3, + "bones": { + "content": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.58276, 3.36591, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1.3, 1.3, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 13, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-7, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "light_left": { + "rotation": { + "0.0": { + "vector": [0, -45, 0] + }, + "1.0": { + "vector": [0, -45, 0] + }, + "2.0": { + "vector": [-22.5, -45, 0] + }, + "3.0": { + "vector": [0, -45, 0] + } + }, + "scale": { + "0.0": { + "vector": [1, 0, 1] + }, + "0.2917": { + "vector": [1, 1, 2.3] + }, + "0.5": { + "vector": [1, 0, 2.3] + }, + "1.0": { + "vector": [1, 0, 1] + }, + "1.2917": { + "vector": [1, 1, 2.3] + }, + "1.5": { + "vector": [1, 0, 2.3] + }, + "2.0": { + "vector": [1, 0, 1] + }, + "2.2917": { + "vector": [1, 1, 2.3] + }, + "2.5": { + "vector": [1, 0, 2.3] + }, + "3.0": { + "vector": [1, 0, 1] + } + } + }, + "light_right": { + "rotation": { + "0.3333": { + "vector": [0, 45, 0] + }, + "1.2917": { + "vector": [0, 45, 0] + }, + "2.4167": { + "vector": [-22.5, 45, 0] + } + }, + "scale": { + "0.3333": { + "vector": [1, 0, 1] + }, + "0.625": { + "vector": [1, 1, 2.3] + }, + "0.8333": { + "vector": [1, 0, 2.3] + }, + "1.2917": { + "vector": [1, 0, 1] + }, + "1.5833": { + "vector": [1, 1, 2.3] + }, + "1.7917": { + "vector": [1, 0, 2.3] + }, + "2.4167": { + "vector": [1, 0, 1] + }, + "2.7083": { + "vector": [1, 1, 2.3] + }, + "2.9167": { + "vector": [1, 0, 2.3] + } + } + }, + "group": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.4167": { + "vector": [1, 1, 1] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [1, 1, 1] + }, + "2.0": { + "vector": [1, 1, 1] + }, + "2.0833": { + "vector": [0, 0, 0] + }, + "2.1667": { + "vector": [1, 1, 1] + }, + "2.25": { + "vector": [1, 1, 1] + }, + "2.3333": { + "vector": [0, 0, 0] + }, + "2.4167": { + "vector": [1, 1, 1] + }, + "3.0": { + "vector": [1, 1, 1] + } + } + } + } + }, + "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.21.1/src/main/resources/assets/antarchy/animations/lucid_bolt.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/lucid_bolt.animation.json new file mode 100644 index 00000000..21a7e4c2 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/lucid_bolt.animation.json @@ -0,0 +1,222 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 0.5, + "bones": { + "projectile": { + "rotation": { + "vector": [0, 0, 0] + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 1, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [1, 1, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 5] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.2917": { + "vector": [1, 0, 1] + } + } + }, + "particle_right2": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 4] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.125": { + "vector": [1, 0, 1] + } + } + }, + "particle_right3": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 8] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.25": { + "vector": [1, 0, 1] + } + } + }, + "particle_right4": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 4] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.125": { + "vector": [1, 0, 1] + } + } + }, + "particle_left4": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 4] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.125": { + "vector": [1, 0, 1] + } + } + }, + "particle_left2": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 4] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.125": { + "vector": [1, 0, 1] + } + } + }, + "particle_left": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 5] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.2917": { + "vector": [1, 0, 1] + } + } + }, + "particle_left3": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 8] + } + }, + "scale": { + "0.0": { + "vector": [1, 0.7, 1] + }, + "0.25": { + "vector": [1, 0, 1] + } + } + }, + "ring": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 360] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.8, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/lucid_bolt_impact.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/lucid_bolt_impact.animation.json new file mode 100644 index 00000000..ebe66d9b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/lucid_bolt_impact.animation.json @@ -0,0 +1,700 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation": { + "animation_length": 1.5, + "bones": { + "eye": { + "rotation": { + "0.25": { + "pre": { + "vector": [72.5, 0, 0] + }, + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.25": { + "pre": { + "vector": [0, -10, 0] + }, + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [1, 0, 0] + }, + "0.7083": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [1, 0, 0] + }, + "0.7917": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [1, 0, 0] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [1, 0, 0] + }, + "0.9583": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [1, 0, 0] + }, + "1.0417": { + "vector": [0, 0, 0] + }, + "1.0833": { + "vector": [1, 0, 0] + }, + "1.125": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [1, 0, 0] + }, + "1.2083": { + "vector": [0, 0, 0] + }, + "1.25": { + "vector": [1, 0, 0] + }, + "1.2917": { + "vector": [0, 0, 0] + }, + "1.3333": { + "vector": [1, 0, 0] + }, + "1.375": { + "vector": [0, 0, 0] + } + }, + "scale": { + "0.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [1, 1, 1] + }, + "1.375": { + "vector": [1, 1, 1] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "Iris": { + "scale": { + "0.25": { + "vector": [1, 1, 1] + }, + "0.6667": { + "vector": [1, 1, 1] + }, + "0.7917": { + "vector": [0.3, 0.3, 1] + }, + "1.2917": { + "vector": [0.3, 0.3, 1] + }, + "1.375": { + "vector": [1, 1, 1] + } + } + }, + "particle": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 15, 0] + }, + "0.5": { + "vector": [0, 25, 0] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle2": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 25, 0] + }, + "0.4583": { + "vector": [0, 35, 0] + }, + "0.5833": { + "vector": [0, 44, 0] + } + }, + "scale": { + "0.125": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle3": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 33, 0] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0.2, 0.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle4": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 25, 0] + }, + "0.4583": { + "vector": [0, 35, 0] + }, + "0.5833": { + "vector": [0, 44, 0] + } + }, + "scale": { + "0.125": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle5": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 33, 0] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0.2, 0.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle6": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 25, 0] + }, + "0.4583": { + "vector": [0, 35, 0] + }, + "0.5833": { + "vector": [0, 44, 0] + } + }, + "scale": { + "0.125": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [1, 0.8, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "impact_particle": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -24] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle2": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -30] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle3": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -36] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle4": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -25] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle5": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -38] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle6": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -20] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle7": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -32] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle8": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -24] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle9": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -36] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle10": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -25] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle11": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -30] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle12": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -38] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle13": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -20] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle20": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -24] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle21": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -36] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle22": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-14, -5, -25] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle23": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -30] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle24": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -38] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + }, + "impact_particle25": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [19, 0, -20] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [0, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare_bite.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare_bite.animation.json new file mode 100644 index 00000000..a0839a22 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare_bite.animation.json @@ -0,0 +1,308 @@ +{ + "format_version": "1.8.0", + "animations": { + "bite": { + "animation_length": 1.5, + "bones": { + "upper_jaw": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_jaw": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Bite": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "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" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -12, 0] + }, + "0.5417": { + "vector": [0, 0, 0] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "1.25": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "impact": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -2, 6] + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0.4, 1, 1] + }, + "0.75": { + "pre": { + "vector": [3.4, 1, 1] + }, + "post": { + "vector": [3.4, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [2.2667, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particles_left": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [14.14214, 14.14214, 0] + }, + "post": { + "vector": [14.14214, 14.14214, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particles_right": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-14.14214, 14.14214, 0] + }, + "post": { + "vector": [-14.14214, 14.14214, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particles_left_bottom": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [14.02043, -14.01429, -2.65088] + }, + "post": { + "vector": [14.02043, -14.01429, -2.65088] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 0.8] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particles_right_bottom": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-14.02043, -14.01429, -2.65088] + }, + "post": { + "vector": [-14.02043, -14.01429, -2.65088] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5417": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 0.8] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare_portal.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare_portal.animation.json new file mode 100644 index 00000000..32eba673 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare_portal.animation.json @@ -0,0 +1,1176 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 720] + } + } + }, + "Portal_Layer_Highlight": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 360] + } + } + }, + "Back_Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -720] + } + } + }, + "Back_Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Back_Portal_Layer3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal": { + "scale": { + "0.0": { + "post": { + "vector": [0.92, 0.92, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.0, 1.0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.06, 1.06, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.0, 1.0, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.92, 0.92, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1.0, 1.0, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1.06, 1.06, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [1.0, 1.0, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.92, 0.92, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left_bottom": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right_bottom": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Beam": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "close": { + "loop": false, + "animation_length": 2, + "bones": { + "Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 720] + } + } + }, + "Portal_Layer_Highlight": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 360] + } + } + }, + "Back_Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -720] + } + } + }, + "Back_Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Back_Portal_Layer3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left_bottom": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right_bottom": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Beam": { + "scale": { + "0.0": { + "vector": [0, 0.5, 1] + }, + "1.5": { + "vector": [0, 0.5, 1] + }, + "1.75": { + "pre": { + "vector": [1, 0.5, 1] + }, + "post": { + "vector": [1, 0.5, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "open": { + "loop": false, + "animation_length": 2, + "bones": { + "Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 720] + } + } + }, + "Portal_Layer_Highlight": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, 360] + } + } + }, + "Back_Portal_Layer": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -720] + } + } + }, + "Back_Portal_Layer2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Back_Portal_Layer3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.0": { + "vector": [0, 0, -360] + } + } + }, + "Portal": { + "scale": { + "0.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [18.38478, -18.38478, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [18.38478, -18.38478, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1.7, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [1.7, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_left_bottom": { + "rotation": { + "vector": [0, 0, 45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "particle_right_bottom": { + "rotation": { + "vector": [0, 0, -45] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [12.72792, 12.72792, 0] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [12.72792, 12.72792, 0] + }, + "2.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [2.1, 0, 1] + }, + "1.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [2.1, 0, 1] + }, + "2.0": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Beam": { + "scale": { + "0.0": { + "vector": [0, 0.5, 1] + }, + "1.5": { + "vector": [0, 0.5, 1] + }, + "1.75": { + "pre": { + "vector": [1, 0.5, 1] + }, + "post": { + "vector": [1, 0.5, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/water_bomb.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/water_bomb.animation.json new file mode 100644 index 00000000..5e966e09 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/water_bomb.animation.json @@ -0,0 +1,82 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 0.8333, + "bones": { + "Water_projectile": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [1, 0.6, 0.9] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0.6, 0.9] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "water_ring": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 13] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 13] + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.4167": { + "vector": [0, 0, 13] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 13] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 13] + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/worm_large.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/worm_large.animation.json new file mode 100644 index 00000000..81991772 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/worm_large.animation.json @@ -0,0 +1,2484 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 6, + "bones": { + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 24] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth1": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth2": { + "rotation": { + "0.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth7": { + "rotation": { + "0.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth3": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth6": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth8": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "inground": { + "loop": true, + "animation_length": 6, + "bones": { + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "5.25": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -24, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -24, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1.1, 0.9, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0.9, 1.1, 0.9] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [1.1, 0.9, 1.1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "5.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth1": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [25, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth2": { + "rotation": { + "0.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth7": { + "rotation": { + "0.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth3": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [25, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth6": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-25, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tooth8": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.5": { + "post": { + "vector": [45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [-25, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "crawl": { + "loop": true, + "animation_length": 2, + "bones": { + "body": { + "rotation": { + "vector": ["90-math.cos(q.anim_time*90*2+90)*4", "-math.cos(q.anim_time*90*4)*8", 0] + }, + "position": { + "vector": ["math.cos(q.anim_time*90*4-70)*3", "-33+math.cos(q.anim_time*90*2)*3-3", 0] + } + }, + "head": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2+180)*4", 0, "math.cos(q.anim_time*90*4+130)*10"] + } + }, + "tooth1": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2*3)*20", "math.cos(q.anim_time*90*2*3-50)*10", "-math.cos(q.anim_time*90*2*3)*20"] + } + }, + "tooth2": { + "rotation": { + "vector": ["math.cos(q.anim_time*90*2*3-80)*20", 0, 0] + } + }, + "tooth4": { + "rotation": { + "vector": [0, 0, "math.cos(q.anim_time*90*2*3-80)*20"] + } + }, + "tooth5": { + "rotation": { + "vector": [0, 0, "-math.cos(q.anim_time*90*2*3-80)*20"] + } + }, + "tooth7": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2*3-80)*20", 0, 0] + } + }, + "tooth3": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2*3)*20", "-math.cos(q.anim_time*90*2*3-50)*10", "math.cos(q.anim_time*90*2*3)*20"] + } + }, + "tooth6": { + "rotation": { + "vector": ["math.cos(q.anim_time*90*2*3)*20", "-math.cos(q.anim_time*90*2*3-50)*10", "-math.cos(q.anim_time*90*2*3)*20"] + } + }, + "tooth8": { + "rotation": { + "vector": ["math.cos(q.anim_time*90*2*3)*20", "math.cos(q.anim_time*90*2*3-50)*10", "math.cos(q.anim_time*90*2*3)*20"] + } + }, + "tail": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2+30)*8", 0, "-math.cos(q.anim_time*90*4+90)*10"] + } + } + } + }, + "attack": { + "animation_length": 2.25, + "bones": { + "body": { + "rotation": { + "0.0": { + "vector": [90, 0, 0] + }, + "0.0417": { + "vector": [86.26, 0, 0] + }, + "0.125": { + "pre": { + "vector": [98.78, 0, 0] + }, + "post": { + "vector": [98.78, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [135, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [165, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [150, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [105.39, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-290, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "vector": [-267.5, 0, 0] + }, + "2.1667": { + "vector": [-270, 0, 0] + }, + "2.2083": { + "vector": [90, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -33, 0] + }, + "0.125": { + "pre": { + "vector": [0, -28.26, -16.42] + }, + "post": { + "vector": [0, -28.26, -16.42] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -35.05, -33.86] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -69, -47] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -90.62, -70.7] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -92, -69] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -77, -63] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -77, -63] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -77, -63] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 4, -54] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 28, -40] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 27.5, -15.12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, -33, 0] + } + }, + "scale": { + "1.1667": { + "vector": [1, 1, 1] + }, + "1.2917": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0.5, 1.5, 0.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.5, 1.5, 0.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [1, 1, 1] + } + } + }, + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [-5, 0, 0] + }, + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-29.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "vector": [0, 0, 0] + } + } + }, + "tooth1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [-45, 0, -45] + }, + "0.1667": { + "vector": [-45, 0, -45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [-45, 0, -45] + }, + "post": { + "vector": [-45, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-67.5, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [22.5, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [22.5, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [-45, 0, 0] + }, + "0.1667": { + "vector": [-45, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [-45, 0, 0] + }, + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, -45] + }, + "0.1667": { + "vector": [0, 0, -45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [0, 0, -45] + }, + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 45] + }, + "0.1667": { + "vector": [0, 0, 45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [0, 0, 45] + }, + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth7": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [45, 0, 0] + }, + "0.1667": { + "vector": [45, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [-45, 0, 45] + }, + "0.1667": { + "vector": [-45, 0, 45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [-45, 0, 45] + }, + "post": { + "vector": [-45, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-67.5, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [22.5, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [22.5, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth6": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [45, 0, -45] + }, + "0.1667": { + "vector": [45, 0, -45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "vector": [45, 0, -45] + }, + "1.375": { + "vector": [45, 0, -45] + }, + "1.4583": { + "pre": { + "vector": [-22.5, 0, 22.5] + }, + "post": { + "vector": [-22.5, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-22.5, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tooth8": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [45, 0, 45] + }, + "0.1667": { + "vector": [45, 0, 45] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "1.1667": { + "vector": [0, 0, 0] + }, + "1.2917": { + "vector": [45, 0, 45] + }, + "1.375": { + "vector": [45, 0, 45] + }, + "1.4583": { + "pre": { + "vector": [-22.5, 0, -22.5] + }, + "post": { + "vector": [-22.5, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [-22.5, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "vector": [0, 0, 0] + } + } + }, + "tail": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [3.11, 0, 0] + }, + "post": { + "vector": [3.11, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-15.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "vector": [0, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/antigravel.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/antigravel.json new file mode 100644 index 00000000..0792b604 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/antigravel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/antigravel" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/antimetal_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/antimetal_slab.json new file mode 100644 index 00000000..d4434587 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/antimetal_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/antimetal" + }, + "type=bottom": { + "model": "antarchy:block/antimetal_slab" + }, + "type=top": { + "model": "antarchy:block/antimetal_slab_top" + } + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/antimetal_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/antimetal_stairs.json new file mode 100644 index 00000000..f81dd6b8 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/antimetal_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/antimetal_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/bluestone_lamp.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/bluestone_lamp.json new file mode 100644 index 00000000..87466fc3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/bluestone_lamp.json @@ -0,0 +1,10 @@ +{ + "variants": { + "lit=false": { + "model": "antarchy:block/bluestone_lamp" + }, + "lit=true": { + "model": "antarchy:block/bluestone_lamp_on" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/broodstone_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/broodstone_pillar.json new file mode 100644 index 00000000..39abc97d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/broodstone_pillar.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/broodstone_pillar", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/broodstone_pillar" + }, + "axis=z": { + "model": "antarchy:block/broodstone_pillar", + "x": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/loam.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/loam.json new file mode 100644 index 00000000..8fee90a9 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/loam.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/loam" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/mucus.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/mucus.json new file mode 100644 index 00000000..44c7f1a0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/mucus.json @@ -0,0 +1,150 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/mucus" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus" + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 90 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 180 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "y": 270 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "x": 270 + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "x": 270 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "x": 90 + }, + "when": { + "down": "true" + } + }, + { + "apply": { + "model": "antarchy:block/mucus", + "uvlock": true, + "x": 90 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_button.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_button.json new file mode 100644 index 00000000..32baf784 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_button.json @@ -0,0 +1,119 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "antarchy:block/nadir_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "antarchy:block/nadir_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "antarchy:block/nadir_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "antarchy:block/nadir_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "antarchy:block/nadir_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "antarchy:block/nadir_button" + }, + "face=floor,facing=north,powered=true": { + "model": "antarchy:block/nadir_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "antarchy:block/nadir_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "antarchy:block/nadir_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "antarchy:block/nadir_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "antarchy:block/nadir_button", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "antarchy:block/nadir_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "antarchy:block/nadir_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "antarchy:block/nadir_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_door.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_door.json new file mode 100644 index 00000000..bff01ba3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_door.json @@ -0,0 +1,125 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "antarchy:block/nadir_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "antarchy:block/nadir_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "antarchy:block/nadir_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "antarchy:block/nadir_door_top_right_open", + "y": 90 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_fence.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_fence.json new file mode 100644 index 00000000..e7d3402c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_fence.json @@ -0,0 +1,49 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/nadir_fence_post" + } + }, + { + "apply": { + "model": "antarchy:block/nadir_fence_side", + "uvlock": true + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/nadir_fence_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/nadir_fence_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/nadir_fence_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + } + ] +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_fence_gate.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_fence_gate.json new file mode 100644 index 00000000..0991820c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_fence_gate.json @@ -0,0 +1,81 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "model": "antarchy:block/nadir_fence_gate", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=false,open=true": { + "model": "antarchy:block/nadir_fence_gate_open", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=false": { + "model": "antarchy:block/nadir_fence_gate_wall", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=true": { + "model": "antarchy:block/nadir_fence_gate_wall_open", + "uvlock": true, + "y": 270 + }, + "facing=north,in_wall=false,open=false": { + "model": "antarchy:block/nadir_fence_gate", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=false,open=true": { + "model": "antarchy:block/nadir_fence_gate_open", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=false": { + "model": "antarchy:block/nadir_fence_gate_wall", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=true": { + "model": "antarchy:block/nadir_fence_gate_wall_open", + "uvlock": true, + "y": 180 + }, + "facing=south,in_wall=false,open=false": { + "model": "antarchy:block/nadir_fence_gate", + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "antarchy:block/nadir_fence_gate_open", + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "antarchy:block/nadir_fence_gate_wall", + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "antarchy:block/nadir_fence_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "antarchy:block/nadir_fence_gate", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=false,open=true": { + "model": "antarchy:block/nadir_fence_gate_open", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=false": { + "model": "antarchy:block/nadir_fence_gate_wall", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=true": { + "model": "antarchy:block/nadir_fence_gate_wall_open", + "uvlock": true, + "y": 90 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_hanging_sign.json new file mode 100644 index 00000000..051f9d16 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_hanging_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_log.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_log.json new file mode 100644 index 00000000..3f4fff33 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_log.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/nadir_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/nadir_log" + }, + "axis=z": { + "model": "antarchy:block/nadir_log_horizontal", + "x": 90 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_planks.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_planks.json new file mode 100644 index 00000000..52c5bd3a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_planks.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_planks" + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_pressure_plate.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_pressure_plate.json new file mode 100644 index 00000000..b13643f1 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_pressure_plate.json @@ -0,0 +1,11 @@ +{ + "variants": { + "powered=false": { + "model": "antarchy:block/nadir_pressure_plate" + }, + "powered=true": { + "model": "antarchy:block/nadir_pressure_plate_down" + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_sapling.json new file mode 100644 index 00000000..d1677be1 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_sapling" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_sign.json new file mode 100644 index 00000000..2f79af09 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_slab.json new file mode 100644 index 00000000..191ea9ad --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_slab.json @@ -0,0 +1,14 @@ +{ + "variants": { + "type=bottom": { + "model": "antarchy:block/nadir_slab" + }, + "type=double": { + "model": "antarchy:block/nadir_planks" + }, + "type=top": { + "model": "antarchy:block/nadir_slab_top" + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_stairs.json new file mode 100644 index 00000000..599b5917 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_stairs.json @@ -0,0 +1,210 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/nadir_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/nadir_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/nadir_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/nadir_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_trapdoor.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_trapdoor.json new file mode 100644 index 00000000..90571b98 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_trapdoor.json @@ -0,0 +1,70 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "antarchy:block/nadir_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "antarchy:block/nadir_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "antarchy:block/nadir_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "antarchy:block/nadir_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "antarchy:block/nadir_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "antarchy:block/nadir_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "antarchy:block/nadir_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "antarchy:block/nadir_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "antarchy:block/nadir_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "antarchy:block/nadir_trapdoor_open", + "x": 180, + "y": 90 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_veil.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_veil.json new file mode 100644 index 00000000..9993d138 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_veil.json @@ -0,0 +1,6 @@ +{ + "variants": { + "": { "model": "antarchy:block/nadir_veil" } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_hanging_sign.json new file mode 100644 index 00000000..517fe6cb --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_wall_hanging_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_sign.json new file mode 100644 index 00000000..41853a2f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/nadir_wall_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_wood.json new file mode 100644 index 00000000..5cf5b6c0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_wood.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/nadir_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/nadir_wood" + }, + "axis=z": { + "model": "antarchy:block/nadir_wood", + "x": 90 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nyxite_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nyxite_pillar.json new file mode 100644 index 00000000..05add2b0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nyxite_pillar.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/nyxite_pillar", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/nyxite_pillar" + }, + "axis=z": { + "model": "antarchy:block/nyxite_pillar", + "x": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_slab.json new file mode 100644 index 00000000..579a6bb1 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/polished_antimetal" + }, + "type=bottom": { + "model": "antarchy:block/polished_antimetal_slab" + }, + "type=top": { + "model": "antarchy:block/polished_antimetal_slab_top" + } + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_stairs.json new file mode 100644 index 00000000..a45211e5 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/polished_antimetal_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/polished_antimetal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/polished_antimetal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/polished_antimetal_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/potted_nadir_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/potted_nadir_sapling.json new file mode 100644 index 00000000..b736a175 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/potted_nadir_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/potted_nadir_sapling" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/shellstone_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/shellstone_pillar.json new file mode 100644 index 00000000..41161c8b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/shellstone_pillar.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/shellstone_pillar", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/shellstone_pillar" + }, + "axis=z": { + "model": "antarchy:block/shellstone_pillar", + "x": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_nadir_log.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_nadir_log.json new file mode 100644 index 00000000..ff5233b0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_nadir_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/stripped_nadir_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/stripped_nadir_log" + }, + "axis=z": { + "model": "antarchy:block/stripped_nadir_log_horizontal", + "x": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_nadir_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_nadir_wood.json new file mode 100644 index 00000000..7d75d3fb --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_nadir_wood.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/stripped_nadir_wood" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/upper.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/upper.json new file mode 100644 index 00000000..6181accf --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/upper.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "antarchy:block/upper", "x": 180 }, + "facing=north": { "model": "antarchy:block/upper_side" }, + "facing=west": { "model": "antarchy:block/upper_side_west" }, + "facing=south": { "model": "antarchy:block/upper_side_south" }, + "facing=east": { "model": "antarchy:block/upper_side_east" } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/dimensional_tear.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/dimensional_tear.geo.json new file mode 100644 index 00000000..08bf61ec --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/geo/dimensional_tear.geo.json @@ -0,0 +1,59 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 512, + "texture_height": 512, + "visible_bounds_width": 11, + "visible_bounds_height": 10, + "visible_bounds_offset": [0, 1, 0] + }, + "bones": [ + { + "name": "tear", + "pivot": [1.83622, 14.33358, -8.27273], + "cubes": [ + {"origin": [-40, -41, 1], "size": [80, 80, 0], "uv": [0, 80]}, + {"origin": [-40, -41, 4], "size": [80, 80, 0], "inflate": 2, "uv": [0, 0]} + ] + }, + { + "name": "group", + "parent": "tear", + "pivot": [0, 4, 10], + "cubes": [ + {"origin": [-75, -45, 10], "size": [150, 98, 0], "uv": [178, 14]} + ] + }, + { + "name": "content", + "parent": "tear", + "pivot": [13, 0, 0], + "cubes": [ + {"origin": [-40, -41, -3], "size": [80, 80, 0], "uv": [0, 160]}, + {"origin": [-60, -60, -9], "size": [80, 80, 0], "uv": [0, 160]}, + {"origin": [-11, -6, -9], "size": [80, 80, 0], "uv": [0, 160]} + ] + }, + { + "name": "light_left", + "parent": "tear", + "pivot": [0, 7, 1], + "cubes": [ + {"origin": [0, 6, -63], "size": [0, 2, 64], "uv": [162, 67]} + ] + }, + { + "name": "light_right", + "parent": "tear", + "pivot": [0, 7, 1], + "cubes": [ + {"origin": [0, 6, -63], "size": [0, 2, 64], "uv": [162, 67], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/lucid_bolt.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/lucid_bolt.geo.json new file mode 100644 index 00000000..35629ee9 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/geo/lucid_bolt.geo.json @@ -0,0 +1,96 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "projectile", + "pivot": [0, 6.5, -0.5], + "cubes": [ + {"origin": [-1.5, 5, -5], "size": [3, 3, 9], "uv": [0, 0]} + ] + }, + { + "name": "ring", + "parent": "projectile", + "pivot": [0, 6.5, -2], + "cubes": [ + {"origin": [-3.5, 3, -2], "size": [7, 7, 0], "uv": [0, 12]} + ] + }, + { + "name": "particle_right", + "parent": "projectile", + "pivot": [-3.5, 6, 2.5], + "cubes": [ + {"origin": [-3.5, 5, 1], "size": [0, 2, 3], "uv": [0, -1]} + ] + }, + { + "name": "particle_left", + "parent": "projectile", + "pivot": [3.5, 6, 2.5], + "cubes": [ + {"origin": [3.5, 5, 1], "size": [0, 2, 3], "uv": [0, -1], "mirror": true} + ] + }, + { + "name": "particle_right3", + "parent": "projectile", + "pivot": [-2.5, 4, 4.5], + "cubes": [ + {"origin": [-2.5, 3, 3], "size": [0, 2, 3], "uv": [0, 1]} + ] + }, + { + "name": "particle_left3", + "parent": "projectile", + "pivot": [2.5, 4, 4.5], + "cubes": [ + {"origin": [2.5, 3, 3], "size": [0, 2, 3], "uv": [0, 1], "mirror": true} + ] + }, + { + "name": "particle_right2", + "parent": "projectile", + "pivot": [-3.5, 8, 6.5], + "cubes": [ + {"origin": [-3.5, 7, 5], "size": [0, 2, 3], "uv": [0, -3]} + ] + }, + { + "name": "particle_left2", + "parent": "projectile", + "pivot": [3.5, 8, 6.5], + "cubes": [ + {"origin": [3.5, 7, 5], "size": [0, 2, 3], "uv": [0, -3], "mirror": true} + ] + }, + { + "name": "particle_right4", + "parent": "projectile", + "pivot": [-1.5, 10, 3.5], + "cubes": [ + {"origin": [-1.5, 9, 2], "size": [0, 2, 3], "uv": [0, -3]} + ] + }, + { + "name": "particle_left4", + "parent": "projectile", + "pivot": [1.5, 10, 3.5], + "cubes": [ + {"origin": [1.5, 9, 2], "size": [0, 2, 3], "uv": [0, -3], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/lucid_bolt_impact.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/lucid_bolt_impact.geo.json new file mode 100644 index 00000000..38ca3fe2 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/geo/lucid_bolt_impact.geo.json @@ -0,0 +1,284 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 5, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "impact", + "pivot": [0, 0, 0] + }, + { + "name": "impact_particle7", + "parent": "impact", + "pivot": [-2, 10, -14], + "cubes": [ + {"origin": [-6, 7, -13], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_group", + "parent": "impact", + "pivot": [-6, 3, -14] + }, + { + "name": "impact_particle", + "parent": "impact_group", + "pivot": [-20, 19, -14], + "cubes": [ + {"origin": [-24, 16, -13], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle3", + "parent": "impact_group", + "pivot": [-15, 29, -14], + "cubes": [ + {"origin": [-19, 26, -13], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle4", + "parent": "impact_group", + "pivot": [-15, 29, -14], + "cubes": [ + {"origin": [-19, 26, -13], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle2", + "parent": "impact_group", + "pivot": [-2, 19, -14], + "cubes": [ + {"origin": [-3, 16, -13], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle5", + "parent": "impact_group", + "pivot": [-9, 31, -14], + "cubes": [ + {"origin": [-10, 28, -13], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle6", + "parent": "impact_group", + "pivot": [-6, 6, -14], + "cubes": [ + {"origin": [-7, 3, -13], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_group3", + "parent": "impact", + "pivot": [-13, 3, -8] + }, + { + "name": "impact_particle20", + "parent": "impact_group3", + "pivot": [-27, 19, -8], + "cubes": [ + {"origin": [-31, 16, -7], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle21", + "parent": "impact_group3", + "pivot": [-22, 29, -8], + "cubes": [ + {"origin": [-26, 26, -7], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle22", + "parent": "impact_group3", + "pivot": [-22, 29, -8], + "cubes": [ + {"origin": [-26, 26, -7], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle23", + "parent": "impact_group3", + "pivot": [-9, 19, -8], + "cubes": [ + {"origin": [-10, 16, -7], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle24", + "parent": "impact_group3", + "pivot": [-16, 31, -8], + "cubes": [ + {"origin": [-17, 28, -7], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle25", + "parent": "impact_group3", + "pivot": [-13, 6, -8], + "cubes": [ + {"origin": [-14, 3, -7], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_group2", + "parent": "impact", + "pivot": [17, 6, -17] + }, + { + "name": "impact_particle8", + "parent": "impact_group2", + "pivot": [3, 22, -17], + "cubes": [ + {"origin": [-1, 19, -16], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle9", + "parent": "impact_group2", + "pivot": [8, 32, -17], + "cubes": [ + {"origin": [4, 29, -16], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle10", + "parent": "impact_group2", + "pivot": [8, 32, -17], + "cubes": [ + {"origin": [4, 29, -16], "size": [5, 5, 0], "uv": [0, 36]} + ] + }, + { + "name": "impact_particle11", + "parent": "impact_group2", + "pivot": [21, 22, -17], + "cubes": [ + {"origin": [20, 19, -16], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle12", + "parent": "impact_group2", + "pivot": [14, 34, -17], + "cubes": [ + {"origin": [13, 31, -16], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "impact_particle13", + "parent": "impact_group2", + "pivot": [17, 9, -17], + "cubes": [ + {"origin": [16, 6, -16], "size": [5, 5, 0], "uv": [0, 36], "mirror": true} + ] + }, + { + "name": "particle3", + "parent": "impact", + "pivot": [-5, 26.5, -10], + "cubes": [ + {"origin": [-10, 21, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "particle5", + "parent": "impact", + "pivot": [21, 10.5, -10], + "cubes": [ + {"origin": [16, 5, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "particle2", + "parent": "impact", + "pivot": [6, 16.5, -10], + "cubes": [ + {"origin": [1, 11, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "particle6", + "parent": "impact", + "pivot": [20, 30.5, -10], + "cubes": [ + {"origin": [15, 25, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "particle4", + "parent": "impact", + "pivot": [-18, 16.5, -10], + "cubes": [ + {"origin": [-23, 11, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "particle", + "parent": "impact", + "pivot": [-5, 5.5, -10], + "cubes": [ + {"origin": [-10, 0, -10], "size": [10, 11, 0], "uv": [0, 23]} + ] + }, + { + "name": "eye", + "parent": "impact", + "pivot": [0, 38.66667, -0.66667], + "cubes": [ + {"origin": [-6, 34, -2], "size": [12, 8, 4], "uv": [0, 11]} + ] + }, + { + "name": "Iris", + "parent": "eye", + "pivot": [0, 37.5, -2], + "cubes": [ + {"origin": [-2, 35.5, -2], "size": [4, 4, 0], "inflate": 0.01, "uv": [0, 0]} + ] + }, + { + "name": "eyelid", + "parent": "eye", + "pivot": [0, 40.5, 0], + "cubes": [ + {"origin": [-6, 39, -2], "size": [12, 3, 4], "inflate": 0.1, "uv": [0, 4]} + ] + }, + { + "name": "impact_particle14", + "pivot": [-20, 19, -14] + }, + { + "name": "impact_particle15", + "pivot": [-15, 29, -14] + }, + { + "name": "impact_particle16", + "pivot": [-15, 29, -14] + }, + { + "name": "impact_particle17", + "pivot": [-2, 19, -14] + }, + { + "name": "impact_particle18", + "pivot": [-9, 31, -14] + }, + { + "name": "impact_particle19", + "pivot": [-6, 6, -14] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare_bite.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare_bite.geo.json new file mode 100644 index 00000000..2d6e80fd --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare_bite.geo.json @@ -0,0 +1,82 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 64, + "visible_bounds_width": 4, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "Bite", + "pivot": [0, 23, 0.5] + }, + { + "name": "particles_left", + "parent": "Bite", + "pivot": [7.5, 33.5, -5], + "rotation": [0, 0, -45], + "cubes": [ + {"origin": [6, 32, -5], "size": [5, 3, 0], "uv": [52, 0]} + ] + }, + { + "name": "particles_left_bottom", + "parent": "Bite", + "pivot": [7.5, 16.5, -5], + "rotation": [9.30219, 7.61662, 44.98747], + "cubes": [ + {"origin": [6, 15, -5], "size": [5, 3, 0], "uv": [52, 0]} + ] + }, + { + "name": "particles_right_bottom", + "parent": "Bite", + "pivot": [-7.5, 16.5, -5], + "rotation": [9.30219, -7.61662, -44.98747], + "cubes": [ + {"origin": [-11, 15, -5], "size": [5, 3, 0], "uv": [52, 0], "mirror": true} + ] + }, + { + "name": "particles_right", + "parent": "Bite", + "pivot": [-7.5, 33.5, -5], + "rotation": [0, 0, 45], + "cubes": [ + {"origin": [-11, 32, -5], "size": [5, 3, 0], "uv": [52, 0], "mirror": true} + ] + }, + { + "name": "impact", + "parent": "Bite", + "pivot": [0, 25.5, -7.75], + "cubes": [ + {"origin": [-18.5, 23, -8], "size": [37, 5, 0], "uv": [0, 30]}, + {"origin": [-18.5, 23, -7.5], "size": [37, 5, 0], "pivot": [0, 25.5, -8], "rotation": [0, 0, 90], "uv": [0, 30]} + ] + }, + { + "name": "lower_jaw", + "parent": "Bite", + "pivot": [0, 13.5, 1], + "cubes": [ + {"origin": [-13, 6, 1], "size": [26, 15, 0], "uv": [0, 0]} + ] + }, + { + "name": "upper_jaw", + "parent": "Bite", + "pivot": [0, 32.5, 0], + "cubes": [ + {"origin": [-13, 25, 0], "size": [26, 15, 0], "uv": [0, 15]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare_portal.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare_portal.geo.json new file mode 100644 index 00000000..26830799 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare_portal.geo.json @@ -0,0 +1,109 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 6, + "visible_bounds_height": 5, + "visible_bounds_offset": [0, 1.5, 0] + }, + "bones": [ + { + "name": "Beam", + "pivot": [-1.5, 21, 5.25], + "cubes": [ + {"origin": [-30, 20, -0.75], "size": [60, 5, 0], "uv": [0, 223]} + ] + }, + { + "name": "Portal", + "pivot": [0, 21, 4] + }, + { + "name": "particle_left", + "parent": "Portal", + "pivot": [25.24264, 46.57107, -3.75], + "cubes": [ + {"origin": [13.24264, 39.07107, -3.75], "size": [24, 15, 0], "uv": [0, 208]} + ] + }, + { + "name": "particle_right", + "parent": "Portal", + "pivot": [-25.24264, 46.57107, -3.75], + "cubes": [ + {"origin": [-37.24264, 39.07107, -3.75], "size": [24, 15, 0], "uv": [0, 208], "mirror": true} + ] + }, + { + "name": "particle_right_bottom", + "parent": "Portal", + "pivot": [-25.24264, -2.57107, -3.75], + "cubes": [ + {"origin": [-37.24264, -10.07107, -3.75], "size": [24, 15, 0], "uv": [0, 208], "mirror": true} + ] + }, + { + "name": "particle_left_bottom", + "parent": "Portal", + "pivot": [25.24264, -2.57107, -3.75], + "cubes": [ + {"origin": [13.24264, -10.07107, -3.75], "size": [24, 15, 0], "uv": [0, 208]} + ] + }, + { + "name": "Portal_Layer_Highlight", + "parent": "Portal", + "pivot": [0, 21, -1], + "cubes": [ + {"origin": [-20, 1, -2.75], "size": [37, 40, 0], "uv": [0, 168]}, + {"origin": [-21, 0, -1], "size": [42, 42, 0], "uv": [0, 126]} + ] + }, + { + "name": "Back_Portal_Layer", + "parent": "Portal", + "pivot": [0, 21, 5], + "cubes": [ + {"origin": [-21, 0, 5], "size": [42, 42, 0], "uv": [0, 42]} + ] + }, + { + "name": "Back_Portal_Layer2", + "parent": "Portal", + "pivot": [0, 21, 7], + "cubes": [ + {"origin": [-21, 0, 7], "size": [42, 42, 0], "uv": [0, 42]} + ] + }, + { + "name": "Back_Portal_Layer3", + "parent": "Portal", + "pivot": [0, 21, 11], + "cubes": [ + {"origin": [-21, 0, 11], "size": [42, 42, 0], "uv": [0, 42]} + ] + }, + { + "name": "Portal_Layer", + "parent": "Portal", + "pivot": [0, 21, 0], + "cubes": [ + {"origin": [-21, 0, 0], "size": [42, 42, 0], "uv": [0, 84]} + ] + }, + { + "name": "Portal_Layer2", + "parent": "Portal", + "pivot": [0, 21, 2], + "cubes": [ + {"origin": [-21, 0, 2], "size": [42, 42, 0], "uv": [84, 0]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/water_bomb.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/water_bomb.geo.json new file mode 100644 index 00000000..80ea459b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/geo/water_bomb.geo.json @@ -0,0 +1,32 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "Water_projectile", + "pivot": [0, 8, 0], + "cubes": [ + {"origin": [-8, 0, -8], "size": [16, 16, 16], "uv": [0, 0]} + ] + }, + { + "name": "water_ring", + "parent": "Water_projectile", + "pivot": [7, 0, 4], + "cubes": [ + {"origin": [-8, 0, -11], "size": [16, 16, 8], "inflate": 1, "uv": [8, 40]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/worm_large.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/worm_large.geo.json new file mode 100644 index 00000000..54772af0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/geo/worm_large.geo.json @@ -0,0 +1,109 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.largeworm", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 6.5, + "visible_bounds_offset": [0, 2.75, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 36, 0], + "cubes": [ + {"origin": [-6, 20, -6], "size": [12, 32, 12], "uv": [0, 40]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 52, 0], + "cubes": [ + {"origin": [-8, 52, -8], "size": [16, 24, 16], "uv": [0, 0]} + ] + }, + { + "name": "tooth1", + "parent": "head", + "pivot": [-6.64264, 76, 6.64264], + "cubes": [ + {"origin": [-3, 76, -7], "size": [4, 8, 4], "pivot": [-1, 80, 1], "rotation": [-180, 45, 180], "uv": [64, 68]} + ] + }, + { + "name": "tooth2", + "parent": "head", + "pivot": [0, 76, 8], + "cubes": [ + {"origin": [-2, 76, 4], "size": [4, 8, 4], "uv": [80, 24]} + ] + }, + { + "name": "tooth3", + "parent": "head", + "pivot": [6.64264, 76, 6.64264], + "cubes": [ + {"origin": [-1, 76, -7], "size": [4, 8, 4], "pivot": [1, 80, 1], "rotation": [-180, -45, -180], "uv": [80, 0]} + ] + }, + { + "name": "tooth4", + "parent": "head", + "pivot": [-8, 76, 0], + "cubes": [ + {"origin": [-2, 76, -8], "size": [4, 8, 4], "pivot": [0, 80, 0], "rotation": [0, 90, 0], "uv": [64, 68]} + ] + }, + { + "name": "tooth5", + "parent": "head", + "pivot": [8, 76, 0], + "cubes": [ + {"origin": [-2, 76, 4], "size": [4, 8, 4], "pivot": [0, 80, 0], "rotation": [0, 90, 0], "uv": [80, 24]} + ] + }, + { + "name": "tooth6", + "parent": "head", + "pivot": [-6.64264, 76, -6.64264], + "cubes": [ + {"origin": [-3, 76, 3], "size": [4, 8, 4], "pivot": [-1, 80, -1], "rotation": [180, -45, 180], "uv": [80, 24]} + ] + }, + { + "name": "tooth7", + "parent": "head", + "pivot": [0, 76, -8], + "cubes": [ + {"origin": [-2, 76, -8], "size": [4, 8, 4], "uv": [80, 0]} + ] + }, + { + "name": "tooth8", + "parent": "head", + "pivot": [6.64264, 76, -6.64264], + "cubes": [ + {"origin": [-1, 76, 3], "size": [4, 8, 4], "pivot": [1, 80, -1], "rotation": [180, 45, -180], "uv": [80, 24]} + ] + }, + { + "name": "tail", + "parent": "body", + "pivot": [0, 20, 0], + "cubes": [ + {"origin": [-4, 0, -4], "size": [8, 20, 8], "uv": [48, 40]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/antigravel.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antigravel.json new file mode 100644 index 00000000..1036f786 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antigravel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/antigravel" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_slab.json new file mode 100644 index 00000000..0ce829dd --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block", + "top": "antarchy:block/antimetal/antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_slab_top.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_slab_top.json new file mode 100644 index 00000000..a46b3cb8 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block", + "top": "antarchy:block/antimetal/antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs.json new file mode 100644 index 00000000..6f52f439 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block", + "top": "antarchy:block/antimetal/antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_inner.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_inner.json new file mode 100644 index 00000000..9df20c9c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block", + "top": "antarchy:block/antimetal/antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_outer.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_outer.json new file mode 100644 index 00000000..8f86c47b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/antimetal_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/antimetal/antimetal_block_top", + "side": "antarchy:block/antimetal/antimetal_block", + "top": "antarchy:block/antimetal/antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp.json new file mode 100644 index 00000000..1cdd1c5a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/bluestone/bluestone_lamp" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp_on.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp_on.json new file mode 100644 index 00000000..66101d5b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/bluestone_lamp_on.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/bluestone/bluestone_lamp_on" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/broodstone_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/broodstone_pillar.json new file mode 100644 index 00000000..03e880d7 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/broodstone_pillar.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/broodstone/broodstone_pillar_top", + "side": "antarchy:block/broodstone/broodstone_pillar" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/loam.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/loam.json new file mode 100644 index 00000000..c98d6285 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/loam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/loam" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/lucid_anchor.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/lucid_anchor.json new file mode 100644 index 00000000..7422ef8b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/lucid_anchor.json @@ -0,0 +1,111 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "antarchy:block/lucid_anchor", + "particle": "antarchy:block/lucid_anchor" + }, + "elements": [ + { + "name": "core", + "from": [3, 3, 3], + "to": [13, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 3, 0]}, + "faces": { + "north": {"uv": [8, 7, 10.5, 9.5], "texture": "#0"}, + "east": {"uv": [8, 7, 10.5, 9.5], "texture": "#0"}, + "south": {"uv": [8, 7, 10.5, 9.5], "texture": "#0"}, + "west": {"uv": [8, 7, 10.5, 9.5], "texture": "#0"}, + "up": {"uv": [2.5, 14, 0, 11.5], "texture": "#0"}, + "down": {"uv": [5, 11.5, 2.5, 14], "texture": "#0"} + } + }, + { + "from": [0, 13, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 14, 0]}, + "faces": { + "north": {"uv": [12, 0, 16, 0.75], "texture": "#0"}, + "east": {"uv": [12, 0, 16, 0.75], "texture": "#0"}, + "south": {"uv": [12, 0, 16, 0.75], "texture": "#0"}, + "west": {"uv": [12, 0, 16, 0.75], "texture": "#0"}, + "up": {"uv": [4, 4, 0, 0], "texture": "#0"}, + "down": {"uv": [4, 0, 0, 4], "texture": "#0"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 8.25, 4, 11.5], "texture": "#0"}, + "east": {"uv": [0, 8.25, 4, 11.5], "texture": "#0"}, + "south": {"uv": [0, 8.25, 4, 11.5], "texture": "#0"}, + "west": {"uv": [0, 8.25, 4, 11.5], "texture": "#0"}, + "down": {"uv": [4, 0, 8, 4], "texture": "#0"} + } + } + ], + "display": { + "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], + "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": "lucid_anchor", + "origin": [0, 2, 0], + "scope": 0, + "color": 0, + "children": [ + { + "name": "core", + "origin": [0, 2, 0], + "scope": 0, + "color": 0, + "children": [0] + }, + { + "name": "base", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [1] + }, + { + "name": "glass", + "origin": [0, 2, 0], + "scope": 0, + "color": 0, + "children": [2] + } + ] + } + ] +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/mucus.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/mucus.json new file mode 100644 index 00000000..ec82ae82 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/mucus.json @@ -0,0 +1,17 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/mucus", + "glow_lichen": "antarchy:block/mucus" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 16, 0.1], + "faces": { + "north": { "uv": [16, 0, 0, 16], "texture": "#glow_lichen" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#glow_lichen" } + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_button.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_button.json new file mode 100644 index 00000000..5bfd3ec8 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_button.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_button_inventory.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_button_inventory.json new file mode 100644 index 00000000..0e775f8f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_button_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_inventory", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_button_pressed.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_button_pressed.json new file mode 100644 index 00000000..95443327 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_button_pressed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_pressed", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left.json new file mode 100644 index 00000000..785bb99b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left_open.json new file mode 100644 index 00000000..9cd5767f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left_open", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right.json new file mode 100644 index 00000000..47c10ad9 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right_open.json new file mode 100644 index 00000000..57ddb6d6 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_bottom_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right_open", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left.json new file mode 100644 index 00000000..2a5485a6 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left_open.json new file mode 100644 index 00000000..d8fcc31d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left_open", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right.json new file mode 100644 index 00000000..6baceb0c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right_open.json new file mode 100644 index 00000000..1bcb3ae4 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_door_top_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right_open", + "textures": { + "bottom": "antarchy:block/nadir/nadir_log_door_bottom", + "top": "antarchy:block/nadir/nadir_log_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate.json new file mode 100644 index 00000000..a6da433f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_open.json new file mode 100644 index 00000000..a817f67d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_open", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall.json new file mode 100644 index 00000000..68fb5f65 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall_open.json new file mode 100644 index 00000000..1d5532a6 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_gate_wall_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall_open", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_inventory.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_inventory.json new file mode 100644 index 00000000..752c9adc --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_inventory", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_post.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_post.json new file mode 100644 index 00000000..1833b4b8 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_post", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_side.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_side.json new file mode 100644 index 00000000..597e7f6b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fence_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_side", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_hanging_sign.json new file mode 100644 index 00000000..c101c4af --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/nadir/nadir_hanging" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_log.json new file mode 100644 index 00000000..07c99b32 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_log.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_log", + "textures": { + "end": "antarchy:block/nadir/nadir_log_top", + "side": "antarchy:block/nadir/nadir_log" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_log_horizontal.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_log_horizontal.json new file mode 100644 index 00000000..fca2eb31 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_log_horizontal.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_log_horizontal", + "textures": { + "end": "antarchy:block/nadir/nadir_log_top", + "side": "antarchy:block/nadir/nadir_log" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_planks.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_planks.json new file mode 100644 index 00000000..31fcbb9f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_planks.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate.json new file mode 100644 index 00000000..802073a6 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate_down.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate_down.json new file mode 100644 index 00000000..0be8bf8d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_pressure_plate_down.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate_down", + "textures": { + "texture": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_sapling.json new file mode 100644 index 00000000..1c12fa69 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/nadir/nadir_sapling" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_sign.json new file mode 100644 index 00000000..f8966d14 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:item/nadir_sign" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_slab.json new file mode 100644 index 00000000..074cbc4d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_slab.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab", + "textures": { + "bottom": "antarchy:block/nadir/nadir_planks", + "side": "antarchy:block/nadir/nadir_planks", + "top": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_slab_top.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_slab_top.json new file mode 100644 index 00000000..8fe74cdf --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_slab_top.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab_top", + "textures": { + "bottom": "antarchy:block/nadir/nadir_planks", + "side": "antarchy:block/nadir/nadir_planks", + "top": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_stairs.json new file mode 100644 index 00000000..3b5f549b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_stairs.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs", + "textures": { + "bottom": "antarchy:block/nadir/nadir_planks", + "side": "antarchy:block/nadir/nadir_planks", + "top": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_inner.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_inner.json new file mode 100644 index 00000000..8eceb6db --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_inner.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_inner", + "textures": { + "bottom": "antarchy:block/nadir/nadir_planks", + "side": "antarchy:block/nadir/nadir_planks", + "top": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_outer.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_outer.json new file mode 100644 index 00000000..e6e0793d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_stairs_outer.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_outer", + "textures": { + "bottom": "antarchy:block/nadir/nadir_planks", + "side": "antarchy:block/nadir/nadir_planks", + "top": "antarchy:block/nadir/nadir_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_bottom.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_bottom.json new file mode 100644 index 00000000..1b6587f5 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_bottom", + "textures": { + "texture": "antarchy:block/nadir/nadir_log_trapdoor" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_open.json new file mode 100644 index 00000000..500081cf --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_open", + "textures": { + "texture": "antarchy:block/nadir/nadir_log_trapdoor" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_top.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_top.json new file mode 100644 index 00000000..09cabab6 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_trapdoor_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_top", + "textures": { + "texture": "antarchy:block/nadir/nadir_log_trapdoor" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_veil.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_veil.json new file mode 100644 index 00000000..c3ec9718 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_veil.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/nadir/nadir_veil" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_wall_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_wall_hanging_sign.json new file mode 100644 index 00000000..c101c4af --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_wall_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/nadir/nadir_hanging" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_wall_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_wall_sign.json new file mode 100644 index 00000000..f8966d14 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_wall_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:item/nadir_sign" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_wood.json new file mode 100644 index 00000000..febfe2df --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_wood.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_wood", + "textures": { + "end": "antarchy:block/nadir/nadir_log", + "side": "antarchy:block/nadir/nadir_log" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nyxite_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nyxite_pillar.json new file mode 100644 index 00000000..4f2de74e --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nyxite_pillar.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/nyxite_pillar_top", + "side": "antarchy:block/nyxite_pillar" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab.json new file mode 100644 index 00000000..1a48a48b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block", + "top": "antarchy:block/antimetal/polished_antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab_top.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab_top.json new file mode 100644 index 00000000..98a13d83 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block", + "top": "antarchy:block/antimetal/polished_antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs.json new file mode 100644 index 00000000..96e66937 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block", + "top": "antarchy:block/antimetal/polished_antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_inner.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_inner.json new file mode 100644 index 00000000..fbdc320d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block", + "top": "antarchy:block/antimetal/polished_antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_outer.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_outer.json new file mode 100644 index 00000000..e4abf85a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/polished_antimetal_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/antimetal/polished_antimetal_block_top", + "side": "antarchy:block/antimetal/polished_antimetal_block", + "top": "antarchy:block/antimetal/polished_antimetal_block_top" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/potted_nadir_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/potted_nadir_sapling.json new file mode 100644 index 00000000..2cf4f71a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/potted_nadir_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "antarchy:block/nadir/nadir_sapling" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/shellstone_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/shellstone_pillar.json new file mode 100644 index 00000000..c4992307 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/shellstone_pillar.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/shellstone/shellstone_pillar_top", + "side": "antarchy:block/shellstone/shellstone_pillar" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log.json new file mode 100644 index 00000000..d741caa2 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_log", + "textures": { + "end": "antarchy:block/nadir/stripped_nadir_log_top", + "side": "antarchy:block/nadir/stripped_nadir_log" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log_horizontal.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log_horizontal.json new file mode 100644 index 00000000..64be9139 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_log_horizontal.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_log_horizontal", + "textures": { + "end": "antarchy:block/nadir/stripped_nadir_log_top", + "side": "antarchy:block/nadir/stripped_nadir_log" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_wood.json new file mode 100644 index 00000000..37668114 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_nadir_wood.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_wood", + "textures": { + "end": "antarchy:block/nadir/stripped_nadir_log", + "side": "antarchy:block/nadir/stripped_nadir_log" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper.json new file mode 100644 index 00000000..b9145cc2 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper.json @@ -0,0 +1,126 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [64, 64], + "textures": { + "4": "antarchy:block/upper", + "particle": "antarchy:block/upper" + }, + "elements": [ + { + "from": [14, 11, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [8, 0, 7.5, 1.25], "texture": "#4", "cullface": "north"}, + "east": {"uv": [4, 0, 8, 1.25], "texture": "#4", "cullface": "east"}, + "south": {"uv": [4.5, 0, 4, 1.25], "texture": "#4", "cullface": "south"}, + "west": {"uv": [4, 0, 8, 1.25], "texture": "#4", "cullface": "up"}, + "up": {"uv": [4.5, 11, 4, 7], "texture": "#4", "cullface": "up"} + } + }, + { + "from": [0, 10, 0], + "to": [16, 11, 16], + "faces": { + "north": {"uv": [7.5, 5, 11.5, 5.25], "texture": "#4", "cullface": "north"}, + "east": {"uv": [7.5, 5, 11.5, 5.25], "texture": "#4", "cullface": "east"}, + "south": {"uv": [7.5, 5, 11.5, 5.25], "texture": "#4", "cullface": "south"}, + "west": {"uv": [7.5, 5, 11.5, 5.25], "texture": "#4", "cullface": "west"}, + "up": {"uv": [4, 4, 0, 0], "texture": "#4", "cullface": "up"}, + "down": {"uv": [4, 4, 0, 8], "texture": "#4"} + } + }, + { + "from": [0, 11, 0], + "to": [2, 16, 16], + "faces": { + "north": {"uv": [4.5, 0, 4, 1.25], "texture": "#4", "cullface": "north"}, + "east": {"uv": [4, 0, 8, 1.25], "texture": "#4", "cullface": "up"}, + "south": {"uv": [8, 1.25, 7.5, 0], "texture": "#4", "cullface": "south"}, + "west": {"uv": [4, 0, 8, 1.25], "texture": "#4", "cullface": "west"}, + "up": {"uv": [7.5, 8, 7, 4], "texture": "#4", "cullface": "up"} + } + }, + { + "from": [2, 11, 0], + "to": [14, 16, 2], + "faces": { + "north": {"uv": [7, 4.5, 4, 5.75], "texture": "#4", "cullface": "north"}, + "south": {"uv": [4, 4.5, 7, 5.75], "texture": "#4", "cullface": "up"}, + "up": {"uv": [10.5, 4.5, 7.5, 4], "texture": "#4", "cullface": "up"} + } + }, + { + "from": [2, 11, 14], + "to": [14, 16, 16], + "faces": { + "north": {"uv": [4, 4.5, 7, 5.75], "texture": "#4", "cullface": "up"}, + "south": {"uv": [7, 4.5, 4, 5.75], "texture": "#4", "cullface": "south"}, + "up": {"uv": [10.5, 5, 7.5, 4.5], "texture": "#4", "cullface": "up"} + } + }, + { + "from": [4, 4, 4], + "to": [12, 10, 12], + "faces": { + "north": {"uv": [6, 2.5, 8, 4], "texture": "#4"}, + "east": {"uv": [6, 2.5, 8, 4], "texture": "#4"}, + "south": {"uv": [6, 2.5, 8, 4], "texture": "#4"}, + "west": {"uv": [6, 2.5, 8, 4], "texture": "#4"}, + "down": {"uv": [6, 2.5, 4, 4.5], "texture": "#4"} + } + }, + { + "from": [6, 0, 6], + "to": [10, 4, 10], + "faces": { + "north": {"uv": [4.5, 7, 5.5, 8], "texture": "#4"}, + "east": {"uv": [4.5, 7, 5.5, 8], "texture": "#4"}, + "south": {"uv": [4.5, 7, 5.5, 8], "texture": "#4"}, + "west": {"uv": [4.5, 7, 5.5, 8], "texture": "#4"}, + "down": {"uv": [6.5, 7, 5.5, 8], "texture": "#4", "cullface": "down"} + } + } + ], + "display": { + "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], + "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": "group", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side.json new file mode 100644 index 00000000..34029065 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side.json @@ -0,0 +1,546 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [ + 64, + 64 + ], + "textures": { + "1": "antarchy:block/upper", + "particle": "antarchy:block/upper" + }, + "elements": [ + { + "from": [ + 0, + 5, + 0 + ], + "to": [ + 16, + 6, + 16 + ], + "faces": { + "north": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "west" + }, + "down": { + "uv": [ + 4, + 4, + 0, + 0 + ], + "texture": "#1", + "cullface": "down" + }, + "up": { + "uv": [ + 4, + 4, + 0, + 8 + ], + "rotation": 180, + "texture": "#1" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 2, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "south": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "down": { + "uv": [ + 4, + 11, + 4.5, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 14, + 0, + 0 + ], + "to": [ + 16, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 4.5, + 11, + 4, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 2, + 0, + 0 + ], + "to": [ + 14, + 5, + 2 + ], + "faces": { + "north": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "south": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 10.5, + 4.5, + 7.5, + 4 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 2, + 0, + 14 + ], + "to": [ + 14, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "south": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "down": { + "uv": [ + 10.5, + 5, + 7.5, + 4.5 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 4, + 6, + 4 + ], + "to": [ + 12, + 12, + 12 + ], + "faces": { + "north": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 2.5, + 6, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6, + 8, + 0 + ], + "to": [ + 10, + 12, + 4 + ], + "faces": { + "north": { + "uv": [ + 5.5, + 7, + 6.5, + 8 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 3.5, + 5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 5, + 9, + 4 + ], + "rotation": 90, + "texture": "#1" + } + } + } + ], + "display": { + "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 + ], + "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": "group", + "origin": [ + 0, + 0, + 0 + ], + "scope": 0, + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side_east.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side_east.json new file mode 100644 index 00000000..2a5c4017 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side_east.json @@ -0,0 +1,546 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [ + 64, + 64 + ], + "textures": { + "1": "antarchy:block/upper", + "particle": "antarchy:block/upper" + }, + "elements": [ + { + "from": [ + 0, + 5, + 0 + ], + "to": [ + 16, + 6, + 16 + ], + "faces": { + "east": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "north" + }, + "down": { + "uv": [ + 4, + 4, + 0, + 0 + ], + "texture": "#1", + "cullface": "down" + }, + "up": { + "uv": [ + 4, + 4, + 0, + 8 + ], + "rotation": 180, + "texture": "#1" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 5, + 2 + ], + "faces": { + "east": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "west": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "down": { + "uv": [ + 4, + 11, + 4.5, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 0, + 0, + 14 + ], + "to": [ + 16, + 5, + 16 + ], + "faces": { + "east": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 4.5, + 11, + 4, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 14, + 0, + 2 + ], + "to": [ + 16, + 5, + 14 + ], + "faces": { + "east": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "west": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 10.5, + 4.5, + 7.5, + 4 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 0, + 0, + 2 + ], + "to": [ + 2, + 5, + 14 + ], + "faces": { + "east": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "west": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "down": { + "uv": [ + 10.5, + 5, + 7.5, + 4.5 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 4, + 6, + 4 + ], + "to": [ + 12, + 12, + 12 + ], + "faces": { + "east": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "north": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 2.5, + 6, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 12, + 8, + 6 + ], + "to": [ + 16, + 12, + 10 + ], + "faces": { + "east": { + "uv": [ + 5.5, + 7, + 6.5, + 8 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "north": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 3.5, + 5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 5, + 9, + 4 + ], + "rotation": 90, + "texture": "#1" + } + } + } + ], + "display": { + "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 + ], + "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": "group", + "origin": [ + 0, + 0, + 0 + ], + "scope": 0, + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side_south.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side_south.json new file mode 100644 index 00000000..846e4cfa --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side_south.json @@ -0,0 +1,546 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [ + 64, + 64 + ], + "textures": { + "1": "antarchy:block/upper", + "particle": "antarchy:block/upper" + }, + "elements": [ + { + "from": [ + 0, + 5, + 0 + ], + "to": [ + 16, + 6, + 16 + ], + "faces": { + "south": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "east" + }, + "down": { + "uv": [ + 4, + 4, + 0, + 0 + ], + "texture": "#1", + "cullface": "down" + }, + "up": { + "uv": [ + 4, + 4, + 0, + 8 + ], + "rotation": 180, + "texture": "#1" + } + } + }, + { + "from": [ + 14, + 0, + 0 + ], + "to": [ + 16, + 5, + 16 + ], + "faces": { + "south": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "north": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "down": { + "uv": [ + 4, + 11, + 4.5, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 2, + 5, + 16 + ], + "faces": { + "south": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 4.5, + 11, + 4, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 2, + 0, + 14 + ], + "to": [ + 14, + 5, + 16 + ], + "faces": { + "south": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "north": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 10.5, + 4.5, + 7.5, + 4 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 2, + 0, + 0 + ], + "to": [ + 14, + 5, + 2 + ], + "faces": { + "south": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "north": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "down": { + "uv": [ + 10.5, + 5, + 7.5, + 4.5 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 4, + 6, + 4 + ], + "to": [ + 12, + 12, + 12 + ], + "faces": { + "south": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "north": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 2.5, + 6, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6, + 8, + 12 + ], + "to": [ + 10, + 12, + 16 + ], + "faces": { + "south": { + "uv": [ + 5.5, + 7, + 6.5, + 8 + ], + "texture": "#1", + "cullface": "south" + }, + "west": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 3.5, + 5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 5, + 9, + 4 + ], + "rotation": 90, + "texture": "#1" + } + } + } + ], + "display": { + "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 + ], + "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": "group", + "origin": [ + 0, + 0, + 0 + ], + "scope": 0, + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side_west.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side_west.json new file mode 100644 index 00000000..ac6e13e0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/upper_side_west.json @@ -0,0 +1,546 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [ + 64, + 64 + ], + "textures": { + "1": "antarchy:block/upper", + "particle": "antarchy:block/upper" + }, + "elements": [ + { + "from": [ + 0, + 5, + 0 + ], + "to": [ + 16, + 6, + 16 + ], + "faces": { + "west": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 1.25, + 8, + 1.5 + ], + "texture": "#1", + "cullface": "south" + }, + "down": { + "uv": [ + 4, + 4, + 0, + 0 + ], + "texture": "#1", + "cullface": "down" + }, + "up": { + "uv": [ + 4, + 4, + 0, + 8 + ], + "rotation": 180, + "texture": "#1" + } + } + }, + { + "from": [ + 0, + 0, + 14 + ], + "to": [ + 16, + 5, + 16 + ], + "faces": { + "west": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "east": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "south" + }, + "down": { + "uv": [ + 4, + 11, + 4.5, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 5, + 2 + ], + "faces": { + "west": { + "uv": [ + 8, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "north" + }, + "east": { + "uv": [ + 4.5, + 0, + 4, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "south": { + "uv": [ + 4, + 0, + 8, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 4.5, + 11, + 4, + 7 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 0, + 0, + 2 + ], + "to": [ + 2, + 5, + 14 + ], + "faces": { + "west": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "west" + }, + "east": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "down": { + "uv": [ + 10.5, + 4.5, + 7.5, + 4 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 14, + 0, + 2 + ], + "to": [ + 16, + 5, + 14 + ], + "faces": { + "west": { + "uv": [ + 4.5, + 0, + 7.5, + 1.25 + ], + "texture": "#1", + "cullface": "down" + }, + "east": { + "uv": [ + 7.5, + 0, + 4.5, + 1.25 + ], + "texture": "#1", + "cullface": "east" + }, + "down": { + "uv": [ + 10.5, + 5, + 7.5, + 4.5 + ], + "texture": "#1", + "cullface": "down" + } + } + }, + { + "from": [ + 4, + 6, + 4 + ], + "to": [ + 12, + 12, + 12 + ], + "faces": { + "west": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "north": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 2.5, + 8, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 2.5, + 6, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 0, + 8, + 6 + ], + "to": [ + 4, + 12, + 10 + ], + "faces": { + "west": { + "uv": [ + 5.5, + 7, + 6.5, + 8 + ], + "texture": "#1", + "cullface": "west" + }, + "north": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5, + 6.75, + 6, + 5.75 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 3.5, + 5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 5, + 9, + 4 + ], + "rotation": 90, + "texture": "#1" + } + } + } + ], + "display": { + "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 + ], + "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": "group", + "origin": [ + 0, + 0, + 0 + ], + "scope": 0, + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/antigravel.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/antigravel.json new file mode 100644 index 00000000..cdb3a1ea --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/antigravel.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/antigravel" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/antimetal_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/antimetal_slab.json new file mode 100644 index 00000000..25d79bc8 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/antimetal_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/antimetal_slab" +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/antimetal_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/antimetal_stairs.json new file mode 100644 index 00000000..1bc22b9e --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/antimetal_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/antimetal_stairs" +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/bluestone_lamp.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/bluestone_lamp.json new file mode 100644 index 00000000..c46117ed --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/bluestone_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/bluestone_lamp" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/broodstone_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/broodstone_pillar.json new file mode 100644 index 00000000..27fdad5f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/broodstone_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone_pillar" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/kraken_kalamari.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/kraken_kalamari.json new file mode 100644 index 00000000..49a6766e --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/kraken_kalamari.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/kraken_kalamari" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/loam.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/loam.json new file mode 100644 index 00000000..3802ed1d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/loam.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/loam" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/mucus.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/mucus.json new file mode 100644 index 00000000..6bb38c82 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/mucus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/mucus" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_boat.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_boat.json new file mode 100644 index 00000000..e41d3884 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nadir_boat" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_button.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_button.json new file mode 100644 index 00000000..13b09f11 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_button.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_button_inventory" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_chest_boat.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_chest_boat.json new file mode 100644 index 00000000..83e1571f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_chest_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nadir_chest_boat" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_door.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_door.json new file mode 100644 index 00000000..34dc387d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_door.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nadir_door_icon" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_fence.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_fence.json new file mode 100644 index 00000000..fca9211f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_fence.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_fence_inventory" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_fence_gate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_fence_gate.json new file mode 100644 index 00000000..19eb4e75 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_fence_gate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_fence_gate" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_hanging_sign.json new file mode 100644 index 00000000..7c152d8e --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nadir_hanging_sign" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_log.json new file mode 100644 index 00000000..84722c4d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_log" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_planks.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_planks.json new file mode 100644 index 00000000..b119279a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_planks.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_planks" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_pressure_plate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_pressure_plate.json new file mode 100644 index 00000000..35fdfe68 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_pressure_plate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_pressure_plate" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_sapling.json new file mode 100644 index 00000000..cff3d3e7 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/nadir/nadir_sapling" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_sign.json new file mode 100644 index 00000000..95cd0c1e --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nadir_sign" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_slab.json new file mode 100644 index 00000000..01771cbf --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_slab.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_slab" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_stairs.json new file mode 100644 index 00000000..ab456b02 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_stairs.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_stairs" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_trapdoor.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_trapdoor.json new file mode 100644 index 00000000..25ec532f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_trapdoor.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_trapdoor_bottom" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_veil.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_veil.json new file mode 100644 index 00000000..18509de7 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_veil.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_veil" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_wood.json new file mode 100644 index 00000000..10f53e80 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/nadir_wood" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nyxite_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nyxite_pillar.json new file mode 100644 index 00000000..e599dd1c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nyxite_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/nyxite_pillar" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_slab.json new file mode 100644 index 00000000..a99ca02d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_antimetal_slab" +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_stairs.json new file mode 100644 index 00000000..333e5189 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/polished_antimetal_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/polished_antimetal_stairs" +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/shellstone_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/shellstone_pillar.json new file mode 100644 index 00000000..cefafce9 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/shellstone_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/shellstone_pillar" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_log.json new file mode 100644 index 00000000..f60e2c43 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_nadir_log" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_wood.json new file mode 100644 index 00000000..ba7349c2 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_nadir_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_nadir_wood" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/upper.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/upper.json new file mode 100644 index 00000000..2b8d2758 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/upper.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/upper" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/particles/lucid_bolt_impact_large.json b/common-1.21.1/src/main/resources/assets/antarchy/particles/lucid_bolt_impact_large.json new file mode 100644 index 00000000..0501893a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/particles/lucid_bolt_impact_large.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "antarchy:lucid_bolt_impact_large" + ] +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/particles/lucid_bolt_impact_small.json b/common-1.21.1/src/main/resources/assets/antarchy/particles/lucid_bolt_impact_small.json new file mode 100644 index 00000000..d1f0d4e7 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/particles/lucid_bolt_impact_small.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "antarchy:lucid_bolt_impact_small" + ] +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/particles/nightmare_fire_flame.json b/common-1.21.1/src/main/resources/assets/antarchy/particles/nightmare_fire_flame.json new file mode 100644 index 00000000..0d74ac08 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/particles/nightmare_fire_flame.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "antarchy:nightmare_fire_flame" + ] +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest1.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest1.ogg new file mode 100644 index 00000000..c982f935 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest1.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest2.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest2.ogg new file mode 100644 index 00000000..6ed074ec Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest2.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest3.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest3.ogg new file mode 100644 index 00000000..b81cc221 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest3.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest4.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest4.ogg new file mode 100644 index 00000000..20079552 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest4.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest5.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest5.ogg new file mode 100644 index 00000000..44c1df3f Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest5.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest6.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest6.ogg new file mode 100644 index 00000000..85bd20e3 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/ambient/elythia/ouranwood_forest/ouranwoodforest6.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/cavaryn/venenatus.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/cavaryn/venenatus.ogg new file mode 100644 index 00000000..8819768a Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/cavaryn/venenatus.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/lucid_lullaby.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/lucid_lullaby.ogg new file mode 100644 index 00000000..a1c8448f Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/lucid_lullaby.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/whistling_void.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/whistling_void.ogg new file mode 100644 index 00000000..0c9e4d2e Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/thoraxis/whistling_void.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot1.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot1.ogg new file mode 100644 index 00000000..14de0b37 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot1.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot2.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot2.ogg new file mode 100644 index 00000000..253a27a5 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot2.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot3.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot3.ogg new file mode 100644 index 00000000..28c64d62 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/critshot3.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/growraycharge.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/growraycharge.ogg new file mode 100644 index 00000000..26141c45 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/growraycharge.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/growrayloop.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/growrayloop.ogg new file mode 100644 index 00000000..16f54232 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/growrayloop.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot1.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot1.ogg new file mode 100644 index 00000000..34d0456a Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot1.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot2.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot2.ogg new file mode 100644 index 00000000..a1920058 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot2.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot3.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot3.ogg new file mode 100644 index 00000000..037e4a8d Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/mediumshot3.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkraycharge.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkraycharge.ogg new file mode 100644 index 00000000..9534da3a Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkraycharge.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkrayloop.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkrayloop.ogg new file mode 100644 index 00000000..8fe2682a Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/shrinkrayloop.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot1.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot1.ogg new file mode 100644 index 00000000..15740ce5 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot1.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot2.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot2.ogg new file mode 100644 index 00000000..ee2023a3 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot2.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot3.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot3.ogg new file mode 100644 index 00000000..3fdcbffa Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/size_ray/weakshot3.ogg differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/antigravel.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/antigravel.png new file mode 100644 index 00000000..44c8a2e3 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/antigravel.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp.png new file mode 100644 index 00000000..473db731 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp_on.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp_on.png new file mode 100644 index 00000000..04d450ce Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/bluestone/bluestone_lamp_on.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar.png new file mode 100644 index 00000000..34150b59 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar_top.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar_top.png new file mode 100644 index 00000000..34ce52c3 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone_pillar_top.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_block.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_block.png new file mode 100644 index 00000000..bee3628b Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_block.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_base.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_base.png new file mode 100644 index 00000000..4a459d32 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_base.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_frustum.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_frustum.png new file mode 100644 index 00000000..fa765c5a Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_frustum.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_middle.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_middle.png new file mode 100644 index 00000000..5566fa80 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_middle.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip.png new file mode 100644 index 00000000..c307e641 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip_merge.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip_merge.png new file mode 100644 index 00000000..54d2b8b8 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_down_tip_merge.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_base.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_base.png new file mode 100644 index 00000000..41feb815 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_base.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_frustum.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_frustum.png new file mode 100644 index 00000000..3c44b5fb Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_frustum.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_middle.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_middle.png new file mode 100644 index 00000000..9377a313 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_middle.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip.png new file mode 100644 index 00000000..3f058ad5 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip_merge.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip_merge.png new file mode 100644 index 00000000..8b5e6659 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chitin_spike/chitin_spike_up_tip_merge.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/loam.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/loam.png new file mode 100644 index 00000000..3bfd1130 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/loam.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/lucid_anchor.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/lucid_anchor.png new file mode 100644 index 00000000..f5a07eaa Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/lucid_anchor.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/mucus.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/mucus.png new file mode 100644 index 00000000..2541a82c Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/mucus.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log.png new file mode 100644 index 00000000..e734fbb2 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_bottom.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_bottom.png new file mode 100644 index 00000000..16840501 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_bottom.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_top.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_top.png new file mode 100644 index 00000000..2d04781e Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_door_top.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_top.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_top.png new file mode 100644 index 00000000..6ea31397 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_top.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_trapdoor.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_trapdoor.png new file mode 100644 index 00000000..6422ae65 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_log_trapdoor.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_planks.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_planks.png new file mode 100644 index 00000000..e2b59b98 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_planks.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_sapling.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_sapling.png new file mode 100644 index 00000000..2a5f6933 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_sapling.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_veil.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_veil.png new file mode 100644 index 00000000..bebd40ad Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_veil.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_veil.png.mcmeta b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_veil.png.mcmeta new file mode 100644 index 00000000..557410d3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/nadir_veil.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 10, + "interpolate": true + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log.png new file mode 100644 index 00000000..f592cc1a Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log_top.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log_top.png new file mode 100644 index 00000000..197a69cc Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir/stripped_nadir_log_top.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar.png new file mode 100644 index 00000000..e7d5f68a Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar_top.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar_top.png new file mode 100644 index 00000000..b91a3a97 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nyxite_pillar_top.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar.png new file mode 100644 index 00000000..ba45df9f Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar_top.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar_top.png new file mode 100644 index 00000000..50eabf7f Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/shellstone/shellstone_pillar_top.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/upper.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/upper.png new file mode 100644 index 00000000..ebcce044 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/upper.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/boat/nadir.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/boat/nadir.png new file mode 100644 index 00000000..ba77380e Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/boat/nadir.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/nadir.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/nadir.png new file mode 100644 index 00000000..ffd68a70 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/nadir.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare.png new file mode 100644 index 00000000..a7d64671 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_emissive.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_emissive.png new file mode 100644 index 00000000..018fd40c Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_emissive.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2.png new file mode 100644 index 00000000..f355e1b1 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2_emissive.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2_emissive.png new file mode 100644 index 00000000..800e7e96 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/nightmare/nightmare_phase_2_emissive.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/nadir.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/nadir.png new file mode 100644 index 00000000..bd6dbdc3 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/nadir.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/nadir.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/nadir.png new file mode 100644 index 00000000..c16d3b33 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/nadir.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/worm/worm_large.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/worm/worm_large.png new file mode 100644 index 00000000..a00c505a Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/worm/worm_large.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/nadir.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/nadir.png new file mode 100644 index 00000000..1c8f6167 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/nadir.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/cheep_bucket.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/cheep_bucket.png new file mode 100644 index 00000000..39b5499a Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/cheep_bucket.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/kraken_kalamari.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/kraken_kalamari.png new file mode 100644 index 00000000..9478451d Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/kraken_kalamari.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_boat.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_boat.png new file mode 100644 index 00000000..1926a011 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_boat.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_chest_boat.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_chest_boat.png new file mode 100644 index 00000000..55ecd547 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_chest_boat.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_door_icon.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_door_icon.png new file mode 100644 index 00000000..2dd5cf19 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_door_icon.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_hanging_sign.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_hanging_sign.png new file mode 100644 index 00000000..c1c86721 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_hanging_sign.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_sign.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_sign.png new file mode 100644 index 00000000..ac538554 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_sign.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye.png new file mode 100644 index 00000000..6f7f1fd5 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_boots.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_boots.png new file mode 100644 index 00000000..bef99e4e Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_boots.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_chestplate.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_chestplate.png new file mode 100644 index 00000000..3958a042 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_chestplate.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_helmet.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_helmet.png new file mode 100644 index 00000000..0bbc4fc5 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_helmet.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_leggings.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_leggings.png new file mode 100644 index 00000000..52df66a8 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/tigers_eye/tigers_eye_leggings.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/upper.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/upper.png new file mode 100644 index 00000000..2b8e53c2 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/upper.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_1.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_1.png new file mode 100644 index 00000000..a313310c Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_1.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_2.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_2.png new file mode 100644 index 00000000..e9933ad6 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/models/armor/tigers_eye_layer_2.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_large.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_large.png new file mode 100644 index 00000000..703f2ff7 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_large.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_small.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_small.png new file mode 100644 index 00000000..28606503 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/particle/lucid_bolt_impact_small.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/particle/nightmare_fire_flame.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/particle/nightmare_fire_flame.png new file mode 100644 index 00000000..e6b8c156 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/particle/nightmare_fire_flame.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/dimensional_tear.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/dimensional_tear.png new file mode 100644 index 00000000..ec0cb4e0 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/dimensional_tear.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt.png new file mode 100644 index 00000000..80473780 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt_impact.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt_impact.png new file mode 100644 index 00000000..66f828dc Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/lucid_bolt_impact.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite.png new file mode 100644 index 00000000..251a222d Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite_phase_2.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite_phase_2.png new file mode 100644 index 00000000..1699b1de Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_bite_phase_2.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_portal.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_portal.png new file mode 100644 index 00000000..622bcab5 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/nightmare_portal.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/water_bomb.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/water_bomb.png new file mode 100644 index 00000000..ea97a29b Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/vfx/water_bomb.png differ diff --git a/common-1.21.1/src/main/resources/data/antarchy/advancement/a_lovely_world.json b/common-1.21.1/src/main/resources/data/antarchy/advancement/a_lovely_world.json new file mode 100644 index 00000000..d490ace1 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/advancement/a_lovely_world.json @@ -0,0 +1,42 @@ +{ + "parent": "minecraft:adventure/root", + "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.21.1/src/main/resources/data/antarchy/advancement/mucus_obtained.json b/common-1.21.1/src/main/resources/data/antarchy/advancement/mucus_obtained.json new file mode 100644 index 00000000..ce570ca6 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/advancement/mucus_obtained.json @@ -0,0 +1,36 @@ +{ + "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.21.1/src/main/resources/data/antarchy/advancement/upper_craft.json b/common-1.21.1/src/main/resources/data/antarchy/advancement/upper_craft.json new file mode 100644 index 00000000..f221db8b --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/advancement/upper_craft.json @@ -0,0 +1,36 @@ +{ + "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.21.1/src/main/resources/data/antarchy/dimension/thoraxis.json b/common-1.21.1/src/main/resources/data/antarchy/dimension/thoraxis.json index 03c8f802..9deebc42 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/dimension/thoraxis.json +++ b/common-1.21.1/src/main/resources/data/antarchy/dimension/thoraxis.json @@ -9,6 +9,36 @@ "umbral_hills_max_y": 100, "lucid_pools_min_y": 116, "biomes": [ + { + "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:thoraxis_underside" + }, { "parameters": { "temperature": [ diff --git a/common-1.21.1/src/main/resources/data/antarchy/dimension_type/thoraxis.json b/common-1.21.1/src/main/resources/data/antarchy/dimension_type/thoraxis.json index 368ef383..e439913f 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/dimension_type/thoraxis.json +++ b/common-1.21.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.21.1/src/main/resources/data/antarchy/loot_table/blocks/antigravel.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/antigravel.json new file mode 100644 index 00000000..b89e352a --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/antigravel.json @@ -0,0 +1,20 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_slab.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_slab.json new file mode 100644 index 00000000..959fbd3c --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_slab.json @@ -0,0 +1,44 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_stairs.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_stairs.json new file mode 100644 index 00000000..f81249ea --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/antimetal_stairs.json @@ -0,0 +1,20 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_lamp.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_lamp.json new file mode 100644 index 00000000..050e8523 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/bluestone_lamp.json @@ -0,0 +1,20 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_pillar.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_pillar.json new file mode 100644 index 00000000..0cddd51f --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/broodstone_pillar.json @@ -0,0 +1,20 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/loam.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/loam.json new file mode 100644 index 00000000..4b098d8f --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/loam.json @@ -0,0 +1,20 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/mucus.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/mucus.json new file mode 100644 index 00000000..e429ffd7 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/mucus.json @@ -0,0 +1,25 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_button.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_button.json new file mode 100644 index 00000000..cc738c5c --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_button.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_door.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_door.json new file mode 100644 index 00000000..d992154d --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_door.json @@ -0,0 +1,30 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence.json new file mode 100644 index 00000000..3388ad18 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence_gate.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence_gate.json new file mode 100644 index 00000000..aeb691fc --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fence_gate.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_hanging_sign.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_hanging_sign.json new file mode 100644 index 00000000..7754bba0 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_log.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_log.json new file mode 100644 index 00000000..0b91f557 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_log.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_planks.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_planks.json new file mode 100644 index 00000000..489c3e34 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_planks.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_pressure_plate.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_pressure_plate.json new file mode 100644 index 00000000..c9f9152d --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_pressure_plate.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sapling.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sapling.json new file mode 100644 index 00000000..dd2b5842 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sapling.json @@ -0,0 +1,15 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sign.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sign.json new file mode 100644 index 00000000..67baa54a --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_sign.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_slab.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_slab.json new file mode 100644 index 00000000..c2c76ef4 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_slab.json @@ -0,0 +1,35 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_stairs.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_stairs.json new file mode 100644 index 00000000..e06e6af0 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_stairs.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_trapdoor.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_trapdoor.json new file mode 100644 index 00000000..6c570532 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_trapdoor.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_veil.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_veil.json new file mode 100644 index 00000000..dfb8cce5 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_veil.json @@ -0,0 +1,16 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_hanging_sign.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_hanging_sign.json new file mode 100644 index 00000000..5a053f35 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_sign.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_sign.json new file mode 100644 index 00000000..ef0298e8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wall_sign.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wood.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wood.json new file mode 100644 index 00000000..cb9de74b --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_wood.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_pillar.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_pillar.json new file mode 100644 index 00000000..1afc0284 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nyxite_pillar.json @@ -0,0 +1,20 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_slab.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_slab.json new file mode 100644 index 00000000..624081d1 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_slab.json @@ -0,0 +1,44 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_stairs.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_stairs.json new file mode 100644 index 00000000..e96674d5 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/polished_antimetal_stairs.json @@ -0,0 +1,20 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/potted_nadir_sapling.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/potted_nadir_sapling.json new file mode 100644 index 00000000..004fffd6 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/potted_nadir_sapling.json @@ -0,0 +1,24 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_pillar.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_pillar.json new file mode 100644 index 00000000..0197c093 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/shellstone_pillar.json @@ -0,0 +1,20 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_log.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_log.json new file mode 100644 index 00000000..8c1d3eca --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_log.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_wood.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_wood.json new file mode 100644 index 00000000..72481f44 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_nadir_wood.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/loot_table/blocks/upper.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/upper.json new file mode 100644 index 00000000..b5c904fa --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/upper.json @@ -0,0 +1,20 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/antigravel.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/antigravel.json new file mode 100644 index 00000000..47b5517f --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/antigravel.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/antimetal_slab.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/antimetal_slab.json new file mode 100644 index 00000000..8df63a72 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/antimetal_slab.json @@ -0,0 +1,16 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/antimetal_slab_from_antimetal_stonecutting.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/antimetal_slab_from_antimetal_stonecutting.json new file mode 100644 index 00000000..0a97eb77 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/antimetal_slab_from_antimetal_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:antimetal" + }, + "result": { + "id": "antarchy:antimetal_slab" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/antimetal_stairs.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/antimetal_stairs.json new file mode 100644 index 00000000..081db5ac --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/antimetal_stairs.json @@ -0,0 +1,18 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/antimetal_stairs_from_antimetal_stonecutting.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/antimetal_stairs_from_antimetal_stonecutting.json new file mode 100644 index 00000000..67998784 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/antimetal_stairs_from_antimetal_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:antimetal" + }, + "result": { + "id": "antarchy:antimetal_stairs" + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/antiwater_bucket.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/antiwater_bucket.json new file mode 100644 index 00000000..14d0c986 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/antiwater_bucket.json @@ -0,0 +1,11 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/bluestone_lamp.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/bluestone_lamp.json new file mode 100644 index 00000000..06769bbb --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/bluestone_lamp.json @@ -0,0 +1,17 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/broodstone_pillar.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/broodstone_pillar.json new file mode 100644 index 00000000..70308c32 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/broodstone_pillar.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_broodstone" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "id": "antarchy:broodstone_pillar", + "count": 2 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/broodstone_pillar_from_broodstone_stonecutting.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/broodstone_pillar_from_broodstone_stonecutting.json new file mode 100644 index 00000000..e128426b --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/broodstone_pillar_from_broodstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:broodstone" + }, + "result": { + "id": "antarchy:broodstone_pillar" + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smelting.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smelting.json new file mode 100644 index 00000000..1b0c153b --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smelting.json @@ -0,0 +1,12 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smoking.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smoking.json new file mode 100644 index 00000000..2dd56eee --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/kraken_kalamari_from_smoking.json @@ -0,0 +1,12 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_boat.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_boat.json new file mode 100644 index 00000000..c18b5ebd --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_boat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "#": { + "item": "antarchy:nadir_planks" + } + }, + "pattern": [ + "# #", + "###" + ], + "result": { + "count": 1, + "id": "antarchy:nadir_boat" + } +} + diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_button.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_button.json new file mode 100644 index 00000000..7a67d94c --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_button.json @@ -0,0 +1,14 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_chest_boat.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_chest_boat.json new file mode 100644 index 00000000..e86215d4 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_chest_boat.json @@ -0,0 +1,17 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_door.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_door.json new file mode 100644 index 00000000..332d6cad --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_door.json @@ -0,0 +1,19 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence.json new file mode 100644 index 00000000..3ef5d1d4 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence_gate.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence_gate.json new file mode 100644 index 00000000..22069690 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_fence_gate.json @@ -0,0 +1,21 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_hanging_sign.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_hanging_sign.json new file mode 100644 index 00000000..b057918e --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_hanging_sign.json @@ -0,0 +1,22 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_planks.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_planks.json new file mode 100644 index 00000000..1fd4195f --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_planks.json @@ -0,0 +1,14 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_pressure_plate.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_pressure_plate.json new file mode 100644 index 00000000..5286fecd --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_pressure_plate.json @@ -0,0 +1,17 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_sign.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_sign.json new file mode 100644 index 00000000..6bd91309 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_sign.json @@ -0,0 +1,22 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_slab.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_slab.json new file mode 100644 index 00000000..bdb63f65 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_slab.json @@ -0,0 +1,17 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_stairs.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_stairs.json new file mode 100644 index 00000000..fbcda572 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_stairs.json @@ -0,0 +1,19 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_trapdoor.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_trapdoor.json new file mode 100644 index 00000000..920c954d --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_trapdoor.json @@ -0,0 +1,18 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_wood.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_wood.json new file mode 100644 index 00000000..ba48c303 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/nadir_wood.json @@ -0,0 +1,18 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nadir/stripped_nadir_wood.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/stripped_nadir_wood.json new file mode 100644 index 00000000..b9b3c293 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nadir/stripped_nadir_wood.json @@ -0,0 +1,18 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/nyxite_pillar.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nyxite_pillar.json new file mode 100644 index 00000000..b391cff7 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nyxite_pillar.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_nyxite" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "id": "antarchy:nyxite_pillar", + "count": 2 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/nyxite_pillar_from_nyxite_stonecutting.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/nyxite_pillar_from_nyxite_stonecutting.json new file mode 100644 index 00000000..4aa56abc --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/nyxite_pillar_from_nyxite_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:nyxite" + }, + "result": { + "id": "antarchy:nyxite_pillar" + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab.json new file mode 100644 index 00000000..9e22ced8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab.json @@ -0,0 +1,16 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab_from_polished_antimetal_stonecutting.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab_from_polished_antimetal_stonecutting.json new file mode 100644 index 00000000..679f2db3 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_slab_from_polished_antimetal_stonecutting.json @@ -0,0 +1,9 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs.json new file mode 100644 index 00000000..00a089bc --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs.json @@ -0,0 +1,18 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs_from_polished_antimetal_stonecutting.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs_from_polished_antimetal_stonecutting.json new file mode 100644 index 00000000..c4c371aa --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/polished_antimetal_stairs_from_polished_antimetal_stonecutting.json @@ -0,0 +1,9 @@ +{ + "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.21.1/src/main/resources/data/antarchy/recipe/shellstone_pillar.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/shellstone_pillar.json new file mode 100644 index 00000000..b44593c8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/shellstone_pillar.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:polished_shellstone" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "id": "antarchy:shellstone_pillar", + "count": 2 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/shellstone_pillar_from_shellstone_stonecutting.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/shellstone_pillar_from_shellstone_stonecutting.json new file mode 100644 index 00000000..8f2b2ad6 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/shellstone_pillar_from_shellstone_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:shellstone" + }, + "result": { + "id": "antarchy:shellstone_pillar" + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/upper.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/upper.json new file mode 100644 index 00000000..5163a8cd --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/upper.json @@ -0,0 +1,17 @@ +{ + "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.21.1/src/main/resources/data/antarchy/tags/block/nadir_logs.json b/common-1.21.1/src/main/resources/data/antarchy/tags/block/nadir_logs.json new file mode 100644 index 00000000..23dece7d --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/block/nadir_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:nadir_log", + "antarchy:nadir_wood", + "antarchy:stripped_nadir_log", + "antarchy:stripped_nadir_wood" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/block/rainbow_portal_frames.json b/common-1.21.1/src/main/resources/data/antarchy/tags/block/rainbow_portal_frames.json new file mode 100644 index 00000000..129433a5 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/block/rainbow_portal_frames.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:obsidian" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_common_spawns.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_common_spawns.json new file mode 100644 index 00000000..5a2b9482 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_common_spawns.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:lucid" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_rare_spawns.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_rare_spawns.json new file mode 100644 index 00000000..479d4395 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/dimensional_tear_rare_spawns.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:nightmare" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/item/nadir_logs.json b/common-1.21.1/src/main/resources/data/antarchy/tags/item/nadir_logs.json new file mode 100644 index 00000000..23dece7d --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/item/nadir_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:nadir_log", + "antarchy:nadir_wood", + "antarchy:stripped_nadir_log", + "antarchy:stripped_nadir_wood" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/normal.json b/common-1.21.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/normal.json new file mode 100644 index 00000000..44c5275e --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/normal.json @@ -0,0 +1,16 @@ +{ + "simultaneous_mobs": 1.0, + "simultaneous_mobs_added_per_player": 0.0, + "spawn_potentials": [ + { + "data": { + "entity": { + "id": "antarchy:basilisk" + } + }, + "weight": 1 + } + ], + "ticks_between_spawn": 60, + "total_mobs": 5.0 +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/ominous.json b/common-1.21.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/ominous.json new file mode 100644 index 00000000..79834927 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/trial_spawner/basilisk_lair/basilisk/ominous.json @@ -0,0 +1,22 @@ +{ + "loot_tables_to_eject": [ + { + "data": "antarchy:spawners/basilisk_lair/hard", + "weight": 1 + } + ], + "simultaneous_mobs": 1.0, + "simultaneous_mobs_added_per_player": 0.0, + "spawn_potentials": [ + { + "data": { + "entity": { + "id": "antarchy:basilisk" + } + }, + "weight": 1 + } + ], + "ticks_between_spawn": 60, + "total_mobs": 8.0 +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/thoraxis_underside.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/thoraxis_underside.json new file mode 100644 index 00000000..4f59858f --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/thoraxis_underside.json @@ -0,0 +1,46 @@ +{ + "has_precipitation": false, + "temperature": 2.0, + "downfall": 0.0, + "effects": { + "fog_color": 786448, + "water_color": 327680, + "water_fog_color": 0, + "sky_color": 262150, + "music": { + "sound": "antarchy:music.game.thoraxis", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [] + ], + "spawn_costs": {}, + "creature_spawn_probability": 0.0, + "spawners": { + "monster": [], + "creature": [], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/dimensional_tear.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/dimensional_tear.json new file mode 100644 index 00000000..cde1b426 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/dimensional_tear.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:dimensional_tear", + "config": {} +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_clouds.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_clouds.json new file mode 100644 index 00000000..c168bd7a --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_clouds.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_clouds", + "config": {} +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/density_function/thoraxis_underside_density.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/density_function/thoraxis_underside_density.json new file mode 100644 index 00000000..f4838bf7 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/density_function/thoraxis_underside_density.json @@ -0,0 +1,39 @@ +{ + "type": "minecraft:squeeze", + "argument": { + "type": "minecraft:mul", + "argument1": 0.72, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": -256, + "to_y": -16, + "from_value": -2.0, + "to_value": 1.05 + }, + "argument2": { + "type": "minecraft:mul", + "argument1": 0.42, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:mul", + "argument1": 0.9, + "argument2": "antarchy:thoraxis_underside_noise" + }, + "argument2": { + "type": "minecraft:mul", + "argument1": 0.35, + "argument2": { + "type": "minecraft:noise", + "noise": "minecraft:surface", + "xz_scale": 1.0, + "y_scale": 0.0 + } + } + } + } + } + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/density_function/thoraxis_underside_noise.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/density_function/thoraxis_underside_noise.json new file mode 100644 index 00000000..591bc83f --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/density_function/thoraxis_underside_noise.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:old_blended_noise", + "smear_scale_multiplier": 4.0, + "xz_factor": 80.0, + "xz_scale": 0.12, + "y_factor": 64.0, + "y_scale": 0.08 +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json index d4f3902f..8159dfc8 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json +++ b/common-1.21.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": -8, + "to_value": 1.0, + "to_y": 24 }, + "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,37 @@ } } }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": -1 + }, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 4 + }, + "surface_depth_multiplier": 0 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + } + }, { "type": "minecraft:condition", "if_true": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/dimensional_tears.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/dimensional_tears.json new file mode 100644 index 00000000..f2b49a38 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/dimensional_tears.json @@ -0,0 +1,23 @@ +{ + "feature": "antarchy:dimensional_tear", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 96 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { "absolute": 24 }, + "max_inclusive": { "absolute": 170 } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_clouds.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_clouds.json new file mode 100644 index 00000000..2072b577 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_clouds.json @@ -0,0 +1,31 @@ +{ + "feature": "antarchy:elythia_clouds", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 16 + }, + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 380 + }, + "max_inclusive": { + "absolute": 430 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} 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 b40ff428..e62e4ba6 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 @@ -288,6 +288,7 @@ public final class AntarchyFabricContent { 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.setSpiritApple(() -> AntarchyFabricItems.SPIRIT_APPLE.get()); 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 8d6d3437..7b68d1c8 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 @@ -82,6 +82,7 @@ public final class AntarchyFabricEvents { ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORNEA_EAR.get(), 0.65f); 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.CORN.get(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORN_SEEDS.get(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.PEACH.get(), 0.65f); 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 7b807144..a028df0e 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 @@ -8,6 +8,7 @@ import net.minecraft.world.level.block.state.properties.WoodType; 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"); private AntarchyWoodTypes() { } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/TigerEyeFabricManager.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/TigerEyeFabricManager.java new file mode 100644 index 00000000..83aa077e --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/TigerEyeFabricManager.java @@ -0,0 +1,51 @@ +package com.craisinlord.antarchy.fabric; + +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; +import net.fabricmc.fabric.api.entity.event.v1.ServerEntityWorldChangeEvents; +import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; +import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.fabricmc.fabric.api.networking.v1.EntityTrackingEvents; +import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; + +public final class TigerEyeFabricManager { + private TigerEyeFabricManager() { + } + + public static void register() { + ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> TigerEyeCamouflageSync.sync(handler.player)); + ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> + TigerEyeCamouflageController.deactivate(handler.player, false)); + ServerPlayerEvents.AFTER_RESPAWN.register((oldPlayer, newPlayer, alive) -> { + TigerEyeCamouflageController.deactivate(newPlayer, false); + TigerEyeCamouflageSync.sync(newPlayer); + }); + ServerEntityWorldChangeEvents.AFTER_PLAYER_CHANGE_WORLD.register((player, origin, destination) -> { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + }); + EntityTrackingEvents.START_TRACKING.register((trackedEntity, player) -> { + if (trackedEntity instanceof ServerPlayer trackedPlayer) { + TigerEyeCamouflageSync.syncTo(player, trackedPlayer); + } + }); + ServerLivingEntityEvents.AFTER_DEATH.register((entity, damageSource) -> { + if (entity instanceof ServerPlayer player) { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + } + }); + ServerTickEvents.END_SERVER_TICK.register(server -> { + for (ServerLevel level : server.getAllLevels()) { + for (ServerPlayer player : level.players()) { + if (TigerEyeCamouflageController.validateOrDeactivate(player)) { + TigerEyeCamouflageSync.sync(player); + } + } + } + }); + } +} 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 16bcf13e..0822fcfe 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 @@ -106,6 +106,8 @@ public final class AntarchyFabricClientBootstrap { 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); @@ -121,6 +123,7 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), NightmareRenderer::new); 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.LUCID.get(), LucidRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.BED_BUG.get(), BedBugRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.WASP.get(), WaspRenderer::new); @@ -309,6 +312,11 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_TRAPDOOR.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_SAPLING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.POTTED_PEACH_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NADIR_VEIL.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NADIR_DOOR.get(), RenderType.cutout()); + 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.DUPLICATOR_SAPLING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PINK_MILKWEED.get(), RenderType.cutout()); 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 new file mode 100644 index 00000000..67475df2 --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.fabric.client; + +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.fabric.network.AntarchyFabricClientNetworking; +import net.minecraft.client.Minecraft; + +public final class TigerEyeCamouflageClientHandler { + private TigerEyeCamouflageClientHandler() { + } + + public static void tick() { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null || minecraft.level == null) { + TigerEyeCamouflageClientState.clear(); + return; + } + + while (AntarchyKeyBindings.consumeTigerEyeCamouflagePressed()) { + AntarchyFabricClientNetworking.sendToServer( + new ToggleTigerEyeCamouflagePayload(), + ToggleTigerEyeCamouflagePayload.STREAM_CODEC, + ToggleTigerEyeCamouflagePayload.TYPE + ); + } + } + + public static void clearClientCaches() { + TigerEyeCamouflageClientState.clear(); + TigerEyeCamouflageTextureResolver.clearCache(); + } +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/BrewingStandCustomIngredientMixin.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/BrewingStandCustomIngredientMixin.java new file mode 100644 index 00000000..bf41044d --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/BrewingStandCustomIngredientMixin.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.fabric.mixin; + +import com.craisinlord.antarchy.content.recipe.CustomBrewingRecipes; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BrewingStandBlockEntity; +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(BrewingStandBlockEntity.class) +public abstract class BrewingStandCustomIngredientMixin { + @Inject(method = "canPlaceItem", at = @At("HEAD"), cancellable = true) + private void antarchy$canPlaceCustomBrewingItem(int slot, ItemStack stack, CallbackInfoReturnable cir) { + if (slot == 3) { + if (CustomBrewingRecipes.isCustomIngredient(stack)) { + cir.setReturnValue(true); + } + } else if (slot >= 0 && slot <= 2) { + if (CustomBrewingRecipes.isCustomContainer(stack)) { + cir.setReturnValue(true); + } + } + } +} 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 deleted file mode 100644 index e052c9bd..00000000 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BrutalflyElytraExperienceBarMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -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.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.CallbackInfoReturnable; - -@Mixin(Gui.class) -public abstract class BrutalflyElytraExperienceBarMixin { - @Inject(method = "isExperienceBarVisible", at = @At("RETURN"), cancellable = true) - private void antarchy$hideExperienceBarForBrutalfly(CallbackInfoReturnable cir) { - LocalPlayer player = Minecraft.getInstance().player; - if (player != null && BrutalflyElytraItem.isWearingBrutalflyElytra(player) && player.isFallFlying()) { - cir.setReturnValue(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 new file mode 100644 index 00000000..3209846d --- /dev/null +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/AmendmentRareOresMixin.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.fabric.mixin.infinity; + +import net.lerariemann.infinity.util.config.Amendment; +import net.lerariemann.infinity.util.core.ConfigType; +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.ArrayList; +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) { + Map> data = cir.getReturnValue(); + List list = data.computeIfAbsent(ConfigType.BLOCKS, k -> new ArrayList<>()); + list.add(new Amendment( + ConfigType.BLOCKS, + new Amendment.UniversalModSelector(), + new Amendment.MatchingBlockTagSelector("antarchy:infinity_dimension_rare_ores"), + new Amendment.SetValue(0.02) + )); + } +} 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 ca89b264..ed66d071 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 @@ -254,6 +254,84 @@ public final class AntarchyFabricBlocks { () -> new net.minecraft.world.level.block.WallHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_HANGING_SIGN), AntarchyWoodTypes.PEACH)); + public static final DeferredBlock NADIR_LOG = BLOCKS.register("nadir_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LOG))); + + + public static final DeferredBlock NADIR_WOOD = BLOCKS.register("nadir_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WOOD))); + + + public static final DeferredBlock STRIPPED_NADIR_LOG = BLOCKS.register("stripped_nadir_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_LOG))); + + + public static final DeferredBlock STRIPPED_NADIR_WOOD = BLOCKS.register("stripped_nadir_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_WOOD))); + + + public static final DeferredBlock NADIR_PLANKS = BLOCKS.register("nadir_planks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.JUNGLE_PLANKS))); + + + public static final DeferredBlock NADIR_STAIRS = BLOCKS.register("nadir_stairs", + () -> new net.minecraft.world.level.block.StairBlock(NADIR_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.JUNGLE_STAIRS))); + + + public static final DeferredBlock NADIR_SLAB = BLOCKS.register("nadir_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SLAB))); + + + public static final DeferredBlock NADIR_FENCE = BLOCKS.register("nadir_fence", + () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_FENCE))); + + + public static final DeferredBlock NADIR_FENCE_GATE = BLOCKS.register("nadir_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 NADIR_DOOR = BLOCKS.register("nadir_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 NADIR_TRAPDOOR = BLOCKS.register("nadir_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 NADIR_PRESSURE_PLATE = BLOCKS.register("nadir_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 NADIR_BUTTON = BLOCKS.register("nadir_button", + () -> 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_SAPLING = BLOCKS.register("nadir_sapling", + () -> new com.craisinlord.antarchy.content.block.NadirSaplingBlock(BlockBehaviour.Properties.copy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + public static final DeferredBlock POTTED_NADIR_SAPLING = BLOCKS.register("potted_nadir_sapling", + () -> new net.minecraft.world.level.block.FlowerPotBlock(NADIR_SAPLING.get(), BlockBehaviour.Properties.copy(Blocks.POTTED_DANDELION))); + + + public static final DeferredBlock NADIR_SIGN = BLOCKS.register("nadir_sign", + () -> new net.minecraft.world.level.block.StandingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SIGN), AntarchyWoodTypes.NADIR)); + + + public static final DeferredBlock NADIR_WALL_SIGN = BLOCKS.register("nadir_wall_sign", + () -> new net.minecraft.world.level.block.WallSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_SIGN), AntarchyWoodTypes.NADIR)); + + + public static final DeferredBlock NADIR_HANGING_SIGN = BLOCKS.register("nadir_hanging_sign", + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_HANGING_SIGN), AntarchyWoodTypes.NADIR)); + + + public static final DeferredBlock NADIR_WALL_HANGING_SIGN = BLOCKS.register("nadir_wall_hanging_sign", + () -> new net.minecraft.world.level.block.WallHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_HANGING_SIGN), AntarchyWoodTypes.NADIR)); + + public static final DeferredBlock DUPLICATOR_SAPLING = BLOCKS.register("duplicator_sapling", () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.copy(Blocks.OAK_SAPLING).randomTicks().noCollission())); 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 0d69b52e..a84f7c04 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 @@ -23,8 +23,11 @@ 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.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.NadirBoatEntity; +import com.craisinlord.antarchy.content.entity.NadirChestBoatEntity; 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.entity.AlphaMantisEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; import com.craisinlord.antarchy.content.entity.RollyPollyEntity; @@ -136,6 +139,22 @@ public final class AntarchyFabricEntities { .build("peach_chest_boat")); + public static final DeferredHolder, EntityType> NADIR_BOAT_ENTITY = ENTITY_TYPES.register("nadir_boat", + () -> EntityType.Builder.of(NadirBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("nadir_boat")); + + + public static final DeferredHolder, EntityType> NADIR_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("nadir_chest_boat", + () -> EntityType.Builder.of(NadirChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("nadir_chest_boat")); + + public static final DeferredHolder, EntityType> MOLEVORE = ENTITY_TYPES.register("molevore", () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) .sized(1.95F, 1.1F) @@ -434,6 +453,14 @@ 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> TORETERROR = ENTITY_TYPES.register("toreterror", () -> EntityType.Builder.of(ToreterrorEntity::new, MobCategory.MONSTER) .sized(2.0F, 3.0F) 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 33b744fb..16e1f94e 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 @@ -207,6 +207,51 @@ public final class AntarchyFabricItems { public static final DeferredItem PEACH_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_SAPLING); + public static final DeferredItem NADIR_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_LOG); + + + public static final DeferredItem NADIR_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_WOOD); + + + public static final DeferredItem STRIPPED_NADIR_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_NADIR_LOG); + + + public static final DeferredItem STRIPPED_NADIR_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_NADIR_WOOD); + + + public static final DeferredItem NADIR_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_PLANKS); + + + public static final DeferredItem NADIR_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_STAIRS); + + + public static final DeferredItem NADIR_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_SLAB); + + + public static final DeferredItem NADIR_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_FENCE); + + + public static final DeferredItem NADIR_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_FENCE_GATE); + + + public static final DeferredItem NADIR_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_DOOR); + + + public static final DeferredItem NADIR_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_TRAPDOOR); + + + public static final DeferredItem NADIR_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_PRESSURE_PLATE); + + + public static final DeferredItem NADIR_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_BUTTON); + + + public static final DeferredItem NADIR_VEIL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_VEIL); + + + public static final DeferredItem NADIR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_SAPLING); + + public static final DeferredItem ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ORANGE_MILKWEED); @@ -259,6 +304,22 @@ public final class AntarchyFabricItems { () -> new com.craisinlord.antarchy.content.item.PeachChestBoatItem(AntarchyFabricEntities.PEACH_CHEST_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + public static final DeferredItem NADIR_SIGN_ITEM = ITEMS.register("nadir_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyFabricBlocks.NADIR_SIGN.get(), AntarchyFabricBlocks.NADIR_WALL_SIGN.get())); + + + public static final DeferredItem NADIR_HANGING_SIGN_ITEM = ITEMS.register("nadir_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyFabricBlocks.NADIR_HANGING_SIGN.get(), AntarchyFabricBlocks.NADIR_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + + + public static final DeferredItem NADIR_BOAT = ITEMS.register("nadir_boat", + () -> new com.craisinlord.antarchy.content.item.NadirBoatOnlyItem(AntarchyFabricEntities.NADIR_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + + + public static final DeferredItem NADIR_CHEST_BOAT = ITEMS.register("nadir_chest_boat", + () -> new com.craisinlord.antarchy.content.item.NadirChestBoatItem(AntarchyFabricEntities.NADIR_CHEST_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + + public static final DeferredItem CRITTER_CAGE = ITEMS.register("critter_cage", () -> new CritterCageItem(new Item.Properties().stacksTo(16))); 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 d2950863..7d0d45a7 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 @@ -18,6 +18,7 @@ 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.PotentNyxiteFeature; import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; @@ -769,6 +770,10 @@ public final class AntarchyFabricMisc { () -> 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)); diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json new file mode 100644 index 00000000..fbc1ddec --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/antiwater_bucket" + } +} 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 new file mode 100644 index 00000000..91de2a88 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/attitude_adjuster_held" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json new file mode 100644 index 00000000..8c6bdd49 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/battle_axe_held" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json new file mode 100644 index 00000000..ea1c3aa6 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/big_bertha_held" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json new file mode 100644 index 00000000..30a26675 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/bile_bucket" + } +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json new file mode 100644 index 00000000..493bed03 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/gravity_gun_held_geo" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json new file mode 100644 index 00000000..32b7d7c4 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/grow_ray_held_geo" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json new file mode 100644 index 00000000..c0eafeb0 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/ichor_bucket" + } +} 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 new file mode 100644 index 00000000..9a00568c --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/krakens_grasp_held" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json new file mode 100644 index 00000000..5b384dbc --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/lumen_bucket" + } +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json new file mode 100644 index 00000000..9d445ed8 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/rpo_launcher_held_geo" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json new file mode 100644 index 00000000..3e07ff37 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/shrink_ray_held_geo" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json new file mode 100644 index 00000000..91978806 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/squidzooka_held_geo" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json new file mode 100644 index 00000000..199aa968 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/water_cannon_held_geo" +} 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/fluid/water.json new file mode 100644 index 00000000..86dde3df --- /dev/null +++ b/fabric-1.20.1/src/main/resources/data/minecraft/tags/fluid/water.json @@ -0,0 +1,3 @@ +{ + "values": [] +} diff --git a/fabric-1.21.1/build.gradle b/fabric-1.21.1/build.gradle index 1421ceaf..a8ca845a 100644 --- a/fabric-1.21.1/build.gradle +++ b/fabric-1.21.1/build.gradle @@ -40,6 +40,7 @@ dependencies { modImplementation "software.bernie.geckolib:geckolib-fabric-1.21.1:${geckolib_version}" modCompileOnly("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_fabric}") modLocalRuntime("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_fabric}") + modLocalRuntime("dev.architectury:architectury-fabric:${architectury_api_version}") compileOnly "mezz.jei:jei-1.21.1-common-api:${jei_version}" compileOnly "mezz.jei:jei-1.21.1-fabric-api:${jei_version}" modLocalRuntime "mezz.jei:jei-1.21.1-fabric:${jei_version}" @@ -100,6 +101,18 @@ tasks.named('processResources', ProcessResources).configure { } } +tasks.matching { it.name in ["runClient", "runServer", "runDatagen"] }.configureEach { + doFirst { + def infinityConfigPrefix = "config/common/" + zipTree(rootProject.file("infinite_dimensions_jars/infinity-2.7.2+1.21.1-fabric.jar")).visit { details -> + if (!details.directory && details.relativePath.pathString.startsWith(infinityConfigPrefix)) { + def targetPath = details.relativePath.pathString.substring(infinityConfigPrefix.length()) + file("run/config/infinity/${targetPath}").parentFile.mkdirs() + } + } + } +} + publishing { publications { mavenJava(MavenPublication) { diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index ec8ac6ea..1e8dacd7 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -21,6 +21,7 @@ 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.item.MinersDreamExcavationManager; +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; @@ -148,6 +149,7 @@ public final class AntarchyFabricEvents { for (ServerLevel level : server.getAllLevels()) { CavarynHordeManager.tick(level); com.craisinlord.antarchy.content.horde.CavarynCreatureSpawner.tick(level); + ThoraxisUndersideManager.tick(level); tickInvertedPlayers(level, activeThisTick); tickDuctTapePlayers(level); tickIchorPlayers(level); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/BrewingStandCustomIngredientMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/BrewingStandCustomIngredientMixin.java new file mode 100644 index 00000000..bf41044d --- /dev/null +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/BrewingStandCustomIngredientMixin.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.fabric.mixin; + +import com.craisinlord.antarchy.content.recipe.CustomBrewingRecipes; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BrewingStandBlockEntity; +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(BrewingStandBlockEntity.class) +public abstract class BrewingStandCustomIngredientMixin { + @Inject(method = "canPlaceItem", at = @At("HEAD"), cancellable = true) + private void antarchy$canPlaceCustomBrewingItem(int slot, ItemStack stack, CallbackInfoReturnable cir) { + if (slot == 3) { + if (CustomBrewingRecipes.isCustomIngredient(stack)) { + cir.setReturnValue(true); + } + } else if (slot >= 0 && slot <= 2) { + if (CustomBrewingRecipes.isCustomContainer(stack)) { + cir.setReturnValue(true); + } + } + } +} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/AmendmentRareOresMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/AmendmentRareOresMixin.java new file mode 100644 index 00000000..3209846d --- /dev/null +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/AmendmentRareOresMixin.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.fabric.mixin.infinity; + +import net.lerariemann.infinity.util.config.Amendment; +import net.lerariemann.infinity.util.core.ConfigType; +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.ArrayList; +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) { + Map> data = cir.getReturnValue(); + List list = data.computeIfAbsent(ConfigType.BLOCKS, k -> new ArrayList<>()); + list.add(new Amendment( + ConfigType.BLOCKS, + new Amendment.UniversalModSelector(), + new Amendment.MatchingBlockTagSelector("antarchy:infinity_dimension_rare_ores"), + new Amendment.SetValue(0.02) + )); + } +} 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 72754c51..c039f77c 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 @@ -357,6 +357,7 @@ public class AntarchyForge { 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.setSpiritApple(() -> AntarchyForgeItems.SPIRIT_APPLE.get()); 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 new file mode 100644 index 00000000..67dcd9eb --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeEvents.java @@ -0,0 +1,22 @@ +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 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()); + CaterpillarCommand.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 3a928e98..f9f20f63 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 @@ -30,10 +30,10 @@ public final class AntarchyForgeFluidTypes { 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 ANTIWATER_STILL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_still"); - private static final ResourceLocation ANTIWATER_FLOW = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_flow"); - private static final ResourceLocation BILE_STILL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_still"); - private static final ResourceLocation BILE_FLOW = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_flowing"); + 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 DeferredRegister FLUID_TYPES = DeferredRegister.create(ForgeRegistries.Keys.FLUID_TYPES, Antarchy.MODID); @@ -225,12 +225,12 @@ public final class AntarchyForgeFluidTypes { consumer.accept(new IClientFluidTypeExtensions() { @Override public ResourceLocation getStillTexture() { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_still"); + return new ResourceLocation(Antarchy.MODID, "block/lumen_still"); } @Override public ResourceLocation getFlowingTexture() { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_flow"); + return new ResourceLocation(Antarchy.MODID, "block/lumen_flow"); } @Override 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 5718d4fe..877ae1b6 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 @@ -7,6 +7,7 @@ import net.minecraft.world.level.block.state.properties.WoodType; 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"); private AntarchyWoodTypes() { } 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 b93e2d11..833978b7 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 @@ -67,19 +67,21 @@ import com.craisinlord.antarchy.content.client.AntarchyGeoItemRenderer; @Mod.EventBusSubscriber(modid = Antarchy.MODID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public final class AntarchyForgeClient { - private static final ResourceLocation DR_TRAYAURUS_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dr_trayaurus.png"); - private static final ResourceLocation OURANWOOD_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png"); - private static final ResourceLocation OURANWOOD_CHEST_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png"); - private static final ResourceLocation PEACH_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/peach.png"); - private static final ResourceLocation PEACH_CHEST_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/peach.png"); + private static final ResourceLocation DR_TRAYAURUS_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/dr_trayaurus.png"); + private static final ResourceLocation OURANWOOD_BOAT_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/boat/ouranwood.png"); + private static final ResourceLocation OURANWOOD_CHEST_BOAT_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png"); + private static final ResourceLocation PEACH_BOAT_TEXTURE = new ResourceLocation(Antarchy.MODID, "textures/entity/boat/peach.png"); + 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 ANTIWATER_STILL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_still"); - private static final ResourceLocation ANTIWATER_FLOW = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_flow"); - private static final ResourceLocation BILE_STILL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_still"); - private static final ResourceLocation BILE_FLOW = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_flowing"); + 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 AntarchyForgeClient() { } @@ -107,6 +109,8 @@ public final class AntarchyForgeClient { 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.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))); @@ -121,6 +125,7 @@ public final class AntarchyForgeClient { 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.LUCID.get(), context -> withParalyzedGeoLayer(new LucidRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.BED_BUG.get(), context -> withParalyzedGeoLayer(new BedBugRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.WASP.get(), context -> withParalyzedGeoLayer(new WaspRenderer(context))); @@ -359,6 +364,11 @@ public final class AntarchyForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.PEACH_TRAPDOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.PEACH_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.POTTED_PEACH_SAPLING.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.NADIR_VEIL.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.NADIR_DOOR.get(), RenderType.cutout()); + 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.DUPLICATOR_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyForgeBlocks.PINK_MILKWEED.get(), RenderType.cutout()); @@ -484,7 +494,7 @@ public final class AntarchyForgeClient { ); ItemProperties.register( AntarchyForgeItems.CRITTER_CAGE.get(), - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "critter_cage_state"), + new ResourceLocation(Antarchy.MODID, "critter_cage_state"), (stack, level, entity, seed) -> { if (!(stack.getItem() instanceof com.craisinlord.antarchy.content.item.CritterCageItem cage)) { return 0.0F; 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 new file mode 100644 index 00000000..7e631b0e --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/SizeRaySoundHandlerForge.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.forge.client; + +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; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class SizeRaySoundHandlerForge { + private SizeRaySoundHandlerForge() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + 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/TigerEyeCamouflageClientHandler.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TigerEyeCamouflageClientHandler.java new file mode 100644 index 00000000..57f3f629 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/TigerEyeCamouflageClientHandler.java @@ -0,0 +1,39 @@ +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.event.TickEvent; + +@Mod.EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class TigerEyeCamouflageClientHandler { + private 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(); + return; + } + + while (AntarchyKeyBindings.consumeTigerEyeCamouflagePressed()) { + AntarchyForgeNetworkCore.sendToServer(new ToggleTigerEyeCamouflagePayload()); + } + } + + public static void clearClientCaches() { + TigerEyeCamouflageClientState.clear(); + TigerEyeCamouflageTextureResolver.clearCache(); + } +} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/compat/SablePhysicsColliderBlockGetterMixin.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/compat/SablePhysicsColliderBlockGetterMixin.java new file mode 100644 index 00000000..b1b752fc --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/compat/SablePhysicsColliderBlockGetterMixin.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.forge.mixins.compat; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +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; + +@Pseudo +@Mixin(targets = "dev.ryanhcode.sable.physics.impl.rapier.collider.PhysicsColliderBlockGetter", remap = false) +public class SablePhysicsColliderBlockGetterMixin { + @Shadow + private BlockState state; + + @Inject(method = "getFluidState", at = @At("HEAD"), cancellable = true, remap = false) + private void antarchy$nullSafeFluidState(BlockPos pos, CallbackInfoReturnable cir) { + if (this.state == null) { + cir.setReturnValue(Fluids.EMPTY.defaultFluidState()); + } + } +} 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 new file mode 100644 index 00000000..357333fa --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/AmendmentRareOresMixin.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.forge.mixins.infinity; + +import net.lerariemann.infinity.util.config.Amendment; +import net.lerariemann.infinity.util.core.ConfigType; +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.ArrayList; +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) { + Map> data = cir.getReturnValue(); + List list = data.computeIfAbsent(ConfigType.BLOCKS, k -> new ArrayList<>()); + list.add(new Amendment( + ConfigType.BLOCKS, + new Amendment.UniversalModSelector(), + new Amendment.MatchingBlockTagSelector("antarchy:infinity_dimension_rare_ores"), + new Amendment.SetValue(0.02) + )); + } +} 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 new file mode 100644 index 00000000..2a037618 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/infinity/PortalCreatorMixin.java @@ -0,0 +1,43 @@ +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/item/BucketItemThoraxisWaterMixin.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/item/BucketItemThoraxisWaterMixin.java index 9f5b7822..0263ee00 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/item/BucketItemThoraxisWaterMixin.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/mixins/item/BucketItemThoraxisWaterMixin.java @@ -24,7 +24,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(BucketItem.class) public abstract class BucketItemThoraxisWaterMixin { private static final ResourceLocation THORAXIS_DIMENSION_ID = - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "thoraxis"); + new ResourceLocation(Antarchy.MODID, "thoraxis"); @Shadow @Final 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 new file mode 100644 index 00000000..7d54c681 --- /dev/null +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/network/TigerEyeNetworking.java @@ -0,0 +1,39 @@ +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 c8147b5b..eebc33cb 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 @@ -150,6 +150,46 @@ public final class AntarchyForgeBlocks { () -> new CeilingHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_HANGING_SIGN), AntarchyWoodTypes.PEACH)); public static final RegistryObject PEACH_WALL_HANGING_SIGN = BLOCKS.register("peach_wall_hanging_sign", () -> new WallHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_HANGING_SIGN), AntarchyWoodTypes.PEACH)); + public static final RegistryObject NADIR_LOG = BLOCKS.register("nadir_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LOG))); + public static final RegistryObject NADIR_WOOD = BLOCKS.register("nadir_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WOOD))); + public static final RegistryObject STRIPPED_NADIR_LOG = BLOCKS.register("stripped_nadir_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_LOG))); + public static final RegistryObject STRIPPED_NADIR_WOOD = BLOCKS.register("stripped_nadir_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.STRIPPED_JUNGLE_WOOD))); + public static final RegistryObject NADIR_PLANKS = BLOCKS.register("nadir_planks", + () -> new Block(BlockBehaviour.Properties.copy(Blocks.JUNGLE_PLANKS))); + public static final RegistryObject NADIR_STAIRS = BLOCKS.register("nadir_stairs", + () -> new StairBlock(NADIR_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.JUNGLE_STAIRS))); + public static final RegistryObject NADIR_SLAB = BLOCKS.register("nadir_slab", + () -> new SlabBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SLAB))); + public static final RegistryObject NADIR_FENCE = BLOCKS.register("nadir_fence", + () -> new FenceBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_FENCE))); + public static final RegistryObject NADIR_FENCE_GATE = BLOCKS.register("nadir_fence_gate", + () -> new FenceGateBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_FENCE_GATE), WoodType.JUNGLE)); + public static final RegistryObject NADIR_DOOR = BLOCKS.register("nadir_door", + () -> new DoorBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_DOOR), BlockSetType.JUNGLE)); + public static final RegistryObject NADIR_TRAPDOOR = BLOCKS.register("nadir_trapdoor", + () -> new TrapDoorBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_TRAPDOOR), BlockSetType.JUNGLE)); + 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())); + 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", + () -> new StandingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_SIGN), AntarchyWoodTypes.NADIR)); + public static final RegistryObject NADIR_WALL_SIGN = BLOCKS.register("nadir_wall_sign", + () -> new WallSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_WALL_SIGN), AntarchyWoodTypes.NADIR)); + public static final RegistryObject NADIR_HANGING_SIGN = BLOCKS.register("nadir_hanging_sign", + () -> new CeilingHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.JUNGLE_HANGING_SIGN), AntarchyWoodTypes.NADIR)); + public static final RegistryObject NADIR_WALL_HANGING_SIGN = BLOCKS.register("nadir_wall_hanging_sign", + () -> 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 DUCT_TAPE = BLOCKS.register("duct_tape", 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 cdfb69d8..97ef6c57 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 @@ -30,6 +30,8 @@ import com.craisinlord.antarchy.content.entity.MolevoreEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; 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.PeachBoatEntity; import com.craisinlord.antarchy.content.entity.PeachChestBoatEntity; import com.craisinlord.antarchy.content.entity.ReverieEntity; @@ -59,6 +61,7 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; 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.portal.DimensionalTearEntity; import com.craisinlord.antarchy.content.entity.CheepEntity; import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; import com.craisinlord.antarchy.content.entity.DorrieEntity; @@ -138,6 +141,18 @@ public final class AntarchyForgeEntites { .clientTrackingRange(10) .updateInterval(10) .build("peach_chest_boat")); + public static final RegistryObject> NADIR_BOAT_ENTITY = ENTITY_TYPES.register("nadir_boat", + () -> EntityType.Builder.of(NadirBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("nadir_boat")); + public static final RegistryObject> NADIR_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("nadir_chest_boat", + () -> EntityType.Builder.of(NadirChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("nadir_chest_boat")); public static final RegistryObject> MOLEVORE = ENTITY_TYPES.register("molevore", () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) .sized(1.95F, 1.1F) @@ -407,6 +422,12 @@ 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")); private AntarchyForgeEntites() {} 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 bf302194..7442d108 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 @@ -1131,7 +1131,7 @@ public final class AntarchyForgeEvents { static void registerBrewingRecipes() { net.minecraft.tags.TagKey rootsTag = net.minecraft.tags.TagKey.create( net.minecraft.core.registries.Registries.ITEM, - net.minecraft.resources.ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "roots") + new net.minecraft.resources.ResourceLocation(Antarchy.MODID, "roots") ); net.minecraftforge.common.brewing.BrewingRecipeRegistry.addRecipe(new BrewingRecipe( net.minecraft.world.item.crafting.Ingredient.of(Items.POTION), @@ -1338,6 +1338,7 @@ public final class AntarchyForgeEvents { ComposterBlock.COMPOSTABLES.put(AntarchyForgeItems.CORNEA_EAR.get(), 0.65f); 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.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 091dc68a..11bac2c0 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 @@ -199,6 +199,21 @@ public final class AntarchyForgeItems { public static final RegistryObject PEACH_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.PEACH_BUTTON); public static final RegistryObject PEACH_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.PEACH_LEAVES); public static final RegistryObject PEACH_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.PEACH_SAPLING); + public static final RegistryObject NADIR_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_LOG); + public static final RegistryObject NADIR_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_WOOD); + public static final RegistryObject STRIPPED_NADIR_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.STRIPPED_NADIR_LOG); + public static final RegistryObject STRIPPED_NADIR_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.STRIPPED_NADIR_WOOD); + public static final RegistryObject NADIR_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_PLANKS); + public static final RegistryObject NADIR_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_STAIRS); + public static final RegistryObject NADIR_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_SLAB); + public static final RegistryObject NADIR_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_FENCE); + public static final RegistryObject NADIR_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_FENCE_GATE); + public static final RegistryObject NADIR_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_DOOR); + public static final RegistryObject NADIR_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_TRAPDOOR); + public static final RegistryObject NADIR_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_PRESSURE_PLATE); + public static final RegistryObject NADIR_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_BUTTON); + public static final RegistryObject NADIR_VEIL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NADIR_VEIL); + 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 CAMELLIA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.CAMELLIA); @@ -225,6 +240,14 @@ public final class AntarchyForgeItems { () -> new PeachBoatOnlyItem(AntarchyForgeEntites.PEACH_BOAT_ENTITY, new Item.Properties().stacksTo(1))); public static final RegistryObject PEACH_CHEST_BOAT = ITEMS.register("peach_chest_boat", () -> new PeachChestBoatItem(AntarchyForgeEntites.PEACH_CHEST_BOAT_ENTITY, new Item.Properties().stacksTo(1))); + public static final RegistryObject NADIR_SIGN_ITEM = ITEMS.register("nadir_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyForgeBlocks.NADIR_SIGN.get(), AntarchyForgeBlocks.NADIR_WALL_SIGN.get())); + public static final RegistryObject NADIR_HANGING_SIGN_ITEM = ITEMS.register("nadir_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyForgeBlocks.NADIR_HANGING_SIGN.get(), AntarchyForgeBlocks.NADIR_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + public static final RegistryObject NADIR_BOAT = ITEMS.register("nadir_boat", + () -> 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 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); @@ -721,9 +744,9 @@ public final class AntarchyForgeItems { new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), AntarchyForgeEntites.SHRINK_RAY_PROJECTILE, SizeRayProjectileEntity.SizeRayType.SHRINK, - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/shrink_ray.geo.json"), - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/models/item/shrink_ray.png"), - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/shrink_ray.animation.json"), + new ResourceLocation(Antarchy.MODID, "geo/shrink_ray.geo.json"), + new ResourceLocation(Antarchy.MODID, "textures/models/item/shrink_ray.png"), + new ResourceLocation(Antarchy.MODID, "animations/shrink_ray.animation.json"), "shrink_ray_active" ) { @Override @@ -736,9 +759,9 @@ public final class AntarchyForgeItems { new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), AntarchyForgeEntites.GROWTH_RAY_PROJECTILE, SizeRayProjectileEntity.SizeRayType.GROWTH, - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/growth_ray.geo.json"), - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/models/item/growth_ray.png"), - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/growth_ray.animation.json"), + new ResourceLocation(Antarchy.MODID, "geo/growth_ray.geo.json"), + new ResourceLocation(Antarchy.MODID, "textures/models/item/growth_ray.png"), + new ResourceLocation(Antarchy.MODID, "animations/growth_ray.animation.json"), "growth_ray_active" ) { @Override @@ -978,7 +1001,7 @@ public final class AntarchyForgeItems { } static Ingredient bloodCrystalRepairIngredient() { - return Ingredient.of(BuiltInRegistries.ITEM.getOptional(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blood_crystal_shard")) + return Ingredient.of(BuiltInRegistries.ITEM.getOptional(new ResourceLocation(Antarchy.MODID, "blood_crystal_shard")) .orElse(Items.AIR)); } 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 02d9c5a6..17ccfab5 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 @@ -268,6 +268,8 @@ 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", 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 5eb03004..b66118be 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 @@ -187,6 +187,6 @@ public final class AntarchyForgeSounds { private static RegistryObject registerSoundEvent(String path) { return SOUND_EVENTS.register(path, - () -> SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path))); + () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(Antarchy.MODID, path))); } } 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 new file mode 100644 index 00000000..2e443b8f --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/antiwater_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "neoforge:item/bucket", + "loader": "neoforge: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 new file mode 100644 index 00000000..c3811473 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/attitude_adjuster.json @@ -0,0 +1,25 @@ +{ + "loader": "neoforge:separate_transforms", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/attitude_adjuster/attitude_adjuster_item" + }, + "base": { + "parent": "antarchy:item/attitude_adjuster_held" + }, + "texture_size": [ + 64, + 64 + ], + "perspectives": { + "gui": { + "parent": "antarchy:item/attitude_adjuster_gui" + }, + "ground": { + "parent": "antarchy:item/attitude_adjuster_gui" + }, + "fixed": { + "parent": "antarchy:item/attitude_adjuster_gui" + } + } +} 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 new file mode 100644 index 00000000..f2037157 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/battle_axe.json @@ -0,0 +1,25 @@ +{ + "loader": "neoforge:separate_transforms", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/battle_axe/battle_axe_item" + }, + "base": { + "parent": "antarchy:item/battle_axe_held" + }, + "texture_size": [ + 64, + 64 + ], + "perspectives": { + "gui": { + "parent": "antarchy:item/battle_axe_gui" + }, + "ground": { + "parent": "antarchy:item/battle_axe_gui" + }, + "fixed": { + "parent": "antarchy:item/battle_axe_gui" + } + } +} 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 new file mode 100644 index 00000000..0654e457 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/big_bertha.json @@ -0,0 +1,25 @@ +{ + "loader": "neoforge:separate_transforms", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/big_bertha/big_bertha_item" + }, + "base": { + "parent": "antarchy:item/big_bertha_held" + }, + "texture_size": [ + 64, + 64 + ], + "perspectives": { + "gui": { + "parent": "antarchy:item/big_bertha_gui" + }, + "ground": { + "parent": "antarchy:item/big_bertha_gui" + }, + "fixed": { + "parent": "antarchy:item/big_bertha_gui" + } + } +} 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 new file mode 100644 index 00000000..e3943e08 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/bile_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "neoforge:item/bucket", + "loader": "neoforge:fluid_container", + "fluid": "antarchy:bile" +} 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 new file mode 100644 index 00000000..f0da5cd5 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/gravity_gun.json @@ -0,0 +1,18 @@ +{ + "loader": "neoforge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "antarchy:item/gravity_gun_held_geo" + }, + "perspectives": { + "gui": { + "parent": "antarchy:item/gravity_gun_gui" + }, + "ground": { + "parent": "antarchy:item/gravity_gun_gui" + }, + "fixed": { + "parent": "antarchy:item/gravity_gun_gui" + } + } +} diff --git a/neoforge-1.21.1/src/main/resources/assets/antarchy/models/item/grow_ray.json b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json similarity index 100% rename from neoforge-1.21.1/src/main/resources/assets/antarchy/models/item/grow_ray.json rename to forge-1.20.1/src/main/resources/assets/antarchy/models/item/growth_ray.json 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 new file mode 100644 index 00000000..895a0ba3 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/ichor_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "neoforge:item/bucket", + "loader": "neoforge: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 new file mode 100644 index 00000000..5331dc07 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/krakens_grasp.json @@ -0,0 +1,25 @@ +{ + "loader": "neoforge:separate_transforms", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/krakens_grasp/krakens_grasp_item" + }, + "base": { + "parent": "antarchy:item/krakens_grasp_held" + }, + "texture_size": [ + 64, + 64 + ], + "perspectives": { + "gui": { + "parent": "antarchy:item/krakens_grasp_gui" + }, + "ground": { + "parent": "antarchy:item/krakens_grasp_gui" + }, + "fixed": { + "parent": "antarchy:item/krakens_grasp_gui" + } + } +} 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 new file mode 100644 index 00000000..49b64eed --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/lumen_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "neoforge:item/bucket", + "loader": "neoforge:fluid_container", + "fluid": "antarchy:lumen" +} 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 new file mode 100644 index 00000000..5d625dfa --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/rpo_launcher.json @@ -0,0 +1,18 @@ +{ + "loader": "neoforge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "antarchy:item/rpo_launcher_held_geo" + }, + "perspectives": { + "gui": { + "parent": "antarchy:item/rpo_launcher_gui" + }, + "ground": { + "parent": "antarchy:item/rpo_launcher_gui" + }, + "fixed": { + "parent": "antarchy:item/rpo_launcher_gui" + } + } +} 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 new file mode 100644 index 00000000..204d65b1 --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/shrink_ray.json @@ -0,0 +1,18 @@ +{ + "loader": "neoforge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "antarchy:item/shrink_ray_held_geo" + }, + "perspectives": { + "gui": { + "parent": "antarchy:item/shrink_ray_gui" + }, + "ground": { + "parent": "antarchy:item/shrink_ray_gui" + }, + "fixed": { + "parent": "antarchy:item/shrink_ray_gui" + } + } +} 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 new file mode 100644 index 00000000..e09e56ac --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/squidzooka.json @@ -0,0 +1,18 @@ +{ + "loader": "neoforge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "antarchy:item/squidzooka_held_geo" + }, + "perspectives": { + "gui": { + "parent": "antarchy:item/squidzooka_gui" + }, + "ground": { + "parent": "antarchy:item/squidzooka_gui" + }, + "fixed": { + "parent": "antarchy:item/squidzooka_gui" + } + } +} 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 new file mode 100644 index 00000000..b260121f --- /dev/null +++ b/forge-1.20.1/src/main/resources/assets/antarchy/models/item/water_cannon.json @@ -0,0 +1,18 @@ +{ + "loader": "neoforge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "antarchy:item/water_cannon_held_geo" + }, + "perspectives": { + "gui": { + "parent": "antarchy:item/water_cannon_gui" + }, + "ground": { + "parent": "antarchy:item/water_cannon_gui" + }, + "fixed": { + "parent": "antarchy:item/water_cannon_gui" + } + } +} 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 new file mode 100644 index 00000000..684bd2ee --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ant_nests_in_forests.json @@ -0,0 +1,10 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:overworld_ant_nest_spawn_biomes", + "features": [ + "antarchy:brown_ant_nest", + "antarchy:rainbow_ant_nest", + "antarchy:termite_nest" + ], + "step": "vegetal_decoration" +} 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 new file mode 100644 index 00000000..56d37a76 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/apple_cow_spawns.json @@ -0,0 +1,12 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:apple_cow_spawn_biomes", + "spawners": [ + { + "type": "antarchy:apple_cow", + "weight": 10, + "minCount": 2, + "maxCount": 4 + } + ] +} 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 new file mode 100644 index 00000000..84d1b78c --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/corn_patch_in_spawn_biomes.json @@ -0,0 +1,8 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:wild_corn_spawn_biomes", + "features": [ + "antarchy:corn_patch" + ], + "step": "vegetal_decoration" +} 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 new file mode 100644 index 00000000..9baade84 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/dorrie_elythia_spawns.json @@ -0,0 +1,12 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:dorrie_elythia_spawn_biomes", + "spawners": [ + { + "type": "antarchy:dorrie", + "weight": 10, + "minCount": 1, + "maxCount": 2 + } + ] +} 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 new file mode 100644 index 00000000..da128713 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/dorrie_overworld_spawns.json @@ -0,0 +1,12 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:dorrie_overworld_spawn_biomes", + "spawners": [ + { + "type": "antarchy:dorrie", + "weight": 1, + "minCount": 1, + "maxCount": 1 + } + ] +} 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 new file mode 100644 index 00000000..d33716ff --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flower_forest_butterfly_spawns.json @@ -0,0 +1,12 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:flower_forest_butterfly_spawn_biomes", + "spawners": [ + { + "type": "antarchy:butterfly", + "weight": 28, + "minCount": 2, + "maxCount": 5 + } + ] +} 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 new file mode 100644 index 00000000..11677bc2 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flower_forest_caterpillar_spawns.json @@ -0,0 +1,12 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:flower_forest_caterpillar_spawn_biomes", + "spawners": [ + { + "type": "antarchy:caterpillar", + "weight": 24, + "minCount": 2, + "maxCount": 4 + } + ] +} 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 new file mode 100644 index 00000000..a507b07b --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/flying_squirrel_spawns.json @@ -0,0 +1,12 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:flying_squirrel_spawn_biomes", + "spawners": [ + { + "type": "antarchy:flying_squirrel", + "weight": 8, + "minCount": 1, + "maxCount": 3 + } + ] +} 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 new file mode 100644 index 00000000..fae16f0e --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/golden_apple_cow_spawns.json @@ -0,0 +1,12 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:golden_apple_cow_spawn_biomes", + "spawners": [ + { + "type": "antarchy:golden_apple_cow", + "weight": 1, + "minCount": 1, + "maxCount": 3 + } + ] +} 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 new file mode 100644 index 00000000..961e3cd9 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/mantis_spawns.json @@ -0,0 +1,18 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:mantis_overworld_spawn_biomes", + "spawners": [ + { + "type": "antarchy:mantis", + "weight": 8, + "minCount": 1, + "maxCount": 1 + }, + { + "type": "antarchy:alpha_mantis", + "weight": 1, + "minCount": 1, + "maxCount": 1 + } + ] +} 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 new file mode 100644 index 00000000..041b3378 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/milkweed_in_flower_forests.json @@ -0,0 +1,8 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:milkweed_spawn_biomes", + "features": [ + "antarchy:flower_forest_milkweed" + ], + "step": "vegetal_decoration" +} 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 new file mode 100644 index 00000000..218b4c94 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/missile_squid_spawns.json @@ -0,0 +1,12 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:missile_squid_spawn_biomes", + "spawners": [ + { + "type": "antarchy:missile_squid", + "weight": 2, + "minCount": 1, + "maxCount": 2 + } + ] +} 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 new file mode 100644 index 00000000..8faeead3 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/octopus_bomb_spawns.json @@ -0,0 +1,17 @@ +{ + "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 new file mode 100644 index 00000000..dca3e3bb --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ores_in_elythia.json @@ -0,0 +1,9 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:is_elythia", + "features": [ + "antarchy:uranium_ore", + "antarchy:titanium_ore" + ], + "step": "underground_ores" +} 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 new file mode 100644 index 00000000..e5406487 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/ores_in_overworld.json @@ -0,0 +1,9 @@ +{ + "type": "neoforge:add_features", + "biomes": "#minecraft:is_overworld", + "features": [ + "antarchy:uranium_ore", + "antarchy:titanium_ore" + ], + "step": "underground_ores" +} 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 new file mode 100644 index 00000000..c9981ced --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/red_ant_nests_in_nether.json @@ -0,0 +1,8 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:red_ant_nest_spawn_biomes", + "features": [ + "antarchy:red_ant_nest" + ], + "step": "vegetal_decoration" +} 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 new file mode 100644 index 00000000..206947e6 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/remove_glow_lichen_from_cavaryn.json @@ -0,0 +1,8 @@ +{ + "type": "neoforge:remove_features", + "biomes": "#antarchy:is_cavaryn", + "features": [ + "minecraft:glow_lichen" + ], + "step": "vegetal_decoration" +} 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 new file mode 100644 index 00000000..f6cd05f7 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/seashell_in_oceans.json @@ -0,0 +1,6 @@ +{ + "type": "neoforge: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 new file mode 100644 index 00000000..660adf03 --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/seashell_in_warm_oceans.json @@ -0,0 +1,6 @@ +{ + "type": "neoforge: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 new file mode 100644 index 00000000..4f737bfc --- /dev/null +++ b/forge-1.20.1/src/main/resources/data/antarchy/forge/biome_modifier/shellstone_in_oceans_and_beaches.json @@ -0,0 +1,9 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:has_shellstone", + "features": [ + "antarchy:shellstone_upper", + "antarchy:shellstone_lower" + ], + "step": "underground_ores" +} diff --git a/gradle.properties b/gradle.properties index 7691dd09..79e241f9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ logo_neoforge=assets/antarchy/antarchy_logo.png fabric_loader_version_1_21_1=0.15.11 fabric_api_version_1_21_1=0.102.0+1.21.1 -neoforge_version_1_21_1=21.1.1 +neoforge_version_1_21_1=21.1.181 minecraft_version_1_20_1=1.20.1 fabric_loader_version_1_20_1=0.15.6 @@ -48,12 +48,13 @@ structurevoidtoggle_neoforge=4.4.1+1.21 structurevoidtoggle_fabric=4.4.1+1.21 geckolib_version=4.8.4 +architectury_api_version=13.0.11 jei_version=19.27.0.336 intapi_curseforge_id = 817709 -intapi_curseforge_file_id_neoforge = 7781663 -intapi_curseforge_file_id_fabric = 5178464 +intapi_curseforge_file_id_neoforge = 7921681 +intapi_curseforge_file_id_fabric = 7921674 intapi_curseforge_file_id_common = 5178461 create_curseforge_id_neoforge = 328085 diff --git a/neoforge-1.21.1/build.gradle b/neoforge-1.21.1/build.gradle index 6222d26f..3edb1932 100644 --- a/neoforge-1.21.1/build.gradle +++ b/neoforge-1.21.1/build.gradle @@ -51,6 +51,7 @@ dependencies { implementation "software.bernie.geckolib:geckolib-neoforge-1.21.1:${geckolib_version}" compileOnly(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.2+1.21.1-neoforge.jar"))) runtimeOnly(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.2+1.21.1-neoforge.jar"))) + runtimeOnly("dev.architectury:architectury-neoforge:${architectury_api_version}") compileOnly(files(rootProject.file("sizeable_foliage_jars/sizeable_foliage-neoforge-1.21.1-1.0.0.jar"))) runtimeOnly(files(rootProject.file("sizeable_foliage_jars/sizeable_foliage-neoforge-1.21.1-1.0.0.jar"))) @@ -76,6 +77,18 @@ tasks.withType(ProcessResources).configureEach { } } +tasks.matching { it.name in ["runClient", "runServer", "runData"] }.configureEach { + doFirst { + def infinityConfigPrefix = "config/common/" + zipTree(rootProject.file("infinite_dimensions_jars/infinity-2.7.2+1.21.1-neoforge.jar")).visit { details -> + if (!details.directory && details.relativePath.pathString.startsWith(infinityConfigPrefix)) { + def targetPath = details.relativePath.pathString.substring(infinityConfigPrefix.length()) + file("run/config/infinity/${targetPath}").parentFile.mkdirs() + } + } + } +} + tasks.withType(Copy).configureEach { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/SizeRaySoundHandlerNeoForge.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/SizeRaySoundHandlerNeoForge.java new file mode 100644 index 00000000..11b96eee --- /dev/null +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/SizeRaySoundHandlerNeoForge.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.SizeRaySoundHandler; +import net.minecraft.client.Minecraft; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class SizeRaySoundHandlerNeoForge { + private SizeRaySoundHandlerNeoForge() { + } + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Post event) { + SizeRaySoundHandler.tick(Minecraft.getInstance()); + } +} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/AmendmentRareOresMixin.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/AmendmentRareOresMixin.java new file mode 100644 index 00000000..c5b2eb4e --- /dev/null +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/AmendmentRareOresMixin.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.neoforge.mixins.infinity; + +import net.lerariemann.infinity.util.config.Amendment; +import net.lerariemann.infinity.util.core.ConfigType; +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.ArrayList; +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) { + Map> data = cir.getReturnValue(); + List list = data.computeIfAbsent(ConfigType.BLOCKS, k -> new ArrayList<>()); + list.add(new Amendment( + ConfigType.BLOCKS, + new Amendment.UniversalModSelector(), + new Amendment.MatchingBlockTagSelector("antarchy:infinity_dimension_rare_ores"), + new Amendment.SetValue(0.02) + )); + } +} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index d93443f4..cb2e7809 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -23,6 +23,7 @@ import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework; 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; @@ -128,6 +129,7 @@ public final class AntarchyNeoForgeEvents { NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleCavarynHordeKill); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleCavarynHordeBlockBreak); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickCavarynHordes); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickThoraxisUnderside); modEventBus.addListener(AntarchyNeoForgeEvents::modifyEntityAttributes); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickOverheadInversion); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickDuctTapeStickiness); @@ -213,6 +215,12 @@ public final class AntarchyNeoForgeEvents { } } + static void tickThoraxisUnderside(ServerTickEvent.Post event) { + for (ServerLevel level : event.getServer().getAllLevels()) { + ThoraxisUndersideManager.tick(level); + } + } + private static int badOmenLevel(Player player) { MobEffectInstance effect = player.getEffect(MobEffects.BAD_OMEN); return effect != null ? effect.getAmplifier() + 1 : 0;